3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT(迅投/国信量化交易平台)进行两融(融资融券/信用账户)交易时,由于涉及到担保品折算率、融资/融券保证金比例等复杂的风控计算,直接通过可用资金计算可买股数往往不够准确。QMT 提供了专门的 API 函数 query_credit_opvolume 及其回调函数 credit_opvolume_callback 来实现两融最大可下单量的查询。
两融最大下单量的查询采用异步查询与回调机制,需要配合使用以下两个函数:
query_credit_opvolumequery_credit_opvolume(accountId, stockCode, opType, prType, price, seq, ContextInfo)
string,两融资金账号。string 或 list,股票代码(如 '600000.SH')或股票代码列表,一次最多支持查询 200 只股票。int,两融下单类型(同 passorder 的操作类型,如 33 代表信用账号股票买入,27 代表融资买入)。int,报单价格类型(同 passorder 的报价类型,如 11 代表指定价,5 代表最新价)。float 或 list,报价(若 stockCode 为列表,则 price 也需为同等长度的列表)。int,查询序列号,建议传入时间戳或唯一标识,用于在回调中对应查询结果。注意事项:该函数直接从服务器查询数据,不可频繁高频调用,建议平均查询间隔在 30 秒 以上。
credit_opvolume_callback当服务器返回查询结果时,QMT 会自动触发此回调函数:
def credit_opvolume_callback(ContextInfo, accid, seq, ret, result):
pass
seq。1: 正常返回-1: 正在查询中-2: 输入账号非法-3: 输入查询参数非法-4: 超时或服务器报错以下示例展示了如何在 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}")
CREDIT 类型账号),且策略已成功连接柜台。stockCode 参数可传入列表,例如 ['600000.SH', '000001.SZ'],此时 price 也需传入同长度的价格列表 [10.0, 20.0]。27: 融资买入28: 融券卖出29: 买券还券33: 信用账号担保品买入34: 信用账号担保品卖出