🚀 AI 一键生成 qmt 策略代码
立即体验

qmt 平台如何自动查询期货或期权合约的乘数?(附 Python 源码)

qmt | 发布时间: 2026/8/10
以下内容由 EasyQuant 生成。

问题描述

qmt 期货与期权:如何使用 get_contract_multiplier 获取合约乘数?
qmt 怎么自动查询期货或期权合约的乘数?

解决方案

qmt 平台如何自动查询期货或期权合约的乘数?

在进行期货和期权量化交易时,**合约乘数(Contract Multiplier)**是一个至关重要的参数。它决定了单手合约所代表的标的资产数量(例如:沪深300股指期货 IF 的合约乘数是 300 元/点,铜期货是 5 吨/手)。

QMT 平台提供了专门的 API 接口 ContextInfo.get_contract_multiplier(),允许用户在策略运行中动态、自动地获取任意合约的乘数。以下是该接口的详细使用指南及代码示例。


1. 接口介绍

ContextInfo.get_contract_multiplier()

  • 方法释义:获取指定期货或期权合约的乘数。
  • 用法ContextInfo.get_contract_multiplier(contractcode)
  • 参数
    • contractcode (string):合约代码,格式必须为 代码.市场(例如:'IF1707.IF''cu2412.SF')。
  • 返回值number(数值类型,代表合约乘数)。

2. 极简代码示例

以下是一个简单的 Python 策略示例,展示了如何在 handlebar 中获取并打印指定期货合约的乘数:

#encoding:gbk

def init(ContextInfo):
    # 设定基础股票池(可选)
    ContextInfo.set_universe(['IF2412.IF'])
    print("策略初始化成功")

def handlebar(ContextInfo):
    # 1. 获取中金所股指期货主力合约的乘数
    if_multiplier = ContextInfo.get_contract_multiplier('IF2412.IF')
    print(f"股指期货 IF2412 的合约乘数是: {if_multiplier}")
    
    # 2. 获取上期所铜期货合约的乘数
    cu_multiplier = ContextInfo.get_contract_multiplier('cu2412.SF')
    print(f"沪铜 cu2412 的合约乘数是: {cu_multiplier}")

3. 进阶应用:结合主力合约动态计算持仓市值

在实际交易中,我们通常需要先获取当前主力合约,再动态获取其合约乘数,从而计算出真实的持仓市值。以下是完整的实战代码:

#encoding:gbk
import time

def init(ContextInfo):
    # 订阅期货品种
    ContextInfo.set_universe(['IF.IF'])

def handlebar(ContextInfo):
    # 只在最后一根 K 线上执行,避免历史回测时重复打印
    if not ContextInfo.is_last_bar():
        return
        
    # 1. 获取当前股指期货的主力合约代码
    main_contract = ContextInfo.get_main_contract('IF.IF')
    print(f"当前股指期货主力合约为: {main_contract}")
    
    # 2. 获取该主力合约的合约乘数
    multiplier = ContextInfo.get_contract_multiplier(main_contract)
    print(f"该主力合约的乘数为: {multiplier}")
    
    # 3. 获取最新价格并计算单手合约价值
    # 注意:get_full_tick 获取最新分笔数据
    tick_data = ContextInfo.get_full_tick([main_contract])
    if main_contract in tick_data:
        last_price = tick_data[main_contract]['lastPrice']
        contract_value = last_price * multiplier
        print(f"当前最新价: {last_price},单手合约名义价值: {contract_value} 元")

4. 常见问题与注意事项

  1. 合约代码格式:传入的合约代码必须带上市场后缀,如中金所为 .IF,上期所为 .SF,大商所为 .DF,郑商所为 .ZF。具体市场简称可参考 QMT 官方附录。
  2. 数据下载:在使用此接口前,请确保已通过 QMT 客户端的 “数据管理” 功能补充了对应期货或期权品种的历史行情与合约基础数据,否则可能无法正确获取乘数。
  3. 期权合约支持:该接口同样支持股票期权(如 .SHO / .SZO)及商品期权,获取期权合约单位(如 10000 股/张)。