Lyndon的量化修炼之路——浅谈趋势指标取参方法
//文章内容为中州期货上海分公司所有
//期市妖风大,小心被刮飞。本文不构成任何实质性建议,也不对任何依此进行的交易结果负责
目前市场多许多投资者仍然依托趋势指标作为交易参考,其中,指标计算过程中给定的参数对交易结果具有相当大的影响,恰当的参数可以让本来可谓之“平凡”的指标,拥有出彩的效果,有时甚至用“差之毫厘失之千里”来形容也一点不夸张。
但往往我们很难掌握估计合理参数的方法。因为通过调整参数来获得超额收益,也意味着我们仍可能为此承受巨大的亏损,特别对于程序化交易而言,交易者必须无条件地相信计算机给出的交易信号,直到发现平仓时账户中的银子扎扎实实地减少了为止。
至少针对趋势类交易策略而言,似乎没有比利用历史数据作为测试样本来取参更好的方法,而落实到具体操作方法,还有许多变数。我也希望在这里简单地分享一点自己的想法,化繁为简,从头出发,当然我不会对一些方法的原理过多阐述,而是尽可能地去分析不同方法的应用结果,以及一些后续改进的思路。
首先仍然需要确定一个测试对象:
项 | 值 |
---|---|
交易品种 | 螺纹钢主力连续合约 |
期初余额 | 50,000元人民币 |
保证金比例 | 8% |
手续费 | 1%% |
持仓手数(比例) | 3手(约25%) |
策略 | 双均线策略 |
K线周期 | 30MIN |
取参的方法有以下几种:
- 对称穷举
- 非对称穷举
- 损益补偿
- 平稳收益
限于时间和精力,除去第4种方法外,分别测试以月份和以周为计算区间的结果,且总时间跨度相同(7、8、9月);第4种仅以月为计算区间,时间跨度为2018年1月至10月。同时也为了简化分析过程,突出方法本身,在此仅用收益率大小评价参数好坏,同时加快计算速度,参数的阈值限定为[5,25]。
对称穷举
对历史数据使用参数穷举,来得到最优参数组合的方法由来已久,而对称则是通过测试相同区间内的策略表现结果,并将穷举得到的参数应用于下一个相同时间区间内。
以月为测试区间的期末净值为1.0261,收益率2.61%,年化10.44%;以周为单位的期末净值0.7390,收益率-5.22%,年化-20.88%,净值曲线如下图所示:穷举样本这一类的思路大约是希望在后一区间内延续之前的趋势,如果计算的时点预期是位于一个趋势的中间位置,这样的方法会得到比较好的结果。但显然我们往往难以捕捉到一个趋势在什么地方结束,甚至很难说它从什么时候开始。
非对称穷举
正是由于实际操作中我们很难去判断一个趋势开始和结束的节点,因此与其去捕捉一个趋势,不如去追随一个趋势,用数量较大的样本去预测一个远小于前者的时间区间,以期追随一段趋势的末端。
这里用1月~6月作为样本预测7月的参数,以此类推;用每周一向前60天作为样本预测当周的参数。以月为测试区间的期末净值为0.7540,收益率-24.60%,年化-98.40%;以周为测试区间的期末净值为1.0498,收益率为4.98%,年化19.92%,净值曲线如下图所示:从右边的曲线来看,由于相邻两组参数计算所使用的样本有很大部分重叠,因此在同一趋势下表现比对称预测更加相近。
损益补偿
前两种方法有一个始终难以解决的问题,由于趋势策略自身的特点,不同的参数组合的表现,与单次趋势持续的时间长度有较为明显的关联,那么去预测趋势结束的节点变成了关乎策略最终效果的重要因素。
事实上,我们利用程序化交易的初衷,就是尽可能地抛弃主观观点对行情数据判断的干扰。站在这个角度上,单纯地利用数据结果进行分析,观察样品穷举的净值曲线,我们似乎发现一些端倪:不论在那种时间周期上,收益曲线可以近似地看作一个正弦(或余弦)曲线,或者是其中的一部分。
所以,这里给出一个假设:在期货交易这个零和游戏中,一个固定时段内相同策略的投资收益,多次重复后会趋近于0。照此逻辑,我们在穷举的时候不仅不应该使用上一区间内得到的最优参数,反而应该使用较差的参数。在这里穷举的区间设置为对称的。
以月为测试区间的期末净值为0.9096,收益率-9.04%,年化-36.16%;以周为测试区间的期末净值为0.9618,收益率为-3.82%,年化-15.28%,净值曲线如下图所示:
损益补偿的方法也有自己的弊端,因为我们并不能确定当前计算时点位于大周期的哪一个位置,而用“最差组合”去预测下一周期则是默认了当前位于收益曲线的极值处,此时点越接近极值位置,预测的效果越好。
这个缺陷的主要原因来自于我设定了样本和预测的区间相同,事实上并不必要这样处理,我的同事也提出了一个可能可行的观点:向前分析一个足够长的范围,去发现(或者拟定)一个正弦形态的收益曲线,从而确定当前时点所处的位置,从而确定补偿的方法。但仍碍于有限的时间和精力,截止成文,尚未对这一方法进行测试。
平稳收益
在穷举参数的过程中,我发现总有一些参数组合在相邻的2个或以上的区间内,始终保持相同的收益水平,尽管行情趋势在不断变化,那么是否在一定时间范围内,存在一组参数可以使得策略能够获得较为稳定的表现。如果存在,在这一段平稳收益的末端,该参数组的收益水平可能会继续延续。
因此设定,在前N个相同时间区间内(N>=2),找出正收益最平稳的参数组,用于下一个相同时间区间。如果不存在这N个区间内均为正收益的平稳参数组,则取最近单位区间内为正收益的参数组。
这里用N个区间内所有参数组的收益中的最大最小值作为数值的宽度,用不同组合的收益率所处位置的差值来描述两者是否接近,将该差值称为偏差系数。同时,如果偏差系数在一个合理的范围内出现多组平稳收益组合,则应取收益尽可能高的组合。因为在测试过程中发现,在这一范围内样本收益率与实际收益率呈正相关,在这次测试中,将偏差系数范围确定为(0,0.15]。这里测试N=2,即用1711和1712来求得平稳收益,并在1801上应用测试,以此类推。测试结果显示期末净值为1.1573,收益率15.73%,年化18.88%,净值曲线如下:
在测试过程中发现,每当用于测算的样本和预测的区间不处于同一趋势范围时,往往出现负收益。
小结
- 由于指标本身跟随趋势的变化,对于指标参数的预测也应该判断趋势的延续长度和计算时点在趋势中所处的位置;
- 对称穷举适用于计算时点接近与趋势中间位置,非对称穷举适用于计算时点右侧可以大致延续左侧的趋势;
- 损益补偿需要判断计算时点是否处于收益曲线的极值处,越接近极值处,预测效果越好;
- 平稳收益需要避免计算时点处于趋势转变的节点,时点右侧尽可能地可以被左侧趋势描述。
改进方向
- 非对称穷举的时间范围可以做一些合理化调整,在穷举取参的过程中加入对趋势的判断;
- 损益补偿可以不采用对称观点;
- 平稳收益可以对N值进行合理化调整;
- 通过交叉判断来避免计算时点恰好处于趋势转变节点的附近。