3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 平台中,判断一只股票是否停牌主要使用 ContextInfo.is_suspended_stock() 函数。
ContextInfo.is_suspended_stock(stockcode)stockcode (字符串),格式为 代码.市场,例如 '600000.SH'。bool 类型。
True:表示该股票当前处于停牌状态。False:表示该股票当前处于正常交易状态(未停牌)。以下是一个完整的策略示例,展示了如何在 handlebar 函数中遍历股票池,并在下单前过滤掉停牌的股票。
# -*- coding: gbk -*-
def init(ContextInfo):
# 设置股票池,这里以浦发银行(正常)和某个可能停牌的股票为例
# 注意:实际运行时请根据当天情况设置股票池
stock_list = ['600000.SH', '000001.SZ']
ContextInfo.set_universe(stock_list)
# 设置账号(这里仅为示例,实盘需替换为真实账号)
ContextInfo.set_account('YOUR_ACCOUNT_ID')
def handlebar(ContextInfo):
# 获取当前周期对应的股票池
universe = ContextInfo.get_universe()
for stock_code in universe:
# 1. 判断是否停牌
is_suspended = ContextInfo.is_suspended_stock(stock_code)
if is_suspended:
print(f"股票 {stock_code} 今日停牌,跳过交易。")
continue # 跳过本次循环,不执行后续下单逻辑
# 2. 如果未停牌,继续执行策略逻辑
print(f"股票 {stock_code} 交易正常,正在计算信号...")
# 示例:简单的下单逻辑(仅作演示)
# 获取最新价
last_price = ContextInfo.get_market_data(['close'], stock_code=[stock_code], count=1, period='1d')
if not last_price.empty:
# 假设满足条件买入 100 股
# passorder(23, 1101, ContextInfo.accountID, stock_code, 5, -1, 100, ContextInfo)
pass
.SH 或 .SZ),否则函数可能无法正确识别。Q: ContextInfo.is_suspended_stock 在回测中能准确判断历史上的停牌吗?
A: 可以。在回测模式下,QMT 会读取历史行情数据中的停牌标记。只要本地下载了完整的历史日线数据和基础信息数据,该函数就能正确返回历史上某一天该股票是否停牌。
Q: 除了 is_suspended_stock,还有其他方式判断停牌吗?
A: 还可以通过 ContextInfo.get_full_tick(stock_code) 获取分笔数据,查看返回字典中的 stockStatus 字段,或者检查成交量(Volume)是否为 0(但在某些极端情况下,非停牌股票也可能无成交,因此不如 is_suspended_stock 准确)。官方推荐直接使用 is_suspended_stock。
Q: 如果股票临时停牌(盘中停牌),这个函数有效吗?
A: 有效。在实盘运行模式下,该函数基于实时行情推送的状态进行判断。如果股票在盘中突然停牌,行情状态更新后,该函数会返回 True。