2003年开始接触股票投资,2009年底参与期货交易,2010年实现了期货程序化自动交易。2010年收益率85%,2011年收益率54.8%,2012年收益67%左右,期间最大回撤13.8%。
图:不同时期,程序化策略的改变
做期货,我一开始就选择了自动化,因为主要是有实验,觉得做期货风险很大,最后就选择做自动化。从09年年底开始接触,股指期货一上市就开始做,一直做到现在,这是一个保存数据最长的一个账户的曲线。将近三年多的时间里,曲线是走出来了。我觉得我这条曲线走出来真的经历了很多,不像有些人,开始就有很多经验,我是一步步摸出来的。
第一个阶段,一开始我是简单学了五天的程序化交易,之后拿了一套很简单的策略回去。我胆子比较大,股指期货一上来我就开始做,那时的思路就是单策略、单品种、重仓交易。当时我用一个非常简单的突破策略,就这样搞起来了,搞到这个阶段的时候发现一周时间,资金回撤了13.8%,给我带来了深思,就觉得好像不行。
第二阶段,我就开始做一些变化,开始改变,多策略单品种,还采用了一个盈利加码。因为当初这里我只用了二十万资金,进去试水,到了这个位置我又加了二十万,到了这个位置资金开始有一百多万在做。但是如果一百多万还是按前面做,我回撤会非常大,我就想到用不同的策略来做。策略里面分第一次进场,第二次进场,但我的原则就是盈利加码,然后顺势交易。但我最关注的就是盈利和回撤的关系,不是说我赚了多少钱,而是关注我最大回撤是多少。
第三个阶段我又做了改变,就是多策略多品种和盈利加仓。还有一个就是策略分类互补,顺势交易。这个位置我就开始做商品,大概全市场挑了十个商品,就用一套简单的策略。一套简单的策略在一个商品上的曲线很难看,没想到放到十个商品里面组合,发现组合曲线还过得去,就这样上了。后来做一个策略分类互补,就是我把这个策略分成一个进攻型,中性和防守型。当我进攻型进去之后,我可能防守型就没在场,当我三个在场的时候,一定出大行情,那我回撤就控制住了。
第四个阶段,我又开始做一个调整,多策略多品种,盈利加码改良,对市场的理解不一样后,加仓的手法开始做一些改变,还有一个就是盈利减仓,加仓和减仓都加进去了,还有就是对市场冲击的完善。以前我感觉没碰到这个问题,后来发现资金稍微大一点,滑点也变得很大,历史的曲线和我跑出来的完全不一样,原因就是我们进去的时候干扰到市场了,这对我的感触很大,所以我针对这个做了一个完善。
第五个阶段,就是现在,今年我再做了一个完善,多策略多品种加减仓,这些都是引用前面的,我现在做的就是进出点的精细化控制。可能做程序化的感触会比较大,就是面临滑点始终是一个很头痛的问题,我用了一个进出场点精细化控制之后,让我的滑点大概减少了50%,就是因为考虑了这个东西。逆势的策略,对冲交易,不再以顺势作为唯一的交易理念。前面这一段我都认为是顺着大趋势去交易,到这个位置为什么会是这样,因为前面这一段太痛苦了,趋势一出来它就开始反转向下。我就考虑增加一些震荡的策略,应该说这个逆势策略对我的整体表现功不可没。这些曲线如果我没有震荡思路,这个曲线一定不是这样的,应该是往下的,在这边盘整,不是创新高。这个给我带来的观念就是不以顺势作为唯一的交易理念,我现在的交易理念是以某个品种的常规走势,比如说这个走势不再像以前那么单纯了,不再傻乎乎的上涨或者下跌,那种可能顺势会比较容易做,但是现在经常是上去震荡一下又往下杀,那我就会采用一种抄底摸底的思路,结合趋势来做。
总结了一下,我自己就像爬楼梯一样,经过了5个阶段,还有一个我的交易信条,这是我一开始做这个数据的时候,把它写下来的,五点:第一正期望交易系统,第二交易规则精简化,第三同策略组合交易,第四稳健的资金管理,第四完全机械化执行。
除此之外,他认为:
做期货不是靠你有多努力(当然努力很重要),而是要找对方法。
我商品主要有做10个品种,上海的有铜、橡胶、锌、螺纹钢,郑州的有白糖、PTA,大连的是豆油、塑料、棕榈油、焦炭。
我股指是做日内,因为股指是当前市场上日内波动性最大的一个品种。商品我是博取它在日间的波动。
我是加减仓的,一般情况下仓位只有10%,但我会根据行情而变动,如果行情对我有利,最大仓位会达到70%。
第一,利用头寸来控制隔夜风险。第二,利用品种来控制隔夜风险。第三,是用策略的差异化来控制隔夜风险。
见价成交最大的好处就是它能够应对突发的行情,而收盘价成交它有比较好的过滤,并且滑点偏小。
滑点是我们做交易中最大的敌人之一,如果说没有滑点的话,我们随便写个模型,表现都会非常漂亮(这也是为何许多日内模型测试的曲线非常漂亮,收益率很高,但实际中惨不忍睹,因为滑点,短线越短,滑点越重要)。
在策略上我认为控制回撤最好的一个手段就是在震荡行情中少参与,在趋势行情中开足仓
在这个金融市场上唯一的“免费午餐”就是多策略、多品种、多周期的组合。我认为多品种是最重要的,第二个是多策略,第三个是多周期。
去寻找一个历史拟合的数值做调整,往往会给人带来不归路,很有可能你会不断陷入一个优化的漩涡里,发现历史很漂亮,未来很可怕。
投资是这样子的,我之前是做股票的,那做股票是就是很业余的在做,就是买进去不看了,买了一支中国平安,从116块钱一直开始买,买到60几块钱还在买,均价在68块钱,最后一路跟下来跟到19块8,是这么一个情况。后来就接触到了程序化,是在09年的时候接触到程序化。
自从有了程序化,我的人生命运就改变了。接下来我们从09年讲起,这是我在做的一个贴子,这个是第一个帐户,入金了5万块钱,第一天就干到了35000,第一天的数据没有,所以从35000开始做记录,一天就亏掉了15000块钱,为什么呢?就是因为文华的那个,用文华做的我开始满仓,因为文华有一个指令叫测试,一测试任何一个模型进去,都是一条曲线,好直啊,觉得是找到了圣杯,就开始猛仓干,第一天就亏掉了,亏完了之后开始反省总结。最后去学习。之后就开始用手工来做,那个时候还不会用程序,总结下来做到最大亏损是22%,那我就觉得好像不行啊,我就总结了一下:亏钱我觉得主要的原因是什么呢?第一个是满仓交易,仓位很重,那时候3万多块钱我做螺纹钢基本上是满仓,那个时候我在论坛上面写的是说,大概还有两个月时间我就写目标了,我说我的目标是过年春节前收益30%。所以太盲目了,完了以后觉得自己是有一个圣杯放在手上,胜率都很高,反正就是都能赚钱,那其实现在反过来看,这是很错误的一个想法;第二个就是品种单一,那个时候是只做螺纹钢的;第三个就是手工交易,因为那个时候程序自动化还真不会写,那怎么办呢?那就开始划线,达到这个条件以后,我就开始买入,但是在极端的行情过程中,根本是来不及做开平仓的。你看到价格以后你再去挂单、填单、买入,真正挂进去的时候如果在极端的过程中,你是挂不进去的。挂进去价格已经早远离了,你再撤再挂那就离的很远了。所以这个其实是很有错误的;还有第四个是没有可靠的历史数据,只做手工统计,后期才知道误差非常大,那个时候激情是蛮好的,用手工在做,厚厚的一个本子,基本上都统计完了。从上证300开始统计,之后再开始统计期货,那个时候我印象很深的是什么?就是期货还没接触就做股票,那股票就是有这样的一个想法,上涨5%我就给它买进去,当它采用的跟踪止损,跌了5%我就把它卖掉,这个想法让我走到了程序化这条路上来,那个时候就是我找我的外甥,我计算他记,从1992年开始算,一直算过来,感觉收益挺好,那后来才知道这里面还没有加误差,就是滑点没加,手续费没加,还有一个就是日内波动这块的高低点没加,相当于就是程序里面的未来函数。所以我总结的这四点对我第二个交易帐户帮助蛮大的,脱离了之前的那种很盲目乐观,满仓心理的交易了。有这个经历我觉得蛮好,亏钱不是坏事,只要正确面对它能够总结出经验来,那一定是好事。
这条曲线不是很漂亮,是从2010年5月份到现在的数据。可以看到这一段做的非常不好,但是我保持了一个真实性,今天在这里不是带多少方法给各位,我觉得还有我的总结的一个失败的经验。总体来说还是有利润的,我总结了一下赚钱的主要原因,第一个就是资金管理,我觉得如果说一个帐户我们要想把帐户做到赢利,我觉得资金管理是应该排在第一位的;第二个就是顺势交易;第三个是多品种、多策略、多周期的一个组合;第四个就是执行。从开始到这个过程中我认为赚钱的主要的因素。那什么是资金管理?就是在我的交易里面我只看两点,第一个就是最大回撤,第二个是总赢利除以总亏损,作为两个重要的考量指标。最大回撤可以看到在这一段最大回撤是多少,就是从这个位置到这个位置,最大回撤是22%,刚刚达到在这个位置。第二个就是趋势交易,那现在在做的话就是相当于趋势发生的必经之路,我通常用的是周期突破,均线交叉,波动性特征这些作为一个程序的一个主要的思路。第三个的话是多品种、多策略、多周期的一个组合,那它主要的作用是能平滑资金曲线,提高资金的一个使用率。第四个就是百分之百的执行,我认为只有坚定的执行策略才能完美的运行。很多人就是在执行的过程中容易出现一个问题就是今天不执行了,明天不执行,这种容易出现一个问题是什么呢?可能是说一亏钱你觉得就产生恐惧,你可能停一天,当你停了一天以后,你觉得确定那一天确实让你少亏了。但是经常发生这种事情,容易出现一个什么情况?就是大行情也未必能抓得到。虽然事后你看到这个信号是发出来了,但是好像跟你真实帐户是没有关系的。
在我执行的过程中,我从这边到这里有一个例子,就相当于在这个位置,前期大概我只有两到三次是没有100%执行,后面都是100%执行。就是盘中我从来不去干预它,为什么呢?因为印象很深的有一次在这个前面这个位置,那个时候股指还是蛮好做的。开进去以后,开始波动,波动很大,往上涨,那我是做多的,看到赚钱了,那个时候盯着盈亏数据心会跳的。往上上去以后,一会又下来了,打到哪里呢?打到我的成本价,迅速又往下,打到哪里了?打到亏的比较多。差一点点打到止损,那个时候我在想,还好,还好没打到止损,上去了,上去以后赚了一点点,我成本价上赚了一点点。那时候我心里就很纠结了,我在想要不要平,如果下去了我现在平我就赚了。那个时候就一狠心就平掉了,平了以后后来的事情就发生了。发生了什么?就是价格波动了两下,还好,下来了,后来“咻”一下子一个大涨,就相当于造成了一个什么?看程序那天是赚了很多钱,其实那天我并没赚钱。那次给我重大的反省就是我再也不能干这种蠢事了。那个时候我有个习惯就是每天都贴图,贴在哪里呢?那我就在那个论坛帖子上发誓就是从今以后我再也不犯类似的蠢事,因为有了那个发誓,我接下来基本上没有碰到过手工干预,但是这是第一次教训。
第二次,也有个手工干预,大概在这个位置,当然那个手工干预原因我觉得很正常,就是我给自己定了一个目标,我说等我的帐户有赢利了,这个大帐户有赢利了400万的时候,给我自己一个小奖励。完了以后那天刚刚好,达到了400万的赢利,那个时候我就想,要不要平呢?不平就没了,那个奖励没了,后来就纠结了半天,我说好,那今天就平吧,我就找我那个助理说,平掉,一平少赚了几十万,又没了,那次少赚几十万我觉得没有什么纠结的,因为这个属于一种比较平淡的一种过程,但如果说像前面这种的,我认为是很不正常的。
很看中赢亏的时候,程序赚了一点的时候就心里会跳的,亏了一点心里会跳,那么我觉得做程序化可能未必是好事,所以我们最终必须要做到一个是百分百执行策略。只有你坚定执行,那我们这样的策略,你的历史测试才算数,就是说你的信号才能够成为你真正的帐户里面的钱。还有一个我觉得就是行情配合,我觉得从2010年5月份到现在的赢利,我认为不是说我的策略有多好,最关键的就是可能我的运气比较好一点,选择了做这个品种,换句话说,这个品种它还是有一定的行情。那么这种情况,我们只能说是有行情我们就赚钱,没行情那我们就认亏呗,是这么一个理解。
我们在做程序化最大的一个敌人,我认为很多人都会知道就是“滑点”。“滑点”这一块,那我在找什么,我在找如何改良“滑点”,那可能是说谁的速度快,谁就占优势。这是一个因素,那么就把我们的交易放到张江去,还有一个是什么呢?其实我总结了这么长时间,今年可以说没有什么收获,唯一的收获就是“滑点”收获。“滑点”现在我们的实盘是按什么来测试的,各位做股指的可能应该都知道,通常如果说测试的话,大家认为多少比较合理?万分之一手续费,可能有的人都挡不住,对不对,那我现在实盘的话是按照万分之零点零五。而且其中一个帐户每天都有正滑点,就相当于万分之零点五的手续费来测,我每天还比测试报告上的赢亏还要多赚一点。我觉得这个是今年最大的收获,其他的没啥收获,当然也有失败的经验总结。所以市场冲击成败我觉得是有可能实现的。
这个阶段是什么呢?回撤达到了15%,就是我的这个主要帐户回撤达到15%,那我只能干吗?只能将这个帐户最高的仓位就是48手股指减到原来的20手,这个阶段的20手,那没办法,因为在我的资金管理里面是如果资金回撤了15%,我一定要采取保守的方法来做。第二个我总结一个回撤的原因,那回撤的主要的一个原因就是增加了一个逆势交易,而且仓位是逐步增加的。盈利的时候,加仓是没错,但是失效过快。趋势策略它应对这个行情的特性会比较的持久一点。而逆势的策略的话它应对的这种东西会比较容易失效,还有一个是在市时间会偏长,那么这种就是导致了一个最大的回撤。第三个,采用了一个大道至简的策略,那主策略是什么呢?就是只有两句话,我现在在做的只有两句话来做主策略。
我很遵循一句话,叫做利润是被动的,是靠行情给的,但亏损我们是可以主动的,我们可以控制的。所以在这里必须得做这个动作,减仓。第二个将原来十个商品减到六个,并且在200元的变动单位减至100元。这个是什么概念,大家可能不是很清楚,相当于减了多少仓位呢?10个品种我现在只做6个,就减掉4个,还有把两百块钱的变动价位,因为我做仓位我不是按照说多少保证金,因为保证金是不算数的,我是按照变动价位,什么意思呢?比如说铜,它一跳是50块钱,那200块呢?那我们应该配4手铜。如果说焦炭200块,那我们这边只配两手焦炭,是按变动价位的,那如果说我们在加波动性特征的话,可能会更均匀一点,目的是让这个比重,让它们平均化,这样有一个更好的对冲效果。
增加过滤机制,为什么增加过滤机制呢?因为目前的帐户是亏损了22.5%,所以必须要减少在市的时间,这是我现在在采取的一个动作。资金回撤我的最大容忍范围是30%,如果亏掉了30%我这个主帐户必须停半年不交易,这是我的原则,
程序交易者的必备条件:我认为自己必须编写程序。为什么这样讲呢?因为很多不会的人,经常有QQ的网友我说,你会编程吗?会程序化?你那套程序能不能卖给我?他希望什么?他希望一个程序为它赚钱。这种容易出现一个问题是什么?容易出现就是你根本不知道原理,你怎么可能让它在你的账户上做呢?在我观念里面,我亏钱也要亏的明明白白,在什么样的情况下我亏钱,在什么样的情况下我赚钱,那程序它只不过是什么,只是替我执行我的思想而已。那为什么要自己精通呢?因为比如说你旁边有一个朋友,他能精通,你把你的思路交给他来写,那有的人觉得你自己是圣杯,我的逻辑那是不可泄密的,这是一个原因之一。第二个原因是什么?在你编写的过程中,它没有办法百分百的去理解你的逻辑,理解你的程序,而且你的程序是有,我写程序都是这样的,A程序1.0,A程序2.0,A程序3.0,是分代数的,就相当对那个金字塔软件一样的。那是有几点零系统的,是什么版本什么版本,因为我们需要去在这个阶段完善它去更新它,那我们得自己去根据行情变化,得自己去加以改良。所以这是我觉得做程序交易员的一个必须要做的事情。
那我写程度是前期是怎么写的,我是全都用复制,复制粘贴复制粘贴,你让我现在把电脑关掉,在黑板上写一行代码,我真不会写,可以说平常的语句我都不会写。关键是什么,关键就是逻辑,逻辑通了,其实语句就是计算机代码的函数,很简单的,我现在是觉得蛮简单的,关键就是你通了就行。
还有编写程序最重要的一个就是要有兴趣。没有兴趣的话,你觉得面对那个枯燥的代码是受不了的,你要感觉到跟它谈恋爱,半夜三更还在想它,做梦的时候还能够在想它,我觉得这个很重要,这个就像我在前期一样的,经常半夜三更陪我老婆睡觉的时候,我就爬起来,干嘛?电脑打开,写程序。一个想法想到了,早上5点钟衣服也不穿就跑到电脑面前去写一下,一写,这个方法,测试一下,不行,睡觉,就这样的一个过程。
所以这个是必须要自己精通的,不然的话,让别人永远写不出你自己想要的,或者说找不到你自己的灵魂。
编程的这几个要领,第一个我认为是逻辑性,就是你的逻辑性,这点很重要,就是我为什么要开,我在什么样的情况下平,我是怎么做的,先要有你这个想法,才能产生所谓的信号,如果说你乱扭一通,你说就出现一个圣杯,那这个圣杯一定是中看不中用的,所以有的朋友给我打电话说,我现在研究有一个很好的策略,你要不要试一下,一年大概有80万的赢利,要不要试一下?我说,算了,不试了。为什么?因为我不知道你的思路,我不知道我自己是怎么死的,或者是怎么活的,我亏钱我要亏的有原因,因为我知道原因了就懂得怎么去改良它,如果我不知道原因,那我只能愣亏。第二个,沟通语句是否对称,之前我也参加过一些模型对换、模型交换,模型交换就是把别人的模型,比如说20个人,一人出一个模型,我也出一个模型,这20个模型就共享了,那这种情况,我其实就看到有一个曲线非常漂亮,有未来吗?没未来。信号散吗?也不散。那为什么它那么漂亮呢?源码打开一看,它是做空条件,很松,很容易达到;做多条件很紧,过滤很多,不容易达到。那有人问,为什么曲线好呢?是因为从2010年到2012年的时候它一路下跌,对不对?一路下跌所以它做空条件多的话,松的话它肯定曲线要少一点,那万一2013年开始就走牛市呢?那肯定是亏的。所以我验证模型一定是要用金字塔里的K线反转,转一下,它就原来开多的条件,就变成开空的了,原来开空的条件变开多的了。我这样对换一看,反转了也有收益,正的也有收益,曲线相关不大,那代表它是多空对称编写的,它不是那种不对称的,或者说是根据历史的数据去研发的,那容易出现问题。
还有一个是参数的适应性,参数适应性我个人认为是尽量的少写参数,在我的程序里面我尽量是把参数镶在里面,是什么意思呢?我不写在那个参数表里面,为什么任何一个程序化里面的它都有一个参数表,这个参数表是干嘛的呢。它是做优化用的,我最终定完型的模型我都不给它写在参数表里面,因为我认为这个东西我尽量的让它保持它的适应性。
第四个我认为在写程序的过程中一定是化繁为简,就是尽量的简化,能够用一句话表达的,那我们就用一句话,能少用一个条件就少用一个条件。尽量的简化,能够用同一种指标去做一些过滤或优化那就用一种指标,不要用第二种指标。因为你条件用的越多,那你的语句就越复杂,越复杂就代表未来行情的适应性就会越差一点,相对来说会差一点。
第五个精细化控制,细节化、精细化,那前面讲的就是化繁为简,要简单应用要精细,这是不是有矛盾呢?在我的理解里就是没有矛盾的。就是你的逻辑是简单的,是精简的,但是你控制的语句一定是精细的,在什么点位进去,或者要怎么进去,或者考虑到当前市场的一个反映状态。这些我觉得就很重要,我之所以能做到刚才说的万分之零点五的滑点,还有就是其中有一个帐户还是算下来它基本上不用手续费,可以赚手续费,那之所以原因就在这里,精细化控制,要考虑当前的市场。
我们先看一下程序化优势:
第一:它的客观优势,它跟手工不一样,就相对来说,它比较客观,它能够在执行的过程中可以避开人性的贪婪和恐惧,我觉得这两点真的是做手工的也好,程序的也好,都很重要。不能说亏钱就怕,赚钱就喜或者赚钱觉得这个期货市场真好,这辈子我一定要赚多少多少钱,亏钱的时候不敢做,停掉,容易出现这种情况。
第二个就是交易速度的优势,什么叫做交易速度的优势?我们从信号到成交回报,都是在一百毫秒以内完成的,也就是说我要到一千点买进去,价格真的到一千点了,这个时候人的肉眼是看到一千点,手去找鼠标去找账号去挂单在这个执行过程中,最快的也要以秒计算,在程序里面它就“咯哒”成交搞定。
第三个就是交易组合的优势,交易组合的优势是什么呢?就是策略可以针对不同品种、不同周期、不同市场同时运行,也就是说我一个策略可以在全市场运行。或者说不仅在期货市场运行,我可以在股票市场运行,人工就容易出现一个问题,你最多只能做两个品种,三个品种,五个品种,如果你做日内高频,你只能做一个品种,而且做完以后是两眼花花。如果程序就不是了,它可以同时操作N个品种,进行毫秒级的运算、监控、成交。这个就是我认为程序化交易的好处。那为什么要组合呢?因为组合是我们现在程序化里面公认的就是做到最后必须要组合,到后面就是多品种、多周期、多策略进行组合。为什么这样子?因为我们最终得出到一个是什么呢?投资组合的一个最大优势是赢利是相加的,亏损是相互抵消的。就相当于比如我做一百个的组合,我每个组合赚一块钱,那我肯定是赚100块,但是如果我100个组合每个组合亏1块钱,那我绝对不是最大回撤绝对不是100块。我可能就60块,为什么,因为A赚钱的过程中,B可能在亏钱,所以它会相互抵消,那你的回撤就会控制下来,这就是我们组合就是现在公认的一个逻辑,所以我们一直在用组合。
第四个就是交易连续性的优势,如果说用程序来做,那它始终就这样监控着,不管是一分钟也好,还是要日线级别也好,一天交易十次也好,还是一年交易十次也好,它都是始终能完美的运行,可持续的关注,这我认为这人工跟这个就是不一样的。当然人工也有人工的优势。
第五个是交易策略的回测性,可分析策略在历史行情中的表现,这我认为做程序的一个重要的一大原因。人工在做的就是我感觉这思路好,那我就开始用实盘,因为你不知道这个东西到底好不好?但是做程序它是这样的,我感觉这个东西好,我先能写出来,写出来以后,我再用历史的N年的数据来测试一下。在测试的过程中,它确实是赚钱的,那我觉得就推算未来赚钱的可能性就会比较高一点,如果说你这个策略感觉比较好,写出来曲线是曲直向下的,那代表什么?代表就是你赚钱的可能性也会比较低。所以我觉得测试报告也比较重要,我在编写实盘的一个策略步骤过程中:第一个是想问题,先想,先问自己,我想捕捉市场哪些行情特征?就是我想做什么,我要什么?这是我第一个要问自己的问题,那也就是说我到底是要哪一段行情的,是震荡的,还是趋势的?如果是趋势的我想吃哪一段?是起点的位置,还是中间部分?那任何一个方法都是双刃剑,有利必有敝,也就是说如果我从起点开始,做进去。我要吃,从起点开始吃一直吃到底的这种行情,那势必你试错的成本就要高很多,如果你只吃中间部分,那你的过滤这块要注意了。所以就是要问自己想捕捉什么行情。第二个我的开平仓条件是什么?我要吃这些行情那我要利用什么样的一个计算机语言来做呢?如果我用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最常用的指标来说,什么时候是背离成立,什么时候是背离失效,那最重要的就是盘感。打进去对的,主力的对决,确实向那个方向发展,你觉得有那种盘感加进去的时候,成功率就会变大,失效就更少。任何一套指标,测算下来,它的成功失败,没有说哪一个指标一定占百分之七八十,百分之五十几的指标都很少,关键是要加东西进去,那你就能使他的成功率更高。
在这个过程当中,正如我所说,不断的碰到各种问题,以前我看过一部电影《神辫》我小时候看的,但印象很深。说是他祖上是练铁头功的,到清朝的时候必须留辫子,没办法,他祖上铁头功很厉害,到他这一代就会了辫子功,很厉害,怎么样使都行,算是一绝,后来参加了太平天国,在战火中,辫子被烧没了,他苏醒的时候,辫子都没有了,他痛不欲生。但是几年后,我们看到了一个神枪手。在这个市场当中,市场是不断在变的,要做的就是随着市场不断地改变我们自己,最重要在这个改变当中,它不是说今天市场是这样的风格,明天又是另外一个样子,后天又换一个样子,它是有一个过程的,这个过程最重要的就是找到我们的平衡点,也就是我刚才所说的,既想要高收益,又想要低回撤,两个冲突点当中找一个平衡点。