你的位置:首页 > 期货高手

程序化交易的经验之谈(四)

2014/5/11 12:13:19      点击:
网名“我是传奇”,CCTV证券资讯频道《期货时间》期货兵器谱实盘展示账户“倚天剑”打造者。

    我在编写实盘的一个策略步骤过程中:第一个是想问题,先想,先问自己,我想捕捉市场哪些行情特征?就是我想做什么,我要什么?这是我第一个要问自己的问题,那也就是说我到底是要哪一段行情的,是震荡的,还是趋势的?如果是趋势的我想吃哪一段?是起点的位置,还是中间部分?那任何一个方法都是双刃剑,有利必有敝,也就是说如果我从起点开始,做进去。我要吃,从起点开始吃一直吃到底的这种行情,那势必你试错的成本就要高很多,如果你只吃中间部分,那你的过滤这块要注意了。所以就是要问自己想捕捉什么行情。第二个我的开平仓条件是什么?我要吃这些行情那我要利用什么样的一个计算机语言来做呢?如果我用MACD可不可以,我用均线可不可以,我用波动率可不可以,我用突破可不可以,都可以,那它也没有说绝对MACD好,均线好,没有,它也是双刃剑,有利必有敝。第三个,就是策略的原码编写,我们在执行过程中,我们在编写的过程中的步骤,第一步干嘛,第二步干嘛,第三步干嘛,都给它一一的规划。
    第四,假设这一步,我们实现了,那接下来是什么呢?一定要做件事情,就是核对信号与思路是否一致,什么意思?我现在信号出来了,跟我这个思路是不是一致的?还有一个叫无未来,什么叫无未来,就是说没有欺骗自己的东西。如果说用一个未来函数那你的曲线会非常的漂亮,但那种是中看不中用的
   第六步,第六个就是增加过滤条件或优化策略
  第七,就是实盘模板的导入和或者是模拟测试或者是少量的实盘。我直接上实盘。那上实盘的过程中我们就很少,先一手,做做做做,两手,再做做做,三手、五手这样子,是这样一个过程。

     那我们看,在编写过程中,大家可以看到这个像什么?MACD是不是,有点像MACD那我们就认为是MACD。那么我在下面这里画了一条线,这条线比较粗,是绿色的,在上面画的一条红线,这条线,是红线和绿线,这样看的话,你是根本不知道它是怎么组成的,或者怎么写出来的,那我们来看一下源码,源码很简单,第一行数字就是设定了一个参数,在编写的过程中,一定是要有参数的,其实这个程序只有一行代码,就是这条多分线,我把它定义成多分线,它的运算方式是什么呢?运算方式是50减100乘以前期最高,这个是什么前期最高?是35天的前期最高,再减去它当前的一个收盘价,除以最高价前35天的最高减去前35天的最低,那它就会得出一条多空线,这条多空线我用柱状图把它画出来,那它出来就是这个。就是这个很像MACD,那这个思路是怎么走来的?
    就是我在想MACD,如果用MACD容易出现一个问题,我们都知道MACD是由均线组成的,那么均线的话容易出现一个问题,MACD经常出现背离,像这种行情,上涨的行情中,它反而是跌的,原因在于它这一段短期均线上穿长期均线,所以它就会反而是这样走的。那我认为这就容易出现一个捕捉不到该有的行情,那我们就给它用了一个用价格来画一条类似MACD。这是我们的第一个步骤。
     接下来我们在这做了一个极值,极值就是上面这条线和下面这条线,做多线和做空线永远就是45,因为它的这条多空线,它永远是在最高值是在50,最低值是就是负50。那我做多线就是45,做空线就是负45,我们先不评论这个指标好坏,我们再继续。接下来我们开始构建开平仓,构建开平仓很简单,当我们的收盘价收完以后,这个做多线在45以上,我们就开多,在负45以下,就平多,翻空,就这么简单。那我们看一下,现在信号出来了。
      接下来在我们再做一件事情就是检查,就核对信号是不是我想象的,做多的那我们来看一下,这个刚好,可以看到这个是做空线,就是开空,是不是,这最下面的多空线是48,负48那就是小于负45了,那我就应该开空,之后这边的话大于45,那我们就开多,如果真的是在写模型过程中我们是要从有效数据中开始一个一个的去检查。我通常是写完以后就开始,这样子开始推,一直推,推到哪里?这里,好像有一个小于极值的,那这里有没有出一个信号,没有的话,那就有问题了。那接下来我们再看一下,这里面实现的源码的全过程。
     首先我们还是一样的设定参数,为什么要设定参数,是因为我们在编写的过程中最终还要有一个优化的过程,就是还要让计算机把所有的参数去跑一遍,看看出现什么情况,那我写程序的过程中,通常我会先在前面加中文,这个就是注释,参数模块,这个板块。接下来看一下中间的变量,中间的变量其实就是一条语句,就是多空线,还有45的话就是一个极值,就这条多空线最重要,就这一条,完了以后我们遵循的就是计算机运算方式就是先平仓后开仓的原则。

     测试报告:第一个我要它从我有效交易日以来,我总共交易了多少次,我要知道这个交易次数,第二个我要知道上一次的开仓价格或者平仓价格;第三个,我要知道我从历史以来我的最大回撤是多少。第四个,我要知道总盈利除以总亏损是多少,还有我要知道它的平均单笔利润是多少,因为我除以它总交易数,而且是减掉100万,那么当天赢亏也要写进去,净利也要写进去,这个就是测试报告。接下来我们在这里可以看一下,我们的测试,因为是收盘价模式,我们用万分之一的测试法,如果说按我现在用的模板它是用万分之零点零五的来测的,那我们用万分之一来测。
     应用上去以后它的曲线就出来了,这曲线一般,红色这条就是资金曲线,还有红色这条很细的就是我们的最大回撤,信号出来以后大家可以看到,总的从这个位置到这个位置我们的交易次数是535次。最近一次的信号价是2404点,最大回撤是16万9,赢亏比只有1.17,平均利润只有1000块钱,当天赢亏上周五赚了一千块钱,不算好,需要下一步的修正。

    接下来,我们就开始增加过滤条件,如果这种正反手模型写进去,肯定容易出现一个问题是什么?因为你是永远在实施策略,出现这种的问题必不可免,就是这种曲线一直亏一直亏的这种。为什么,因为任何策略都有不适应的时候,在你不适应的时候你亏的是非常快的,那我们为了解决这个问题就要让它增加过滤条件,也就是我不要让它永远在试,我要让它有休息的时间。原则还是这样子的,那我们怎么做呢?假设我们增加的过滤条件是什么?这里写了一个参数,叫做过滤参数,上面的还是没有变,我做了一个在10个周期里面,多空线小于做空线,是有两次应该做出过滤参数是两次,那么我就开始平,否则我不平,就是这么一个简单的过滤机制。当然我们在实盘中可能会增加更多,那下面的测试报告还是会继续保留。

    第四步我们进行应用。可以看到,又出来了不一样的曲线,因为被过滤过了,那还是一样的,出现的问题是有峰谷而且会疾速下跌。这个疾速下跌是什么?我们再看看,从这个位置做进去,一直到这里才平,有人说这里理论来说还多了。原因就是被我过滤掉了,这里没有开多,因为它的10个周期里面只发生一次,那在这里它为什么开呢?因为在10个周期里发生了第二次,所以才开。
    在接下来,这样曲线好像还不行,回撤过大,由原来的16万变成26万,接下来我们在增加一个止损,就是在原来的这个逻辑里面我们给它增加止损。这个止损是一个跟踪止损,我们跟踪止损是用百分比来算的,用一个非常简单的一个数字就是1%,跟踪止损的一个1%。那我们进入第四步,加了一个1%的跟踪止损,出现的数字是总交易数是497次,信号价这个不重要,最大回撤6万1,赢亏比由原来的1.1增加到1.5,平均利润1800,而且可以看到,这个赢亏比发生了很大的变化,还有次数也发生了减少,大家可以看到第三步的时候我们就是一个裸的思路,很裸的一个思路,非多即空,第四步增加了这个条件以后,从500多次的交易次数,减少到300多。那就相当于交易量在减少,但是它的赢亏比很少,单笔利润提高了一点点。
     那我们再看,如果说增加了呢?这赢亏比,因为我们说赢亏比是最重要的,还有一个最大回撤,由刚才的最大一个亏损,最大回撤是26万,现在减到6万,赢亏比由之前的1.1增加到1.5,平均利润由1000增加到1800,交易次数反而比刚才过滤的更多了,原因是什么?原因是我们平仓更松了,平仓的多了,所以开仓也容易多,但是它在场的时间是减少了。
    大家认为这样的曲线怎么样?不错是吧,就一句话,那有人说一句话真的能写出模型吗?实践起来画了75行,这75行都是废话或者都是执行或者都是你要实践这句话的过程用了75行。而且大家可以看到,我们这个是没有未来函数的,不可能有未来函数的,我可以直接实盘的,为什么这样子呢?你看到这一点,我就把它改掉了,用O价,有人会说O价不是未来函数吗?大家看到前面有个ref,它不可能会少,就相当于前一根周期实现了我在下一根K线的开盘价格,我为什么要这样做?因为我有一个跟踪止损,我的跟踪止损一定是动态的,每一秒钟扫描一次,不是走完K线,因为走完K线容易出现一个问题,就是被秒,光大事件那种,如果一分钟它可以涨50个点,里面有几十手的话,那就完蛋了。那我们就必须采用指令价模式,用指令价我们下面也必须用指令价,那我们就得用O价,那下面就是测试报告,认为这种不错啊,那这种失效概率有多少?不知道,是吧?但是你让它长期做,会大亏吗?我认为也不怎么会大亏。

接下来我们再看测试反转一下,K线反转。这条线,红色线,它是向上的,再接下来,我们再来一次多周期的进行,

  主观交易就像中医,需要很多年的经验,需要交很多学费摸索,最后找到一个非常好的模式。量化非常像西医,可能很多新手,比如我们做期货是非常新的,去年刚开始做,但利用过去的很多经验,做研究,可以说没有赔钱,马上找到一条非常稳定的盈利措施。它的好处就非常现成,有很多指标,通过这些指标,机器学习人工智能,经过大量计算机的计算以后,迅速找到盈利模式,可能不用付什么学费我们就可以获得一个很好的回报。但是这两种投资方式不能说谁优谁劣,完全是符合不同人的背景,不同人的操作方法。


     我在做程序化的时候发现,很多程序的回撤如果都加全杠杆的话肯定是很大的。在这个过程当中,我觉得自己做的都很平稳,我这个做下来,按总资金回撤,从来没有超过20%,15%都没有超过,就是这样子很平稳。因为我觉得我能驾驭得住,就是我们控制得住它,刚才空余时间我也总结了几点,第一点刚才讲过,自身比较坚决,然后把利润放大,也就是说在提高胜率的同时,把你的盈亏比放大。我在带队人这个过程当中,经常有学生对我说,不是他们没赚钱,或者怎么样,而是他们没有在趋势出来之后,确定性比较大的时候放重仓位,我觉得在这个时候放重仓位,胜率又高,这个时候按百分比来说,可以达到百分之六七十的胜率,再加上你盈亏比如果能达到1比5、1比6以上的话,这时候风险都比较小。这时当然应该重仓,赚一大截的钱,而不应该在可能会涨可能会跌模棱两可的时候瞎交易,我觉得这个是一点。
     另外我自己总结出来,其实在一些资金的管理上,我觉得自己无非就是在盈利的时候加仓,亏损的时候减仓,这其实也很符合我们的心态,做乱的时候不容易掰回来,会越做越乱,但是做顺起来的时候,你反正是用盈利的钱赚更大的钱,这个我觉得应该是更好一些。其实大家都听过一句话,会买的是徒弟,会卖的是师傅,会空仓的是祖师爷,这才是最重要的。在主观交易上来说,很多情况下是看不了的。其实一路走来,经常会碰到各种各样的问题,心态的问题,技术的问题,资金容量的问题。
     我觉得做到最后,我觉得我们大家讨论来讨论去,没有说哪个技术一出来,放眼四海皆准,都是特别对的,我觉得没有存在这种技术。最重要的,打比方mcd最常用的指标来说,什么时候是背离成立,什么时候是背离失效,那最重要的就是盘感。打进去对的,主力的对决,确实向那个方向发展,你觉得有那种盘感加进去的时候,成功率就会变大,失效就更少。任何一套指标,测算下来,它的成功失败,没有说哪一个指标一定占百分之七八十,百分之五十几的指标都很少,关键是要加东西进去,那你就能使他的成功率更高。
   在这个过程当中,正如我所说,不断的碰到各种问题,以前我看过一部电影《神辫》我小时候看的,但印象很深。说是他祖上是练铁头功的,到清朝的时候必须留辫子,没办法,他祖上铁头功很厉害,到他这一代就会了辫子功,很厉害,怎么样使都行,算是一绝,后来参加了太平天国,在战火中,辫子被烧没了,他苏醒的时候,辫子都没有了,他痛不欲生。但是几年后,我们看到了一个神枪手。在这个市场当中,市场是不断在变的,要做的就是随着市场不断地改变我们自己,最重要在这个改变当中,它不是说今天市场是这样的风格,明天又是另外一个样子,后天又换一个样子,它是有一个过程的,这个过程最重要的就是找到我们的平衡点,也就是我刚才所说的,既想要高收益,又想要低回撤,两个冲突点当中找一个平衡点