《TB交易模型示例》_第1页
《TB交易模型示例》_第2页
《TB交易模型示例》_第3页
《TB交易模型示例》_第4页
《TB交易模型示例》_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

TB程序化交易模型示例

1整理ppt内容安排介绍四套交易模型一、单均线加通道交易模型二、四周法则交易模型三、双均线交叉交易模型四、RangeBreak日内突破模型2整理ppt

例1:单均线加通道突破系统交易规则:以简单移动平均线判断趋势,收盘价在均线之上为多头趋势,在均线之下为空头趋势;为过滤均线假突破,在均线基础上加减一定百分比形成围绕均线的上下两条通道;价格盘中突破上轨,进场做多或平空反多;价格盘中突破下轨,进场做空或平多反空;增加跟踪止盈的功能(峰值价回落ATR倍数);跟踪止盈后突破出场前高(低)点再进场;交易头寸暂为1手。3整理ppt

策略设计(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整理ppt

策略设计(2)为了让系统的组合更灵活,把一个完整的交易模型分成做多和做空两个模型分别编写;初次进场和再次进场,多空模型分别通过序列变量bLongStoped和bShortStoped来判断;进场后,两个变量设为false,重新记录跟踪止损状况跟踪止盈触发后,设置为true趋势反转后,有仓位需要止损,但不设置标志跟踪止损和再次进场创新高(低)的判断,都需要记录盈利峰值价(也就是前高或前低),因此需要设置两个序列变量HigherAfterEntry和LowerAfterEntry,进场后及时记录价格的新高(低)的变化;5整理ppt

策略设计(3)跟踪止盈采用的是盈利峰值价回落ATR的一定比例后触发止损,加上本身趋势反转时的止损,两部分代码合在一起,以多头模型为例说明:止损价的设置

StopLine=LowerBand; if(StopLine<HigherAfterEntry-ATRValue[1]*TrailStopNumATR)

StopLine=HigherAfterEntry-ATRValue[1]*TrailStopNumATR;止损的触发

If(Low<=StopLine) {

MyPrice=StopLine;

If(Open<MyPrice)MyPrice=Open; Sell(0,MyPrice);

bLongStoped=true; }6整理ppt

策略设计(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整理ppt

模型参数说明Length:均线周期,默认值为10;ATRLength:ATR的周期,默认值为20;FilterPercent:通道幅度比例(万分之几),默认为100,即为百分之一;TrailStopNumATR:追踪止损,回测ATR的倍数,默认值为2;Lots:头寸大小,默认为交易1手。8整理ppt

例2:四周法则突破系统交易规则:价格突破最近四周(即日线20根K线)高点,做多,跌破四周低点做空;增加更小周期作为止损,持多单跌破两周低点(即日线10根K线)止损出场,持空突破两周高点止损出局;增加跟踪止盈的功能(峰值价回落ATR倍数);跟踪止盈后突破出场前高(低)点再进场;交易头寸暂为1手。9整理ppt

策略设计(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整理ppt

策略设计(2)突破四周高点进场做多(以多头模型为例)

if(MarketPosition==0&&high>=HiBand1) { …. }

多空分开设计,跟踪止盈的设计以及集合竞价数据的过滤都和例1的策略相同。11整理ppt

模型参数说明Length1:长周期天数,默认值为20,即四周;Length2:短周期天数,默认值为10,即两周;ATRLength:ATR的周期,默认值为20;TrailStopNumATR:追踪止损回撤ATR的倍数,默认值为2;Lots:头寸大小,默认为交易1手。12整理ppt

例3:双均线交叉系统交易规则:如果短期均线上穿长期均线,做多,如原来持有空单,则先平空单,再建多仓如果短期均线下穿长期均线,做空,如原来持有多单,则先平多单,再建空单短周期:10长周期:20交易头寸暂为1手13整理ppt

出场部分设计我们使用三种类型的止损设置:进场后设置初始止损;有一定盈利后设置保本止损;盈利增大后使用追踪止盈(峰值价回落ATR倍数);为此,设置三个止损参数:

NumericInitialStop(20);//初始止损(千分之N) NumericBreakEvenStop(30);//保本止损(千分之N) NumericTrailingStop(50);//追踪止损(千分之N)三种止损的代码可以放在一起处理,取最有利的价格作为止损(赢)价。整理ppt

多头止损部分的代码//初始止损StopLine=EntryPrice*(1-InitialStop/1000);//达到保本止损条件,将止损位上移到保本的价位If(HigherAfterEntry>=EntryPrice*(1+BreakEvenStop/1000)) StopLine=EntryPrice;//追踪止损的价位超过保本止损价,止损价随盈利峰值价的上升同步提高If(StopLine<HigherAfterEntry*(1-TrailingStop/1000)) StopLine=HigherAfterEntry*(1-TrailingStop/1000);Commentary("止损价:"+Text(StopLine));

//止损触发If(Low<=StopLine){ MyPrice=StopLine; If(Open<MyPrice)MyPrice=Open; Sell(Lots,MyPrice); bLongStoped=True; //止损后设置标志

Commentary("LongPositionStopedat"+text(MyPrice));}

整理ppt

其他规则其他策略和例子1相同:采用多空模型分开设计;再进场必须行情再创新高(低);过滤集合竞价数据

整理ppt止损处理的细节无论初次进场还是再次进场,进场后都是把进场价作为开仓后的盈利最高价或最低价。两者的区别之处在于:初次进场,因为是开盘价进场,可以在开仓Bar实现止损;而再次入场,因为在历史K线中,无法确定入场点和最高价最低价在时间次序上的关系,从而无法实现在开仓BAR的止损。因此,必须在记录开仓后最高和最低后,加上Return指令,从而忽略掉后面的止损部分公式。整理ppt

例4:RangeBreak系统这是个日内交易系统,收盘一定平仓;RangeBreak基于昨日振幅和今日开盘价的关系。昨日振幅=昨日最高价-昨日最低价上轨=今日开盘价+N*昨日振幅下轨=今日开盘价-N*昨日振幅当价格突破上轨,买入开仓。当价格跌穿下轨,卖出开仓。整理pptRangeBreak指标Params NumericPercentOfRange(0.3);Vars NumericDayOpen; NumericpreDayRange; NumericUpperBand; NumericLowerBand;Begin DayOpen=OpenD(0); preDayRange=HighD(1)-LowD(1); UpperBand=DayOpen+preDayRange*PercentOfRange; LowerBand=DayOpen-preDayRange*PercentOfRange; PlotNumeric("UpperBand",UpperBand); PlotNumeric("LowerBand",LowerBand); PlotNumeric("MidLine",DayOpen);End整理pptRangeBreak指标整理pptRBS_V1(1)Params NumericPercentOfRange(0.3); NumericExitOnCloseMins(14.59);Vars NumericDayOpen; NumericpreDayRange; NumericUpperBand; NumericLowerBand; NumericMyPrice;Begin DayOpen=OpenD(0); preDayRange=HighD(1)-LowD(1); UpperBand=DayOpen+preDayRange*PercentOfRange; LowerBand=DayOpen-preDayRange*PercentOfRange; If(MarketPosition!=1&&High>=UpperBand) { MyPrice=UpperBand; If(Open>MyPrice)MyPrice=Open; Buy(1,MyPrice); Return; } 整理pptRBS_V1(2) If(MarketPosition!=-1&&Low<=LowerBand) { MyPrice=LowerBand; If(Open<MyPrice)MyPrice=Open; SellShort(1,MyPrice); Return; } //收盘平仓

If(Time>=ExitOnCloseMins/100) { Sell(1,Open); BuyToCover(1,Open); } SetExitOnClose;End整理ppt必须考虑的特殊情况如果前一日涨停或跌停,则会出现范围很小。解决方案:设定一个范围的最小值,假定为当前价格的0.2%。整理ppt代码中的改动ParamsNumericMinRange(0.2);VarsNumericSeriesDayOpen;NumericpreDayHigh;NumericpreDayLow;NumericSeriespreDayRange;BeginpreDayHigh=HighD(1);preDayLow=LowD(1);If(Date!=Date[1]){DayOpen=Open;preDayRange=preDayHigh-preDayLow;If(preDayRange<Open*MinRange*0.01)preDayRange=Open*MinRange*0.01;}Else{DayOpen=DayOpen[1];preDayRange=preDayRange[1];}整理ppt增加止损有可能通道会比较宽,难道非要等到反转才平仓?考虑增加止损设置,有2种方案:1、亏损固定点数。2、亏损当前价格的百分比。考虑到商品价格变化的差异,我们采取第二种方式。整理ppt止损部分代码

先增加一个变量StopLine,用来保存止损位置。下面是做多时的止损代码:If(MarketPosition==1){ StopLine=AvgEntryPrice-DayOpen*StopLossSet*0.01; If(Low<=StopLine) { MyPrice=StopLine; If(Open<MyPrice)MyPrice=Open; Sell(Lots,MyPrice); }}整理ppt下面是做空的止损代码:ElseIf(MarketPosition==-1){ StopLine=AvgEntryPrice+DayOpen*StopLossSet*0.01; If(High>=StopLine) { MyPrice=StopLine; If(Open>MyPrice)MyPrice=Open; BuyToCover(Lots,MyPrice); }}整理ppt入场时间的考虑突破的时效性,发生在上午和下午意义是不同的。不同的商品时效属性不尽相同为此我们增加最后交易时间参数,可供优化测试来确定最佳值。整理ppt实现代码增加参数:NumericLastTradeMins(14.00);开仓条件处增加一个时间条件。If(MarketPosition!=1&&High>=UpperBand&&Time<LastTradeMins/100){//多头开仓}If(MarketPosition!=-1&&Low<=LowerBand&&Time<LastTradeMins/100){//空头开仓}整理ppt止赢规则为了防止较大的盈利被吞噬,增加跟踪止赢。设定跟踪止赢的起始点。设定跟踪止赢的回撤值。或者可以选择百分比跟踪止赢。这里我们采取回撤值。整理ppt跟踪止损的编码可配合前面的止损编码一起控制。If(HigherAfterEntry>=AvgEntryPrice+DayOpen*TrailingStart*0.01){ StopLine=HigherAfterEntry-DayOpen*TrailingStop*0.01;}Else//止损{ StopLine=AvgEntryPrice-DayOpen*StopLossSet*0.01;}

If(Low<=StopLine){ MyPrice=StopLine; If(Open<MyPrice)MyPrice=Open; Sell(1,MyPrice); }做空的代码类似。整理ppt再进场原则当我们止损或跟踪止损之后,有两种情况我们需要加以控制:止损后,再次突破上轨或下轨;追踪止赢后,价格仍符合最初的开仓条件,出场后,马上又会开仓入场。同时,为了不错失大的波段,我们也需要再次入场,只是进场需要更高的条件。我们增加一条:再次进场必须在突破前期的高点\低点。整理ppt代码的修改我们需要标记止损动作,并要记录高低位。新建两个布尔型序列变量: BoolSeries bLongStoped;BoolSeries bShortStoped;在脚本开始位置增加处理,保证其值向后传递。增加HigherAfterEntry和LowerAfterEntry在平仓后的值传递。整理ppt初次进场和再次进场在原始开仓位置增加条件,开多仓时bLongStoped不能为True,开空仓时bShortStoped不能为True。发出交易指令处理这两个序列变量。增加再次入场的代码:If(bLongStoped&&MarketPosition==0&&High>=UpperBand&&High>HigherAfterEntry&&Time<LastTradeMins/100){ MyPrice=Max(HigherAfterEntry,UpperBand)+MinPoint; If(Open>MyPrice)MyPrice=Open; Buy(1,MyPrice); bLongStoped=False; Return;}

整理ppt//做空再次入场代码:If(bShortStoped&&MarketPosition==0&&Low<=LowerBand&&Low<LowerAfterEntry&&Time<LastTradeMins/100&&bInBoardRange==false){

温馨提示

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

评论

0/150

提交评论