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

qmt 融券卖出实战:从券源查询到信用账户风险度实时监控

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

问题描述

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

Title: qmt 融券卖出实战:从券源查询到信用账户风险度实时监控

Question: 如何在 qmt 中编写融券卖出策略,并实时监控信用账户的维持担保比例防止爆仓?

解决方案

在 QMT (迅投策略交易系统) 的 Python API 中,针对信用账户(两融账户)进行融券卖出交易及风险控制,主要涉及三个核心步骤:查询可融券源执行融券卖出/买券还券 以及 实时监控维持担保比例与风险度


一、核心 API 接口说明

  1. 可融券源查询 (get_enable_short_contract)

    • 用法get_enable_short_contract(accId)
    • 功能:获取信用账户当前可融券的明细列表(包含证券代码 m_strInstrumentID、融券保证金比例 m_dSloRatio、可融数量 m_nEnableAmount 等对象属性)。
  2. 信用账户交易 (passorder)

    • 融券卖出opType = 28
    • 买券还券opType = 29
    • 直接还券opType = 30
    • 示例passorder(28, 1101, accId, '600000.SH', 5, -1, 1000, ContextInfo)
  3. 账户回调与风控监控 (account_callback)

    • 通过 ContextInfo.set_account(accId) 绑定账户后,当账户状态或资金变动时触发 account_callback(ContextInfo, accountInfo)
    • 关键属性
      • accountInfo.m_dPerAssurescaleValue: 个人维持担保比例。
      • accountInfo.m_dRealRiskDegree: 实时风险度。
      • accountInfo.m_dSloDebt: 融券负债。

二、完整融券卖出与风控策略源码示例

#encoding:gbk
import time

def init(ContextInfo):
    # 设定信用资金账号
    ContextInfo.accId = '6000000248'
    ContextInfo.set_account(ContextInfo.accId)
    
    # 设置风控阀值:维持担保比例低于 150% 时预警并止损平仓
    ContextInfo.min_assure_scale = 1.50
    # 策略运行标志位
    ContextInfo.has_traded = False

def handlebar(ContextInfo):
    if not ContextInfo.is_last_bar():
        return
    
    # 1. 检查并打印可用券源
    short_contracts = get_enable_short_contract(ContextInfo.accId)
    target_code = '600000.SH'
    can_short = False
    
    for item in short_contracts:
        if item.m_strInstrumentID == target_code and item.m_nEnableAmount > 0:
            can_short = True
            print(f"找到券源 {target_code},可融数量: {item.m_nEnableAmount},保证金比例: {item.m_dSloRatio}")
            break
            
    # 2. 满足条件执行融券卖出(仅下单一次示例)
    if can_short and not ContextInfo.has_traded:
        # opType=28: 融券卖出,orderType=1101: 单股单账号股数下单,prType=5: 最新价
        passorder(28, 1101, ContextInfo.accId, target_code, 5, -1, 1000, ContextInfo)
        print(f"对 {target_code} 发起融券卖出 1000 股")
        ContextInfo.has_traded = True

def account_callback(ContextInfo, accountInfo):
    """
    信用账户回调函数:实时监控维持担保比例,防止爆仓
    """
    if accountInfo.m_strAccountID != ContextInfo.accId:
        return
        
    # 获取维持担保比例与实时风险度
    assure_scale = accountInfo.m_dPerAssurescaleValue
    risk_degree = accountInfo.m_dRealRiskDegree
    
    print(f"[账户监控] 维持担保比例: {assure_scale:.2f}, 实时风险度: {risk_degree:.2f}")
    
    # 维持担保比低于预警线触发风控逻辑
    if 0 < assure_scale < ContextInfo.min_assure_scale:
        print(f"【警告】当前维持担保比 {assure_scale:.2f} 低于预警线 {ContextInfo.min_assure_scale}!执行买券还券止损。")
        # opType=29: 买券还券,以最新价买入平仓
        passorder(29, 1101, ContextInfo.accId, '600000.SH', 5, -1, 1000, ContextInfo)

三、实战注意事项

  1. 券源时效性:行情波动或全市场争抢时,券源数量变化极快。建议在下发 passorder 前调用 get_enable_short_contract 实时校验 m_nEnableAmount
  2. 买券还券与直接还券的区别
    • opType=29 (买券还券):用资金从二级市场买入股票还券。
    • opType=30 (直接还券):直接将持仓中的现券划转归还融券负债。
  3. 回测机制限制:融券卖出、两融负债及维持担保比例查询主要适用于实盘运行模式,回测模式下建议使用虚拟账号逻辑进行模拟拟合。