如何才能做好程序化交易-三大法则

这篇文章主要还是针对趋势化交易。

研究程序化交易有相当一段时间了,各种心得各种苦恼各种进步,但是我发现,最大的问题还不是一个历史测试模型绩效如何,而是难在实施上。

我目前碰到的最多的问题总结起来不外乎这么几项:
– 模型历史数据测试的好好的,一旦实施起来,却完全和历史数据背道而驰;
– 我测试的最近几年都是盈利的,结果我一实施,就是连续亏损;
– 我刚刚受不了亏损停止了交易,行情又走出来了,盈利完全没抓住;
– 看到账面上出现了盈利一方面很高兴,一方面开始担心跟随的回撤而损失利润,就纠结是否人工干预;
– 我选择了多多个商品作为分散风险,结果账面看起来完全不是那么回事;
– 。。。。

广告

目前我期货上实施的主要是隔日持仓的趋势模型,系统是以15分钟K线为基础做交易的。目前没有做日内模型交易。

趋势研究地比较久了,也有了不少心得。其实趋势研究起来比日内要简单许多,一般简单的均线策略,往往都能奏效。但是趋势交易的缺点也是明显的,最简单一条:完全靠天吃饭。如果你交易的几个品种很不幸都在横盘震荡里,而且这个震荡是漫长的,你会非常非常痛苦。

即使在一波看起来是趋势的行情里,面对大幅度的回落,你会体会到揪心的感觉:到底是拿利润去扛波动以捕获跟随的趋势,而是落袋为安?

所以趋势模型看起来简单,但是实施起来却一点不简单。

我的几个交易,今年启动,然后春节后修改,之后加了些资金,但是一直没啥大的波动。直到最近2周,所谓的黑色系的暴涨行情,Rb之类的,出现了大涨,我的账面也在短短几天内出现了不小的利润,我持仓的Rb和HC都出现了两个涨停。期货的涨停带来的影响比股票可大多了,因为有杠杆在里面。

Rb

上图是Rb1605的15分钟图,可以看到Rb从两个涨停又以跌停掉下来,然后再跌,然后又涨回去。

看着自己账面一下蹿上去,然后再一下打下来,这感觉真是不好受。

这里不去讨论交易模型如何应对这样的行情,我觉得这样的行情期间,必然有模型可以稳定盈利,也必然有模型会左右挨耳光。而我就在这起伏之间,各种思绪交织,总结出了如何做好程序化交易的几个原则,我归纳为三大法则。

这也算是我做程序化研究和实盘这段时间的一个总结吧。

我稍微解释一下:

一、长期来看,使用的模型是能盈利的。
这个是基本要求,如果一个模型在历史回溯里都无法盈利,不管它的理论基础多么好,使用者如何有信心能以后盈利呢?而类似均线系统,基本放在任何一个商品上,长期来看,基本都能盈利,说明这模型是可以用的。

所以做程序化,第一是你的模型长期测试下来,不管绩效曲线多么弯弯曲曲,但是应该能保证大部分商品的大部分周期上,能够是盈利的。

二、在合适的时间里使用合适的模型
对趋势交易者来说,行情一般分为震荡市、单边市,而目前,我看到的模型,很难能同时兼顾这样的两种行情,就像长跑运动员和短跑运动员之间的差别。如果一个模型,长期测试下来看着是盈利的,就贸然地启动实盘,这样固然长期看会盈利,但是未必是最合适的做法。比如均线交易系统,我们都知道在震荡市里无论你如何改参数,大概率的都会产生相当多的亏损。所以理想情况下,在震荡市里启动趋势模型,不是最佳的做法。

然而遗憾的是,我们不是神,根本无法在行情走出样子之前,就知道我们要面对的是什么行情。

这样有两种实施方法:
A:同时使用两套模型,一套趋势模型,一套震荡模型。
这样的方法,在软件里回溯的时候绩效都不会太坏,曲线能比较有效地互补。
实盘中可能碰到的两个问题,一个是资金占用问题,两种不同的策略同时用,和只一种策略,假设使用资金相同,但是并不能说简单地把资金一分为二就行了。这里面涉及到对风险的评估来倒推资金。我的经验这样会降低资金的利用率。
第二个问题是,假设作用在一种商品上,两种模型可能发出不同的信号,比如股市里,假设在某个指数ETF上执行两套模型,再假如我们人工来实施,那这样给使用者可能会带来困惑:一个要卖出若干股,一个要买入若干股,有点晕。期货上也有类似的问题。
而最重要的是,假设上面都顺利,往往模型执行到一定阶段,其实使用者自己都已经能看出行情是趋势还是震荡了,那这个时候,是不是还要坚持使用两种模型?

B:于是有了第二种方法,就是人为地判断行情的阶段,来决定使用哪种模型。
这个的难点在于人要去判断行情。不过从我的经验来看,拿着一个日K线图,看多了,大概还是看得出现在的行情是属于什么阶段的。
其实大多数人总是希望能在最低点或者行情启动前精确地建仓。可惜大多数模型,比如均线模型,都是属于右边交易系统,本身就滞后行情的。如果你心态放平,耐心等待行情比较明确地好转了,再去做,这样也是不错的。

我原来是倾向A方法的,但是现在倾向B方法了。在期货里,商品之间的走势比较独立,使用程序化能比较好的分散风险,但是资金是有限的,再加上我主要是使用趋势模型,所以我觉得比较有效的方法是能大概估计一下选择的商品的走势区间,选择若干个比较合适的商品,觉得它们是在趋势行情里,然后使用趋势模型。而在股市里,基本是同涨同跌,而且股市走势连续性比较强,比较容易直观地看出走势区间,另外股市缺乏做空手段,所以就没有必要在明显的弱市里去做交易了。

其实一个人做交易久了,行情大概是什么样的阶段,心里多少会有个直观感受的。

三、能以一个相对轻松的心情去运行你的模型
你的模型长期测试是能盈利的,你也觉得在一个合适的时间段启动了相应的模型,那是否就可以说一切OK了呢?我实际做了这么久下来看,并不是这样的。
无论哪种模型,都会产生亏损交易,不管它是否正确,亏损的交易是肯定存在的。虽然我们知道,在趋势模型里,若干次小的亏损会熬到一个趋势,可问题是,你之前是判断你在趋势行情里,所以启动了趋势模型,但是实际上未必就是这样,或者即使是趋势,也未必是一根斜线拉上去的行情,也依然会有亏损交易。你能确保自己的心理,能淡然地面对长期的亏损交易吗?

相信我,这大概是程序化交易里最难的一个环节了。我基本每次都是卡在这里。

解决的办法就是:降低你的期望值,不要被历史回溯数据里产生的盈利和亏损所迷惑,也不要对自己的心理承受力过于自信。
通过降低你的期望值,结合你模型的历史数据,来倒推投入的资金,然后慢慢做,把资金曲线先熬起来再说。
这也就是网上很多人为什么说盈利的关键是降低杠杆,其实是一个道理。

其实心里的感悟远远不止上面这些描述,但是我是个喜欢把问题先复杂化,然后再尽量简化的那种人,上面的三条,实际涵盖了交易的几个大方面:
– 交易策略;
– 行情判断和风险分散;
– 资金管理和心理管理。

我现在对交易的理解感觉是更进了一步,对程序化交易里的许多问题也找到了答案:
– 到底哪个模型是最好的?
–>你搞得懂的,能长期盈利的,原理很简单的,就好。
– 到底该怎么做资金管理?
–>永远不要对你的心理承受能力高估了,把杠杆降下来。
– 到底该不该人工去干预模型?
–>你觉得你的模型能应付所有行情吗?你觉得你的模型能比你聪明吗?你觉得你的模型知道三板强平吗?你觉得你的模型能自己在几十个商品里去根据行情自己选择启动哪些交易吗?你觉得你的资金相当充裕吗?
这个问题没有标准答案,但是我的建议是,不要那么死板。
– 。。。。

我也因此对网上一些程序化交易者的说法不是太赞同,这里就不多絮絮叨叨了,每个人最终选择的是最适合自己的那一个方法,我上面这些,应该是最适合自己的那个方法。