3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 量化交易平台中,针对两融(融资融券)信用账户,查询担保品买入或融资买入等操作的最大可下单量,需要使用异步查询接口 query_credit_opvolume,并配合回调函数 credit_opvolume_callback 来接收查询结果。
query_credit_opvolumequery_credit_opvolume(accountId, stockCode, opType, prType, price, seq, ContextInfo)accountId: 两融信用账号。stockCode: 需要查询的股票代码,支持 List 类型(一次最多查询 200 只股票)。opType: 两融下单类型。33 对应信用账号股票买入(担保品买入),27 对应融资买入。prType: 报单价格类型。11 对应限价单。price: 报价。如果 stockCode 是 List,价格也必须是长度相同的 List。seq: 查询序列号(int),用于在回调中匹配查询请求。注意:该函数从服务器实时查询数据,建议平均查询时间间隔 30s 以上,不可频繁调用。同时只能有一个查询在进行。
credit_opvolume_callbackcredit_opvolume_callback(ContextInfo, accid, seq, ret, result)ret: 查询结果状态。1 为正常返回,负数(如 -1, -2, -3, -4)代表查询中、账号非法、参数非法或超时报错。result: 查询到的结果字典,包含各股票的最大可下单量。以下是一个完整的 QMT 策略示例,展示了如何定时批量查询两融信用账户中,多只股票进行担保品买入(限价)的最大可下单量:
#coding:gbk
import time
def init(ContextInfo):
# 1. 设定您的两融信用账号
ContextInfo.accid = '6000000248'
ContextInfo.set_account(ContextInfo.accid)
# 2. 设定需要批量查询的股票列表(最多支持200只)
ContextInfo.stock_list = ['600000.SH', '000001.SZ']
# 3. 记录上一次查询时间,控制查询频率(建议 > 30秒)
ContextInfo.last_query_time = 0
def handlebar(ContextInfo):
# 仅在最后一根 K 线(最新行情)执行查询
if not ContextInfo.is_last_bar():
return
now_time = time.time()
# 限制 30 秒查询一次,避免频繁调用被服务器拒绝
if now_time - ContextInfo.last_query_time > 30:
ContextInfo.last_query_time = now_time
# 生成唯一的查询序列号
seq_id = int(now_time)
# 设定对应的限价单价格(长度需与股票列表一致)
prices = [10.5, 18.2]
print(f"[发起查询] 正在查询两融最大可下单量, 序列号: {seq_id}...")
# 调用查询接口:opType=33 (担保品买入), prType=11 (限价单)
query_credit_opvolume(
ContextInfo.accid,
ContextInfo.stock_list,
33,
11,
prices,
seq_id,
ContextInfo
)
# ----------------- 回调函数 -----------------
def credit_opvolume_callback(ContextInfo, accid, seq, ret, result):
"""
两融最大可下单量查询结果回调
"""
if ret == 1:
print(f"[查询成功] 账号: {accid}, 序列号: {seq}")
# 遍历输出每只股票的最大可下单量
for stock, volume in result.items():
print(f"股票: {stock} | 担保品买入最大可下单量: {volume} 股")
else:
print(f"[查询失败] 错误码: {ret}, 序列号: {seq} (可能原因:账号未登录、参数错误或查询过于频繁)")
time.time() 的时间间隔控制,建议间隔 30 秒以上,否则极易触发 -4 超时或服务器拒绝报错。price 列表长度必须与 stockCode 列表长度完全一致,否则会触发 -3 参数非法错误。