版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1TB程序化交易模型示例程序化交易模型示例蔡云华蔡云华深圳开拓者科技有限公司深圳开拓者科技有限公司内容安排内容安排介绍四套交易模型一、单均线加通道交易模型二、四周法则交易模型三、双均线交叉交易模型四、RangeBreak日内突破模型2 例例1:单均线加通道突破系统:单均线加通道突破系统交易规则:以简单移动平均线判断趋势,收盘价在均线之上为多头趋势,在均线之下为空头趋势;为过滤均线假突破,在均线基础上加减一定百分比形成围绕均线的上下两条通道;价格盘中突破上轨,进场做多或平空反多;价格盘中突破下轨,进场做空或平多反空;增加跟踪止盈的功能(峰值价回落ATR倍数);跟踪止盈后突破出场前高(低)点再进场
2、;交易头寸暂为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(LowerBan
3、d,LowerBand);其中参数其中参数:ATRLength - 平均真实波幅的计算周期 FilterPercent - 通道的比例(万分之几)4 策略设计策略设计(2)为了让系统的组合更灵活,把一个完整的交易模型分成做多和做空两个模型分别编写;初次进场和再次进场,多空模型分别通过序列变量bLongStoped和bShortStoped来判断;进场后,两个变量设为false,重新记录跟踪止损状况跟踪止盈触发后,设置为true趋势反转后,有仓位需要止损,但不设置标志跟踪止损和再次进场创新高(低)的判断,都需要记录盈利峰值价( 也就是前高或前低),因此需要设置两个序列变量HigherAfterE
4、ntry和LowerAfterEntry,进场后及时记录价格的新高(低)的变化;5 策略设计策略设计(3)跟踪止盈采用的是盈利峰值价回落的一定比例后触发止损,加上本身趋势反转时的止损,两部分代码合在一起,以多头模型为例说明:止损价的设置StopLine = LowerBand;if (StopLine HigherAfterEntry - ATRValue1 * TrailStopNumATR)StopLine = HigherAfterEntry - ATRValue1 * TrailStopNumATR;止损的触发If(Low = StopLine)MyPrice = StopLine;I
5、f(Open MyPrice) MyPrice = Open;Sell(0,MyPrice);bLongStoped = true;6 策略设计策略设计(4)集合竞价数据过滤集合竞价时,会产生一个Tick,这个Tick会驱动图表中加载的公式应用的运算,如果这时符合交易条件,则会发送委托单。但交易所此时并未开市,从而产生废单。为处理这种情况,我们需要在代码中过滤这些数据,我们在公式中加入以下代码:分钟周期和Tick周期下If ( BarType = 1 or BarType = 2 ) & BarStatus = 2 & date != date1 & high = lo
6、w) return;日线周期If ( BarType = 0 & BarStatus = 2 & CurrentTime = HiBand1 ).多空分开设计,跟踪止盈的设计以及集合竞价数据的过滤都和例1的策略相同。11 模型参数说明模型参数说明vLength1:长周期天数,默认值为20,即四周;vLength2:短周期天数,默认值为10,即两周;vATRLength:ATR的周期,默认值为20;vTrailStopNumATR:追踪止损回撤ATR的倍数,默认值为2;vLots:头寸大小,默认为交易1手。12 例例3:双均线交叉系统:双均线交叉系统交易规则:如果短期均线上穿长期
7、均线,做多,如原来持有空单,则先平空单,再建多仓如果短期均线下穿长期均线,做空,如原来持有多单,则先平多单,再建空单短周期:10长周期:20交易头寸暂为1手13 出场部分设计出场部分设计我们使用三种类型的止损设置:进场后设置初始止损;有一定盈利后设置保本止损;盈利增大后使用追踪止盈(峰值价回落ATR倍数);为此,设置三个止损参数: Numeric InitialStop(20); / 初始止损(千分之N)Numeric BreakEvenStop(30); / 保本止损(千分之N)Numeric TrailingStop(50); / 追踪止损(千分之N)三种止损的代码可以放在一起处理,取最有
8、利的价格作为止损(赢)价。 多头止损部分的代码多头止损部分的代码/ 初始止损StopLine = EntryPrice * (1-InitialStop/1000);/ 达到保本止损条件,将止损位上移到保本的价位If (HigherAfterEntry = EntryPrice * (1+BreakEvenStop/1000)StopLine = EntryPrice;/ 追踪止损的价位超过保本止损价,止损价随盈利峰值价的上升同步提高If (StopLine HigherAfterEntry*(1-TrailingStop/1000)StopLine = HigherAfterEntry*(1
9、-TrailingStop/1000);Commentary(止损价:+Text(StopLine);/ 止损触发If(Low = StopLine)MyPrice = StopLine;If(Open =UpperBand) vMyPrice = UpperBand;vIf(Open MyPrice) MyPrice = Open;vBuy(1,MyPrice);vReturn;vRBS_V1(2)vIf(MarketPosition!=-1 & Low=LowerBand)vvMyPrice = LowerBand;vIf(Open =ExitOnCloseMins/100)vvS
10、ell(1,Open);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 pre
11、DayLow = LowD(1);v 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 增加止损增加止损v有可能通道会比较宽,难道非要等到反转才平仓?v考虑增加止损设置,有2种方案:v1、亏损固定点数。v2、亏损当前价格的百分比。v考虑到商
12、品价格变化的差异,我们采取第二种方式。止损部分代码止损部分代码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);vv入场时间的考虑入场时间的考虑
13、v突破的时效性,发生在上午和下午意义是不同的。v不同的商品时效属性不尽相同v为此我们增加最后交易时间参数,可供优化测试来确定最佳值。 实现代码实现代码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.
14、01)vvStopLine = 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;vvv/ 做空
15、再次入场代码:vIf(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;v涨跌停的控制涨跌停的控制
16、接近涨跌停板不应开仓。若有持仓,价格到达涨跌停板马上平仓。判断是否接近涨跌停判断是否接近涨跌停v我们新建一个布尔变量bInBoardRange,默认值设置为False。vbInBoardRange = v(Open Q_UpperLimit - DayOpen*StopLossSet*0.02);v在开仓条件中加入(bInBoardRange=false)涨跌停板平仓涨跌停板平仓v为了在价格达到涨跌停价马上平仓,我们需要在增加如下代码:v做多时:vIf(Open = Q_UpperLimit) Sell(1,Open);v做空时:vIf(Open = Q_LowerLimit) BuyToCover(Lots,Open);交易次数控制交易次数控制增加失败次数限制,防止单日亏损无限制扩大。增加二个变量记录失败的次数。NumericSeries LongFailureCnts;NumericSeries ShortFailureCnts;增加一个参数设置最大
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 养殖场建设安全施工合同
- 车辆租赁合同纠纷
- 养殖场板房施工协议
- 投影仪租赁担保合同
- 城市排水管网改造需求书
- 文化旅游区地平施工合同
- 矿山配电房新建施工合同
- 养老机构设施维护管理手册
- 私立医院医师聘用合同书
- 油气田水平井导向钻进施工合同
- 建设项目“三同时”环境保护验收一览表
- 箱涵清淤专项施工方案
- 年金险的销售逻辑课件
- 2023年沈阳桃仙国际机场股份有限公司招聘笔试模拟试题及答案解析
- 【2022】外研版英语八年级上册知识点总结(精华版)
- 意义类答题方法
- 实验三四大麦类小麦、大麦、黑麦、燕麦
- 三年级上册数学课件-《乘火车》 北师大版 (共25张PPT)
- 劳动法律法规培训 课件
- 基于综合实践活动的德育校本课程开发与实施优秀获奖科研论文
- 《兄弟》作品简介名著导读PPT模板
评论
0/150
提交评论