3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
你好!这是一个非常经典且容易混淆的问题。在 QMT 平台中进行股票交易时,获取买卖方向应该使用 m_nOffsetFlag 字段。
在 QMT 的底层设计中,为了兼容期货和股票,字段的定义带有明显的期货特征(即区分“多空方向”和“开平仓”)。
对于股票交易而言:
m_nOffsetFlag(开平标志):代表了股票的实际买卖操作。
48 代表 买入(对应期货的开仓 Open)49 代表 卖出(对应期货的平仓 Close)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_nOffsetFlag,48 是买,49 是卖!