🚀 AI 一键生成 qmt 策略代码

QMT API 指南:如何使用 get_instrumentdetail 函数查询合约详细信息?

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

问题描述

怎样在代码里查询一个期货合约的合约乘数和最小变动价位?

解决方案

在 QMT 量化交易平台中,查询期货合约的合约乘数最小变动价位,主要使用 ContextInfo.get_instrumentdetail(stockcode) 函数。

该函数会返回一个包含合约详细信息的字典,其中:

  • 合约乘数 对应的键是 'VolumeMultiple'
  • 最小变动价位 对应的键是 'PriceTick'

代码实现

以下是一个完整的策略示例代码,展示如何在 init 初始化函数中查询并打印指定期货合约的这两项信息。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 定义需要查询的期货合约代码,格式为 '代码.市场'
    # 例如:中金所股指期货 IF2306.IF,或者主力合约 IF00.IF
    contract_code = 'IF2306.IF'
    
    # 调用获取合约详细信息的接口
    detail_dict = ContextInfo.get_instrumentdetail(contract_code)
    
    # 检查是否成功获取到数据
    if detail_dict:
        # 获取合约乘数
        multiplier = detail_dict.get('VolumeMultiple')
        
        # 获取最小变动价位
        price_tick = detail_dict.get('PriceTick')
        
        # 获取合约名称(可选,方便查看)
        name = detail_dict.get('InstrumentName')
        
        print(f"合约: {name} ({contract_code})")
        print(f"合约乘数: {multiplier}")
        print(f"最小变动价位: {price_tick}")
    else:
        print(f"未找到合约 {contract_code} 的详细信息,请检查代码是否正确。")

def handlebar(ContextInfo):
    # 本示例仅在 init 中演示查询,handlebar 可留空
    pass

详细说明

  1. 函数名称ContextInfo.get_instrumentdetail(stockcode)
  2. 参数stockcode (字符串),即合约代码,必须包含市场后缀。例如:
    • 中金所:'IF2306.IF'
    • 上期所:'rb2310.SF'
    • 大商所:'m2309.DF'
    • 郑商所:'SR309.ZF'
  3. 返回值:返回一个字典(dict),包含该合约的静态基础数据。
  4. 关键字段
    • VolumeMultiple:合约乘数(例如沪深300股指期货通常为 300)。
    • PriceTick:最小变动价位(例如沪深300股指期货通常为 0.2)。

补充接口

如果你只需要查询合约乘数,也可以使用专用接口 ContextInfo.get_contract_multiplier(contractcode),它直接返回数值。但为了同时获取最小变动价位,推荐使用 get_instrumentdetail


常见问题 (Q&A)

Q: 为什么查询到的合约乘数是 1?
A: 如果查询的是股票(如 600000.SH),QMT 默认返回的合约乘数通常为 1(表示1股)。如果是期货合约返回 1,请检查合约代码是否正确,或者该品种是否确实为 1。

Q: get_instrumentdetail 还能查询到哪些信息?
A: 该函数还可以查询到合约名称 (InstrumentName)、上市日期 (OpenDate)、到期日 (ExpireDate)、涨跌停价格 (UpStopPrice/DownStopPrice)、保证金比例 (LongMarginRatio/ShortMarginRatio) 等信息。

Q: 如何查询主力合约的乘数?
A: 你可以先使用 ContextInfo.get_main_contract(codemarket) 获取主力合约代码(例如传入 'IF.IF' 获取当前的 IF 主力),然后再将获取到的代码传入 get_instrumentdetail 进行查询。