3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化投资中,规避具有退市风险或财务异常的 *ST/ST/PT 股票是构建稳健选股策略的重要一步。QMT 平台提供了专门的接口 ContextInfo.get_his_st_data,用于获取某只股票的历史 ST 记录。本文将详细介绍该接口的使用方法,并展示如何在策略初始化时剔除历史上曾经被 ST 的股票。
ContextInfo.get_his_st_data(stockCode)
string 类型,股票代码,必须是带市场后缀的格式,例如 '000004.SZ' 或 '600000.SH'。dict(字典)对象,包含该股票的历史 ST 变动详情。其 key 通常为 'ST', '*ST', 'PT' 等。如果该股票历史上面从未被 ST,则返回空字典 {}。您可以在 init 函数中直接调用此接口来查看某只股票的历史 ST 状态:
#coding:gbk
def init(ContextInfo):
# 获取股票代码“000004.SZ”的历史 ST 记录
st_history = ContextInfo.get_his_st_data('000004.SZ')
print("000004.SZ 的历史 ST 记录为:", st_history)
# 判断是否曾经被 ST
if st_history:
print("该股票历史上曾被 ST/PT/ *ST")
else:
print("该股票历史清白,从未被 ST")
在实际编写选股策略时,我们通常需要对整个股票池(如沪深300)进行过滤。以下是一个完整的 QMT 策略框架,展示了如何在初始化时过滤掉历史上任何曾被 ST 的股票:
#coding:gbk
def init(ContextInfo):
# 1. 设定初始股票池(以沪深300成分股为例)
# 注意:获取历史成分股需要下载历史数据
raw_universe = ContextInfo.get_stock_list_in_sector('沪深300')
clean_universe = []
# 2. 循环遍历股票池,剔除历史上曾被 ST 的股票
for stock in raw_universe:
st_dict = ContextInfo.get_his_st_data(stock)
# 如果返回的字典为空 {},说明历史清白,保留该股票
if not st_dict:
clean_universe.append(stock)
else:
print(f"剔除历史 ST 股票: {stock}, 历史记录: {st_dict}")
# 3. 重新设定过滤后的安全股票池
ContextInfo.set_universe(clean_universe)
print(f"原始股票池数量: {len(raw_universe)},过滤后安全股票池数量: {len(clean_universe)}")
def handlebar(ContextInfo):
# 获取当前过滤后的股票池
current_universe = ContextInfo.get_universe()
# 在此处编写您的核心交易逻辑
pass
get_his_st_data 接口前,请确保已通过 QMT 客户端的 “数据管理” 功能补充了对应品种的历史数据与基础数据,否则可能无法正确获取历史 ST 状态。