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

QMT 平台如何导入外部股票篮子并实现期指自动对冲交易?

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

问题描述

QMT 组合交易精讲:使用 load_stk_vol_list 导入权重篮子并自动对冲
QMT如何从外部CSV/TXT文件导入带有数量的股票篮子并进行一键下单和期指对冲?

解决方案

QMT 组合交易精讲:使用 load_stk_vol_list 导入权重篮子并自动对冲

在量化多因子选股、指数增强以及阿尔法(Alpha)对冲策略中,交易员经常需要从外部(如本地研究环境导出的 CSV 或 TXT 文件)导入一个包含多只股票及其具体数量/权重的“股票篮子”,并在 QMT 交易终端中实现一键下单,同时自动在期货账户中开仓对应的股指期货进行对冲。

本文将详细讲解如何利用 QMT 的 ContextInfo.load_stk_vol_list 接口导入外部篮子,并配合 passorder 组合套利接口实现自动对冲交易。


1. 核心接口解析

1.1 导入篮子数据:ContextInfo.load_stk_vol_list

该函数用于从本地读取包含证券代码及数量的篮子文件。

  • 用法ContextInfo.load_stk_vol_list(filePath, fileName)
  • 文件格式要求
    • TXT 格式600000.SH,100,600004.SH,200, (代码与数量成对出现,且最后一个字段后必须增加分隔符)。
    • CSV 格式600000.SH,100,600004.SH,200, (同样以逗号分隔,末尾需有逗号)。

1.2 组合套利下单:passorder 特殊设置

为了实现股票篮子与股指期货的自动对冲,QMT 提供了专用的套利/对冲下单模式:

  • 操作类型 (opType)
    • 25:组合买入(买入股票篮子)
    • 26:组合卖出
  • 下单方式 (orderType)
    • 2331:组合、套利、合约价值自动套利、按组合股票数量方式下单
  • 资金账号 (accountID):传入双账号字符串,格式为 '股票资金账号, 期货资金账号'
  • 下单代码 (orderCode):传入双代码字符串,格式为 '股票篮子名称, 期货合约代码'
  • 套利比例 (price 参数位置):填入套利对冲比例(如 1.0 表示 100% 价值对冲)

2. 完整 Python 策略源码示例

以下是一个完整的 QMT 策略示例。策略在初始化时导入本地 D:/data/basket.csv 中的股票篮子,并在盘中触发对冲交易指令。

#encoding:gbk
import time

def init(ContextInfo):
    # 1. 设定股票与期货账号(请替换为您的实际账号)
    ContextInfo.stock_account = '6000000248'
    ContextInfo.future_account = '110476'
    
    # 绑定账号以接收交易主推
    ContextInfo.set_account(ContextInfo.stock_account)
    ContextInfo.set_account(ContextInfo.future_account)
    
    # 2. 导入外部股票篮子数据
    # 假设 D:/data/basket.csv 内容为: 600000.SH,100,600016.SH,200,600030.SH,150,
    file_path = 'D:/data/'
    file_name = 'basket.csv'
    
    try:
        ContextInfo.basket_data = ContextInfo.load_stk_vol_list(file_path, file_name)
        print("成功导入股票篮子数据:", ContextInfo.basket_data)
    except Exception as e:
        print("导入篮子文件失败:", str(e))
        ContextInfo.basket_data = None

def handlebar(ContextInfo):
    # 仅在最后一根K线(最新Tick)执行一次演示
    if not ContextInfo.is_last_bar():
        return
        
    # 设定对冲目标:买入股票篮子,同时自动开空沪深300主力合约对冲
    future_code = ContextInfo.get_main_contract('IF.IF') # 获取中金所IF主力合约
    basket_name = 'MyAlphaBasket' # 对应您在客户端定义的篮子名称或虚拟名称
    
    # 组合套利账号与代码配置
    dual_account = f"{ContextInfo.stock_account},{ContextInfo.future_account}"
    dual_code = f"{basket_name},{future_code}"
    
    # 触发一键对冲下单
    # opType=25 (组合买入), orderType=2331 (合约价值自动套利数量下单)
    # prType=5 (最新价), price=1.0 (100%对冲比例), volume=1 (下单1份篮子)
    if ContextInfo.basket_data:
        print(f"正在发送对冲委托: 账户[{dual_account}], 标的[{dual_code}]")
        passorder(
            25, 
            2331, 
            dual_account, 
            dual_code, 
            5, 
            1.0, 
            1, 
            'AlphaHedgeStrategy', 
            1, 
            'order_001', 
            ContextInfo
        )

3. 注意事项与避坑指南

  1. 文件末尾逗号:使用 load_stk_vol_list 导入的 CSV/TXT 文件,最后一行或最后一个数据对后面必须有英文逗号(例如 600000.SH,100,),否则最后一只股票可能无法被正确解析。
  2. 实盘权限:组合套利下单(orderType=2331)需要您的 QMT 终端同时登录了股票和期货账户,且券商端开通了对应的组合交易与算法交易权限。
  3. 快速计算设置:在策略基本信息中,建议将“快速计算”设置为非0值(如限制计算最新100根K线),以加快策略加载和初始化导入文件的速度。