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

如何在 QMT 实盘中动态计算信用账户维持担保比例并实现自动还款?

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

问题描述

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

Title: QMT 两融账户自动化风控:实时还款与维持担保比例预警

Question: 如何在 QMT 实盘中动态计算信用账户维持担保比例并实现自动还款?

解决方案

如何在 QMT 实盘中动态计算信用账户维持担保比例并实现自动还款?

在融资融券(两融)交易中,维持担保比例(m_dPerAssurescaleValue)是衡量账户风控风险的核心指标。当市场剧烈波动时,若维持担保比例过低,投资者可能面临追缴保证金甚至强平风险。本文将介绍如何使用 QMT Python API 实时监控信用账户状态,并在触发警戒线时自动执行还款策略。


1. 核心 API 与字段解析

QMT 提供了针对信用账户的丰富扩展接口,通过 get_trade_detail_data 函数可实时获取信用账户的负债及资产详情。

1.1 获取信用账户详情

调用方式:

acct_info = get_trade_detail_data(account_id, 'CREDIT', 'ACCOUNT')特

返回的 CCreditAccountDetail 对象包含以下关键风控字段:

  • m_dPerAssurescaleValue:个人维持担保比例
  • m_dFinEnrepaidBalance:可还款资金(融资已用/未还金额)
  • m_dTotalDebit:总负债
  • m_dAssureAsset:担保资产/净资产
  • m_dAvailable:可用资金金额

1.2 信用账户下单操作码(opType)

使用 passorder 进行还款或买卖时,需指定对应两融操作码:

  • 30:直接还券
  • 31:卖券还款
  • 32:直接还款(使用可用资金归还融资负债)

2. 实盘风控与自动还款策略逻辑

  1. 绑定账户:在 init 方法中使用 ContextInfo.set_account() 绑定信用账号。
  2. 定时监控:在 handlebar 或通过 run_time 触发监控逻辑。
  3. 触发预警:检查 m_dPerAssurescaleValue 是否低于预警线(如 150%)。
  4. 执行还款:若可用资金足够且存在融资负债,调用 passorder 执行 opType=32(直接还款)。

3. Python 策略完整源码示例

import time

def init(ContextInfo):
    # 设置两融信用账号
    ContextInfo.account_id = '6000000248'  # 替换为实际信用账号
    ContextInfo.set_account(ContextInfo.account_id)
    
    # 设置风控阈值
    ContextInfo.warning_ratio = 1.50   # 维持担保比例预警线 150%
    ContextInfo.target_ratio = 1.80    # 目标安全维持担保比例 180%
    
    print("两融自动化风控系统初始化完成...")

def handlebar(ContextInfo):
    # 仅在最新 Bar 或 Tick 来临时进行实时风控判定
    if not ContextInfo.is_last_bar():
        return
    
    # 获取信用账户信息
    credit_accounts = get_trade_detail_data(ContextInfo.account_id, 'CREDIT', 'ACCOUNT')
    if not credit_accounts:
        return
        
    account_detail = credit_accounts[0]
    
    # 获取当前维持担保比例与可用资金
    current_ratio = account_detail.m_dPerAssurescaleValue
    available_cash = account_detail.m_dAvailable
    fin_debit = account_detail.m_dFinCompactBalance # 融资负债金额
    
    print(f"[风控监测] 当前维持担保比例: {current_ratio*100:.2f}%, 可用资金: {available_cash:.2f}, 融资负债: {fin_debit:.2f}")
    
    # 判断是否触发维持担保比例预警
    if 0 < current_ratio < ContextInfo.warning_ratio:
        print(f"[警告] 维持担保比例 ({current_ratio*100:.2f}%) 低于预警线 ({ContextInfo.warning_ratio*100:.2f}%)!")
        
        # 若有融资负债且有可用资金,执行直接还款逻辑
        if fin_debit > 0 and available_cash > 100:
            repay_amount = min(available_cash, fin_debit)
            print(f"[执行还款] 发起直接还款指令,金额: {repay_amount:.2f}")
            
            # 使用 passorder 进行直接还款 (opType=32, orderType=1102 指定金额)
            passorder(
                32,                          # opType: 32 - 直接还款
                1102,                        # orderType: 1102 - 单股/单账号/金额方式下单
                ContextInfo.account_id,       # 资金账号
                '600000.SH',                 # 标的代码(直接还款填任意合规代码或主图代码即可)
                5,                           # prType: 5 - 最新价
                -1,                          # price
                repay_amount,                # volume: 还款金额
                'CreditRiskControl',         # 策略名称
                1,                           # quickTrade: 1 立即下单
                ContextInfo
            )


4. 注意事项与最佳实践

  1. 数据准确性:信用账户的资产与负债数据由柜台实时推送,确保在实盘模式(非回测/模拟)下运行策略。
  2. 执行频率:避免在每个行情 Tick 中频繁下单,可通过设置冷却时间或变量标记限制对同一笔还款的重复触发。
  3. 多余资金留存:实际还款时建议保留少量可用资金作为交易手续费预留,避免因资金刚好不够导致委托失败。