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

为什么 get_all_securities 返回的股票名称带有 ST 标识?

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

问题描述

get_all_securities 数据问题

df = get_all_securities(types=['stock'], date='2019-07-15')
结果:
600078.XSHG 它的display_name 中有‘ST’ 标识,此股当天10%涨停,不是ST股啊。
是数据有问题吗?

display_name name start_date end_date type
600078.XSHG ST澄星 STCX 1997-06-27 2200-01-01 stock

解决方案

这不是数据问题,而是 get_all_securities 函数的设计机制导致的。

根据 JoinQuant API 文档说明,get_all_securities 返回的 display_name(中文名称)和 name(缩写简称)只返回该标的在系统中的最新名称。也就是说,无论您传入的 date 参数是哪一天,返回的股票名称都是它现在的名字。如果该股票目前是 ST 股,那么即使您查询的是它尚未被 ST 的历史日期(如 2019-07-15),返回的名称依然会带有 'ST' 标识。

如何正确判断历史某一天是否为 ST 股?

如果您需要判断股票在历史特定日期是否为 ST 股,不能依赖 display_name,而应该使用专门的 API:

方法一:在回测/模拟交易中使用 get_current_data()

handle_data 或其他定时运行函数中,可以使用 get_current_data() 获取当天的 ST 状态:

def handle_data(context, data):
    current_data = get_current_data()
    is_st = current_data['600078.XSHG'].is_st
    print("是否为ST股:", is_st)

方法二:在研究环境或策略中使用 get_extras()

可以使用 get_extras 函数查询一段时间内的 ST 状态:

from jqdata import *

# 查询 600078.XSHG 在 2019-07-15 的 ST 状态
st_data = get_extras('is_st', ['600078.XSHG'], start_date='2019-07-15', end_date='2019-07-15')
print(st_data)

get_extras 返回的 DataFrame 中,值为 True 表示当天是 ST 股,False 表示不是。

总结:get_all_securities 适合用来获取股票列表和上市/退市日期,判断 ST 状态请务必使用 get_extrasget_current_data