🚀 AI 一键生成 qmt 策略代码

QMT Python API 指南:使用 get_open_date 获取股票上市日期

qmt | 发布时间: 2025/12/3
以下内容由 EasyQuant 生成。

问题描述

请问如何用代码获取一只股票的上市日期?

解决方案

在 QMT 平台中,获取一只股票上市日期最直接的方法是使用 ContextInfo.get_open_date() 接口。此外,也可以通过获取合约详细信息接口 ContextInfo.get_instrumentdetail() 来查看上市日期。

以下是具体的代码实现和说明。

方法一:使用 ContextInfo.get_open_date(推荐)

这是最简单直接的方法,返回值为 number 类型(格式为 YYYYMMDD)。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 定义股票代码,例如浦发银行
    stock_code = '600000.SH'
    
    # 调用接口获取上市日期
    # 参数:股票代码 (string)
    # 返回:上市日期 (number),格式如 19991110
    open_date = ContextInfo.get_open_date(stock_code)
    
    print(f"股票 {stock_code} 的上市日期是: {open_date}")

def handlebar(ContextInfo):
    pass

方法二:使用 ContextInfo.get_instrumentdetail

如果你不仅需要上市日期,还需要该标的的其他详细信息(如合约名称、最小变动价位等),可以使用此方法。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 定义股票代码
    stock_code = '000001.SZ'
    
    # 获取合约详细信息字典
    detail_dict = ContextInfo.get_instrumentdetail(stock_code)
    
    # 字典中 'OpenDate' 键对应的值即为上市日期
    # 注意:对于股票是 OpenDate,对于期货可能是 CreateDate,具体视品种而定
    if detail_dict:
        listing_date = detail_dict.get('OpenDate')
        stock_name = detail_dict.get('InstrumentName')
        print(f"股票名称: {stock_name}")
        print(f"上市日期: {listing_date}")
    else:
        print(f"未找到 {stock_code} 的详细信息")

def handlebar(ContextInfo):
    pass

接口说明

  1. ContextInfo.get_open_date(stockcode)

    • 参数: stockcode (string),如 '600000.SH'。如果不填,默认为当前主图代码。
    • 返回: number,表示上市日期的整数,例如 20170101
  2. ContextInfo.get_instrumentdetail(stockcode)

    • 参数: stockcode (string)。
    • 返回: dict,包含合约的详细信息。其中 OpenDate 字段代表 IPO 日期(股票)。

常见问题 (Q&A)

Q: get_open_date 返回的数据类型是什么?
A: 返回的是 number(整数)类型,格式为 YYYYMMDD(例如:19991110)。如果需要进行日期计算,可能需要将其转换为字符串或时间对象。

Q: 如果传入的股票代码不存在,会返回什么?
A: 如果代码无效或未找到数据,通常会返回 0 或 None,建议在代码中增加简单的判断逻辑。

Q: 这个接口支持期货或期权吗?
A: 支持。get_open_date 也可以用于获取期货合约或期权合约的上市/挂牌日期。

Q: 如何在回测中只在第一天获取一次上市日期?
A: 将代码写在 init(ContextInfo) 函数中即可,因为 init 函数在策略启动时只运行一次。如果写在 handlebar 中,会在每一根 K 线都执行一次,造成不必要的重复计算。