20140415关于使用TB做模型测试调整优化实盘评估方面的经验与技巧
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一个策略从基础框架,经过了参数优化,通过了 策略优化之后,我们还应该做些什么?
第四步我们要进行逻辑判读
逻辑判断有很多种, 1,横向纵向比较优化就是用这个程序去测试不同周期和不同品种的适用性,一个好 的程序改变参数情况下一般的适用范围会比较广。可以去测试不同周期和不同品种 ,如果这个程序只适合一个品种和一个周期。其它都不适用,我们就必须警惕了, 是不是因为我们的过分优化导致的过分拟合了,这样的资金曲线图我们是不可信的 。 2,从历史的赚钱月份和亏钱月份是否和你初始规划这个策略本身一致。 我们以上面的策略举例:之前我们编写的模型是趋势模型。就是趋势必须赚钱,震 荡应该回撤。寻找1年半,RU在2013年的3月,9月到11月一直处于震荡,2014年3 月也是震荡,模型可以在这几个月份亏钱的,其他月份都应该赚到一部分的钱。绩 效符合实际逻辑。(2万-1.5万)
总结
任何系统都是人设计出来的,赚钱的不是程 序本身,而是站在程序后面的那个设计程序 的人,没有永远赚钱的程序,但有优秀的程 序化设计师。我们跟着行情变化自己的策略 ,我们不断的寻找赚钱的模式。就像我研究 程序化的两年中,从单品种到多品种,从低 频到高频,从高频到套利。只有我们涉及的 领域越多,我们才可以把资金曲线做得更加 的平滑。希望中国出现更多的优秀的程序化 师。
Condition2= h>op1; Condition4= l<op2;
if (Condition1 and Condition2 and MarketPosition<>1) { Buy(1,op1); } Condition3 = CrossUnder(MACDValue, AvgMACD) ; if (Condition3 and Condition4 and MarketPosition<>-1) { SellShort(1,op2); } End
MACDValue = XAverage(open, FastLength ) - XAverage( open, SlowLength ) ; AvgMACD = XAverage(MACDValue,MACDLength); MACDDiff = MACDValue - AvgMACD; Condition1 = CrossOver(MACDValue, AvgMACD) ; if (Condition1) { Buy(1,Open); } Condition3 = CrossUnder(MACDValue, AvgMACD) ;
加上参数优化和策略优化 程序改成:
Params Numeric FastLength( 24 ); Numeric SlowLength( 34 ); Numeric MACDLength( 19 ); Numeric abc(10); Vars NumericSeries MACDValue; NumericSeries AvgMACD; NumericSeries op1; NumericSeries op2; Numeric MACDDiff; Bool Condition1; Bool Condition2; Bool Condition3; Bool Condition4; Begin MACDValue = XAverage( Close[1], FastLength ) - XAverage( Close[1], SlowLength ) ; AvgMACD = XAverage(MACDValue,MACDLength); MACDDiff = MACDValue - AvgMACD; Condition1 = CrossOver(MACDValue, AvgMACD) ; op1=o+abc; op2=o-abc;
资金曲线图
在这里顺便说下编程注意事项: 1,我们发现上面的程序中,我们用的是 h>op1, l<op2 ,这里注意一下,如果你要求在BAR内完 成交易,而不是BAR的收盘完成交易,就必须用 到上面的2个判断条件,并且注意一定不能是 h<op1, l>op2 ;因为如果你这样写,信号会不 断的闪现。 2,在这个策略里面Buy(1,op1)和 SellShort(1,op2);我们的要买卖的价格和实际实盘 可以成交的价格是相符的。因为 op1=o+abc;op2=o-abc;都是每一个BAR开盘价之 后达到某个值,一旦达到,就以这个价格成交, 这是实盘中可以成交的价格。
开拓者程序化交易
张超 关于使用TB做模型测试调整优化实盘评 估方面的经验与技巧
程序化的定义
有人问程序化是什么,达到一个什么效果才 叫好的程序化?我个人觉得程序化就是寻找 混乱的数据组合成有规律的数学模型公式表 达出来的方式(Y=A..+Bx…),用计算机语 言编写出来。即是在未来行情中,将起伏不 定的K线(开盘价,收盘价,最高价,最低价 )x数据转化成有规律的直线倾斜向上走的Y 数据图形,即完成结果Y>Y[1]。
if (Condition3) { SellShort(1,Open); } End
1.
ຫໍສະໝຸດ Baidu
确定我们做的周期和品种
如果策略是做长线用大周期测试,如果策略是短线日内高频交易,我们用小周期测 试,并且测试跨度竟可能的大一点。 之后我们进行MACD的策略测试,测试出资金曲线,现在我们选择30分钟RU品种测 试,测试跨度从2013.1.1到2014.4.5 。
资金曲线图
我们第二步进行参数优化
工具栏里面下拉框选择交易策略优化, 参数可以在原来数字情况下向外扩大缩小。根据自己需要选择优化排序,很多客户 都喜欢选择最大盈利排序,我喜欢选择收益风险比排序,并且参考TB系数。 优化参数本人有一点心得可以和各位一起分享。第一点,最大盈利的参数不一定是 最好的,比如参数8显示最佳,我们可以看下7和9这两个参数是不是比8稍差一点, 而且7和9这2个参数绩效应该也是很好的。如果都符合,表示这个值是有效的。第 二点,盈利差不多情况下,劲量选择回撤亏损少的参数。现在将参数由原来的12 26 9改成24 34 19 改进之后的资金曲线图
3,之前所有的都只是结果,我们没有真正意义上面的体会过程,电脑绩效只是用了几 秒完成了几年的数据测试过程,但是我们如果实盘,一个星期对于我们来说也是漫长 的过程,大部分的人还没有等到赚钱的趋势,已经在震荡中提前认输退出了。所以过 程比结果重要。结果是收益,过程是回撤。我们只有控制好回撤,并且了解自己策略 有可能达到的最大回撤。了解它,接受它,如果接受不了它的最大回撤,坚决不做。 如果做了这个策略,一定要做到不到最大回撤,坚决不退出的决心。 我们以上面的策略为例 一年半中,RU遇到3次大回撤, 第一次是2013年3月12日回撤了2万2 第二次是2013年12月11日回撤了2万1 第三次是2014年3月13日回撤了2万 平均每次回撤2万 基本上每隔4个月就会遇到一回超过2万的回撤,这是这个策略本身 的特点。 如果你用10万,做一手RU保证金等于3万。即是:仓位是30% 那我们每隔4个月,就 必须准备好一次接受从高点损失掉20% 了解完它的特点后。。接下去,就看你能不能接受了。
我想大家根据程序化的定义,都编写过一些 策略,不管老手还是新手,你们手上都有一 些策略,这些策略基本都是编成一个大致向 上的资金曲线,之后我们应该做些什么?我 们应该怎么优化它,让它成为一个按照自己 的操作习惯的程序策略?
举例:这里我利用TB策略里面的MACD买入卖出平仓策略举例说明,加 载1个很简单的策略。
Params Numeric FastLength( 12 ); Numeric SlowLength( 26 ); Numeric MACDLength( 9 );
Vars
NumericSeries MACDValue; NumericSeries AvgMACD; Numeric MACDDiff; Bool Condition1; Bool Condition2; Bool Condition3; Bool Condition4; Begin
第三步我们要进行策略加工
之前我们选择一个或者多个好的指标组合成了数学模型,我们其实 只是完成第一步,怎么把自己的策略进行策略加工优化,1,首先 我们必须结合实盘我们的操作习惯,习惯就像人的习惯一样,有很 多种,好习惯坏习惯,但是程序必须要符合操作者本身的一些性格 ,如果和操作者本身的性格出入很大,比如操作者止损心里价位很 小,程序的止损价位很大,或者操作者喜欢做长线,程序喜欢抓小 波段。这样即使再好的程序,操作者也不会坚持挂到最后,还是赚 不到钱。2,我们必须结合实盘中行情,实盘一般是没有规律可言 的。但是我们可以抓住一些重点,找出一些概率大的事情去排除一 些损失。比如,(1)连续3根阳线之后第4根阴线的可能性非常大 。(2)如果运用了BUY(1,O)函数注意了,开盘之后,高开立刻 低走和低开立刻高走的可能性非常大。以买和平为例,这会导致买 在高位,或者平在最高位,我们可以将OPEN的价格适当向上增加 一些价格点数,价格不超过(OPEN+A),我们不操做。我们在策略上 面需要将条件加上另一个条件构成叠加条件,if (Condition1 And Condition2),Condition1原来的条件,Condition2=(H>O+一定的幅 度),这样我们解决了高开立刻回调的大概率现实问题,低开高走 处理方式一样。