开拓者程序化交易TB公式高级应用.ppt

上传人:小飞机 文档编号:6363264 上传时间:2023-10-21 格式:PPT 页数:58 大小:273.50KB
返回 下载 相关 举报
开拓者程序化交易TB公式高级应用.ppt_第1页
第1页 / 共58页
开拓者程序化交易TB公式高级应用.ppt_第2页
第2页 / 共58页
开拓者程序化交易TB公式高级应用.ppt_第3页
第3页 / 共58页
开拓者程序化交易TB公式高级应用.ppt_第4页
第4页 / 共58页
开拓者程序化交易TB公式高级应用.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《开拓者程序化交易TB公式高级应用.ppt》由会员分享,可在线阅读,更多相关《开拓者程序化交易TB公式高级应用.ppt(58页珍藏版)》请在三一办公上搜索。

1、TB公式高级应用,黄柳,深圳市拓瑞邦泽科技有限公司,第一部分,持仓交易系统的分析和实现,持仓交易系统的设计要素,设计思路:趋势跟踪;设计原则:不能错过主要趋势;设计细节:减少盘整时的连续亏损和最大资金回撤。总结:Cut loss short,let profit run截短亏损,让利润奔跑!,常见的持仓交易系统,高低点突破系统(四周法则)双均线系统(DualMA)波动性突破系统(ATR)布林通道突破系统(BOLL)抛物线转向系统(SAR)顾比倒数线系统(CBL),Keltner Channel System,基于Keltner Channel(肯特纳通道)的持仓交易系统。由价格均线和ATR形成

2、通道,当价格突破通道产生入场讯号。,Keltner Channel原理,肯特纳通道(KC)是一个移动平均通道,由三条线组合而成(上轨、中线及下轨),若价格突破边界,即表示出现开仓机会。肯特纳通道是基于平均真实波幅原理而形成的指标,对价格波动反应灵敏,基于KC的系统可以实时开仓,不需要等待下一个Bar。,Keltner Channel算法,中线=Typical Price 的 N 周期平均值;Typical Price=(High+Low+Close)/3;上轨=中线+通道;通道=NumATRs*平均真实波幅。,Keltner Channel指标,ParamsNumeric Length(20)

3、;Numeric NumATRs(1);VarsNumericSeries TPrice;Numeric AvgValue;Numeric ShiftValue;Numeric UpperBand;Numeric LowerBand;BeginTPrice=(High+Low+Close)/3;AvgValue=AverageFC(TPrice,Length);ShiftValue=NumATRs*AvgTrueRange(Length);UpperBand=AvgValue+ShiftValue;LowerBand=AvgValue-ShiftValue;PlotNumeric(UpperB

4、and,UpperBand);PlotNumeric(LowerBand,LowerBand);PlotNumeric(MidLine,AvgValue);End,KCS 版本1(1),ParamsNumeric Length(20);Numeric NumATRs(1);VarsNumericSeries TPrice;Numeric AvgValue;NumericSeries ShiftValue;Numeric UpperBand;Numeric LowerBand;Numeric MyPrice;BeginTPrice=(High1+Low1+Close1)/3;AvgValue=A

5、verageFC(TPrice,Length);ShiftValue=NumATRs*AvgTrueRange(Length);UpperBand=AvgValue+ShiftValue1;LowerBand=AvgValue-ShiftValue1;,KCS版本1(2),If(MarketPosition!=1 End,KCS_V1测试结果汇总,KCS_V2(1),KeltnerChannel的指标发明人是Chester Keltner,最初的版本中线和ATR的参数都是20,即我们现在看到的版本。KC指标由琳达-拉什克(Linda Raschke)再度优化改进,她采用10周期ATR值计算上下

6、轨.因此我们将ATR的参数和MidLine的参数分开;,KCS_V2(2),增加参数ATRLength。ShiftValue=NumATRs*AvgTrueRange(ATRLength);通过橡胶指数的测试我们发现,净利润减少2615,但最大资金回撤也减少了1760。风险降低的比例明显大于收益减少的比例,所以这样的调整是有意义的。,KCS_V3(1),以橡胶测试结果为例,从报表中我们看到,最大回撤发生的日期是2006/7/18,我们仔细查看交易记录和讯号,可以看到最大的资金回撤是由于一次盈利平仓过慢,以及两次假突破导致。因此我们有必要增加一个跟踪止损的设置。我们选择固定点数跟踪止损(吊灯止损

7、)。,KCS_V3(2),KCS_V3(3),增加参数TrailingStop,默认值设为400;增加变量MinPoint,用来保存最小变动单位。MinPoint=MinMove*PriceScale;增加序列变量HigherAfterEntry,LowerAfterEntry用来保存开仓后的最高价或最低价。为了避免在一个较长Bar上出现错误的止损信号,我们在计算时不考虑当前Bar的最大盈利。,KCS_V3(4),If(BarsSinceEntry=1)HigherAfterEntry=AvgEntryPrice;LowerAfterEntry=HigherAfterEntry;Else If

8、(BarsSinceEntry 1)HigherAfterEntry=Max(HigherAfterEntry1,High1);LowerAfterEntry=Min(LowerAfterEntry1,Low1);Commentary(HigherAfterEntry=+Text(HigherAfterEntry);Commentary(LowerAfterEntry=+Text(LowerAfterEntry);,KCS_V3(5),If(MarketPosition=1)If(Low=LowerAfterEntry+TrailingStop*MinPoint)MyPrice=LowerAf

9、terEntry+TrailingStop*MinPoint;If(Open MyPrice)MyPrice=Open;BuyToCover(1,MyPrice);,KCS_V3(6),我们将编译后的系统重新运行,会看到净利润上升了13295,最大资金回撤下降了14575,改进的效果是非常明显的。我们再回顾2006年7月的图表,KCSV3的讯号如下图:如图中红圈位置,在跟踪止损之后,价位还在KC上轨之上,系统再次入场。我们应该思考一种新的入场规则,在跟踪止损或止损后再次入场。,KCS_V3(7),KCS_V4(1),重新入场规则:做多时突破前期高点再次入场;做空时突破前期低点再次入场。为了实现

10、重新入场,我们需要记录跟踪止损的状态。还需要记录最近的最高、最低点。,KCS_V4(2),新增序列变量:BoolSeries bLongTrailingStoped;BoolSeries bShortTrailingStoped;初始化:If(BarStatus 0)bLongTrailingStoped=bLongTrailingStoped1;bShortTrailingStoped=bShortTrailingStoped1;Commentary(bLongTrailingStoped=+IIFString(bLongTrailingStoped,True,False);Commenta

11、ry(bShortTrailingStoped=+IIFString(bShortTrailingStoped,True,False);,KCS_V4(3),增加一个条件分支,记录HigherAfterEntry和LowerAfterEntry的值。再次入场的代码:If(bLongTrailingStoped,KCS_V4(4),修改之后的系统测试结果没有明显的变化,但是这次修改去掉了明显不合理的入场,对于系统的连续性和稳健性有了一定的提升。前面我们使用了固定400点的跟踪止损,在整个测试周期里面,橡胶价格最高接近3万,最低6600。所以使用固定的点数明显不合理,因此我们决定采取根据当前价格的

12、某个比值进行吊灯跟踪止损。,KCS_V5,将原来的TrailingStop修改为百分比值。取前一Bar的中线值的百分比值为跟踪止损值。我们也可以取当前Bar的Open,或者开仓价,或者昨收等很多固定的价格作为参照。代码修改很简单,只需要替换固定止损值的算法即可。,实战要注意的问题,涨跌停:本系统应用周期为日线,一般的止损幅度也超过5%,因此,程序中没有涨跌停板的控制。如果出现不利的涨跌停,可以考虑手工处理。迁仓:对于现货升水的合约,做多的头寸尽量晚一点,做空的头寸尽量早一点。现货贴水的合约反之。,第二部分,日内交易系统的分析和实现,日内交易的优势,有较高的获利潜力,可充分利用保证金,对于资金实

13、力的要求较低。不用考虑隔夜的价格波动,可以安心入睡。日内交易限制了盈利,同时也限制了亏损的空间,不会出现一把亏光的风险。,坚持对日内交易的重要性,坚持是你能够在亏损或连续亏损之后仍然能够正常的交易。坚持是你在赢利时能够拿住头寸,亏损时能够及时平仓。坚持是你能够坦然接受亏损,把亏损当成交易成本。当然,坚持是建立在你有一个正确稳健的系统的基础上。,RangeBreak系统,RangeBreak基于昨日振幅和今日开盘价的关系。昨日振幅=昨日最高价-昨日最低价上轨=今日开盘价+N*昨日振幅下轨=今日开盘价-N*昨日振幅当价格突破上轨,买入开仓。以开盘价减去一定的值作为下轨,价格跌穿下轨,卖出开仓。收盘

14、平仓,RangeBreak指标,ParamsNumeric PercentOfRange(0.3);VarsNumeric DayOpen;Numeric preDayRange;Numeric UpperBand;Numeric LowerBand;BeginDayOpen=OpenD(0);preDayRange=HighD(1)-LowD(1);UpperBand=DayOpen+preDayRange*PercentOfRange;LowerBand=DayOpen-preDayRange*PercentOfRange;PlotNumeric(UpperBand,UpperBand);

15、PlotNumeric(LowerBand,LowerBand);PlotNumeric(MidLine,DayOpen);End,RBS_V1(1),ParamsNumeric PercentOfRange(0.3);Numeric ExitOnCloseMins(14.55);VarsNumeric DayOpen;Numeric preDayRange;Numeric UpperBand;Numeric LowerBand;Numeric MyPrice;BeginDayOpen=OpenD(0);preDayRange=HighD(1)-LowD(1);UpperBand=DayOpe

16、n+preDayRange*PercentOfRange;LowerBand=DayOpen-preDayRange*PercentOfRange;If(MarketPosition!=1,RBS_V1(2),If(MarketPosition!=-1 End,RBS_V1(3),我们将最初级版本的系统应用于所有品种的指数中(可行性测试,选取了指数的30分钟周期,数据范围为现在)。除了玉米,小麦等少数价低品种外,绝大部分都是盈利,有些品种还有不错的资金曲线。证明该系统的有不错的胚子,值得继续深入研究。,RBS_V2(1),如果前一日涨停或跌停,则会出现范围很小。两种解决方案:1、设定一个范围的

17、最小值,假定为当前价格的0.2%。2、考虑上当前的开盘价,加上跳空的范围。我们选择第一种方法。,RBS_V2(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)DayOpen=Open;preDayRange=preDayHigh-preDayLow;If(preDayRange Ope

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

19、If(Low=StopLine)MyPrice=StopLine;If(Open MyPrice)MyPrice=Open;Sell(Lots,MyPrice);,RBS_V3(3),下面是做空的止损代码:Else If(MarketPosition=-1)StopLine=LowerBand+DayOpen*StopLossSet*0.01;If(High=StopLine)MyPrice=StopLine;If(Open MyPrice)MyPrice=Open;BuyToCover(Lots,MyPrice);,RBS_V4(1),突破的时效性,发生在上午和下午意义是不同的。不同的商品时

20、效属性不尽相同为此我们增加最后交易时间参数,可供优化测试来确定最佳值。,RBS_V4(2),增加参数:Numeric LastTradeMins(14.00);开仓条件处增加一个时间条件。If(MarketPosition!=1&High=UpperBand&Time LastTradeMins/100)/多头开仓If(MarketPosition!=-1&Low=LowerBand&Time LastTradeMins/100)/空头开仓,RBS_V5(1),为了防止较大的盈利被吞噬,增加跟踪止损。设定跟踪止损的起始点。设定跟踪止损的回撤值。或者可以选择百分比跟踪止损。这里我们采取回撤值。,

21、RBS_V5(2),要实现跟踪止损,我们需要记录开仓后出现的最大盈利的位置,即开多仓后出现的最高价,开空仓后出现的最低价。为了记录最大盈利,我们用两个序列变量,一个记录开仓后的最高价,一个记录开仓后的最低价。,RBS_V5(3),新增变量:NumericSeries HigherAfterEntry;NumericSeries LowerAfterEntry;在脚本开始部分增加以下代码,来记录高低价:If(BarsSinceEntry=1)HigherAfterEntry=AvgEntryPrice;LowerAfterEntry=HigherAfterEntry;Else If(BarsSi

22、nceEntry 1)HigherAfterEntry=max(HigherAfterEntry1,High1);LowerAfterEntry=min(LowerAfterEntry1,Low1);,RBS_V5(4),跟踪止损的编码可配合前面的止损编码一起控制。If(HigherAfterEntry=AvgEntryPrice+DayOpen*TrailingStart*0.01)StopLine=HigherAfterEntry-DayOpen*TrailingStop*0.01;Else/止损StopLine=UpperBand-DayOpen*StopLossSet*0.01;If(

23、Low=StopLine)MyPrice=StopLine;If(Open MyPrice)MyPrice=Open;Sell(1,MyPrice);做空的代码类似。,RBS_V6(1),当我们止损或跟踪止损之后,价格可能会反向运动,如果不加控制,只要满足初始开仓条件,就会开仓。为了不错失大的机会,我们需要再次入场,但不能在上下轨的位置入场。有以下两种方式可以考虑:1、突破前期的高点低点入场。2、时间入场,做多时停留在上轨N个Bar入场。,RBS_V6(2),这里我们采取第一种方式入场,和前面所讲的持仓系统类似。我们需要标记止损动作,并要记录高低位。新建两个布尔型序列变量:BoolSeries

24、 bLongStoped;BoolSeries bShortStoped;在脚本开始位置增加处理,保证其值向后传递。增加HigherAfterEntry和LowerAfterEntry在平仓后的值传递。,RBS_V6(3),在原始开仓位置增加条件,开多仓时bLongStoped不能为True,开空仓时bShortStoped不能为True。在各个交易动作的地方处理这两个序列变量。增加再次入场的代码:If(bLongStoped,RBS_V6(4),/做空再次入场代码:If(bShortStoped,RBS_V7(1),增加涨跌停板控制,接近涨跌停板不会开仓。价格到达涨跌停板马上平仓。,RBS_

25、V7(2),我们新建一个布尔变量bInBoardRange,默认值设置为False。InBoardRange=(Open Q_UpperLimit-DayOpen*StopLossSet*0.02);在开仓条件中加入(InBoardRange=false),RBS_V7(3),为了在价格达到涨跌停价马上平仓,我们需要在增加如下代码:做多时:If(Open=Q_UpperLimit)Sell(1,Open);做空时:If(Open=Q_LowerLimit)BuyToCover(Lots,Open);,RBS_V8(1),增加失败次数限制,防止单日亏损无限制扩大。增加一个变量记录失败的次数。Nu

26、mericSeries FailureCnts;增加一个参数设置最大次数。Numeric FailureLimit(3);,RBS_V8(2),在脚本开始部分增加序列变量值的向后传递处理。在平仓时增加是否亏损的判断,如果亏损则将计数+1.If(PositionProfit 0)FailureCnts=FailureCnts+1;在开仓时增加次数限定。FailureCnts FailureLimit,第三部分,套利分析和交易的实现,套利指标,价差指标:显示2个或3个商品的价差;商品之间的数量比可以任意设置;比值指标显示任意2个或3个商品的价格比值;价差K线将两个商品的价差显示为K线;K线只有开盘价和收盘价,无上下影线。,价差交易,实现两个商品的价差交易;功能类似于套利宝,通过指定4条线的位置完成套利交易。,谢谢!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号