针对一些对程序化不够了解并且想了解的朋友,本文做了如下总结,希望能帮助更多的朋友,客观合理的认识和选择程序化交易,为自己的财富积累插上最适合自己的翅膀。
一.程序化的理解
程序化一般分为两类模型,一类是趋势模型,一类是震荡模型,如果你想两者结合起来就要看自己的本事了,我的建议是程序化需要不停的去完美,但千万不能追求完美,以下所说模型都是趋势模型;
程序化一种工具,帮助你积累财富的工具,却不是一种暴利的赚钱方式,程序化模型有好坏之分,程序化赚钱的前提是一个好的模型,程序赚钱的关键是坚持的执行,程序赚钱的精髓就是在确定最终使用模型之后,彻底的放弃你对金融市场的一切理解和交易技能.就像武侠小说里说的,想练成最上层的功夫,就应该先废掉所有的武功。
二.程序化模型的选择与辨别
如果有人告诉你他的程序化能在不长的时间内,让你的资金翻几番,那你要为他的言语或者他的程序打个折扣,但是如果对方又能拿出不错的图形或者非常漂亮的收盘测试结果放在你的面前,你又当如何说服自己是相信还是不相信?以下内容就是帮助你如何辨别好坏模型。
1.测试时间:一个好的程序化必须经得起时间周期的测试,如果一个程序化,结果很漂亮,周期却只有一两个月,不可信;
2.使用资金:很多人贴出来的漂亮测试结果,使用资金常常是80%或者其它百分比,但这些都是不合理的选择,因为金融市场资金管理很重要,在行情好时候,资金使用越高,收益越大,行情不好时,资金使用越高亏损越大,但我们无法去判断接下来的行情会如何,所以,历史测试的结果使用百分比的开仓方式是不合理,这也就是为什么,有时候会出现,资金使用率为80%是,测试结果是亏损的,而且使用率为40%时又是赢利的.总而言之,资金使用时应该选择固定的手数进行测试,不管他的行情如何,永不加仓或减仓,来测试一个模型更为合理;
3、测试方式:开盘价和收盘价测试均有其不合理性,趋势模型一般以趋势逆转点为开仓信号,故较为准确的是:出现指令价位。
测试结果的分析:
a.指令总数:也就是信号数,过高,说明震荡行情过滤不好,过低,说明风险大;如何判断信号数合理呢?那就只有不同的模型在同样的周期下的一个对比了.还有一个最简单的方式就是将指令总数/有效交易天数以日内短线为例,一般一个有效交易日的平均信号数在2-5之间(此数据仅供参考);
b.利润率:总利润不用看,只看扣出最大利润的结果,必须为正,而且测试周期越长利润率应该越大,很多模型,测近期不错,测远期就不行,所以测试时应该尽量的去测能测到的最长周期.(当然因为行情关系也可能出现,长期比短期利润率低,但总体而言,周期越长利润率越高,才是好的模型的测试结果)
c.正确率:其它条件都完全一样的情况下,正确率越高自然越好,但也不用为了看到一个高正确率的模型而心动,也不用因为你自己模型的正确率低而担心,一般的正确率能在45%左右,就不错了,因为程序化的本来意义就是赚大亏小,在震荡的时候正确率自然会低;
d.最大亏损率:如果你是选择的固定手数,比如10手进行测试,你的最大亏损率最大应该不能超过10%,当然,如果你选择的测试手数多,最大亏损率可能有所提高.如果你选择的80%的资金使用率,可能亏损会更大,当然也会有亏损的不大的测试结果,这往往和你的测试周期中的行情的一定关系,所以不值得过于依赖;
e.空仓时间:以日短线为例,空仓时间不能太高,太高,必然会错过大行情,当然,这一项不是最重要的,如果你空仓时间长,利润也高,错过就错过吧,错过不是过错,没赚到也不存在亏损的风险;小结:测试结果分析不能只看某一个数据,因为结合起来一起分析:指令总数不能多也不能少,周期越长利润率应该越高,正确率45%以上就可以接受,最大亏损不能过大,空仓时间可以自行把握;
如果一个模型做到了以上几点是不是就算一个好的模型了呢,基本上可以算了,但最重要的是我们还需要结合信号图形(此点需要一定的程序化经验,并不一定看上去好的模型就是好,当然看上去好是前提,如果看上去都觉得一般了,那肯定是不行)来分析,此外,还要看到模型里是否有未来函数,如果是日内短线,信号就一定不能消失,每天的跳空缺口需要技术性的回补等等其它问题都是分析一个模型好坏的理由,但是,一个好的模型是不怕任何测试与分析的。
三.程序化交易的执行
这一点没什么好讲却又不得不讲,很多有多年经验的操盘手,甚至一些国内的金融公司,常常会对程序化交易提出一定的质疑,我就遇到一个期货公司的老总,因为觉得程序化好,准备的资金,进行了程序化交易,首先我不知道他选择模型的依据是什么,号称只是因为人家是大公司,测试结果不错,(如果是我听到这样的话,肯定不会很快的就认定他们的模型,因为我也见过某些(不方便透露)所谓大公司的程序化交易模型的原码,说实在的,确实是**,理论基础都无法说服我,但做出来的图形要去迷惑一些想使用程序化的入门者是绰绰有余)结果这个老总使用该模型交易时,正好遇到一段时间的震荡行情,可能是亏了不少吧,然后决定放弃程序化交易。
这就是一个典型的程序化执行的例子,程序没有人性,我们在使用时就更不应该加入人性,如果你决定使用程序化就给自己一个时间期限(不管是真钱也好,模拟也好),时间不能太短,如果短也可以,必须在这段时间中,你要自己能分析出,是不是都能遇上基本上所有的行情,比如,测试三十天,遇到过十天的震荡,也遇到了好几天的大行情,以此来分析程序的好坏;绝不能因为几次的使用结果不好而去否认程序化,也不能因为几次的使用成功而完全信任,必须要有一定时间的观察与模拟,然后再到真钱的尝试,时间长短是小事,关键是是否经历过大部分的行情,从而选择一个最适合而不是最完美的模型进行自己的程序化交易;
一旦执行,你就应该忘记所有的金融市场的条条框框,你就是一个傻瓜执行者,聪明人在金融市场上不一定能生存,傻子在金融市场也不一定被淘汰。
怎么实现程序化交易?
1、交易策略的设计
首先要明确交易策略的属性(趋势型、波动性、套利型…),也可以是以上多种简单交易模式的综合应用,然后根据所要交易的品种价格波动特性和所要交易的周期来制定交易策略,交易策略中设定目标利润和允许最大亏损,以及具体止盈止损点的设置。
2、模型的编写
首先要选择一个程序化交易平台,目前国内较为流行的程序化交易软件包括文化的赢智,交易开拓者(TB)以及金字塔等等,不同的交易软件程序语言具有不同的特点,包括语句语法结构、函数构造等都有所不同,投资者结合自身选择一种语言便可,然后将自己的交易策略通过计算机语言来实现。以文华赢智程序化交易平台为例,下面的程序代码为一个简单的波动性突破的交易策略,波动性的定义为:最高价与最低价、当根bar的最高价与上一收盘价、当根bar的最低价与上一收盘价,这三组价格差额的最大者即为该品种的波动性值,波动性既可以进行横向比较品种间的波动性水平,也可以用于纵向判断价格波动的异常,并作为入市信号的触发器,具体操作为:若当前价格波动突破此前波动平均水平时,开仓进场;当前价格波动回落合理范围内之后进行平仓处理。
3、模拟交易
投资者可以通过使用程序化交易软件对自己的交易策略进行模拟交易测试,以便于投资者对自己的交易思想进行评判和改进,在进行仿真测试时需要注意一下几点:回测的bar周期要与策略制定初期相吻合;回测的时期长短的选择,一般来讲回测效果较好的策略对近期行情有较好的指导性;测试报告的分析以及对仿真测试的理解,在测试报告当中要对最终收益率、资金最大回撤、收益风险比、连续亏损次数等多项指标综合考虑。
4、参数优化
对参数的优化要注意一下几点:
(1)、优化所用为历史数据,对未来的指导性强弱还有待于探讨;
(2)、模型开发要有理论基础,不能依赖于参数最优化;
(3)、回测中长期的最优化参数,或许对短期行情来讲是一个不错的选择;
(4)、过度最佳化的参数对后市的指导性不一定最好;
(5)、要考虑交易成本和滑移价差对投资结果的影响。
5、实盘交易
在实盘交易之前,建议投资者先进行模拟实盘跟踪交易,观察交易策略的稳定性后再进入实盘交易,特别是对于投资经验较少的投资者来说更为重要。