问题描述
新手学习,请教各位老师,deal_callback - 账号成交状态变化主推函数,股票交易时如何获取买、卖方向:是“m_nDirection: EEntrustBS,买卖方向”,48 代表买,49 代表卖?还是这个“m_nOffsetFlag: EOffset_Flag_Type,开平,股票的买卖”,48 代表买,49 代表卖?
解决方案
在 QMT 平台的 deal_callback(账号成交状态变化主推函数)中,针对股票交易,应该使用 m_nOffsetFlag 来获取买卖方向。
详细解析
根据 QMT API 官方文档的底层对象属性说明:
-
m_nDirection(EEntrustBS 类型):- 释义为“操作,多空,期货多空”。
- 注意:在股票交易中,因为 A 股普通交易只有做多机制,所以股票买卖的
m_nDirection永远是 48(代表买入/多)。
-
m_nOffsetFlag(EOffset_Flag_Type 类型):- 释义为“操作,期货开平,股票买卖其实就是开平”。
- 在股票交易中,买入相当于“开仓”,卖出相当于“平仓”。
- 48 代表买入(开仓)
- 49 代表卖出(平仓)
结论
对于股票交易,请通过判断 dealInfo.m_nOffsetFlag 的值来确定买卖方向:
dealInfo.m_nOffsetFlag == 48:股票买入dealInfo.m_nOffsetFlag == 49:股票卖出
代码示例
def init(ContextInfo):
# 设置对应的资金账号
ContextInfo.set_account('6000000058')
def handlebar(ContextInfo):
pass
def deal_callback(ContextInfo, dealInfo):
# 获取股票代码
stock_code = dealInfo.m_strInstrumentID
# 获取成交数量
volume = dealInfo.m_nVolume
# 获取成交价格
price = dealInfo.m_dPrice
# 判断买卖方向
if dealInfo.m_nOffsetFlag == 48:
direction = "买入"
elif dealInfo.m_nOffsetFlag == 49:
direction = "卖出"
else:
direction = "其他"
print(f"收到成交回报: {direction} {stock_code}, 数量: {volume}, 价格: {price}")
通过上述代码,您就可以在实盘或模拟交易中准确地捕获股票的买卖成交动作了。