3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化多头或阿尔法策略中,投资者经常需要导入一个自定义的股票篮子,并使用股指期货(如 IF、IC、IM)进行空头对冲。QMT 平台提供了强大的本地文件解析接口 load_stk_vol_list 以及专为套利设计的 passorder 组合套利下单模式,能够一键实现“股票篮子 + 期货合约”的自动对冲与权重配对。
ContextInfo.load_stk_vol_list()ContextInfo.load_stk_vol_list(filePath, fileName)600000.SH,100,600004.SH,200,passorder() 特殊参数设置针对组合套利,passorder 的参数需要进行特殊配置:
passorder(opType, orderType, accountID, orderCode, prType, hedgeRatio, volume, ContextInfo)'股票资金账号, 期货资金账号'。'股票篮子名称, 期货合约代码'。0 ~ 2 之间,相当于 0% 至 200% 的套利对冲比例)。2331:组合、套利、合约价值自动套利、按组合股票数量方式下单。2332:组合、套利、按合约价值自动套利、按组合股票权重方式下单。2333:组合、套利、按合约价值自动套利、按账号可用方式下单。以下示例展示了如何在初始化时从本地 D:/data/basket.csv 导入股票持仓,并在盘中触发对冲套利下单:
#coding: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. 从本地 CSV 导入股票篮子及数量
# 假设 D:/data/basket.csv 内容为: 600000.SH,100,600016.SH,200,600030.SH,150,
ContextInfo.basket_path = 'D:/data/'
ContextInfo.basket_file = 'basket.csv'
# 读取篮子数据
ContextInfo.basket_data = ContextInfo.load_stk_vol_list(ContextInfo.basket_path, ContextInfo.basket_file)
print("成功导入股票篮子数据:", ContextInfo.basket_data)
# 3. 定义对冲标的(如沪深300主力合约)
ContextInfo.future_code = 'IF2406.IF'
# 标记是否已执行对冲
ContextInfo.is_traded = False
def handlebar(ContextInfo):
# 仅在最后一根Bar且未交易时触发
if ContextInfo.is_last_bar() and not ContextInfo.is_traded:
# 组合套利账号与代码配对
accounts = f"{ContextInfo.stock_account},{ContextInfo.future_account}"
order_codes = f"my_stock_basket,{ContextInfo.future_code}"
# 4. 发起组合套利对冲申报
# opType: 23 (股票买入/组合买入)
# orderType: 2331 (按组合股票数量自动套利)
# prType: 5 (最新价)
# hedgeRatio: 1.0 (100% 价值对冲)
# volume: 1 (代表执行1份篮子)
print("开始发送组合套利对冲指令...")
passorder(
23,
2331,
accounts,
order_codes,
5,
1.0,
1,
ContextInfo
)
ContextInfo.is_traded = True
print("对冲指令发送完毕。")
load_stk_vol_list 读取 CSV 时,文件内容的末尾必须有一个英文逗号 ,,否则最后一只股票的数量可能无法被正确解析。init 函数中,必须同时对股票账号和期货账号调用 ContextInfo.set_account(),否则无法接收到完整的交易回报主推。