您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 造纸印刷 > TB交易模型示例--tb内部课件--蔡云华
1TB程序化交易模型示例蔡云华深圳开拓者科技有限公司内容安排介绍四套交易模型一、单均线加通道交易模型二、四周法则交易模型三、双均线交叉交易模型四、RangeBreak日内突破模型2例1:单均线加通道突破系统交易规则:以简单移动平均线判断趋势,收盘价在均线之上为多头趋势,在均线之下为空头趋势;为过滤均线假突破,在均线基础上加减一定百分比形成围绕均线的上下两条通道;价格盘中突破上轨,进场做多或平空反多;价格盘中突破下轨,进场做空或平多反空;增加跟踪止盈的功能(峰值价回落ATR倍数);跟踪止盈后突破出场前高(低)点再进场;交易头寸暂为1手。3策略设计(1)进出场技术指标的编写:ATRValue=AvgTrueRange(ATRLength);Commentary(ATRValue=+text(ATRValue));MA=AverageFC(Close,Length);UpperBand=MA[1]*(1+FilterPercent/10000);LowerBand=MA[1]*(1-FilterPercent/10000);PlotNumeric(MA,MA);PlotNumeric(UpperBand,UpperBand);PlotNumeric(LowerBand,LowerBand);其中参数:ATRLength---平均真实波幅的计算周期FilterPercent---通道的比例(万分之几)4策略设计(2)为了让系统的组合更灵活,把一个完整的交易模型分成做多和做空两个模型分别编写;初次进场和再次进场,多空模型分别通过序列变量bLongStoped和bShortStoped来判断;进场后,两个变量设为false,重新记录跟踪止损状况跟踪止盈触发后,设置为true趋势反转后,有仓位需要止损,但不设置标志跟踪止损和再次进场创新高(低)的判断,都需要记录盈利峰值价(也就是前高或前低),因此需要设置两个序列变量HigherAfterEntry和LowerAfterEntry,进场后及时记录价格的新高(低)的变化;5策略设计(3)跟踪止盈采用的是盈利峰值价回落ATR的一定比例后触发止损,加上本身趋势反转时的止损,两部分代码合在一起,以多头模型为例说明:止损价的设置StopLine=LowerBand;if(StopLineHigherAfterEntry-ATRValue[1]*TrailStopNumATR)StopLine=HigherAfterEntry-ATRValue[1]*TrailStopNumATR;止损的触发If(Low=StopLine){MyPrice=StopLine;If(OpenMyPrice)MyPrice=Open;Sell(0,MyPrice);bLongStoped=true;}6策略设计(4)集合竞价数据过滤集合竞价时,会产生一个Tick,这个Tick会驱动图表中加载的公式应用的运算,如果这时符合交易条件,则会发送委托单。但交易所此时并未开市,从而产生废单。为处理这种情况,我们需要在代码中过滤这些数据,我们在公式中加入以下代码:分钟周期和Tick周期下If((BarType==1orBarType==2)&&BarStatus==2&&date!=date[1]&&high==low)return;日线周期If(BarType==0&&BarStatus==2&&CurrentTime=0.09&&high==low)return;7模型参数说明Length:均线周期,默认值为10;ATRLength:ATR的周期,默认值为20;FilterPercent:通道幅度比例(万分之几),默认为100,即为百分之一;TrailStopNumATR:追踪止损,回测ATR的倍数,默认值为2;Lots:头寸大小,默认为交易1手。8例2:四周法则突破系统交易规则:价格突破最近四周(即日线20根K线)高点,做多,跌破四周低点做空;增加更小周期作为止损,持多单跌破两周低点(即日线10根K线)止损出场,持空突破两周高点止损出局;增加跟踪止盈的功能(峰值价回落ATR倍数);跟踪止盈后突破出场前高(低)点再进场;交易头寸暂为1手。9策略设计(1)进出场技术指标的编写:HiBand1=highest(high[1],Length1);LoBand1=lowest(low[1],Length1);HiBand2=highest(high[1],Length2);LoBand2=lowest(low[1],Length2);PlotNumeric(HiBand1,HiBand1);PlotNumeric(LoBand1,LoBand1);plotnumeric(HiBand2,HiBand2);plotnumeric(LoBand2,LoBand2);其中参数:Length1---四周的BAR数Length2---两周的BAR数10策略设计(2)突破四周高点进场做多(以多头模型为例)if(MarketPosition==0&&high=HiBand1){….}多空分开设计,跟踪止盈的设计以及集合竞价数据的过滤都和例1的策略相同。11模型参数说明Length1:长周期天数,默认值为20,即四周;Length2:短周期天数,默认值为10,即两周;ATRLength:ATR的周期,默认值为20;TrailStopNumATR:追踪止损回撤ATR的倍数,默认值为2;Lots:头寸大小,默认为交易1手。12例3:双均线交叉系统交易规则:如果短期均线上穿长期均线,做多,如原来持有空单,则先平空单,再建多仓如果短期均线下穿长期均线,做空,如原来持有多单,则先平多单,再建空单短周期:10长周期:20交易头寸暂为1手13出场部分设计我们使用三种类型的止损设置:进场后设置初始止损;有一定盈利后设置保本止损;盈利增大后使用追踪止盈(峰值价回落ATR倍数);为此,设置三个止损参数:NumericInitialStop(20);//初始止损(千分之N)NumericBreakEvenStop(30);//保本止损(千分之N)NumericTrailingStop(50);//追踪止损(千分之N)三种止损的代码可以放在一起处理,取最有利的价格作为止损(赢)价。多头止损部分的代码//初始止损StopLine=EntryPrice*(1-InitialStop/1000);//达到保本止损条件,将止损位上移到保本的价位If(HigherAfterEntry=EntryPrice*(1+BreakEvenStop/1000))StopLine=EntryPrice;//追踪止损的价位超过保本止损价,止损价随盈利峰值价的上升同步提高If(StopLineHigherAfterEntry*(1-TrailingStop/1000))StopLine=HigherAfterEntry*(1-TrailingStop/1000);Commentary(止损价:+Text(StopLine));//止损触发If(Low=StopLine){MyPrice=StopLine;If(OpenMyPrice)MyPrice=Open;Sell(Lots,MyPrice);bLongStoped=True;//止损后设置标志Commentary(LongPositionStopedat+text(MyPrice));}其他规则其他策略和例子1相同:采用多空模型分开设计;再进场必须行情再创新高(低);过滤集合竞价数据止损处理的细节无论初次进场还是再次进场,进场后都是把进场价作为开仓后的盈利最高价或最低价。两者的区别之处在于:初次进场,因为是开盘价进场,可以在开仓Bar实现止损;而再次入场,因为在历史K线中,无法确定入场点和最高价最低价在时间次序上的关系,从而无法实现在开仓BAR的止损。因此,必须在记录开仓后最高和最低后,加上Return指令,从而忽略掉后面的止损部分公式。例4:RangeBreak系统这是个日内交易系统,收盘一定平仓;RangeBreak基于昨日振幅和今日开盘价的关系。昨日振幅=昨日最高价-昨日最低价上轨=今日开盘价+N*昨日振幅下轨=今日开盘价-N*昨日振幅当价格突破上轨,买入开仓。当价格跌穿下轨,卖出开仓。RangeBreak指标ParamsNumericPercentOfRange(0.3);VarsNumericDayOpen;NumericpreDayRange;NumericUpperBand;NumericLowerBand;BeginDayOpen=OpenD(0);preDayRange=HighD(1)-LowD(1);UpperBand=DayOpen+preDayRange*PercentOfRange;LowerBand=DayOpen-preDayRange*PercentOfRange;PlotNumeric(UpperBand,UpperBand);PlotNumeric(LowerBand,LowerBand);PlotNumeric(MidLine,DayOpen);EndRangeBreak指标RBS_V1(1)ParamsNumericPercentOfRange(0.3);NumericExitOnCloseMins(14.59);VarsNumericDayOpen;NumericpreDayRange;NumericUpperBand;NumericLowerBand;NumericMyPrice;BeginDayOpen=OpenD(0);preDayRange=HighD(1)-LowD(1);UpperBand=DayOpen+preDayRange*PercentOfRange;LowerBand=DayOpen-preDayRange*PercentOfRange;If(MarketPosition!=1&&High=UpperBand){MyPrice=UpperBand;If(OpenMyPrice)MyPrice=Open;Buy(1,MyPrice);Return;}RBS_V1(2)If(MarketPosition!=-1&&Low=LowerBand){MyPrice=LowerBand;If(OpenMyPrice)MyPrice=Open;SellShort(1,MyPrice);Return;}//收盘平仓If(Time=ExitOnCloseMins/100){Sell(1,Open);BuyToCover(1,Open);}SetExitOnClose;End必须考虑的特殊情况如果前一日涨停或跌停,则会出现范围很小。解决方案:设定一个范围的最小值,假定为当前价格的0.2%。代码中的改动ParamsNumericMinRange(0.2);VarsNumericSeriesDayOpen;NumericpreDayHigh;NumericpreDayLow;NumericSeriespreDayRange;BeginpreDayHigh=HighD(1);preDayLow=LowD(1);If(Date!=Date[1]){DayOpen=Open;preDayRange=preDayHigh-preDayLow;If(preDayRangeOpen*MinRange*0.01)preDayRange=Open*MinRange*0.01;}Else{DayOpen=DayOpen[1];preDayRange=preDayRange[1];}增加止损有可能通道会比较宽,难道非要等到反转才平
本文标题:TB交易模型示例--tb内部课件--蔡云华
链接地址:https://www.777doc.com/doc-6172363 .html