3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
遇到总资产与“可用资金 + 持仓市值”不符的情况,在QMT实盘或模拟交易中非常常见。您发现的差额(156元)并不是钱真的“少了”,而是由于底层资金账户的统计口径和部分隐藏状态字段导致的。
在QMT的底层逻辑中,总资产(m_dBalance) ≠ 可用金额(m_dAvailable) + 总市值(m_dInstrumentValue)。完整的计算公式通常还包含以下几个部分:
为了找出这156元到底在哪个字段里,您可以编写一段简单的QMT Python策略,调用 get_trade_detail_data 接口,将账户的所有资金明细打印出来对账:
#coding:gbk
def init(ContextInfo):
# 替换为您的实际资金账号
ContextInfo.accid = '您的资金账号'
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 获取账户资金信息
account_list = get_trade_detail_data(ContextInfo.accid, 'stock', 'account')
if len(account_list) > 0:
acc = account_list[0]
print("=== 资金账户排查明细 ===")
print("总资产 (m_dBalance):", acc.m_dBalance)
print("可用金额 (m_dAvailable):", acc.m_dAvailable)
print("总市值 (m_dInstrumentValue):", acc.m_dInstrumentValue)
print("冻结金额 (m_dFrozenCash):", acc.m_dFrozenCash)
print("冻结手续费 (m_dFrozenCommission):", acc.m_dFrozenCommission)
print("买入待交收 (m_dBuyWaitMoney):", acc.m_dBuyWaitMoney)
print("卖出待交收 (m_dSellWaitMoney):", acc.m_dSellWaitMoney)
print("出入金净值 (m_dCashIn):", acc.m_dCashIn)
print("========================")
运行上述代码后,查看日志输出。您大概率会在 m_dFrozenCash(冻结金额)、m_dFrozenCommission(冻结手续费)或待交收字段中找到这156元的差额。如果是盘中交易产生的手续费或印花税冻结,通常在当日晚间券商清算结算后(一般在晚上20:00 - 22:00之后),总资产和可用资金的数据就会恢复精确对应。