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

QMT API deal_callback 账号成交状态变化主推函数中如何获取股票买卖方向?

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

问题描述

deal_callback - 账号成交状态变化主推函数中,如何获取买、卖方向

新手学习,请教各位老师,deal_callback - 账号成交状态变化主推函数,股票交易时如何获取买、卖方向:是“m_nDirection: EEntrustBS,买卖方向”,48 代表买,49 代表卖?还是这个“m_nOffsetFlag: EOffset_Flag_Type,开平,股票的买卖”,48 代表买,49 代表卖?

解决方案

你好!这是一个非常经典且容易混淆的问题。在 QMT 平台中进行股票交易时,获取买卖方向应该使用 m_nOffsetFlag 字段。

详细解答:

在 QMT 的底层设计中,为了兼容期货和股票,字段的定义带有明显的期货特征(即区分“多空方向”和“开平仓”)。

对于股票交易而言:

  1. m_nOffsetFlag(开平标志)代表了股票的实际买卖操作

    • 48 代表 买入(对应期货的开仓 Open
    • 49 代表 卖出(对应期货的平仓 Close
  2. m_nDirection(买卖/多空方向):在股票普通买卖中,这个字段永远是 48(代表做多)。因为 A 股普通交易只能做多,不能做空(融券除外),所以系统默认股票的方向都是“多头”。

官方文档印证:

根据 QMT API 文档附录说明:

m_nDirection: EEntrustBS 类型,操作,多空,期货多空,股票买卖永远是 48,其他的 dir 同理。
m_nOffsetFlag: EOffset_Flag_Type 类型,操作,期货开平,股票买卖其实就是开平

代码示例:

在你的策略中,可以这样编写 deal_callback 来判断股票的买卖方向:

def deal_callback(ContextInfo, dealInfo):
    # 获取股票代码
    stock_code = dealInfo.m_strInstrumentID
    # 获取成交数量
    volume = dealInfo.m_nVolume
    # 获取成交价格
    price = dealInfo.m_dPrice
    
    # 判断买卖方向
    if dealInfo.m_nOffsetFlag == 48:
        direction_str = "买入"
    elif dealInfo.m_nOffsetFlag == 49:
        direction_str = "卖出"
    else:
        direction_str = "其他操作"
        
    print(f"收到成交回报:{direction_str} {stock_code},成交量:{volume},成交价:{price}")

总结:做股票策略时,请认准 m_nOffsetFlag48 是买,49 是卖!