🚀 AI 一键生成 qmt 策略代码
立即体验

qmt 平台如何批量查询两融信用账户最大可下单量?(附 Python 源码)

qmt | 发布时间: 2026/8/10
以下内容由 EasyQuant 生成。

问题描述

qmt 两融自动化:query_credit_opvolume 批量查询最大可下单量
两融信用账户如何在 qmt 中查询担保品买入的最大可下单量?

解决方案

在 QMT 量化交易平台中,针对两融(融资融券)信用账户,查询担保品买入或融资买入等操作的最大可下单量,需要使用异步查询接口 query_credit_opvolume,并配合回调函数 credit_opvolume_callback 来接收查询结果。

一、 核心 API 介绍

1. 查询接口:query_credit_opvolume

  • 方法签名query_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 以上,不可频繁调用。同时只能有一个查询在进行。

2. 回调接口:credit_opvolume_callback

  • 方法签名credit_opvolume_callback(ContextInfo, accid, seq, ret, result)
  • 关键参数说明
    • ret: 查询结果状态。1 为正常返回,负数(如 -1, -2, -3, -4)代表查询中、账号非法、参数非法或超时报错。
    • result: 查询到的结果字典,包含各股票的最大可下单量。

二、 Python 自动化策略源码示例

以下是一个完整的 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} (可能原因:账号未登录、参数错误或查询过于频繁)")

三、 避坑指南与注意事项

  1. 频率限制:QMT 限制了该接口的调用频率,务必在代码中加入类似 time.time() 的时间间隔控制,建议间隔 30 秒以上,否则极易触发 -4 超时或服务器拒绝报错。
  2. 价格匹配:批量查询时,传入的 price 列表长度必须与 stockCode 列表长度完全一致,否则会触发 -3 参数非法错误。
  3. 实盘/模拟环境:此函数需要连接真实的券商两融柜台,回测模式下无法获取真实数据。