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

qmt 期货交易:利用 get_contract_multiplier 自动计算合约价值与保证金

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: qmt 期货交易:利用 get_contract_multiplier 自动计算合约价值与保证金

Question: qmt 如何通过代码动态获取不同期货品种的合约乘数?

解决方案

QMT 期货交易:利用 get_contract_multiplier 自动计算合约价值与保证金

在期货量化交易和风险控制中,不同品种(如沪深300指数期货 IF、螺纹钢 rb、黄金 au 等)的**合约乘数(交易单位)**各不相同。为了避免在策略代码中硬编码合约乘数,QMT 提供了 ContextInfo.get_contract_multiplier() 接口,帮助开发者动态获取指定期货合约的乘数,从而精准计算合约总价值与所需保证金。


1. 接口介绍:ContextInfo.get_contract_multiplier()

接口用法

ContextInfo.get_contract_multiplier(contractcode)

参数与返回值

  • 参数contractcode(字符串),合约代码,格式为 品种代码.市场,例如 'IF1707.IF''rb2310.SF'
  • 返回值number(数值),返回该合约对应的合约乘数(如 IF 为 300,rb 为 10)。

2. 合约价值与保证金计算公式

  1. 合约总价值 = 最新价格 (Last Price) × 合约乘数 (Contract Multiplier) × 持仓手数 (Volume)
  2. 所需保证金 = 合约总价值 × 保证金比例 (Margin Ratio)

3. 完整代码示例

以下策略展示了如何在 QMT 中动态获取期货合约乘数,并实时计算合约价值与保证金:

#encoding:gbk

def init(ContextInfo):
    # 设定关注的期货合约
    ContextInfo.symbol = 'IF2309.IF'  # 沪深300股指期货
    ContextInfo.set_universe([ContextInfo.symbol])
    
    # 假设保证金比例为 12%
    ContextInfo.margin_ratio = 0.12

def handlebar(ContextInfo):
    if not ContextInfo.is_last_bar():
        return
    
    symbol = ContextInfo.symbol
    
    # 1. 动态获取合约乘数
    multiplier = ContextInfo.get_contract_multiplier(symbol)
    
    # 2. 获取最新行情数据
    tick_data = ContextInfo.get_full_tick([symbol])
    if symbol in tick_data:
        last_price = tick_data[symbol]['lastPrice']
        
        # 3. 计算单手合约总价值与所需保证金
        contract_value = last_price * multiplier
        margin_required = contract_value * ContextInfo.margin_ratio
        
        # 4. 打印计算结果
        print(f"合约代码: {symbol}")
        print(f"最新价格: {last_price}")
        print(f"合约乘数: {multiplier}")
        print(f"单手合约总价值: {contract_value:.2f} 元")
        print(f"单手所需保证金: {margin_required:.2f} 元")

4. 常见问题与注意事项

  1. 合约代码格式:必须传入带市场后缀的标准代码格式(如 IF.IFrb.SF),否则可能无法正确获取。
  2. 品种适用性:对期货以外的品种(如股票),该接口默认返回 1
  3. 动态仓位管理:结合 ContextInfo.capital(初始资金/可用资金),可以利用合约保证金计算结果动态决定下单手数,实现资金控制与风险管理。