🚀 AI 一键生成 joinquant 策略代码

JoinQuant 聚宽 get_current_data() 函数用法详解与 "not defined" 报错解决

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

问题描述

get_current_data()的用法

请问“get_current_data()函数的具体用法是怎样的,为什么我使用后显示” name 'get_current_data' is not defined“,是不是哪个包没引用?感谢回复!

解决方案

为什么会报错 name 'get_current_data' is not defined

出现这个报错通常是因为运行环境不对。在 JoinQuant 聚宽平台中,get_current_data()回测环境/模拟交易专用 API不支持在“投资研究”模块(Jupyter Notebook)中直接调用

  • 如果在研究环境中使用:系统会提示未定义,因为该函数依赖于回测引擎的上下文时间。如果需要在研究环境中获取当前行情,请使用 get_price()get_current_tick() 等支持研究环境的 API。
  • 如果在回测/模拟环境中使用:该函数是内置的,不需要额外 import 任何特殊的包(通常策略开头有 import jqdata 即可)。请检查是否拼写错误,或者是否在非交易时段的自定义函数中错误调用。

get_current_data() 的具体用法

get_current_data() 用于获取当前单位时间(当天/当前分钟)的涨跌停价、是否停牌、当天的开盘价等。回测时,通过其他 API 获取到的是前一个单位时间的数据,而 get_current_data() 可以获取当前时刻已知的数据。

1. 返回值说明

返回一个 dict(字典),其中 key 是股票代码,value 是拥有以下属性的对象:

  • last_price : 最新价(09:30之前获取返回昨日收盘价)
  • high_limit: 涨停价
  • low_limit: 跌停价
  • paused: 是否停止或者暂停了交易(停牌、未上市或者退市后返回 True)
  • is_st: 是否是 ST(包括ST, *ST),是则返回 True,否则返回 False
  • day_open: 当天开盘价(当天的开盘价至少09:27分之后才可获取)
  • name: 股票现在的名称(可用于判断是否快要退市等)
  • industry_code: 股票现在所属行业代码

2. 代码示例

在回测策略的 handle_data 或定时运行函数中调用:

import jqdata

def initialize(context):
    g.security = '000001.XSHE'
    # 每天 10:00 运行
    run_daily(market_open, time='10:00')

def market_open(context):
    # 获取当前数据
    current_data = get_current_data()
    
    # 获取特定股票的数据对象
    stock_data = current_data[g.security]
    
    # 打印相关信息
    print(f"股票: {g.security}")
    print(f"最新价: {stock_data.last_price}")
    print(f"涨停价: {stock_data.high_limit}")
    print(f"跌停价: {stock_data.low_limit}")
    print(f"是否停牌: {stock_data.paused}")
    print(f"当天开盘价: {stock_data.day_open}")
    
    # 实际应用:如果未停牌且未涨停,则买入
    if not stock_data.paused and stock_data.last_price < stock_data.high_limit:
        order_value(g.security, 10000)

3. 注意事项

  1. 按需获取加速:为了加速,返回的 dict 里面的数据是按需获取的。初始是空的,当你使用 current_data[security] 时,该 security 的数据才会被获取。
  2. 不要跨日缓存:返回的结果只在当天有效,请不要存起来到隔天再用。
  3. 调用时机:该函数仅仅限在要获取数据的标的在交易时段时调用。