- 前复权。新价格不动,老价格进行调整。可以看持仓成本
- 老价格发生成了变化,直接使用将引入了未来数据
- 可能导致以前的价格出现负数
- 后复权。老价格不动,新价格进行调整。可以看持有收益
- 可用于计算收益率
- 计算技术指标与使用习惯不对应
- 动态前复权。每天都为观察点,进行前复权,记录下最新一天结果,然后将所有最新一天结果合并。
- 最真实的应用场景
- 迭代速度慢
- 可用于计算指标
- rank(close),由于没有时序指标参与,所以直接计算,也不用复权。计算的结果取最后一行值保存与全量计算结果是一样的
- sma(close), 时序指标,需要动态复权然后计算
- sma(sma(close)). 取最后值进行拼接的操作应当只在最外层结果才做
- rank(sma(close)),可以将sma的结果取最后一行后拼接然后rank,与最后拼接结果一样
- sma(rank(close)), rank是否复权影响sma结果、如何做,还需考虑
- 指标都存在时序窗口期。
- 窗口期=1. 不受复权影响。以下简化成1()
- 窗口期>1. 需要动态复权。以下简化成2()
- 指标是嵌套使用的。
- 1(1())。不受复权影响
- 2(2())。需要动态复权
- 1(2())。内层先复权拼接,与最外层统一拼接结果一样。因为外层不改变最终结论
- 2(1())。复权影响1()前后的结果
- 动态复权,整体拼接。结构最统一
- 先提前取复权因子,截取到不需要复权部分,统一计算。
- 遇到要复权时进行大块循环
同指标或同原理指标,进行相对操作时,产生信号的时间是一样的,所以不需要进行动态前复权,只需要提前后复权即可。
例如:
- SMA快速和慢速,不同复权方式,金叉死叉发生的时间是不变的
- ATR,不同复权,绝对值不同,但与Close的相对比值是不变的。所以3倍ATR止损发生的时机也是一样的
- STD,同上
- 其它指标是否有此特性需要根据算法进行研究
所以,如果使用相对值,就可以统一后复权?需要写代码验证一下
- MA的CROSS,MA5/MA10,达到预期
- STDDEV10/STDDEV20, 达到预期
- VAR10/CLOSE**2, 达到预期,即VAR是STDDEV的二次方,所以收盘价也得二次方