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

如何在 QMT 策略中使用 account_callback 函数实时监控账户资金和状态推送?

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

问题描述

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

Title: QMT 实盘风控:利用 account_callback 监听资金账号状态变化

Question: 如何在 QMT 策略中使用 account_callback 函数实时监控账户资金和状态推送?

解决方案

QMT 实盘风控:利用 account_callback 监听资金账号状态变化

在实盘量化交易中,及时响应账户资金变化和风险状态至关重要。QMT (迅投) Python API 提供了交易回报实时主推机制,其中 account_callback 函数能够以事件驱动的方式,实时接收资金账号的状态变更推送。


1. account_callback 函数概述

account_callback 是 QMT 平台的实时主推回调函数之一,专门用于监听资金账号的状态更新(如资金变动、账号连接状态、风险度触发等)。

核心语法

def account_callback(ContextInfo, accountInfo):
    # 账户状态或资金更新时自动触发
    pass

注意事项

  1. 绑定资金账号:必须在 init(ContextInfo) 函数中使用 ContextInfo.set_account(account_id) 绑定目标资金账号,否则无法接收主推事件。
  2. 生效模式:主推函数仅在实盘运行模式下生效,回测模式下不会触发。

2. accountInfo 常用属性说明

account_callback 回调中,accountInfo 参数包含了丰富的账户属性:

属性字段 说明 适用品种
m_strAccountID 资金账号 ID 全品种
m_strStatus 账号状态(如登录、断开等) 全品种
m_dBalance 账户总资产 / 动态权益 全品种
m_dAvailable 可用资金 全品种
m_dPositionProfit 持仓盈亏 全品种
m_dStockValue 股票总市值 股票/两融
m_dRisk 风险度(冻结资金/可用资金) 期货
m_dAssureAsset 净资产 两融/信用账号

3. 完整实战代码示例:实时风控与资金监控

以下示例展示了如何在 QMT 中设置账户回调,实时监控可用资金变动并进行简单风控提示:

#encoding:gbk

def init(ContextInfo):
    # 设置需要监听的资金账号(必须)
    ContextInfo.account_id = '6000000058'
    ContextInfo.set_account(ContextInfo.account_id)
    print(f"策略初始化完成,成功绑定账号: {ContextInfo.account_id}")

def handlebar(ContextInfo):
    # 核心交易逻辑(逐Bar驱动)
    pass

def account_callback(ContextInfo, accountInfo):
    """
    资金账号状态及资金变更回调函数
    """
    # 过滤非目标账号的主推
    if accountInfo.m_strAccountID != ContextInfo.account_id:
        return
    
    account_id = accountInfo.m_strAccountID
    status = accountInfo.m_strStatus
    balance = accountInfo.m_dBalance
    available = accountInfo.m_dAvailable
    pos_profit = accountInfo.m_dPositionProfit
    
    print(f"[账户主推] 账号: {account_id} | 状态: {status}")
    print(f"[资金详情] 总资产: {balance:.2f} | 可用资金: {available:.2f} | 持仓盈亏: {pos_profit:.2f}")
    
    # 风控逻辑示例:可用资金低于阈值报警
    if available < 10000:
        print(f"[风控预警] 账号 {account_id} 可用资金不足 10,000 元!当前可用: {available:.2f}")

4. 常见问题与优化建议

  1. 未收到回调通知?
    • 检查 init 中是否正确调用了 ContextInfo.set_account()
    • 确认当前策略运行在实盘模式而非回测/模拟模式。
  2. 主推频率控制
    • 当盘中成交频繁时,account_callback 会多次触发。建议在回调函数中避免进行复杂的耗时计算,保证回调处理的轻量高效。