🚀 AI 一键生成 joinquant 策略代码

JoinQuant 策略开发:深入理解 data 对象属性(high_limit, paused)

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

问题描述

如何获取股票当日的涨停价和停牌状态?

解决方案

在 JoinQuant 聚宽平台中,获取股票当日的涨停价停牌状态,最常用且推荐的方法是使用回测环境专用 API get_current_data()

该函数返回一个字典对象,包含了指定标的在当前单位时间(天/分钟)的快照数据。

核心代码实现

以下是一个完整的策略示例,展示了如何在每日开盘时获取指定股票的涨停价和停牌状态:

# -*- coding: utf-8 -*-
def initialize(context):
    # 设定要查询的股票,例如:平安银行
    g.security = '000001.XSHE'
    # 每天开盘时运行
    run_daily(check_stock_status, '09:30')

def check_stock_status(context):
    # 获取当前单位时间的数据对象
    # 注意:get_current_data() 返回的是一个 dict,key 是股票代码
    current_data = get_current_data()
    
    # 获取指定股票的数据对象
    security_data = current_data[g.security]
    
    # 1. 获取涨停价 (high_limit)
    limit_up_price = security_data.high_limit
    
    # 2. 获取停牌状态 (paused)
    # 返回 True 表示停牌,False 表示正常交易
    is_paused = security_data.paused
    
    # 打印结果
    log.info("股票代码: %s" % g.security)
    log.info("今日涨停价: %s" % limit_up_price)
    log.info("是否停牌: %s" % is_paused)
    
    # 示例逻辑:如果未停牌且当前价格等于涨停价,则打印提示
    if not is_paused and security_data.last_price >= limit_up_price:
        log.info("注意:该股票当前已封涨停!")

关键属性说明

通过 get_current_data()[security] 获取到的对象包含以下关键属性:

  1. high_limit:

    • 含义: 当日的涨停价。
    • 类型: float。
    • 注意: 跌停价可以通过 low_limit 获取。
  2. paused:

    • 含义: 股票是否停止或者暂停了交易(包括停牌、未上市或退市)。
    • 类型: bool (True/False)。
    • 逻辑: 如果返回 True,则表示该股票当前无法交易。

注意事项

  1. 调用场景: get_current_data() 仅限在回测和模拟交易的策略代码中使用(如 handle_datarun_daily 等函数内),不支持在研究环境(Notebook)中直接调用。
  2. 数据获取机制: 为了提高回测速度,get_current_data() 返回的字典是按需获取的。只有当你访问具体股票代码(如 current_data['000001.XSHE'])时,系统才会去查询该股票的数据。
  3. 有效性: 返回的数据仅在当天有效,请勿跨日期缓存使用。

Q&A

Q: get_current_data() 能在研究环境(Notebook)中使用吗?
A: 不能。get_current_data() 是回测和模拟交易专用的 API。在研究环境中,如果需要查询历史停牌状态,可以使用 get_price 并检查成交量是否为 0,或者使用 get_extras 查询 is_st 等状态,但获取准确的历史涨跌停价建议使用 get_price 获取 high_limit 字段(需注意 get_pricefields 参数支持 high_limit)。

Q: 如果股票今天停牌,high_limit 会返回什么?
A: 即使股票停牌,high_limit 通常依然会返回一个数值(通常基于前一交易日收盘价计算),但此时 paused 属性为 True,且无法进行买卖操作。

Q: 如何获取跌停价?
A: 使用 low_limit 属性,例如 current_data['000001.XSHE'].low_limit