资源预览内容
第1页 / 共41页
第2页 / 共41页
第3页 / 共41页
第4页 / 共41页
第5页 / 共41页
第6页 / 共41页
第7页 / 共41页
第8页 / 共41页
第9页 / 共41页
第10页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1TB程序化交易模型示例蔡云华深圳开拓者科技有限公司内容安排介绍四套交易模型 一、单均线加通道交易模型 二、四周法则交易模型 三、双均线交叉交易模型 四、RangeBreak日内突破模型2例1:单均线加通道突破系统交易规则:以简单移动平均线判断趋势,收盘价在均线之上为多 头趋势,在均线之下为空头趋势;为过滤均线假突破,在均线基础上加减一定百分比形 成围绕均线的上下两条通道;价格盘中突破上轨,进场做多或平空反多;价格盘中突破下轨,进场做空或平多反空;增加跟踪止盈的功能(峰值价回落ATR倍数);跟踪止盈后突破出场前高(低)点再进场;交易头寸暂为1手。3策略设计(1)进出场技术指标的编写: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);其中参数:ATRLength - 平均真实波幅的计算周期FilterPercent - 通道的比例(万分之几)4策略设计(2)为了让系统的组合更灵活,把一个完整的交易模型分成 做多和做空两个模型分别编写;初次进场和再次进场,多空模型分别通过序列变量 bLongStoped和bShortStoped来判断;进场后,两个变量设为false,重新记录跟踪止损状况跟踪止盈触发后,设置为true趋势反转后,有仓位需要止损,但不设置标志跟踪止损和再次进场创新高(低)的判断,都需要记录盈利 峰值价( 也就是前高或前低),因此需要设置两个序列变 量HigherAfterEntry和LowerAfterEntry,进场后及时记录 价格的新高(低)的变化;5策略设计(3)跟踪止盈采用的是盈利峰值价回落的一定比例后 触发止损,加上本身趋势反转时的止损,两部分代码合 在一起,以多头模型为例说明:止损价的设置 StopLine = LowerBand; if (StopLine = HiBand1 ) . 多空分开设计,跟踪止盈的设计以及集合竞价数据的过 滤都和例1的策略相同。11模型参数说明vLength1:长周期天数,默认值为20,即四周;vLength2:短周期天数,默认值为10,即两周;vATRLength:ATR的周期,默认值为20;vTrailStopNumATR:追踪止损回撤ATR的倍数,默认值 为2;vLots:头寸大小,默认为交易1手。12例3:双均线交叉系统交易规则:如果短期均线上穿长期均线,做多,如原来持 有空单,则先平空单,再建多仓如果短期均线下穿长期均线,做空,如原来持 有多单,则先平多单,再建空单短周期:10长周期:20交易头寸暂为1手13出场部分设计我们使用三种类型的止损设置:进场后设置初始止损;有一定盈利后设置保本止损;盈利增大后使用追踪止盈(峰值价回落ATR倍数);为此,设置三个止损参数:Numeric InitialStop(20); / 初始止损(千分之N)Numeric BreakEvenStop(30); / 保本止损(千分之N) Numeric TrailingStop(50); / 追踪止损(千分之N)三种止损的代码可以放在一起处理,取最有利的 价格作为止损(赢)价。多头止损部分的代码/ 初始止损 StopLine = EntryPrice * (1-InitialStop/1000);/ 达到保本止损条件,将止损位上移到保本的价位 If (HigherAfterEntry = EntryPrice * (1+BreakEvenStop/1000) StopLine = EntryPrice;/ 追踪止损的价位超过保本止损价,止损价随盈利峰值价的上升同步提高 If (StopLine =UpperBand)vMyPrice = UpperBand;vIf(Open MyPrice) MyPrice = Open;vBuy(1,MyPrice);vReturn;vRBS_V1(2)vIf(MarketPosition!=-1 vBuyToCover(1,Open);vvSetExitOnClose;vEnd必须考虑的特殊情况v如果前一日涨停或跌停,则会出现范围很 小。v解决方案:v设定一个范围的最小值,假定为当前价格 的0.2%。代码中的改动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 If(Date!=Date1)v v DayOpen = Open;v preDayRange = preDayHigh - preDayLow;v If(preDayRange = StopLine)vvMyPrice = StopLine;vIf(Open MyPrice) MyPrice = Open;vBuyToCover(Lots,MyPrice);vv入场时间的考虑v突破的时效性,发生在上午和下午意义是 不同的。v不同的商品时效属性不尽相同v为此我们增加最后交易时间参数,可供优 化测试来确定最佳值。实现代码v增加参数:vNumeric LastTradeMins(14.00);v开仓条件处增加一个时间条件。vIf(MarketPosition!=1 vElse / 止损vvStopLine = AvgEntryPrice-DayOpen*StopLossSet*0.01;vvvIf(Low =UpperBand vBuy(1,MyPrice);vbLongStoped = False;vReturn;vv v/ 做空再次入场代码:vIf(bShortStoped v在开仓条件中加入 (bInBoardRange=false)涨跌停板平仓v为了在价格达到涨跌停价马上平仓,我们 需要在增加如下代码:v做多时:vIf(Open = Q_UpperLimit) Sell(1,Open);v做空时:vIf(Open = Q_LowerLimit) BuyToCover(Lots,Open);交易次数控制增加失败次数限制,防止单日亏损无限制 扩大。增加二个变量记录失败的次数。NumericSeries LongFailureCnts;NumericSeries ShortFailureCnts;增加一个参数设置最大次数。Numeric FailureLimit(2);实现代码v在脚本开始部分增加序列变量值的向后传 递处理。v在平仓时增加是否亏损的判断,如果亏损 则将计数+1. If(PositionProfit 0 ) LongFailureCnts = LongFailureCnts + 1;v在开仓时增加次数限定。LongFailureCnts FailureLimit谢谢大家!41
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号