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

下载本文档

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

文档简介

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

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

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

5、Price) MyPrice = Open; Sell(0,MyPrice); bLongStoped = true; ,6,策略设计(4),集合竞价数据过滤 集合竞价时,会产生一个Tick,这个Tick会驱动图表中加载的公式应用的运算,如果这时符合交易条件,则会发送委托单。但交易所此时并未开市,从而产生废单。 为处理这种情况,我们需要在代码中过滤这些数据,我们在公式中加入以下代码: 分钟周期和Tick周期下 If ( BarType = 1 or BarType = 2 ) ,7,模型参数说明,Length:均线周期,默认值为10; ATRLength:ATR的周期,默认值为20; Filt

6、erPercent:通道幅度比例(万分之几),默认为100,即为百分之一; TrailStopNumATR:追踪止损,回测ATR的倍数,默认值为2; Lots:头寸大小,默认为交易1手。,8,例2:四周法则突破系统,交易规则: 价格突破最近四周(即日线20根K线)高点,做多,跌破四周低点做空; 增加更小周期作为止损,持多单跌破两周低点(即日线10根K线)止损出场,持空突破两周高点止损出局; 增加跟踪止盈的功能(峰值价回落ATR倍数); 跟踪止盈后突破出场前高(低)点再进场; 交易头寸暂为1手。,9,策略设计(1),进出场技术指标的编写: HiBand1 = highest(high1,Leng

7、th1); LoBand1 = lowest(low1,Length1); HiBand2 = highest(high1,Length2); LoBand2 = lowest(low1,Length2); PlotNumeric(HiBand1,HiBand1); PlotNumeric(LoBand1,LoBand1); plotnumeric(HiBand2,HiBand2); plotnumeric(LoBand2,LoBand2); 其中参数:Length1 - 四周的BAR数 Length2 - 两周的BAR数,10,策略设计(2),突破四周高点进场做多(以多头模型为例) if (

8、 MarketPosition = 0 / 初始止损(千分之N) Numeric BreakEvenStop(30); / 保本止损(千分之N) Numeric TrailingStop(50); / 追踪止损(千分之N) 三种止损的代码可以放在一起处理,取最有利的价格作为止损(赢)价。,多头止损部分的代码,/ 初始止损 StopLine = EntryPrice * (1-InitialStop/1000); / 达到保本止损条件,将止损位上移到保本的价位 If (HigherAfterEntry = EntryPrice * (1+BreakEvenStop/1000) StopLine

9、= 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

10、;/ 止损后设置标志 Commentary(Long Position Stoped at +text(MyPrice); ,其他规则,其他策略和例子1相同: 采用多空模型分开设计; 再进场必须行情再创新高(低); 过滤集合竞价数据,止损处理的细节,无论初次进场还是再次进场,进场后都是把进场价作为开仓后的盈利最高价或最低价。两者的区别之处在于: 初次进场,因为是开盘价进场,可以在开仓Bar实现止损; 而再次入场,因为在历史K线中,无法确定入场点和最高价最低价在时间次序上的关系,从而无法实现在开仓BAR的止损。因此,必须在记录开仓后最高和最低后,加上Return指令,从而忽略掉后面的止损部分公式

11、。,例4:RangeBreak系统,这是个日内交易系统,收盘一定平仓; RangeBreak基于昨日振幅和今日开盘价的关系。 昨日振幅=昨日最高价-昨日最低价 上轨 = 今日开盘价+N*昨日振幅 下轨 = 今日开盘价-N*昨日振幅 当价格突破上轨,买入开仓。 当价格跌穿下轨,卖出开仓。,RangeBreak指标,Params Numeric PercentOfRange(0.3); Vars Numeric DayOpen; Numeric preDayRange; Numeric UpperBand; Numeric LowerBand; Begin DayOpen = OpenD(0);

12、preDayRange = HighD(1) - LowD(1); UpperBand = DayOpen + preDayRange*PercentOfRange; LowerBand = DayOpen - preDayRange*PercentOfRange; PlotNumeric(UpperBand,UpperBand); PlotNumeric(LowerBand,LowerBand); PlotNumeric(MidLine,DayOpen); End,RangeBreak指标,RBS_V1(1),Params Numeric PercentOfRange(0.3); Numer

13、ic ExitOnCloseMins(14.59); Vars Numeric DayOpen; Numeric preDayRange; Numeric UpperBand; Numeric LowerBand; Numeric MyPrice; Begin DayOpen = OpenD(0); preDayRange = HighD(1) - LowD(1); UpperBand = DayOpen + preDayRange*PercentOfRange; LowerBand = DayOpen - preDayRange*PercentOfRange; If(MarketPositi

14、on!=1 ,RBS_V1(2),If(MarketPosition!=-1 End,必须考虑的特殊情况,如果前一日涨停或跌停,则会出现范围很小。 解决方案: 设定一个范围的最小值,假定为当前价格的0.2%。,代码中的改动,Params Numeric MinRange(0.2); Vars NumericSeries DayOpen; Numeric preDayHigh; Numeric preDayLow; NumericSeries preDayRange; Begin preDayHigh = HighD(1); preDayLow = LowD(1); If(Date!=Date1

15、) DayOpen = Open; preDayRange = preDayHigh - preDayLow; If(preDayRange Open*MinRange*0.01) preDayRange = Open*MinRange*0.01; Else DayOpen = DayOpen1; preDayRange = preDayRange1; ,增加止损,有可能通道会比较宽,难道非要等到反转才平仓? 考虑增加止损设置,有2种方案: 1、亏损固定点数。 2、亏损当前价格的百分比。 考虑到商品价格变化的差异,我们采取第二种方式。,止损部分代码,先增加一个变量StopLine,用来保存止损

16、位置。 下面是做多时的止损代码: If(MarketPosition=1) StopLine = AvgEntryPrice-DayOpen*StopLossSet*0.01; If(Low = StopLine) MyPrice = StopLine; If(Open MyPrice) MyPrice = Open; Sell(Lots,MyPrice); ,下面是做空的止损代码: Else If(MarketPosition=-1) StopLine = AvgEntryPrice+DayOpen*StopLossSet*0.01; If(High = StopLine) MyPrice

17、= StopLine; If(Open MyPrice) MyPrice = Open; BuyToCover(Lots,MyPrice); ,入场时间的考虑,突破的时效性,发生在上午和下午意义是不同的。 不同的商品时效属性不尽相同 为此我们增加最后交易时间参数,可供优化测试来确定最佳值。,实现代码,增加参数: Numeric LastTradeMins(14.00); 开仓条件处增加一个时间条件。 If(MarketPosition!=1 Else / 止损 StopLine = AvgEntryPrice-DayOpen*StopLossSet*0.01; If(Low = StopLin

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

温馨提示

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

评论

0/150

提交评论