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

下载本文档

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

文档简介

1、1TB程序化交易模型示例程序化交易模型示例2内容安排内容安排介绍四套交易模型一、单均线加通道交易模型二、四周法则交易模型三、双均线交叉交易模型四、RangeBreak日内突破模型3 例例1:单均线加通道突破系统:单均线加通道突破系统交易规则:以简单移动平均线判断趋势,收盘价在均线之上为多头趋势,在均线之下为空头趋势;为过滤均线假突破,在均线基础上加减一定百分比形成围绕均线的上下两条通道;价格盘中突破上轨,进场做多或平空反多;价格盘中突破下轨,进场做空或平多反空;增加跟踪止盈的功能(峰值价回落ATR倍数);跟踪止盈后突破出场前高(低)点再进场;交易头寸暂为1手。4 策略设计策略设计(1)进出场技

2、术指标的编写:ATRValue = AvgTrueRange(ATRLength);Commentary(ATRValue=+text(ATRValue);MA = AverageFC(Close,Length);UpperBand = MA1 * (1 + FilterPercent / 10000 );LowerBand = MA1 * (1 - FilterPercent / 10000 );PlotNumeric(MA,MA);PlotNumeric(UpperBand,UpperBand);PlotNumeric(LowerBand,LowerBand);其中参数其中参数:ATRLe

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

4、录价格的新高(低)的变化;6 策略设计策略设计(3)跟踪止盈采用的是盈利峰值价回落的一定比例后触发止损,加上本身趋势反转时的止损,两部分代码合在一起,以多头模型为例说明:止损价的设置StopLine = LowerBand;if (StopLine HigherAfterEntry - ATRValue1 * TrailStopNumATR)StopLine = HigherAfterEntry - ATRValue1 * TrailStopNumATR;止损的触发If(Low = StopLine)MyPrice = StopLine;If(Open MyPrice) MyPrice = O

5、pen;Sell(0,MyPrice);bLongStoped = true;7 策略设计策略设计(4)集合竞价数据过滤集合竞价时,会产生一个Tick,这个Tick会驱动图表中加载的公式应用的运算,如果这时符合交易条件,则会发送委托单。但交易所此时并未开市,从而产生废单。为处理这种情况,我们需要在代码中过滤这些数据,我们在公式中加入以下代码:分钟周期和Tick周期下If ( BarType = 1 or BarType = 2 ) & BarStatus = 2 & date != date1 & high = low) return;日线周期If ( BarType

6、= 0 & BarStatus = 2 & CurrentTime = HiBand1 ).多空分开设计,跟踪止盈的设计以及集合竞价数据的过滤都和例1的策略相同。12 模型参数说明模型参数说明vLength1:长周期天数,默认值为20,即四周;vLength2:短周期天数,默认值为10,即两周;vATRLength:ATR的周期,默认值为20;vTrailStopNumATR:追踪止损回撤ATR的倍数,默认值为2;vLots:头寸大小,默认为交易1手。13 例例3:双均线交叉系统:双均线交叉系统交易规则:如果短期均线上穿长期均线,做多,如原来持有空单,则先平空单,再建多仓如果短

7、期均线下穿长期均线,做空,如原来持有多单,则先平多单,再建空单短周期:10长周期:20交易头寸暂为1手14 出场部分设计出场部分设计我们使用三种类型的止损设置:进场后设置初始止损;有一定盈利后设置保本止损;盈利增大后使用追踪止盈(峰值价回落ATR倍数);为此,设置三个止损参数: Numeric InitialStop(20); / 初始止损(千分之N)Numeric BreakEvenStop(30); / 保本止损(千分之N)Numeric TrailingStop(50); / 追踪止损(千分之N)三种止损的代码可以放在一起处理,取最有利的价格作为止损(赢)价。15 多头止损部分的代码多头

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

9、ntary(止损价:+Text(StopLine);/ 止损触发If(Low = StopLine)MyPrice = StopLine;If(Open =UpperBand) vMyPrice = UpperBand;vIf(Open MyPrice) MyPrice = Open;vBuy(1,MyPrice);vReturn;v22RBS_V1(2)vIf(MarketPosition!=-1 & Low=LowerBand)vvMyPrice = LowerBand;vIf(Open =ExitOnCloseMins/100)vvSell(1,Open);vBuyToCover

10、(1,Open);vvSetExitOnClose;vEnd23必须考虑的特殊情况必须考虑的特殊情况v如果前一日涨停或跌停,则会出现范围很小。v解决方案:v设定一个范围的最小值,假定为当前价格的0.2%。24代码中的改动代码中的改动vParamsv Numeric MinRange(0.2);vVarsv NumericSeries DayOpen;v Numeric preDayHigh;v Numeric preDayLow; v NumericSeries preDayRange;vBeginv preDayHigh = HighD(1);v preDayLow = LowD(1);v

11、If(Date!=Date1)v v DayOpen = Open;v preDayRange = preDayHigh - preDayLow;v If(preDayRange Open*MinRange*0.01) v preDayRange = Open*MinRange*0.01;v Elsev v DayOpen = DayOpen1;v preDayRange = preDayRange1;v 25 增加止损增加止损v有可能通道会比较宽,难道非要等到反转才平仓?v考虑增加止损设置,有2种方案:v1、亏损固定点数。v2、亏损当前价格的百分比。v考虑到商品价格变化的差异,我们采取第二种

12、方式。26止损部分代码止损部分代码v 先增加一个变量StopLine,用来保存止损位置。v下面是做多时的止损代码:vIf(MarketPosition=1)vvStopLine = AvgEntryPrice-DayOpen*StopLossSet*0.01;vIf(Low = StopLine)vvMyPrice = StopLine;vIf(Open = StopLine)vvMyPrice = StopLine;vIf(Open MyPrice) MyPrice = Open;vBuyToCover(Lots,MyPrice);vv28入场时间的考虑入场时间的考虑v突破的时效性,发生在上

13、午和下午意义是不同的。v不同的商品时效属性不尽相同v为此我们增加最后交易时间参数,可供优化测试来确定最佳值。29 实现代码实现代码v增加参数:vNumeric LastTradeMins(14.00);v开仓条件处增加一个时间条件。vIf(MarketPosition!=1 & High=UpperBand & Time LastTradeMins/100)vv/ 多头开仓vvIf(MarketPosition!=-1 & Low=LowerBand & Time =AvgEntryPrice+DayOpen*TrailingStart*0.01)vvStopL

14、ine = HigherAfterEntry - DayOpen*TrailingStop*0.01;vElse / 止损vvStopLine = AvgEntryPrice-DayOpen*StopLossSet*0.01;vvvIf(Low = StopLine)vvMyPrice = StopLine;vIf(Open =UpperBand & High HigherAfterEntry & Time MyPrice) MyPrice = Open;vBuy(1,MyPrice);vbLongStoped = False;vReturn;vv35v/ 做空再次入场代码:v

15、If(bShortStoped & MarketPosition=0 & Low=LowerBand & Low LowerAfterEntry & Time LastTradeMins/100 & bInBoardRange=false)vvMyPrice = Min(LowerAfterEntry,LowerBand) - MinPoint;vIf(Open MyPrice) MyPrice = Open;vSellShort(1,MyPrice);vbShortStoped = False;vReturn;v36涨跌停的控制涨跌停的控制接近涨跌停板

16、不应开仓。若有持仓,价格到达涨跌停板马上平仓。37判断是否接近涨跌停判断是否接近涨跌停v我们新建一个布尔变量bInBoardRange,默认值设置为False。vbInBoardRange = v(Open Q_UpperLimit - DayOpen*StopLossSet*0.02);v在开仓条件中加入(bInBoardRange=false)38涨跌停板平仓涨跌停板平仓v为了在价格达到涨跌停价马上平仓,我们需要在增加如下代码:v做多时:vIf(Open = Q_UpperLimit) Sell(1,Open);v做空时:vIf(Open = Q_LowerLimit) BuyToCover(Lots,Open);39交易次数控制交易次数控制增加失败次数限制,防止单日亏损无限制扩大。增加二个变量记录失败的次数。NumericSeries LongFailureCnts;NumericSer

温馨提示

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

评论

0/150

提交评论