3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化多因子选股、指数增强以及阿尔法(Alpha)对冲策略中,交易员经常需要从外部(如本地研究环境导出的 CSV 或 TXT 文件)导入一个包含多只股票及其具体数量/权重的“股票篮子”,并在 QMT 交易终端中实现一键下单,同时自动在期货账户中开仓对应的股指期货进行对冲。
本文将详细讲解如何利用 QMT 的 ContextInfo.load_stk_vol_list 接口导入外部篮子,并配合 passorder 组合套利接口实现自动对冲交易。
ContextInfo.load_stk_vol_list该函数用于从本地读取包含证券代码及数量的篮子文件。
ContextInfo.load_stk_vol_list(filePath, fileName)600000.SH,100,600004.SH,200, (代码与数量成对出现,且最后一个字段后必须增加分隔符)。600000.SH,100,600004.SH,200, (同样以逗号分隔,末尾需有逗号)。passorder 特殊设置为了实现股票篮子与股指期货的自动对冲,QMT 提供了专用的套利/对冲下单模式:
opType):
25:组合买入(买入股票篮子)26:组合卖出orderType):
2331:组合、套利、合约价值自动套利、按组合股票数量方式下单accountID):传入双账号字符串,格式为 '股票资金账号, 期货资金账号'orderCode):传入双代码字符串,格式为 '股票篮子名称, 期货合约代码'price 参数位置):填入套利对冲比例(如 1.0 表示 100% 价值对冲)以下是一个完整的 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
)
load_stk_vol_list 导入的 CSV/TXT 文件,最后一行或最后一个数据对后面必须有英文逗号(例如 600000.SH,100,),否则最后一只股票可能无法被正确解析。orderType=2331)需要您的 QMT 终端同时登录了股票和期货账户,且券商端开通了对应的组合交易与算法交易权限。