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

QMT平台如何查询信用账户负债并实现自动还款?(附Python策略源码)

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

问题描述

qmt 两融自动化:get_debt_contract 查询负债与自动还款策略
怎么在QMT中查询信用账户的负债合约明细并实现自动化还款?

解决方案

QMT两融自动化:get_debt_contract 查询负债与自动还款策略

在量化交易中,融资融券(两融)账户的负债管理至关重要。如果不能及时了结到期负债或在持有现金时自动还款,可能会产生不必要的利息支出。QMT(迅投极速量化交易系统)提供了丰富的信用交易接口,允许投资者通过 Python 代码实时查询负债合约并执行自动化还款。

本文将详细介绍如何使用 get_debt_contract 接口查询负债,并结合 passorder 接口实现自动还款策略。


1. 核心接口解析

1.1 查询负债合约:get_debt_contract(accId)

  • 方法释义:获取信用账户当前的负债合约明细。
  • 参数accId (string) - 信用资金账号。
  • 返回值:返回一个包含负债合约对象(StkCompacts)的列表。每个对象包含以下常用属性:
    • m_strInstrumentID:证券代码
    • m_strInstrumentName:证券名称
    • m_dRealCompactBalance:未还合约金额(本金)
    • m_dRealCompactInterest:未还合约利息
    • m_eCompactType:合约类型(48-融资,49-融券)
    • m_nRetEndDate:归还截止日期

1.2 交易下单接口:passorder()

在执行还款操作时,我们需要通过 passorder 发送特定的操作指令(opType):

  • opType = 29:买券还券(针对融券负债)
  • opType = 31:卖券还款(针对融资负债)
  • opType = 30:直接还券
  • opType = 32:直接还款

2. 自动化查询与还款策略源码

以下是一个完整的 QMT 自动化策略示例。策略在初始化时绑定信用账户,并在每日交易时间内定时检查负债情况。如果发现融资负债,且账户中持有对应股票,则自动执行卖券还款;如果是融券负债,则执行买券还券

#encoding:gbk
import datetime

def init(ContextInfo):
    # 设定信用账号(请替换为您的真实两融账号)
    ContextInfo.accid = '6000000248'
    ContextInfo.set_account(ContextInfo.accid)
    
    # 设置定时器:每天 14:30 触发自动检查与还款逻辑
    ContextInfo.run_time("auto_repay_logic", "1nDay", "2023-10-01 14:30:00", "SH")
    print("QMT两融自动还款策略初始化成功!")

def handlebar(ContextInfo):
    pass

def auto_repay_logic(ContextInfo):
    print("开始执行每日负债检查...")
    
    # 1. 获取负债合约明细
    debt_list = get_debt_contract(ContextInfo.accid)
    if not debt_list:
        print("当前账户无未结清负债。")
        return
        
    # 2. 获取当前持仓信息,用于判断是否有券可还
    position_info = get_trade_detail_data(ContextInfo.accid, 'CREDIT', 'POSITION')
    holdings = {pos.m_strInstrumentID: pos.m_nCanUseVolume for pos in position_info}
    
    for debt in debt_list:
        code = debt.m_strInstrumentID
        name = debt.m_strInstrumentName
        unpaid_balance = debt.m_dRealCompactBalance
        unpaid_interest = debt.m_dRealCompactInterest
        total_debt = unpaid_balance + unpaid_interest
        compact_type = debt.m_eCompactType # 48: 融资, 49: 融券
        
        print(f"发现负债 -> 证券: {code}({name}), 类型: {'融资' if compact_type == 48 else '融券'}, 待还总额: {total_debt:.2f}")
        
        # 3. 自动化还款决策
        if compact_type == 48: # 融资负债
            # 如果持仓中有该股票,执行卖券还款
            if code in holdings and holdings[code] > 0:
                repay_vol = holdings[code]
                print(f"执行【卖券还款】: 证券 {code}, 数量 {repay_vol} 股")
                # opType=31: 卖券还款, orderType=1101: 单股单账号股数下单, prType=5: 最新价
                passorder(31, 1101, ContextInfo.accid, code, 5, -1, repay_vol, '自动融资还款', 1, ContextInfo)
                
        elif compact_type == 49: # 融券负债
            # 融券负债需要买入证券还券
            # 假设根据策略逻辑,当需要还券时,直接以最新价买入对应数量进行还券
            # 实际操作中需注意可用资金是否充足
            unpaid_vol = debt.m_nRealCompactVol # 获取未还合约数量
            if unpaid_vol > 0:
                print(f"执行【买券还券】: 证券 {code}, 数量 {unpaid_vol} 股")
                # opType=29: 买券还券, prType=5: 最新价
                passorder(29, 1101, ContextInfo.accid, code, 5, -1, unpaid_vol, '自动融券还款', 1, ContextInfo)

3. 策略运行注意事项

  1. 实盘权限:本策略涉及真实的资金划拨与交易,必须在 QMT 的实盘模式下运行,且需确保两融账户已在客户端成功登录并绑定。
  2. 防重复下单:在设置定时器(run_time)时,建议使用 1nDay(每日一次)避免在同一个 K 线或 Tick 周期内重复触发下单。
  3. 滑点与冲击成本:自动还款下单时,本例采用了最新价(prType=5)。在实际交易中,为确保快速成交,可考虑使用对手价(prType=14)或最优五档即成剩撤等报价方式。