在量化策略开发过程中,个股上市日期是高频使用的基础数据:无论是筛选次新股标的、排除上市时间过短的新股,还是计算个股上市周期用于因子计算,都需要用到这个字段。
很多刚接触 QMT 的开发者会疑惑怎么快速获取单只股票的上市日期,其实在 QMT 体系中,只需要一行核心代码即可实现。本文分别针对 QMT 内置 Python 环境 和 原生 Python(xtquant)环境 两种场景,给出完整可运行的实现代码。
一、核心接口与代码规范
1.1 核心函数
两种环境都通过标的详情查询接口获取股票基础信息,返回结果为字典格式,其中 OpenDate 字段对应该股票的上市日期,是实现需求的核心字段。
1.2 股票代码规范
传入的股票代码需要遵循「代码 + 交易所后缀」的格式,不可省略后缀:
- 上证股票:后缀
.SS,示例:600570.SS - 深证股票:后缀
.SZ,示例:000001.SZ
二、方式 1:QMT 内置 Python 环境实现
该方式适用于直接在 QMT 客户端的策略编辑器中编写、运行策略,调用内置全局对象 C 访问数据接口,无需额外安装依赖。
完整可运行代码
bash
#coding:gbk
'''
内置Python环境 - 获取个股上市日期
运行环境:QMT客户端策略编辑器
'''
def init(C):
# 初始化变量,用于保存上市日期结果
IPOdate = str()
# 输入目标个股代码,可替换为自身需要查询的标的
singleStock = "000001.SZ"
# 核心接口:获取股票详情并提取上市日期字段
IPOdate = C.get_instrumentdetail(singleStock)['OpenDate']
# 格式化打印结果,增加异常处理避免类型报错
try:
print(f"{singleStock}的上市日期是{IPOdate[:4]}年{IPOdate[4:6]}月{IPOdate[6:]}日")
except TypeError:
# 兼容异常场景,强制转换为字符串类型
IPOdate = str(IPOdate)
print(f"{singleStock}的上市日期是{IPOdate[:4]}年{IPOdate[4:6]}月{IPOdate[6:]}日")
return
运行结果示例
bash
000001.SZ的上市日期是1991年04月03日
关键说明
def init(C)是 QMT 内置策略的固定初始化函数入口,参数C为内置全局对象,封装了行情、交易、标的查询等各类原生接口- 代码增加了
try-except异常处理,避免部分特殊标的返回值类型异常导致程序中断 - 内置环境返回的上市日期为连续字符串格式(如
19910403),通过字符串切片即可拆分出年、月、日
三、方式 2:原生 Python 环境实现(xtquant 库)
该方式适用于在本地 Python 环境中开发,通过 xtquant 库连接 QMT 客户端获取数据,灵活性更高,可结合 pandas 等数据分析库做批量处理。
前置准备
- 本地 Python 环境已安装
xtquant库 - QMT 客户端保持运行状态,且连接端口与代码中配置一致(默认端口通常为 58601)
完整可运行代码
bash
'''
原生Python环境 - 获取个股上市日期
依赖库:xtquant
'''
from xtquant import xtdata
# 连接QMT主程序,port参数需与客户端配置端口保持一致
xtdata.connect(port=58601)
# 初始化变量,保存上市日期结果
IPOdate = str()
# 输入目标个股代码,可自定义替换
singleStock = "000001.SZ"
# 核心接口:获取股票详情并提取上市日期
IPOdate = xtdata.get_instrument_detail(singleStock)['OpenDate']
# 格式化打印结果
print(f'{singleStock}的上市日期是{IPOdate[:4]}年{IPOdate[5:7]}月{IPOdate[8:]}日')
运行结果示例
bash
000001.SZ的上市日期是1991年04月03日
关键说明
- 必须先执行
xtdata.connect()建立与 QMT 客户端的连接,否则无法正常获取行情与标的数据 - 原生环境返回的上市日期为带分隔符的字符串格式(如
1991-04-03),因此切片位置与内置环境略有差异 - 该方式不受 QMT 客户端编辑器限制,支持批量遍历股票池、结合本地数据分析库做深度加工
四、开发注意事项
- 标的后缀不可省略 :必须带上
.SS/.SZ交易所后缀,否则接口无法识别标的,会返回空值导致报错 - 端口匹配 :原生 Python 连接时,
port参数必须和 QMT 客户端设置的端口一致,否则会连接失败 - 空值兼容:部分退市标的、未上市标的可能返回空值,实际策略开发中建议增加空值判断逻辑,提升程序鲁棒性
总结
两种方式都可以稳定获取个股上市日期,适配不同开发场景:
- 若你在 QMT 客户端内编写交易策略,直接使用内置 Python 方式即可,开箱即用
- 若你需要做本地化数据分析、批量处理多标的数据,推荐使用miniQMT原生 Python+xtquant的方式,扩展性更强
替换代码中的股票代码,即可快速测试对应标的的上市日期。
风险提示:量化交易存在策略失效、系统故障等风险,历史数据回测不代表未来收益,投资需谨慎。