🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

JoinQuant 聚宽量化平台中 use_real_price 的含义是什么?

joinquant | 发布时间: 2026/6/24
以下内容由 EasyQuant 生成。

问题描述

use_real_price的含义是什么?

新人入坑,感谢指导
如何理解set_option的 'use_real_price'

解决方案

在 JoinQuant (聚宽) 量化平台中,set_option('use_real_price', True) 是一个非常重要且官方强烈建议开启的设置项。它用于设置是否开启动态复权(真实价格)模式

简单来说,它的核心作用是决定你的策略在回测和模拟交易时,是使用真实的未复权价格进行撮合交易,还是使用前复权价格进行撮合交易

以下是详细的解析:

1. 开启真实价格模式 (True) 的含义与影响

当你在 initialize 函数中设置 set_option('use_real_price', True) 时:

  • 真实价格撮合:回测和模拟交易过程中,每天看到的当天价格都是真实的(不复权的)。系统会使用真实的价格进行下单撮合,你在交易详情和持仓详情里看到的也都是真实价格。这完全符合真实的交易场景。
  • API 获取数据依然便捷:为了让编写代码简单,通过 historyattribute_historyget_price 等数据获取 API 拿到的,依然是基于当天日期的前复权价格。这样你在计算均线、技术指标时不需要自己手动处理复权跳空缺口。
  • 自动处理分红送股:每到新的一天,如果持仓中有股票发生了送股或者分红,对应的股数或现金会自动在你的账户(context.portfolio)中体现,完美模拟真实账户的除权除息。
  • 避免未来函数:这是最重要的一点。使用真实价格撮合,回测到历史某一天,就使用那一天的真实价格;如果需要复权数据,使用的是那一天的复权因子对之前的价格进行前复权。全程不使用未来的数据,有效避免了“未来函数”。

2. 关闭真实价格模式 (False) 的弊端

如果不开启(默认是 False,主要是为了兼容早期旧策略):

  • 违背真实场景:系统会选定一个日期(通常是建立回测的日期)作为基准,回测过程中所有的价格都是基于此日期的前复权价格。这意味着你可能会用一个历史上根本不存在的“前复权价格”(比如几毛钱甚至负数)去下单,这严重违背了真实的交易规则(例如A股买入必须是100的整数倍,价格不同能买入的数量完全不同)。
  • 回测结果不一致:不同的日期建立的回测跑出来的结果可能会有差异,因为这两次回测之间如果股票发生了拆合或者分红,会导致回测中看到的前复权价格不一致。

3. 官方建议与代码示例

官方强烈建议您开启动态复权(真实价格)模式,进行模拟与回测!

开启方式:
只需在策略的 initialize 初始化函数中加入一行代码即可:

def initialize(context):
    # 开启真实价格(动态复权)模式
    set_option('use_real_price', True)
    
    # 其他初始化代码...
    g.security = '000001.XSHE'

4. 新手避坑注意事项

  • 不要跨日期缓存 API 数据:因为开启后,你在不同日期调用 history 等 API 返回的前复权价格可能是不一样的(因为基准日变了)。所以,不要把今天获取的历史数据存到全局变量里留到明天去用,每天需要数据时重新获取即可。
  • 获取昨日真实价格:如果你确实想通过 history 拿到昨天的真实价格,需要用取得的前复权价格除以复权因子(factor)。

总结:作为新人,写策略的第一步,请务必在 initialize 中写上 set_option('use_real_price', True),这能让你的回测结果更贴近实盘,少走很多弯路。