开拓者程序化交易TB公式高级应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Keltner Channel算法
中线
= Typical Price 的 N 周期平均值; Typical Price =(High+Low+Close)/3; 上轨 = 中线 + 通道; 通道 = NumATRs * 平均真实波幅。
Keltner Channel指标
来自百度文库
KCS_V2(2)
增加参数ATRLength。
ShiftValue = NumATRs*AvgTrueRange(ATRLength);
通过橡胶指数的测试我们发现,净利润减少2615,但最大 资金回撤也减少了1760。风险降低的比例明显大于收益减 少的比例,所以这样的调整是有意义的。
KCS_V3(1)
常见的持仓交易系统
高低点突破系统(四周法则)
双均线系统(DualMA) 波动性突破系统(ATR) 布林通道突破系统(BOLL) 抛物线转向系统(SAR)
顾比倒数线系统(CBL)
Keltner Channel System
基于Keltner
Channel(肯特纳通道)的持仓交
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];
止损幅度也超过5%,因此,程序中没有涨 跌停板的控制。如果出现不利的涨跌停, 可以考虑手工处理。 迁仓:对于现货升水的合约,做多的头寸 尽量晚一点,做空的头寸尽量早一点。现 货贴水的合约反之。
KCS_V3(6)
我们将编译后的系统重新运行,会看到净
利润上升了13295,最大资金回撤下降了 14575,改进的效果是非常明显的。 我们再回顾2006年7月的图表,KCSV3的 讯号如下图: 如图中红圈位置,在跟踪止损之后,价位 还在KC上轨之上,系统再次入场。 我们应该思考一种新的入场规则,在跟踪 止损或止损后再次入场。
KCS_V2(1)
KeltnerChannel的指标发明人是Chester
Keltner,最初的版本中线和ATR的参数都 是20,即我们现在看到的版本。 KC指标由琳达-拉什克(Linda Raschke)再 度优化改进,她采用10周期ATR值计算上 下轨. 因此我们将ATR的参数和MidLine的参数分 开;
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_V4(3)
增加一个条件分支,记录HigherAfterEntry和LowerAfterEntry的值。 再次入场的代码: If(bLongTrailingStoped && MarketPosition==0 && High > HigherAfterEntry) { MyPrice = HigherAfterEntry + MinPoint; If(Open > MyPrice) MyPrice = Open; Buy(1,MyPrice); bLongTrailingStoped = False; Return; } If(bShortTrailingStoped && MarketPosition==0 && Low < LowerAfterEntry) { MyPrice = LowerAfterEntry - MinPoint; If(Open < MyPrice) MyPrice = Open; SellShort(1,MyPrice); bShortTrailingStoped= False; Return; }
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
KCS_V5
将原来的TrailingStop修改为百分比值。
取前一Bar的中线值的百分比值为跟踪止损
值。 我们也可以取当前Bar的Open,或者开仓 价,或者昨收等很多固定的价格作为参照。 代码修改很简单,只需要替换固定止损值 的算法即可。
实战要注意的问题
涨跌停:本系统应用周期为日线,一般的
以橡胶测试结果为例,从报表中我们看到,
最大回撤发生的日期是2006/7/18,我们仔 细查看交易记录和讯号,可以看到最大的 资金回撤是由于一次盈利平仓过慢,以及 两次假突破导致。 因此我们有必要增加一个跟踪止损的设置。 我们选择固定点数跟踪止损(吊灯止损)。
KCS_V3(2)
KCS_V3(3)
增加参数TrailingStop,默认值设为400; 增加变量MinPoint,用来保存最小变动单位。 MinPoint = MinMove*PriceScale; 增加序列变量HigherAfterEntry,LowerAfterEntry 用来保存开仓后的最高价或最低价。 为了避免在一个较长Bar上出现错误的止损信号, 我们在计算时不考虑当前Bar的最大盈利。
易系统。 由价格均线和ATR形成通道,当价格突破 通道产生入场讯号。
Keltner Channel原理
肯特纳通道(KC)是一个移动平均通道,
由三条线组合而成(上轨、中线及下轨),若 价格突破边界,即表示出现开仓机会。 肯特纳通道是基于平均真实波幅原理而形 成的指标,对价格波动反应灵敏,基于KC 的系统可以实时开仓,不需要等待下一个 Bar。
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
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_V4(4)
修改之后的系统测试结果没有明显的变化,
但是这次修改去掉了明显不合理的入场, 对于系统的连续性和稳健性有了一定的提 升。 前面我们使用了固定400点的跟踪止损,在 整个测试周期里面,橡胶价格最高接近3万, 最低6600。所以使用固定的点数明显不合 理,因此我们决定采取根据当前价格的某 个比值进行吊灯跟踪止损。
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"));
TB公式高级应用
黄柳 深圳市拓瑞邦泽科技有限公司
第一部分
持仓交易系统的分析和实现
持仓交易系统的设计要素
设计思路:趋势跟踪;
设计原则:不能错过主要趋势; 设计细节:减少盘整时的连续亏损和最大
资金回撤。
总结: Cut
loss short, let profit run 截短亏损,让利润奔跑!
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