在之前的TBQuant数据处理探索——后复权详解(上)中,我们介绍过,主力连续888的缺陷主要是由于合约数据在月变期间被强制切换,其价格因时间价值而存在较大差异。这种差异主要导致两个问题:
一、对于大部分趋势策略来说,换月的大跳空基本意味着出现交易信号,然而这个信号通常情况下都是无效的。
二、对于大部分指标来说,由于都需要计算过去一段时间的k线数据,导致换月以后用于计算的数据出错。
上图是kdj指标在换月时的变化。
导致这两个问题的核心原因其实是因为前后价格差太大。那么如果能把前后的价格差抹平,这两个问题自然会迎刃而解。
如何抹平差价?股票市场提供了一个好主意。股票常见高送转等操作,股价往往要重新计算,这个重新计算被称为复权。同样的思路我们也可以应用到期货里。
那么适用于复权有多种方法,从计算对象来分有前复权和后复权,从计算方式来分有差值复权和比值复权。? 888的正确恢复方法是什么呢
首先看计算对象,是指价格数据。作为还原对象的价格数据分为某个时间点前后差异较大的两部分。
在图形上,很明显,左右数据之间存在间隙节点。为了连接两边的数据,我们要么向下移动左边的数据,要么向上移动右边的数据。
如果是把左边的数据往下移,就被称为前复权,也就是对前面的数据进行修复处理。如果是把右边的数据向上移,那就被称为后复权,也就是对后面的数据进行修复处理。's两种复职方式的实际效果是一样的。
由于程序化模型的运行机制是从左到右运行,那么前复权会导致历史数据被修改,必须重新计算前一个模型留下的信号记录,这意味着当你运行到一个加权节点时,你必须返回并再次加权前一个数据,并再次运行计算。这使得模型的运行机制非常复杂,效率低下。
比较而言,后复权的运行高效很多。's预恢复通常用于恢复次数较少的数据。比如股票转让的高频一般不会很高,而一年三次的期货交易所显然不适合预复权。
其次,我们来看看差权和比权。以差值复权顾名思义,将节点前后的数字取一个差值,然后将需要复权的数据统一加减这个数值。为例,如果节点前的价格是2500,节点后的价格是3000,那么差价就是3000-2500=500。我们将处理以下数据:
标准差是用来描述一组数组的离差的指标。如果一组数据是连续的,它们之间的差异很小,那么标准差就会很小,接近于0。反之,如果一组数据之间的差距明显,标准差就会过大。
从上表可以看出,节点前后数据的标准差比差值加权后高出近20倍,说明加权后确实在很大程度上缩小了数据差距。
但是差值复权对于期货品种来说却有致命的缺陷,那就是期货品种都有较为固定的基差,对于正向市场的连续差值复权会导致最后的价格变成负值。
例如,在第一个月变更时:
在第二个月的变更中,02的合同价格从第一个月的1200下降到950:
在第三个月的变动中,03的合约价格从第二个月变动的1200下降到1050:
第二个主合约的价格在三次改变月份时为1200,但在恢复差额后,价格从1000降至750和600,长此以往,复权价格就会降至负值,这样会对测试报告和后期计算带来很多困难。.但不存在恢复后比率的价格降至负值的情况。
根据上文总结,商品能选择的最佳复权方案,只能是向后比值复权。