3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易和组合管理中,投资者经常需要根据外部生成的股票篮子文件(如 txt 或 csv)进行一键批量下单。QMT 提供了便捷的内置函数 ContextInfo.load_stk_vol_list(),可快速解析包含合约代码与对应数量的本地文件。
ContextInfo.load_stk_vol_list(filePath, fileName)
读取指定路径下的文本文件,解析一篮子证券编码及对应的数量。
600000.SH,100,600004.SH,200, 或 600000.SH100600004.SH200
600000.SH,100,600004.SH,200,以下是一个完整的 QMT 策略示例。策略在 init 中设置账户与订阅股票,在 handlebar 中通过 load_stk_vol_list 读取本地篮子文件并使用 passorder 进行批量下单。
#coding:gbk
import os
def init(ContextInfo):
# 设定交易账号
ContextInfo.account = '6000000248'
ContextInfo.set_account(ContextInfo.account)
# 定义文件路径与文件名
ContextInfo.file_path = 'D:/data/'
ContextInfo.file_name = 'basket.txt'
# 设置只在最后一根Bar触发下单标志
ContextInfo.has_ordered = False
def handlebar(ContextInfo):
# 仅在最后一根 Bar(实时最新Tick驱动)且未执行过下单时执行
if not ContextInfo.is_last_bar() or ContextInfo.has_ordered:
return
# 1. 读取本地篮子文件中的代码与数量
# 返回格式通常为代码与数量依次排列的列表或拼接字符串
stk_vol_data = ContextInfo.load_stk_vol_list(ContextInfo.file_path, ContextInfo.file_name)
print("解析到的篮子文件数据:", stk_vol_data)
# 假设文件内容为: 600000.SH,100,000001.SZ,200,
# 如果返回的是解析后的列表或分隔字符串,可进行提取
if isinstance(stk_vol_data, str):
raw_list = [x.strip() for x in stk_vol_data.split(',') if x.strip()]
else:
raw_list = stk_vol_data
# 2. 配对解析股票代码和数量
basket_dict = {}
for i in range(0, len(raw_list), 2):
if i + 1 < len(raw_list):
code = raw_list[i]
vol = int(raw_list[i+1])
basket_dict[code] = vol
print("解析后的下单字典:", basket_dict)
# 3. 循环遍历字典并批量下单 (以股票买入为例)
for code, vol in basket_dict.items():
# opType: 23-股票买入
# orderType: 1101-单股单账号股数下单
# prType: 5-最新价
passorder(
23,
1101,
ContextInfo.account,
code,
5,
-1,
vol,
'BasketTrade',
1,
'basket_order',
ContextInfo
)
print(f"成功发送下单任务: {code}, 数量: {vol}")
ContextInfo.has_ordered = True
txt 或 csv 文件时,请务必确保末尾包含逗号 ,,否则最后一个字段可能无法被正确解析。600000.SH 或 000001.SZ。ContextInfo.is_last_bar() 以及标志位控制,防止策略在历史 Bar 上重复触发下单。D:/data/)拥有读取权限。