3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在实盘量化交易中,及时响应账户资金变化和风险状态至关重要。QMT (迅投) Python API 提供了交易回报实时主推机制,其中 account_callback 函数能够以事件驱动的方式,实时接收资金账号的状态变更推送。
account_callback 是 QMT 平台的实时主推回调函数之一,专门用于监听资金账号的状态更新(如资金变动、账号连接状态、风险度触发等)。
def account_callback(ContextInfo, accountInfo):
# 账户状态或资金更新时自动触发
pass
init(ContextInfo) 函数中使用 ContextInfo.set_account(account_id) 绑定目标资金账号,否则无法接收主推事件。在 account_callback 回调中,accountInfo 参数包含了丰富的账户属性:
| 属性字段 | 说明 | 适用品种 |
|---|---|---|
m_strAccountID |
资金账号 ID | 全品种 |
m_strStatus |
账号状态(如登录、断开等) | 全品种 |
m_dBalance |
账户总资产 / 动态权益 | 全品种 |
m_dAvailable |
可用资金 | 全品种 |
m_dPositionProfit |
持仓盈亏 | 全品种 |
m_dStockValue |
股票总市值 | 股票/两融 |
m_dRisk |
风险度(冻结资金/可用资金) | 期货 |
m_dAssureAsset |
净资产 | 两融/信用账号 |
以下示例展示了如何在 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}")
init 中是否正确调用了 ContextInfo.set_account()。account_callback 会多次触发。建议在回调函数中避免进行复杂的耗时计算,保证回调处理的轻量高效。