平滑价格波动策略(TBQ版)_第1页
平滑价格波动策略(TBQ版)_第2页
平滑价格波动策略(TBQ版)_第3页
平滑价格波动策略(TBQ版)_第4页
平滑价格波动策略(TBQ版)_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

平滑价格波动策略(TBQ版)本策略旨在通过技术分析指标和资金管理策略来实现稳健的交易决策。核心思想是通过计算特定时间段内的价格平均值,并结合止损和止盈机制,来优化交易风险和收益。策略的核心在于利用Heikin-Ashi(平均K线图)指标来过滤市场噪音,识别并跟随主要趋势。Heikin-Ashi指标通过平滑价格波动,使得交易者能够更清晰地看到价格的趋势方向,从而减少因短期波动引起的误判。技术分析指标1.Heikin-Ashi指标:该指标通过计算开盘价、最高价、最低价和收盘价的加权平均值,生成新的K线图。这种平滑处理有助于识别趋势,并减少市场噪音的影响。2.移动平均线:策略中使用了简单移动平均线(SMA)来计算一段时间内的价格平均值,以此作为买卖信号的参考。策略交易逻辑1.开仓逻辑:-当价格突破Heikin-Ashi指标的上轨(HH1)或下轨(LL1)时,分别触发多头或空头开仓信号。-开仓时,根据当前资金总额和每笔交易承担的风险比例,计算出合理的头寸规模。2.止损逻辑:-设置止损百分比,当市场价格触及止损点时,自动平仓以控制风险。-止损点的计算基于开仓价格和设定的止损百分比。3.止盈逻辑:-设置止盈百分比,当市场价格达到预期的盈利目标时,自动平仓以实现利润。-止盈点的计算同样基于开仓价格和设定的止盈百分比。资金管理1.初始资金:策略开始时,设定初始资金总额。2.风险控制:每笔交易承担的风险比例固定为总资金的2%,通过计算头寸规模来控制每笔交易的风险。3.动态调整:根据当前资金总额和市场波动情况,动态调整头寸规模,确保交易的安全性和盈利性。事件函数1.OnInit():初始化事件函数,在策略运行初期执行一次,主要用于设置数据源和交易相关的参数。2.OnBar():Bar更新事件函数,每当有新的Bar数据时触发,用于计算技术指标、生成买卖信号并执行交易。代码结构1.Params:定义策略所需的参数,如N(时间窗口)、stopLossPercent(止损百分比)、takeProfitPercent(止盈百分比)和riskPerTrade(每笔交易承担的风险比例)。2.Vars:定义策略所需的变量,如是否多头开仓(tolong)、是否空头开仓(toshort)、开仓价格(entryPrice)、资金总额(capital)和头寸规模(positionSize)。3.Defs:定义公式函数,如SUM用于计算周期内价格的和。4.Events:实现事件函数,包括初始化事件函数(OnInit)和Bar更新事件函数(OnBar)。策略特点1.趋势跟随:通过Heikin-Ashi指标和移动平均线,策略能够有效识别并跟随市场的主要趋势,减少因短期波动引起的误判。2.风险控制:通过设置止损和止盈百分比,策略能够在保证收益的同时,有效控制交易风险。3.资金管理:通过设定每笔交易承担的风险比例,策略能够动态调整头寸规模,确保交易的安全性和盈利性。4.自动化交易:策略通过事件函数自动执行买卖操作,减少了人为干预的可能性,提高了交易的效率和准确性。本策略通过结合技术分析指标和资金管理策略,实现了稳健的交易决策。通过Heikin-Ashi指标过滤市场噪音,识别并跟随主要趋势;通过止损和止盈机制控制交易风险;通过资金管理策略优化交易头寸。整体而言,该策略具有较高的实用性和有效性,适用于多种市场环境。指标代码:Params//此处添加参数NumericN(100);Vars//此处添加变量Series<Numeric>Vars1;Defs//此处添加公式函数//周期内求和NumericSUM(NumericPRICE,NumericLENGTH){ReturnSummationFC(PRICE,LENGTH);}Events//此处实现事件函数//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作OnInit(){//多图层订阅行情//freqString订阅频率'mon':月,'w':周,'d':日,'h':时,'m':分,'s':秒,'tick':tick,字符串前面可以添加数字,如'3d'表示周期是3天;//flagIntegerEnum_Data_OnlyNight()表示仅夜盘,Enum_Data_OnlyDay()表示仅日盘,Enum_Data_RolloverBackWard()表示后复权,可做或运算,表示多种情况//SubscribeBar(Data0.Symbol,"1h",Data0.BeginDateTime);//按样本数订阅//SubscribeBarCounts(Data0.Symbol,"1h",1000);//与数据源有关Range[0:DataCount-1]{//=========数据源相关设置==============AddDataFlag(Enum_Data_RolloverBackWard());//设置后复权AddDataFlag(Enum_Data_RolloverRealPrice());//设置映射真实价格AddDataFlag(Enum_Data_AutoSwapPosition());//设置自动换仓AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());//设置忽略换仓信号计算SetSwapPosVolType(2);//换月时头寸:1=等市值,2=等持仓量//AddDataFlag(Enum_Data_NotGenReport());//设置数据源不参与生成报告标志//=========交易相关设置==============//SetOrderPriceOffset(2);//设置委托价为叫买/卖价偏移2跳//SetOrderMap2MainSymbol();//设置委托映射到主力}//与数据源无关//SetBeginBarMaxCount(10);//设置最大起始bar数为10//SetBackBarMaxCount(10);//设置最大回溯bar数为10//=========交易相关设置==============//SetInitCapital(Fund*10000);//设置初始资金为50万}//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组OnBar(ArrayRef<Integer>indexs){NumericSMMA1=SUM(CLOSE,N)/N;NumericMACLOSE=(SUM(CLOSE,N)-SMMA1+CLOSE)/N;NumericSMMA2=SUM(OPEN,N)/N;NumericMAOPEN=(SUM(OPEN,N)-SMMA2+OPEN)/N;NumericSMMA3=SUM(HIGH,N)/N;NumericMAHIGH=(SUM(HIGH,N)-SMMA3+HIGH)/N;NumericSMMA4=SUM(LOW,N)/N;NumericMALOW=(SUM(LOW,N)-SMMA4+LOW)/N;NumericHACLOSE=(MAOPEN+MAHIGH+MALOW+MACLOSE)/4;NumericHAOPEN=(REF(OPEN,1)+REF(HACLOSE,1))/2;NumericHAHIGH=MAX(MAHIGH,MAX(HAOPEN,HACLOSE));NumericHALOW=MIN(MALOW,MIN(HAOPEN,HACLOSE));NumericHH=HAHIGH;NumericLL=HALOW;//NumericHH1=BARSLAST((HH>=REF(HH,1)));//NumericLL1=BARSLAST((LL<REF(LL,1)));NumericHH1=IIF((HH>=REF(HH,1)),HH,REF(HH,1));NumericLL1=IIF((LL<REF(LL,1)),LL,REF(LL,1));//PlotNumeric("HH1",HH1);//PlotNumeric("LL1",LL1);Commentary(IIFString((HH>=REF(HH,1)),"HHT","HHFF"));Commentary(IIFString((LL<REF(LL,1)),"LLT","LLFF"));//设定画线类型,如:Enum_Dot,Enum_Line,Enum_Bar,Enum_Cross,默认为属性框中设定//设定画线风格,如:Enum_Solid,Enum_Dash,Enum_Broken,Enum_Dash_Dot,默认为属性框中设定//设定画线线宽,如:Enum_1Pix,Enum_2Pix,Enum_3Pix,Enum_4Pix,Enum_5Pix,Enum_6Pix,Enum_7Pix,默认为属性框中设定If(C>=HH1&&C>=LL1){PlotAuto("HHLL",HH1,0,Red,Enum_Line,Enum_Dash,Enum_2Pix);}ElseIf(C<=HH1&&C<=LL1){PlotAuto("HHLL",LL1,0,Green,Enum_Line,Enum_Dash,Enum_2Pix);}Else{PlotAuto("HHLL",(HH1+LL1)/2,0,White,Enum_Line,Enum_Dash,Enum_2Pix);}//If(HH>=REF(HH,1)AndLL<REF(LL,1))//{//PlotNumeric("HH1",HH1);//}//Else//{//PlotNumeric("LL1",LL1);//}}主策略代码:Params//此处添加参数NumericN(100);Vars//此处添加变量Series<Numeric>Vars1;Booltolong(False);Booltoshort(False);Defs//此处添加公式函数//周期内求和NumericSUM(NumericPRICE,NumericLENGTH){ReturnSummationFC(PRICE,LENGTH);}Events//此处实现事件函数//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作OnInit(){//多图层订阅行情//freqString订阅频率'mon':月,'w':周,'d':日,'h':时,'m':分,'s':秒,'tick':tick,字符串前面可以添加数字,如'3d'表示周期是3天;//flagIntegerEnum_Data_OnlyNight()表示仅夜盘,Enum_Data_OnlyDay()表示仅日盘,Enum_Data_RolloverBackWard()表示后复权,可做或运算,表示多种情况//SubscribeBar(Data0.Symbol,"1h",Data0.BeginDateTime);//按样本数订阅//SubscribeBarCounts(Data0.Symbol,"1h",1000);//与数据源有关Range[0:DataCount-1]{//=========数据源相关设置==============AddDataFlag(Enum_Data_RolloverBackWard());//设置后复权AddDataFlag(Enum_Data_RolloverRealPrice());//设置映射真实价格AddDataFlag(Enum_Data_AutoSwapPosition());//设置自动换仓AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());//设置忽略换仓信号计算SetSwapPosVolType(2);//换月时头寸:1=等市值,2=等持仓量//AddDataFlag(Enum_Data_NotGenReport());//设置数据源不参与生成报告标志//=========交易相关设置==============//SetOrderPriceOffset(2);//设置委托价为叫买/卖价偏移2跳//SetOrderMap2MainSymbol();//设置委托映射到主力}//与数据源无关//SetBeginBarMaxCount(10);//设置最大起始bar数为10//SetBackBarMaxCount(10);//设置最大回溯bar数为10//=========交易相关设置==============//SetInitCapital(Fund*10000);//设置初始资金为50万}//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组OnBar(ArrayRef<Integer>indexs){NumericSMMA1=SUM(CLOSE,N)/N;NumericMACLOSE=(SUM(CLOSE,N)-SMMA1+CLOSE)/N;NumericSMMA2=SUM(OPEN,N)/N;NumericMAOPEN=(SUM(OPEN,N)-SMMA2+OPEN)/N;NumericSMMA3=SUM(HIGH,N)/N;NumericMAHIGH=(SUM(HIGH,N)-SMMA3+HIGH)/N;NumericSMMA4=SUM(LOW,N)/N;NumericMALOW=(SUM(LOW,N)-SMMA4+LOW)/N;NumericHACLOSE=(MAOPEN+MAHIGH+MALOW+MACLOSE)/4;NumericHAOPEN=(REF(OPEN,1)+REF(HACLOSE,1))/2;NumericHAHIGH=MAX(MAHIGH,MAX(HAOPEN,HACLOSE));NumericHALOW=MIN(MALOW,MIN(HAOPEN,HACLOSE));NumericHH=HAHIGH;NumericLL=HALOW;//NumericHH1=BARSLAST((HH>=REF(HH,1)));//NumericLL1=BARSLAST((LL<REF(LL,1)));NumericHH1=IIF((HH>=REF(HH,1)),HH,REF(HH,1));NumericLL1=IIF((LL<REF(LL,1)),LL,REF(LL,1));//PlotNumeric("HH1",HH1);//PlotNumeric("LL1",LL1);Commentary(IIFString((HH>=REF(HH,1)),"HHT","HHFF"));Commentary(IIFString((LL<REF(LL,1)),"LLT","LLFF"));//设定画线类型,如:Enum_Dot,Enum_Line,Enum_Bar,Enum_Cross,默认为属性框中设定//设定画线风格,如:Enum_Solid,Enum_Dash,Enum_Broken,Enum_Dash_Dot,默认为属性框中设定//设定画线线宽,如:Enum_1Pix,Enum_2Pix,Enum_3Pix,Enum_4Pix,Enum_5Pix,Enum_6Pix,Enum_7Pix,默认为属性框中设定If(C>=HH1&&C>=LL1){PlotAuto("HHLL",HH1,0,Red,Enum_Line,Enum_Dash,Enum_2Pix);tolong=True;}ElseIf(C<=HH1&&C<=LL1){PlotAuto("HHLL",LL1,0,Green,Enum_Line,Enum_Dash,Enum_2Pix);toshort=True;}Else{PlotAuto("HHLL",(HH1+LL1)/2,0,White,Enum_Line,Enum_Dash,Enum_2Pix);}If(MarketPosition!=1&&tolong){Buy();}If(MarketPosition!=-1&&toshort){SellShort();}//If(HH>=REF(HH,1)AndLL<REF(LL,1))//{//PlotNumeric("HH1",HH1);//}//Else//{//PlotNumeric("LL1",LL1);//}}以下是上述主策略代码添加了止损和止盈逻辑的代码:Params//此处添加参数NumericN(100);NumericstopLossPercent(2);//止损百分比NumerictakeProfitPercent(5);//止盈百分比Vars//此处添加变量Series<Numeric>Vars1;Booltolong(False);Booltoshort(False);NumericentryPrice;//记录开仓价格Defs//此处添加公式函数//周期内求和NumericSUM(NumericPRICE,NumericLENGTH){ReturnSummationFC(PRICE,LENGTH);}Events//此处实现事件函数//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作OnInit(){//多图层订阅行情//freqString订阅频率'mon':月,'w':周,'d':日,'h':时,'m':分,'s':秒,'tick':tick,字符串前面可以添加数字,如'3d'表示周期是3天;//flagIntegerEnum_Data_OnlyNight()表示仅夜盘,Enum_Data_OnlyDay()表示仅日盘,Enum_Data_RolloverBackWard()表示后复权,可做或运算,表示多种情况//SubscribeBar(Data0.Symbol,"1h",Data0.BeginDateTime);//按样本数订阅//SubscribeBarCounts(Data0.Symbol,"1h",1000);//与数据源有关Range[0:DataCount-1]{//=========数据源相关设置==============AddDataFlag(Enum_Data_RolloverBackWard());//设置后复权AddDataFlag(Enum_Data_RolloverRealPrice());//设置映射真实价格AddDataFlag(Enum_Data_AutoSwapPosition());//设置自动换仓AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());//设置忽略换仓信号计算SetSwapPosVolType(2);//换月时头寸:1=等市值,2=等持仓量//AddDataFlag(Enum_Data_NotGenReport());//设置数据源不参与生成报告标志//=========交易相关设置==============//SetOrderPriceOffset(2);//设置委托价为叫买/卖价偏移2跳//SetOrderMap2MainSymbol();//设置委托映射到主力}//与数据源无关//SetBeginBarMaxCount(10);//设置最大起始bar数为10//SetBackBarMaxCount(10);//设置最大回溯bar数为10//=========交易相关设置==============//SetInitCapital(Fund*10000);//设置初始资金为50万}//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组OnBar(ArrayRef<Integer>indexs){NumericSMMA1=SUM(CLOSE,N)/N;NumericMACLOSE=(SUM(CLOSE,N)-SMMA1+CLOSE)/N;NumericSMMA2=SUM(OPEN,N)/N;NumericMAOPEN=(SUM(OPEN,N)-SMMA2+OPEN)/N;NumericSMMA3=SUM(HIGH,N)/N;NumericMAHIGH=(SUM(HIGH,N)-SMMA3+HIGH)/N;NumericSMMA4=SUM(LOW,N)/N;NumericMALOW=(SUM(LOW,N)-SMMA4+LOW)/N;NumericHACLOSE=(MAOPEN+MAHIGH+MALOW+MACLOSE)/4;NumericHAOPEN=(REF(OPEN,1)+REF(HACLOSE,1))/2;NumericHAHIGH=MAX(MAHIGH,MAX(HAOPEN,HACLOSE));NumericHALOW=MIN(MALOW,MIN(HAOPEN,HACLOSE));NumericHH=HAHIGH;NumericLL=HALOW;//NumericHH1=BARSLAST((HH>=REF(HH,1)));//NumericLL1=BARSLAST((LL<REF(LL,1)));NumericHH1=IIF((HH>=REF(HH,1)),HH,REF(HH,1));NumericLL1=IIF((LL<REF(LL,1)),LL,REF(LL,1));//PlotNumeric("HH1",HH1);//PlotNumeric("LL1",LL1);Commentary(IIFString((HH>=REF(HH,1)),"HHT","HHFF"));Commentary(IIFString((LL<REF(LL,1)),"LLT","LLFF"));//设定画线类型,如:Enum_Dot,Enum_Line,Enum_Bar,Enum_Cross,默认为属性框中设定//设定画线风格,如:Enum_Solid,Enum_Dash,Enum_Broken,Enum_Dash_Dot,默认为属性框中设定//设定画线线宽,如:Enum_1Pix,Enum_2Pix,Enum_3Pix,Enum_4Pix,Enum_5Pix,Enum_6Pix,Enum_7Pix,默认为属性框中设定If(C>=HH1&&C>=LL1){PlotAuto("HHLL",HH1,0,Red,Enum_Line,Enum_Dash,Enum_2Pix);tolong=True;}ElseIf(C<=HH1&&C<=LL1){PlotAuto("HHLL",LL1,0,Green,Enum_Line,Enum_Dash,Enum_2Pix);toshort=True;}Else{PlotAuto("HHLL",(HH1+LL1)/2,0,White,Enum_Line,Enum_Dash,Enum_2Pix);}//开仓逻辑If(MarketPosition==0&&tolong){Buy();entryPrice=C;}If(MarketPosition==0&&toshort){SellShort();entryPrice=C;}//止损逻辑If(MarketPosition==1&&C<=entryPrice*(1-stopLossPercent/100)){Sell();}If(MarketPosition==-1&&C>=entryPrice*(1+stopLossPercent/100)){BuyToCover();}//止盈逻辑If(MarketPosition==1&&C>=entryPrice*(1+takeProfitPercent/100)){Sell();}If(MarketPosition==-1&&C<=entryPrice*(1-takeProfitPercent/100)){BuyToCover();}}以下是在止损和止盈逻辑中添加资金管理功能后的代码://*平均K线图(HeikemAshi)指标代表了一类与我们习惯的在K线图上所见的价格柱不同的特定类型的价格柱。HeikemAsmi,指标并不反映市场的开盘价、最高价、最低价和收盘价,而是计算主导趋势中的单根K线的价值,再通过颜色的变化来表明趋势的变化。该指标的主要目的是过滤掉市场噪音,可以更加清晰地看懂当前价格的趋势,能够让交易者避免某些错误的交易信号。"//Params//此处添加参数NumericN(100);NumericstopLossPercent(2);//止损百分比NumerictakeProfitPercent(5);//止盈百分比NumericriskPerTrade(0.02);//每笔交易承担的风险比例Vars//此处添加变量Series<Numeric>Vars1;Booltolong(False);Booltoshort(False);NumericentryPrice;//记录开仓价格Numericcapital;//资金总额NumericpositionSize;//头寸规模Defs//此处添加公式函数//周期内求和NumericSUM(NumericPRICE,NumericLENGTH){ReturnSummationFC(PRICE,LENGTH);}Events//此处实现事件函数//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作OnInit(){//多图层订阅行情//freqString订阅频率'mon':月,'w':周,'d':日,'h':时,'m':分,'s':秒,'tick':tick,字符串前面可以添加数字,如'3d'表示周期是3天;//flagIntegerEnum_Data_OnlyNight()表示仅夜盘,Enum_Data_OnlyDay()表示仅日盘,Enum_Data_RolloverBackWard()表示后复权,可做或运算,表示多种情况//SubscribeBar(Data0.Symbol,"1h",Data0.BeginDateTime);//按样本数订阅//SubscribeBarCounts(Data0.Symbol,"1h",1000);//与数据源有关Range[0:DataCount-1]{//=========数据源相关设置==============AddDataFlag(Enum_Data_RolloverBackWard());//设置后复权AddDataFlag(Enum_Data_RolloverRealPrice());//设置映射真实价格AddDataFlag(Enum_Data_AutoSwapPosition());//设置自动换仓AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());//设置忽略换仓信号计算/*备注:Enum_Data_IgnoreSwapSignalCalc,对于一个策略来说,换仓的这笔交易并不是策略规则产生的,所以将换仓前后的这两笔交易合并为一笔能更好的统计策略性能。合并之后,交易盈亏依旧是真实的,只不过换仓前后的这两笔交易算一笔交易,但是手续费会从测试报告中扣除。忽略换仓时,换仓后的开仓市值为原始的开仓市值。开仓均价按照原始开仓市值计算得来。*/SetSwapPosVolType(2);//换月时头寸:1=等市值,2=等持仓量//AddDataFlag(Enum_Data_NotGenReport());//设置数据源不参与生成报告标志//=========交易相关设置==============//SetOrderPriceOffset(2);//设置委托价为叫买/卖价偏移2跳//SetOrderMap2MainSymbol();//设置委托映射到主力}//与数据源无关//SetBeginBarMaxCount(10);//设置最大起始bar数为10//SetBackBarMaxCount(10);//设置最大回溯bar数为10//=========交易相关设置==============//SetInitCapital(Fund*10000);//设置初始资金为50万capital=Portfolio_CurrentCapital();//获取当前资金总额}//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组OnBar(ArrayRef<Integer>indexs){NumericSMMA1=SUM(CLOSE,N)/N;NumericMACLOSE=(SUM(CLOSE,N)-SMMA1+CLOSE)/N;NumericSMMA2=SUM(OPEN,N)/N;NumericMAOPEN=(SUM(OPEN,N)-SMMA2+OPEN)/N;NumericSMMA3=SUM(HIGH,N)/N;NumericMAHIGH=(SUM(HIGH,N)-SMMA3+HIGH)/N;NumericSMMA4=SUM(LOW,N)/N;NumericMALOW=(SUM(LOW,N)-SMMA4+LOW)/N;NumericHACLOSE=(MAOPEN+MAHIGH+MALOW+MACLOSE)/4;NumericHAOPEN=(REF(OPEN,1)+REF(HACLOSE,1))/2;NumericHAHIGH=MAX(MAHIGH,MAX(HAOPEN,HACLOSE));NumericHALOW=MIN(MALOW,MIN(HAOPEN,HACLOSE));NumericHH=HAHIGH;NumericLL=HALOW;//NumericHH1=BARSLAST((HH>=REF(HH,1)));//NumericLL1=BARSLAST((LL<REF(LL,1)));NumericHH1=IIF((HH>=REF(HH,1)),HH,REF(HH,1));NumericLL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论