当前位置:文档之家› 开拓者程序化交易TB公式高级应用

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


KCS版本1(2)

If(MarketPosition!=1 && High >= UpperBand) { MyPrice = UpperBand; If(Open > MyPrice) MyPrice = Open; Buy(1,MyPrice); Return; } If(MarketPosition!=-1 && Low <= LowerBand) { MyPrice = LowerBand; If(Open < MyPrice) MyPrice = Open; SellShort(1,MyPrice); Return; } End
易系统。 由价格均线和ATR形成通道,当价格突破 通道产生入场讯号。
Keltner Channelቤተ መጻሕፍቲ ባይዱ理
肯特纳通道(KC)是一个移动平均通道,
由三条线组合而成(上轨、中线及下轨),若 价格突破边界,即表示出现开仓机会。 肯特纳通道是基于平均真实波幅原理而形 成的指标,对价格波动反应灵敏,基于KC 的系统可以实时开仓,不需要等待下一个 Bar。
以橡胶测试结果为例,从报表中我们看到,
最大回撤发生的日期是2006/7/18,我们仔 细查看交易记录和讯号,可以看到最大的 资金回撤是由于一次盈利平仓过慢,以及 两次假突破导致。 因此我们有必要增加一个跟踪止损的设置。 我们选择固定点数跟踪止损(吊灯止损)。
KCS_V3(2)
KCS_V3(3)

KCS_V3(4)



If(BarsSinceEntry == 1) { HigherAfterEntry = AvgEntryPrice; LowerAfterEntry = HigherAfterEntry; }Else If(BarsSinceEntry > 1) { HigherAfterEntry = Max(HigherAfterEntry[1],High[1]); LowerAfterEntry = Min(LowerAfterEntry[1],Low[1]); } Commentary("HigherAfterEntry="+Text(HigherAfterEntry)); Commentary("LowerAfterEntry="+Text(LowerAfterEntry));
KCS_V3(5)

If(MarketPosition==1) { If(Low <= HigherAfterEntry - TrailingStop*MinPoint) { MyPrice = HigherAfterEntry - TrailingStop*MinPoint; If(Open < MyPrice) MyPrice = Open; Sell(1,MyPrice); } }Else If(MarketPosition == -1) { If(High >= LowerAfterEntry + TrailingStop*MinPoint) { MyPrice = LowerAfterEntry + TrailingStop*MinPoint; If(Open > MyPrice) MyPrice = Open; BuyToCover(1,MyPrice); } }
KCS_V3(7)
KCS_V4(1)
重新入场规则:
做多时突破前期高点再次入场; 做空时突破前期低点再次入场。 为了实现重新入场,我们需要记录跟踪止 损的状态。 还需要记录最近的最高、最低点。
KCS_V4(2)



新增序列变量: BoolSeries bLongTrailingStoped; BoolSeries bShortTrailingStoped; 初始化: If(BarStatus > 0) { bLongTrailingStoped = bLongTrailingStoped[1]; bShortTrailingStoped = bShortTrailingStoped[1]; } Commentary("bLongTrailingStoped="+IIFString(bLongTrailingStope d,"True","False")); Commentary("bShortTrailingStoped="+IIFString(bShortTrailingStope d,"True","False"));
KCS_V3(6)
我们将编译后的系统重新运行,会看到净
利润上升了13295,最大资金回撤下降了 14575,改进的效果是非常明显的。 我们再回顾2006年7月的图表,KCSV3的 讯号如下图: 如图中红圈位置,在跟踪止损之后,价位 还在KC上轨之上,系统再次入场。 我们应该思考一种新的入场规则,在跟踪 止损或止损后再次入场。
常见的持仓交易系统
高低点突破系统(四周法则)
双均线系统(DualMA) 波动性突破系统(ATR) 布林通道突破系统(BOLL) 抛物线转向系统(SAR)
顾比倒数线系统(CBL)
Keltner Channel System
基于Keltner
Channel(肯特纳通道)的持仓交
KCS_V2(1)
KeltnerChannel的指标发明人是Chester
Keltner,最初的版本中线和ATR的参数都 是20,即我们现在看到的版本。 KC指标由琳达-拉什克(Linda Raschke)再 度优化改进,她采用10周期ATR值计算上 下轨. 因此我们将ATR的参数和MidLine的参数分 开;


Params Numeric Length(20); Numeric NumATRs(1); Vars NumericSeries TPrice; Numeric AvgValue; Numeric ShiftValue; Numeric UpperBand; Numeric LowerBand; Begin TPrice = (High+Low+Close)/3; AvgValue = AverageFC(TPrice,Length); ShiftValue = NumATRs*AvgTrueRange(Length); UpperBand = AvgValue + ShiftValue; LowerBand = AvgValue - ShiftValue; PlotNumeric("UpperBand",UpperBand); PlotNumeric("LowerBand",LowerBand); PlotNumeric("MidLine",AvgValue); End
止损幅度也超过5%,因此,程序中没有涨 跌停板的控制。如果出现不利的涨跌停, 可以考虑手工处理。 迁仓:对于现货升水的合约,做多的头寸 尽量晚一点,做空的头寸尽量早一点。现 货贴水的合约反之。
KCS 版本1(1)

Params Numeric Length(20); Numeric NumATRs(1); Vars NumericSeries TPrice; Numeric AvgValue; NumericSeries ShiftValue; Numeric UpperBand; Numeric LowerBand; Numeric MyPrice; Begin TPrice = (High[1]+Low[1]+Close[1])/3; AvgValue = AverageFC(TPrice,Length); ShiftValue = NumATRs*AvgTrueRange(Length); UpperBand = AvgValue + ShiftValue[1]; LowerBand = AvgValue - ShiftValue[1];
KCS_V4(4)
修改之后的系统测试结果没有明显的变化,
但是这次修改去掉了明显不合理的入场, 对于系统的连续性和稳健性有了一定的提 升。 前面我们使用了固定400点的跟踪止损,在 整个测试周期里面,橡胶价格最高接近3万, 最低6600。所以使用固定的点数明显不合 理,因此我们决定采取根据当前价格的某 个比值进行吊灯跟踪止损。
Keltner Channel算法
中线
= Typical Price 的 N 周期平均值; Typical Price =(High+Low+Close)/3; 上轨 = 中线 + 通道; 通道 = NumATRs * 平均真实波幅。
Keltner Channel指标



KCS_V1测试结果汇总
商品 a9000 m9000 al000 cu000 ru000 净利润 46750 45110 82630 520866 291770 最大回撤 -11180 -10070 -24700 -116903 -41755 交易次数 99 96 91 104 89 盈利比率 38.38% 39.80% 36.26% 37.50% 50.56% 连续亏损 7 8 11 6 4
KCS_V5
将原来的TrailingStop修改为百分比值。
取前一Bar的中线值的百分比值为跟踪止损
值。 我们也可以取当前Bar的Open,或者开仓 价,或者昨收等很多固定的价格作为参照。 代码修改很简单,只需要替换固定止损值 的算法即可。
实战要注意的问题
相关主题