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

为什么在JoinQuant研究环境中获取的期货涨跌停价相同?

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

问题描述

涨停价和跌停价相同?

研究环境中:

from jqdata import *
import datetime
current_dt = datetime.datetime.now()
next_day = get_trade_days(current_dt, '2021-12-31')[1]
limit = get_price('AU2109.XSGE', end_date=next_day, frequency='1d', fields=['high_limit','low_limit'], count=1)
high_limit = list(limit['high_limit'])[-1]
low_limit = list(limit['low_limit'])[-1]
print(high_limit, low_limit)

在上午8:50,输出:
378.76 378.76
请问,到了今天收盘后,如15:00、20:00,数据能否恢复正常?

解决方案

出现涨停价和跌停价相同的情况,主要是因为您在代码中尝试获取**未来日期(next_day)**的数据。

原因分析

在您的代码中,next_day 被定义为当前日期的下一个交易日。当您使用 get_price 并将 end_date 设置为 next_day 时,由于该未来的交易日尚未发生,系统数据库中并没有该日的真实行情数据(包括涨跌停价)。

在这种情况下,系统可能会返回最后一次可用的快照数据或默认的填充值,导致 high_limitlow_limit 显示为相同的值(通常是前一交易日的收盘价或结算价)。

收盘后数据能否恢复正常?

  • 对于 next_day 的数据:即使到了今天的 15:00 或 20:00,明天的数据依然是不存在的。期货的下一交易日涨跌停价是根据今天的结算价计算的,通常在今天结算完成后(一般在下午或傍晚)交易所才会公布。但在 JoinQuant 的历史数据接口(如 get_price)中,通常只有在当天交易结束后,数据才会落库。
  • 对于今天的数据:如果您将 end_date 修改为今天(current_dt),在今天的数据更新后(通常是盘后),您可以获取到正确的今天涨跌停价。

正确的获取方法

如果您想获取今天的涨跌停价,应该将 end_date 设置为今天,而不是下一个交易日。此外,在回测或模拟交易中,推荐使用 get_current_data() 来获取当天的涨跌停价,因为它可以避免未来函数并获取实时的盘口限制。

在研究环境中,您可以这样修改代码来获取最近一个有效交易日的涨跌停价:

from jqdata import *
import datetime

# 获取当前时间
current_dt = datetime.datetime.now()

# 获取截至今天的最近一个交易日的数据
limit = get_price('AU2109.XSGE', end_date=current_dt, frequency='1d', fields=['high_limit','low_limit'], count=1)

high_limit = limit['high_limit'].iloc[-1]
low_limit = limit['low_limit'].iloc[-1]

print(f"涨停价: {high_limit}, 跌停价: {low_limit}")

总结:不要使用 get_price 去请求未来的日期。如果您需要预测或计算下一交易日的涨跌停价,需要根据交易所的规则,使用当天的结算价和规定的涨跌停比例自行计算。