3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在聚宽(joinquant)量化平台中,为了避免策略买入存在退市风险或财务异常的 ST、*ST 股票,可以使用 get_extras 接口获取历史的 is_st 标记。
get_extras 接口用于获取指定标的在一段日期内的额外数据,如 ST 状态、基金净值、期货结算价等。
get_extras(info, security_list, start_date='2015-01-01', end_date='2015-12-31', df=True, count=None)
'is_st',用于查询标的是否为股改 S、ST、*ST 和退市整理期标的。['000001.XSHE', '000018.XSHE'])。end_date 前 count 个交易日的数据(与 start_date 二选一)。pandas.DataFrame(True)还是 dict(False)。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 |
在编写量化策略时,通常会在开盘前或选股逻辑中过滤掉当前处于 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
get_extras('is_st', ...) 会严格返回历史指定日期的 ST 状态,不会带入未来的复牌或变光标记,非常适合回测使用。is_st 标记同时包含 S、ST、*ST 及退市整理期的股票,可以一次性避开绝大多数有退市风险的标的。