🚀 AI 一键生成 qmt 策略代码

QMT 获取个股信息时 ExpireDate 出现 10000991 是什么意思?

qmt | 发布时间: 2026/5/25
以下内容由 EasyQuant 生成。

问题描述

xtdata.get_instrument_detail获取个股的ExpireDate的特殊值问题

xtdata.get_instrument_detail 获取个股信息时发现部分个股的 ExpireDate 为 10000991 但都是正常在市的股票,也没有什么异常状态,在迅投的官方文档中只找到 0 和 99999999 两个特殊值,有大佬知道 10000991 的状态码的具体含义么?

解决方案

在 QMT (迅投) 平台中,使用 get_instrument_detail 获取合约详细信息时,ExpireDate 字段代表的是退市日或者到期日

对于正常在市交易的股票,它们并没有确定的退市日期。因此,底层数据库在处理这些尚未退市的股票时,会赋予一个特殊的**占位符(无效日期)**来表示“无退市日”。

为什么会出现 10000991

  1. 无效日期标记:仔细观察 10000991 这个数字,如果按照 YYYYMMDD 的日期格式解析,它代表的是 1000年09月91日。显然,一个月不可能有 91 天。这种不合法的日期格式是底层 C++ 系统或数据源用来标记**“空值”或“未设置”**的一种特殊魔数(Magic Number)。
  2. 等同于正常在市:与官方文档中提到的 099999999 一样,10000991 同样代表该股票目前正常在市,没有退市计划
  3. 数据源差异:不同的交易所或不同的数据同步批次,可能会使用不同的默认值来填充空缺的退市日期字段,这就导致了你可能会同时看到 099999999 以及 10000991

代码处理建议

在编写量化策略时,为了避免这种特殊值对日期计算(如计算距离退市还有多少天)造成干扰,建议在代码中统一对 ExpireDate 进行清洗和过滤。

你可以编写一个辅助函数来判断股票是否正常在市:

def is_stock_active(expire_date):
    # 将常见的无效日期占位符统一视为正常在市
    invalid_dates = [0, 99999999, 10000991]
    if expire_date in invalid_dates:
        return True
    
    # 如果有具体的退市日期,可以进一步与当前日期比较
    # 这里假设 expire_date 是 int 类型的 YYYYMMDD
    import datetime
    current_date = int(datetime.datetime.now().strftime('%Y%M%d'))
    if expire_date > current_date:
        return True
        
    return False

# 使用示例
detail = ContextInfo.get_instrumentdetail('600000.SH')
expire_date = detail.get('ExpireDate', 0)

if is_stock_active(expire_date):
    print("该股票正常在市")
else:
    print("该股票已退市或即将退市")

总结10000991 只是一个表示“无退市日期”的底层无效值占位符,无需担心股票状态异常,在代码中将其与 099999999 同等对待,视为正常在市即可。