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

如何在 joinquant 中使用 get_extras 接口识别 ST 股票与退市风险?

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: joinquant 数据 API:利用 get_extras 动态识别 ST 与退市风险股票

Question: 如何通过 joinquant 的 get_extras 接口获取历史股票的 is_st 标记?

解决方案

在聚宽(joinquant)量化平台中,为了避免策略买入存在退市风险或财务异常的 ST、*ST 股票,可以使用 get_extras 接口获取历史的 is_st 标记。

一、get_extras 接口简介

get_extras 接口用于获取指定标的在一段日期内的额外数据,如 ST 状态、基金净值、期货结算价等。

语法:

get_extras(info, security_list, start_date='2015-01-01', end_date='2015-12-31', df=True, count=None)
  • info: 设为 'is_st',用于查询标的是否为股改 S、ST、*ST 和退市整理期标的。
  • security_list: 股票代码列表(如 ['000001.XSHE', '000018.XSHE'])。
  • start_date / end_date: 开始和结束日期。
  • count: 获取 end_datecount 个交易日的数据(与 start_date 二选一)。
  • df: 返回 pandas.DataFrameTrue)还是 dictFalse)。

二、代码示例

1. 获取特定股票在指定时间段内的 ST 状态

from jqdata import *

# 查询指定股票在历史日期的 ST 标记
stocks = ['000001.XSHE', '000018.XSHE']
st_df = get_extras('is_st', stocks, start_date='2020-01-01', end_date='2020-01-05')
print(st_df)

输出结果(DataFrame)

date 000001.XSHE 000018.XSHE
2020-01-02 False True
2020-01-03 False True

2. 在策略回测中过滤股票池中的 ST 股票

在编写量化策略时,通常会在开盘前或选股逻辑中过滤掉当前处于 ST 状态的股票:

import jqdata

def filter_st_stocks(stock_list, current_date):
    """
    过滤给定股票列表中在 current_date 为 ST 的股票
    """
    # 获取前一天的 is_st 标记避免未来函数(或使用当前日期)
    st_data = get_extras('is_st', stock_list, end_date=current_date, count=1)
    
    if not st_data.empty:
        # 获取最后一天(即 current_date)的 ST 状态
        is_st_series = st_data.iloc[-1]
        # 筛选出非 ST 股票
        non_st_stocks = is_st_series[is_st_series == False].index.tolist()
        return non_st_stocks
    return stock_list

另外,在实盘或回测盘中,也可以直接使用 get_current_data() 获取当天的实时 ST 状态:

current_data = get_current_data()
# 检查单只股票是否为 ST
is_st = current_data['000001.XSHE'].is_st

三、注意事项

  1. 无未来函数get_extras('is_st', ...) 会严格返回历史指定日期的 ST 状态,不会带入未来的复牌或变光标记,非常适合回测使用。
  2. 退市整理期is_st 标记同时包含 S、ST、*ST 及退市整理期的股票,可以一次性避开绝大多数有退市风险的标的。