3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant (聚宽) 平台中,当您在 initialize 函数中开启了动态复权模式(即 set_option('use_real_price', True))后,系统在撮合交易和记录持仓时使用的都是真实价格(除权价格)。而为了方便策略编写,get_price、history 等数据获取 API 默认返回的是基于当前日期的前复权价格。
为了将系统记录的真实价格折算成前复权价格进行比较,您可以使用 API 提供的复权因子(factor)。
根据 JoinQuant API 文档的说明,API 返回的价格是前复权后的价格,利用 factor 可以算出原始价格(真实价格),公式为:
真实价格 = 前复权价格 / factor
因此,如果您已知真实价格,想要折算为前复权价格,公式为:
前复权价格 = 真实价格 * factor
您可以在获取价格数据时,同时获取 factor 字段,然后进行乘法运算。以下是具体的代码示例:
def handle_data(context, data):
security = '000001.XSHE'
# 假设这是系统记录的真实买入价格(例如从 context.portfolio.positions 中获取的 avg_cost)
# 这里为了演示,我们假设一个真实价格
real_price = 10.50
# 使用 attribute_history 获取前复权价格和复权因子
# 注意:获取当天的 factor 可以用 get_current_data() 或者获取最近的 history
df = attribute_history(security, 1, '1d', fields=['close', 'factor'])
if not df.empty:
current_factor = df['factor'][-1]
# 将真实价格转换为前复权价格
pre_fq_price = real_price * current_factor
log.info("真实价格: %.2f, 复权因子: %.4f, 折算的前复权价格: %.2f" % (real_price, current_factor, pre_fq_price))
# 这样您就可以将 pre_fq_price 与 get_price 获取的 'pre' 价格进行一致性比较了
factor,是将历史真实价格转换为站在那一天视角下的前复权价格的因子。factor 进行实时折算。