问题描述
我看好多策略都开启了,复权模式
开启动态复权模式(真实价格)
set_option('use_real_price', True)
想问一下,如果开启了复权模式,那是不是还应该考虑除权,还是不用考虑了。
开启复权交易和前复权交易,对应的收益有区别吗?
解决方案
在 JoinQuant 聚宽平台上,使用 set_option('use_real_price', True) 开启动态复权(真实价格)模式是非常推荐的做法。针对您的问题,以下是详细的解答:
1. 开启复权模式后,还需要考虑除权吗?
不需要手动考虑除权除息。
当您开启了动态复权(真实价格)模式后,系统会在后台自动为您处理除权除息事件:
- 自动调整账户:每到新的一天,如果您的持仓中有股票发生了送股、转增股本或者现金分红,系统会根据复权因子自动在您的账户中增加相应的现金或调整持仓的股票数量。
- 获取数据的便利性:为了让您编写策略代码更简单,通过
history、attribute_history、get_price等 API 获取到的历史数据,系统会自动返回基于当前回测日期的前复权价格。这意味着您在计算均线、突破等技术指标时,价格曲线是平滑连续的,不会因为除权产生向下的跳空缺口,您可以直接使用这些数据进行逻辑判断。
2. 开启真实价格交易和前复权交易,对应的收益有区别吗?
有区别,而且区别可能很大。强烈建议使用真实价格(动态复权)模式。
- 传统前复权回测模式(
use_real_price = False)的缺陷:- 未来函数问题:传统前复权是使用回测结束时(或今天)的复权因子去调整历史价格。这意味着在历史的某个时刻,您使用了未来的分红送股信息来计算价格,这引入了严重的“未来函数”。
- 交易数量失真:A股交易规定买入数量必须是100的整数倍(一手)。由于前复权价格通常低于当时真实的交易价格,使用前复权价格计算出的可买入股数会多于真实情况,导致资金利用率和最终收益计算出现偏差。
- 真实价格(动态复权)模式(
use_real_price = True)的优势:- 避免未来函数:回测到历史的某一天,系统就使用那一天的真实价格进行撮合成交。如果需要获取历史数据计算指标,系统只使用截至那一天的复权因子进行前复权,绝不使用未来的数据。
- 贴近真实交易:您在交易详情和持仓详情里看到的都是当时的真实价格,买入数量的计算也完全符合真实市场的资金约束和一手100股的规则。
总结:
开启 set_option('use_real_price', True) 后,您既享受了前复权数据带来的指标计算便利,又保证了撮合成交和账户结算的绝对真实性。因此,强烈建议在所有的股票模拟与回测中都开启此选项。