🚀 AI 一键生成 joinquant 策略代码

聚宽模拟交易中 9:25 后 current_data[].last_price 价格不符怎么办?

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

问题描述

current_data[].last_price?

请教:有限位模拟时, 9:25后, 以开盘价委托,模拟交易委托价格正常。 但用current_data[stock].last_price取最新价, 与实际不符?请问这个是后复权价么?要取不复权最新价如何取?

解决方案

您好!在 JoinQuant 聚宽平台中遇到 current_data[stock].last_price 价格与实际不符的情况,主要原因与获取时间以及复权设置有关。以下是详细的解答和处理方法:

1. 为什么 9:25 后 last_price 与实际不符?

根据聚宽 API 文档规定,通过 get_current_data() 获取的 last_price 属性:

  • 在 09:30 之前获取,返回的是昨日收盘价
    因此,您在 9:25 之后(集合竞价期间)调用 last_price,拿到的并不是当天的最新撮合价,而是昨天的收盘价,所以会感觉与实际不符。

2. 这个价格是后复权价吗?

默认情况下,聚宽平台提供的数据是前复权价格(或者在未开启真实价格的模拟盘中,是基于模拟交易创建日期的调整价格),不是后复权价

3. 如何获取当天的开盘价?

如果您想在开盘前获取当天的集合竞价开盘价,应该使用 day_open 属性,而不是 last_price

  • 获取方法current_data[stock].day_open
  • 注意:当天的开盘价至少需要在 09:27 分之后才可获取到。

4. 如何获取不复权的真实最新价?

为了在模拟交易和回测中获取真实的、不复权的价格,强烈建议您在初始化函数中开启动态复权(真实价格)模式。开启后,您通过订单详情和持仓看到的都是真实价格。

设置方法:
initialize(context) 函数中添加以下代码:

set_option('use_real_price', True)

综合代码示例

def initialize(context):
    # 1. 开启真实价格模式,确保交易和获取的现价是不复权的真实价格
    set_option('use_real_price', True)
    
    # 设定在 9:30 运行(模拟盘实际会在 9:27~9:30 之间运行)
    run_daily(market_open, time='09:30')

def market_open(context):
    stock = '000001.XSHE'
    current_data = get_current_data()
    
    # 2. 获取当天的开盘价(9:27之后有效)
    today_open = current_data[stock].day_open
    
    # 3. 获取最新价(9:30之前是昨收,9:30之后是最新价)
    last_price = current_data[stock].last_price
    
    log.info(f"股票 {stock} 当天开盘价: {today_open}, 最新价/昨收价: {last_price}")

总结:

  • 9:30 前要取开盘价,请在 9:27 后使用 current_data[stock].day_open
  • 要确保价格为不复权的真实价格,请务必在 initialize 中调用 set_option('use_real_price', True)