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

qmt 平台如何使用 account_callback 实时监控资金账号状态?(附完整风控代码)

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

问题描述

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

Title: qmt 实盘风控:利用 account_callback 实时监控资金账号状态

Question: qmt 怎么通过回调函数监听资金账号的登录和连接状态变化?

解决方案

qmt 实盘风控:利用 account_callback 实时监控资金账号状态

在实盘量化交易中,资金账号的断连、掉线或登录状态异常可能导致策略无法下单或无法风控。QMT 提供了 交易回报实时主推机制,通过 account_callback 回调函数,可以在账号状态发生变化时(如从正常连接变为断开连接)第一时间触发逻辑,实现风险预警与应急处理。


1. 核心机制与前提条件

  1. 绑定账号:必须在策略初始化函数 init(ContextInfo) 中通过 ContextInfo.set_account(account_id) 显式绑定账号,系统才会向策略推送该账号的状态变动。
  2. 运行模式:交易回报实时主推函数仅在 实盘运行模式 下生效,在回测及模拟运行模式下不会触发。

2. account_callback 函数说明

函数语法

def account_callback(ContextInfo, accountInfo):
    pass

参数说明

  • ContextInfo:全局上下文对象。
  • accountInfo:资金账号对象(account),内含多种账户状态与资金属性。

关键属性

属性名 说明
m_strAccountID 资金账号 ID
m_strStatus 资金账号当前状态(如连接状态等字符串)
m_nBrokerType 账号类型(1-期货, 2-股票, 3-信用等)
m_dAvailable 可用金额
m_dBalance 动态权益/总资产

3. 完整示例代码:账号状态监控与风控告警

以下是一个完整的 QMT 策略示例,展示了如何注册账号并在状态发生变化时进行监控与打印逻辑:

#encoding:gbk

def init(ContextInfo):
    # 1. 设置需要监听的资金账号(必填,否则无法接收主推消息)
    ContextInfo.account_id = '6000000058'
    ContextInfo.set_account(ContextInfo.account_id)
    print(f"[Init] 策略启动,已绑定账号: {ContextInfo.account_id}")

def handlebar(ContextInfo):
    # 主逻辑执行,例如打单或风控指标计算
    pass

def account_callback(ContextInfo, accountInfo):
    """
    资金账号状态变动实时主推回调
    """
    acc_id = accountInfo.m_strAccountID
    status = accountInfo.m_strStatus
    avail = accountInfo.m_dAvailable
    balance = accountInfo.m_dBalance
    
    print(f"[账号监控] 账号: {acc_id} | 状态变更: {status} | 可用资金: {avail:.2f} | 动态权益: {balance:.2f}")
    
    # 异常状态判断与风控处理逻辑
    if status != "正常" and status != "已登录":  # 具体状态字符串需结合柜台返回值
        print(f"[警告] 资金账号 {acc_id} 状态异常 ({status})!触发风控预警逻辑!")
        # 可以在此添加微信/钉钉机器人通知,或暂停策略任务

4. 实盘风控注意事项

  1. 断线处理:若监听到账号状态断开,应及时暂停定时任务或下单请求,避免产生重复委托或未知的单边风险。
  2. 配合其他回调使用:建议同时配合 order_callback(委托主推)、deal_callback(成交主推)和 orderError_callback(下单异常主推)构建完整的实盘实时监控体系。