🚀 AI 一键生成 qmt 策略代码

QMT 期货编程:如何通过 `get_contract_multiplier` 获取合约乘数?

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

问题描述

如何获取期货合约的乘数?

解决方案

在 QMT 量化交易平台中,获取期货合约乘数主要有两种方式。最直接的方法是使用 ContextInfo.get_contract_multiplier 函数,或者通过获取合约详细信息接口 ContextInfo.get_instrumentdetail 来提取。

以下是具体的实现方法和代码示例。

方法一:使用 get_contract_multiplier(推荐)

这是最直接获取合约乘数的接口。

  • 函数原型ContextInfo.get_contract_multiplier(contractcode)
  • 参数contractcode (string),合约代码,格式为 code.market,例如 'IF2306.IF'
  • 返回值number,返回该合约的乘数。

代码示例

# -*- coding: gbk -*-

def init(ContextInfo):
    # 示例:获取中金所沪深300股指期货主力合约的乘数
    # 注意:实际使用时请确保合约代码有效
    contract_code = 'IF2306.IF' 
    
    # 调用接口获取乘数
    multiplier = ContextInfo.get_contract_multiplier(contract_code)
    
    print(f"合约 {contract_code} 的乘数为: {multiplier}")

def handlebar(ContextInfo):
    pass

方法二:使用 get_instrumentdetail(获取详细信息)

如果你不仅需要乘数,还需要合约的其他信息(如上市日期、最小变动价位等),可以使用此接口。

  • 函数原型ContextInfo.get_instrumentdetail(stockcode)
  • 参数stockcode (string),合约代码。
  • 返回值dict (字典),包含合约的详细信息。
  • 获取乘数:通过字典键值 'VolumeMultiple' 获取。

代码示例

# -*- coding: gbk -*-

def init(ContextInfo):
    contract_code = 'IF2306.IF'
    
    # 获取合约详细信息字典
    detail_dict = ContextInfo.get_instrumentdetail(contract_code)
    
    # 从字典中提取合约乘数 (VolumeMultiple)
    # 建议先判断返回值是否为空,防止代码报错
    if detail_dict:
        multiplier = detail_dict.get('VolumeMultiple')
        print(f"通过详情接口获取 {contract_code} 的乘数为: {multiplier}")
        
        # 顺便获取最小变动价位
        tick_size = detail_dict.get('PriceTick')
        print(f"最小变动价位: {tick_size}")
    else:
        print(f"未找到合约 {contract_code} 的详细信息")

def handlebar(ContextInfo):
    pass

常见问题 Q&A

Q: get_contract_multiplier 返回的数值类型是什么?
A: 返回的是 number 类型(通常是浮点数或整数),可以直接用于数学计算,例如计算合约价值(价格 * 乘数)。

Q: 如果传入的合约代码不存在或错误,函数会返回什么?
A: 如果合约代码无效,get_contract_multiplier 通常会返回 0 或 None(取决于具体版本实现),建议在代码中对返回结果进行有效性判断。

Q: 股票代码可以使用这个函数吗?
A: 可以,但对于股票,合约乘数通常默认为 1(即 1 股)。对于期货以外的品种,VolumeMultiple 默认通常是 1。

Q: 如何获取当前主图品种的乘数?
A: 可以在 handlebarinit 中使用 ContextInfo.stockcode 获取当前主图代码,然后传入上述函数。例如:ContextInfo.get_contract_multiplier(ContextInfo.stockcode)