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

QMT 两融自动化:如何使用 get_debt_contract 查询负债明细并实现自动还款?

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

问题描述

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

Title: QMT 两融自动化:查询 get_debt_contract 负债明细与定额还款

Question: 如何在 QMT 中查询信用账户的负债合约明细并实现自动还款?

解决方案

QMT 两融自动化:查询 get_debt_contract 负债明细与定额还款

在融资融券(两融)量化交易策略中,实时监控负债合约明细并进行精细化还款控制是风控与资金管理的核心需求。QMT 平台(迅投量化交易系统)提供了专门针对信用账户的 API 接口,帮助开发者实现自动化的两融管理。


1. 核心 API 接口说明

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

  • 功能:获取指定信用账户的负债合约明细列表。
  • 参数
    • accId (string):信用资金账号。
  • 返回值:由负债合约对象(StkCompacts)构成的 list
  • 常用属性
    • m_strInstrumentID:证券代码(如 '600000.SH'
    • m_strInstrumentName:证券名称
    • m_dUnRepayBalance:未还负债金额(元)
    • m_dRealCompactInterest:未还合约利息
    • m_eCompactType:合约类型(融资/融券)
    • m_nRetEndDate:归还截止日

1.2 信用还款与交易下单:passorder(...)

针对信用账户还款,passorder 函数的 opType 支持以下常用操作类型:

  • 29:买券还券
  • 30:直接还券
  • 31:卖券还款
  • 32:直接还款

2. 自动化查询与定额还款示例代码

以下策略展示了如何在 QMT 中获取信用账户负债,并在满足触发条件时对指定金额进行自动还款:

#encoding:gbk
import time

def init(ContextInfo):
    # 设置信用账号
    ContextInfo.account_id = '6000000248'
    ContextInfo.set_account(ContextInfo.account_id)
    
    # 设置定时器:每天 14:30 执行一次负债查询与还款逻辑
    ContextInfo.run_time("check_debt_and_repay", "1nDay", "2023-01-01 14:30:00", "SH")

def check_debt_and_repay(ContextInfo):
    acc_id = ContextInfo.account_id
    
    # 1. 获取负债合约明细列表
    debt_contracts = get_debt_contract(acc_id)
    if not debt_contracts:
        print("当前信用账户无负债合约")
        return
    
    total_debt = 0.0
    print("=== 当前信用账户负债明细 ===")
    for contract in debt_contracts:
        stock_code = contract.m_strInstrumentID
        stock_name = contract.m_strInstrumentName
        unrepay_bal = contract.m_dUnRepayBalance
        interest = contract.m_dRealCompactInterest
        total_debt += (unrepay_bal + interest)
        
        print(f"合约代码: {stock_code}, 名称: {stock_name}, 未还金额: {unrepay_bal:.2f} 元, 利息: {interest:.2f} 元")
    
    print(f"总负债金额: {total_debt:.2f} 元")
    
    # 2. 定额还款策略逻辑:如果总负债超过 50,000 元,执行 10,000 元直接还款
    repay_target = 10000.0
    if total_debt > 50000.0:
        print(f"负债超过设定阈值,触发定额还款,还款金额: {repay_target} 元")
        
        # opType=32 (直接还款), orderType=1102 (按金额下单), prType=5 (最新价/默认), price=-1, volume=10000
        passorder(
            32,                   # opType: 直接还款
            1102,                 # orderType: 单股/单账号/金额方式
            acc_id,               # 资金账号
            '000001.SZ',          # 占位代码(直接还款使用可用资金还现金负债)
            5,                    # prType
            -1,                   # price
            repay_target,         # volume: 还款金额 (元)
            '两融定额还款策略',     # strategyName
            1,                    # quickTrade: 立即下单
            'repay_auto_001',     # userOrderId
            ContextInfo
        )

def handlebar(ContextInfo):
    pass

3. 常见问题与风控注意事项

  1. 实时与盘后查询get_debt_contract 返回的数据依赖于柜台推送或结算更新,建议在交易日盘中或盘后定时调用。
  2. 账户可用资金检查:在执行 passorder(32, ...) 直接还款前,确保信用账户中有足够的可用现金(m_dAvailable),否则委托将被柜台打回。
  3. 直接还款与卖券还款区别
    • 直接还款 (opType=32):消耗账户内的现金直接偿还融资负债。
    • 卖券还款 (opType=31):通过卖出持仓证券,所得资金自动偿还融资负债。