3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易中,批量导入外部生成的股票篮子(包含股票代码和对应的交易数量)并一键执行组合交易,是机构和高频交易者非常常见的需求。QMT 平台提供了强大的 ContextInfo.load_stk_vol_list 接口,支持从本地的 TXT 或 CSV 文件中读取股票篮子,并配合 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()要执行导入的股票篮子交易,需要使用 passorder 的组合交易模式:
25:组合买入26:组合卖出2101:组合、单账号、普通、按组合股票数量方式下单(此时 volume 的单位为篮子的份数,若设为 1,则严格按照导入的数量执行)。以下是一个完整的 QMT 策略示例。该策略在初始化时设定交易账号,并在 handlebar 中读取本地 D:/data/basket.csv 文件,随后一键对该股票篮子进行组合买入下单。
#encoding:gbk
import os
def init(ContextInfo):
# 1. 设定交易账号
ContextInfo.accid = '6000000248' # 请替换为您的实际资金账号
ContextInfo.set_account(ContextInfo.accid)
# 2. 定义股票篮子文件路径与文件名
ContextInfo.filePath = 'D:/data/'
ContextInfo.fileName = 'basket.csv'
# 3. 确保本地目录和测试文件存在(实际使用时可手动创建)
if not os.path.exists(ContextInfo.filePath):
os.makedirs(ContextInfo.filePath)
# 创建测试文件,注意格式:代码,数量,代码,数量, 结尾必须有逗号
test_file_path = os.path.join(ContextInfo.filePath, ContextInfo.fileName)
if not os.path.exists(test_file_path):
with open(test_file_path, 'w') as f:
f.write('600000.SH,100,600004.SH,200,600006.SH,300,')
print("初始化完成,等待最后一根Bar触发组合交易...")
def handlebar(ContextInfo):
# 仅在最后一根 K 线(或盘中实时 tick)触发一次交易,避免历史回测重复下单
if not ContextInfo.is_last_bar():
return
print("开始读取本地股票篮子...")
# 1. 导入一篮子股票及数量
basket_data = ContextInfo.load_stk_vol_list(ContextInfo.filePath, ContextInfo.fileName)
print("成功导入篮子数据:", basket_data)
# 2. 执行组合下单
# opType = 25 (组合买入)
# orderType = 2101 (组合、单账号、按组合股票数量方式下单)
# orderCode 传入篮子名称(在QMT中通常对应导入的文件名或自定义篮子名)
# prType = 5 (最新价下单)
# volume = 1 (代表执行 1 份该篮子,即严格按导入的数量下单:浦发银行买100股,白云机场买200股...)
basket_name = ContextInfo.fileName.split('.')[0] # 篮子名称设为 'basket'
passorder(25, 2101, ContextInfo.accid, basket_name, 5, -1, 1, ContextInfo)
print(f"已向账号 {ContextInfo.accid} 发送组合买入指令,篮子: {basket_name},份数: 1")
600000.SH,100, 是正确的;600000.SH,100 会导致解析失败。/(如 D:/data/),避免反斜杠 \ 引起的转义字符错误。