3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)量化交易平台中,股票复权模式的选择直接决定了回测结果的真实性与严谨性。默认的传统前复权模式容易引入未来函数,而开启动态复权模式(真实价格模式)则是避免此类问题的最佳实践。
在策略的 initialize(context) 函数中调用以下设置即可开启动态复权(真实价格)模式:
def initialize(context):
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
当通过 set_option('use_real_price', True) 启用真实价格模式后,系统在遇到股票拆分、合并或分红送股等除权除息(Corporate Actions)事件时,遵循以下自动调整逻辑:
context.portfolio.total_value)不受取整影响,零碎股份对应的资金会略微调整并补入可用现金(context.portfolio.available_cash)。history、attribute_history、get_price 等)时,系统返回的数据是基于当前运行日期进行前复权处理的价格。切勿跨日期缓存 API 返回的数据
由于不同交易日看到的前复权基准不同,同一历史日期在今天调用 API 和明天调用 API 拿到的前复权价格可能不一致。因此,不要将 history 或 get_price 返回的 DataFrame 存入全局变量 g 供次日使用。
历史真实价格的换算方法
如果需要在策略中计算昨天的真实不复权价格,可以通过获取前复权价格和复权因子(factor)进行换算:
s = '000001.XSHE'
df = attribute_history(s, 1, '1d', fields=['close', 'factor'])
# 昨天的真实价格 = 昨天的前复权收盘价 / 昨天的复权因子
real_close = df['close'][-1] / df['factor'][-1]
下单一手规则限制
开启真实价格后,实际买入时必须满足 A 股 100 股(一手)的整数倍限制。使用真实价格计算得出的可买股数与使用前复权价格计算的结果不同,这会让回测结果更贴近真实实盘。