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

QMT 平台如何查询两融最大可下单量?( query_credit_opvolume 使用教程)

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: QMT 两融 API 教程:查询信用账户最大可下单量

Question: 如何在 QMT 中通过 query_credit_opvolume 查询两融账户的最大可买股数?

解决方案

QMT 平台如何查询两融最大可下单量?

在 QMT(迅投/国信量化交易平台)进行两融(融资融券/信用账户)交易时,由于涉及到担保品折算率、融资/融券保证金比例等复杂的风控计算,直接通过可用资金计算可买股数往往不够准确。QMT 提供了专门的 API 函数 query_credit_opvolume 及其回调函数 credit_opvolume_callback 来实现两融最大可下单量的查询。


1. 函数接口说明

两融最大下单量的查询采用异步查询与回调机制,需要配合使用以下两个函数:

1.1 查询接口:query_credit_opvolume

query_credit_opvolume(accountId, stockCode, opType, prType, price, seq, ContextInfo)
  • accountId: string,两融资金账号。
  • stockCode: stringlist,股票代码(如 '600000.SH')或股票代码列表,一次最多支持查询 200 只股票。
  • opType: int,两融下单类型(同 passorder 的操作类型,如 33 代表信用账号股票买入,27 代表融资买入)。
  • prType: int,报单价格类型(同 passorder 的报价类型,如 11 代表指定价,5 代表最新价)。
  • price: floatlist,报价(若 stockCode 为列表,则 price 也需为同等长度的列表)。
  • seq: int,查询序列号,建议传入时间戳或唯一标识,用于在回调中对应查询结果。
  • ContextInfo: 策略上下文全局对象。

注意事项:该函数直接从服务器查询数据,不可频繁高频调用,建议平均查询间隔在 30 秒 以上。


1.2 回调接口:credit_opvolume_callback

当服务器返回查询结果时,QMT 会自动触发此回调函数:

def credit_opvolume_callback(ContextInfo, accid, seq, ret, result):
    pass
  • accid: 查询的资金账号。
  • seq: 查询时传入的序列号 seq
  • ret: 查询结果状态。
    • 1: 正常返回
    • -1: 正在查询中
    • -2: 输入账号非法
    • -3: 输入查询参数非法
    • -4: 超时或服务器报错
  • result: 查询到的具体最大可下单量结果(字典或数值)。

2. 完整 Python 策略示例

以下示例展示了如何在 handlebar 中发起两融可下单量查询,并在 credit_opvolume_callback 中接收并打印结果。

#coding:gbk
import time

def init(ContextInfo):
    # 设定两融资金账号
    ContextInfo.accid = '6000000248'
    ContextInfo.set_account(ContextInfo.accid)
    # 设置标记位防止高频重复查询
    ContextInfo.last_query_time = 0

def handlebar(ContextInfo):
    # 仅在最新 Bar 运行
    if not ContextInfo.is_last_bar():
        return
    
    now = time.time()
    # 限制查询频率:每 30 秒最多查询一次
    if now - ContextInfo.last_query_time > 30:
        ContextInfo.last_query_time = now
        seq_num = int(now)
        
        # 示例:查询担保品买入 (opType=33) 浦发银行(600000.SH) 在 10 元限价下的最大可下单量
        print(f"发起两融最大可下单量查询,序列号: {seq_num}")
        query_credit_opvolume(ContextInfo.accid, '600000.SH', 33, 11, 10.0, seq_num, ContextInfo)

def credit_opvolume_callback(ContextInfo, accid, seq, ret, result):
    """
    两融最大可下单量异步回调函数
    """
    if ret == 1:
        print(f"[查询成功] 账号: {accid}, 序列号: {seq}, 可下单量结果: {result}")
    else:
        print(f"[查询失败] 状态码 ret: {ret}")

3. 常见问题与优化建议

  1. 为什么函数返回为空或报错?
    • 请检查是否使用了正确的信用账号(CREDIT 类型账号),且策略已成功连接柜台。
  2. 如何批量查询多只股票?
    • stockCode 参数可传入列表,例如 ['600000.SH', '000001.SZ'],此时 price 也需传入同长度的价格列表 [10.0, 20.0]
  3. 下单类型 opType 对应说明
    • 27: 融资买入
    • 28: 融券卖出
    • 29: 买券还券
    • 33: 信用账号担保品买入
    • 34: 信用账号担保品卖出