🚀 AI 一键生成 qmt 策略代码

QMT 期权 API:如何通过期权代码反查标的股票?

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

问题描述

如何通过期权代码查询标的股票?

解决方案

在 QMT 中,可以通过 ContextInfo.get_option_detail_data(optioncode) 接口来获取期权的详细信息,其中包括标的证券的代码和市场。

以下是具体的实现步骤和代码示例。

核心逻辑

  1. 调用 ContextInfo.get_option_detail_data(optioncode),传入期权代码(如 '10001506.SHO')。
  2. 该函数返回一个字典(dict)。
  3. 从字典中提取 OptUndlCode(标的证券代码)和 OptUndlMarket(标的证券市场)。
  4. 将两者拼接成 QMT 标准格式(代码.市场),以便后续调用行情或交易接口。

代码实现

# -*- coding: gbk -*-

def init(ContextInfo):
    # 示例:输入一个期权代码 (例如:50ETF购1月2200)
    # 请确保该合约在当前市场环境中存在,或者使用您想查询的实际代码
    option_code = '10001506.SHO' 
    
    # 获取期权详细信息
    detail_data = ContextInfo.get_option_detail_data(option_code)
    
    # 打印原始数据以便查看所有字段(调试用)
    # print(detail_data)
    
    if detail_data:
        # 提取标的代码 (例如: 510050)
        undl_code = detail_data.get('OptUndlCode')
        
        # 提取标的市场 (例如: SH)
        undl_market = detail_data.get('OptUndlMarket')
        
        # 拼接成 QMT 标准格式 (例如: 510050.SH)
        full_undl_code = f"{undl_code}.{undl_market}"
        
        print(f"期权代码: {option_code}")
        print(f"标的证券代码: {undl_code}")
        print(f"标的证券市场: {undl_market}")
        print(f"QMT标准标的代码: {full_undl_code}")
        
        # 进一步获取标的名称验证
        undl_name = ContextInfo.get_stock_name(full_undl_code)
        print(f"标的名称: {undl_name}")
        
    else:
        print(f"未找到期权 {option_code} 的详细信息,请检查代码是否正确或是否已下载合约列表。")

def handlebar(ContextInfo):
    pass

返回字段说明

ContextInfo.get_option_detail_data 返回的字典中,与标的相关的关键字段如下:

字段 Key 说明 示例值
OptUndlCode 期权标的证券代码 '510050'
OptUndlMarket 期权标的证券市场 'SH'
OptUndlRiskFreeRate 期权标的无风险利率 数值
OptUndlHistoryRate 期权标的历史波动率 数值

注意事项

  1. 数据补充:查询历史期权合约或非主力合约时,请确保在 QMT 客户端的【数据管理】中下载了对应的合约列表和基础数据。
  2. 代码格式:拼接后的代码(如 510050.SH)可直接用于 get_market_data_expassorder 等函数。

Q&A

Q: 如果传入的期权代码不存在或错误,函数会返回什么?
A: 如果代码无效或本地没有该合约数据,get_option_detail_data 通常会返回空字典 {}None。代码中应增加判断逻辑(如示例中的 if detail_data:)以避免报错。

Q: 这个接口支持期货期权吗?
A: 支持。对于期货期权(如 IOMO 品种),该接口同样会返回标的期货合约的代码和市场。

Q: 如何反过来通过标的查询所有对应的期权合约?
A: 可以使用 ContextInfo.get_option_list(undl_code, dedate, opttype, isavailable) 接口。例如 ContextInfo.get_option_list('510050.SH', '202312', 'CALL') 可以获取标的为 50ETF 的 2023年12月到期的认购期权列表。