动态复权也作用于指数上么
请教各位,设置动态复权set_option('use_real_price', True)时是只作用于股票还是也包括指数呢?
问题描述
解决方案
明确地说,设置动态复权 set_option('use_real_price', True) 对指数是不生效的(或者说没有意义)。
为什么对指数不生效?
- 指数本身的特性:股票指数(如沪深300、上证50等)在编制和计算时,交易所已经自动处理了成分股的分红、配股、拆分等除权除息事件。因此,指数的点位本身就是连续的,不存在“复权”的概念。
- 数据获取结果:无论您是否开启
use_real_price,或者在获取数据时fq参数设置为'pre'、'post'还是None,获取到的指数历史价格数据都是完全一样的。
use_real_price 的实际作用范围
根据 JoinQuant 官方文档,set_option('use_real_price', True) 的作用范围如下:
- 股票(Stock):完全生效且强烈建议开启。开启后,回测和模拟交易将使用真实的未复权价格进行撮合,并在发生分红送转时自动调整账户的持仓数量和现金,从而完美避免“未来函数”并还原真实交易场景。
- 场内基金(Fund):生效,但不建议开启。因为场内基金在拆分/合并时除权日披露不标准,目前采用的是折算基准日,和实际除权日可能有差异,容易导致计算误差。
- 期货(Futures):不生效。期货合约不存在分红派息,因此不需要复权。
- 指数(Index):不生效。如前文所述,指数本身不需要复权。
总结
在编写策略时,如果您操作的是股票,强烈建议在 initialize 函数中加入 set_option('use_real_price', True)。如果您只操作指数(例如获取指数作为择时信号),这行代码写与不写都不会对指数的数据产生任何影响。