WaitEvent什么时候会被调用?

 

想在OnTrade中处理交易事件,看到OnTrade调用了CheckTradeState函数,在CheckTradeState中调用了各交易事件的处理函数,比如:TradeEventPositionStopTake、TradeEventPositionOpened、TradeEventPositionClosed、TradeEventPositionModified等,但是这些函数是否被调用取决于IS_WAITING_POSITION_STOP_TAKE、IS_WAITING_POSITION_OPENED、IS_WAITING_POSITION_CLOSED,查看这些宏的定义:

#define IS_WAITING_POSITION_OPENED         ((m_waiting_event&TRADE_EVENT_POSITION_OPEN)!=0)

#define IS_WAITING_POSITION_VOLUME_CHANGED ((m_waiting_event&TRADE_EVENT_POSITION_VOLUME_CHANGE)!=0)

#define IS_WAITING_POSITION_MODIFIED       ((m_waiting_event&TRADE_EVENT_POSITION_MODIFY)!=0)

#define IS_WAITING_POSITION_CLOSED         ((m_waiting_event&TRADE_EVENT_POSITION_CLOSE)!=0)

#define IS_WAITING_POSITION_STOP_TAKE      ((m_waiting_event&TRADE_EVENT_POSITION_STOP_TAKE)!=0)

主要是看m_waiting_event的相应标志位有没有设置,而m_waiting_event是通过WaitEvent函数设置,但是没有哪个地方有调用WaitEvent,请问要在哪里调用WaitEvent呢?

 
snowmandxp:

想在OnTrade中处理交易事件,看到OnTrade调用了CheckTradeState函数,在CheckTradeState中调用了各交易事件的处理函数,比如:TradeEventPositionStopTake、TradeEventPositionOpened、TradeEventPositionClosed、TradeEventPositionModified等,但是这些函数是否被调用取决于IS_WAITING_POSITION_STOP_TAKE、IS_WAITING_POSITION_OPENED、IS_WAITING_POSITION_CLOSED,查看这些宏的定义:

#define IS_WAITING_POSITION_OPENED         ((m_waiting_event&TRADE_EVENT_POSITION_OPEN)!=0)

#define IS_WAITING_POSITION_VOLUME_CHANGED ((m_waiting_event&TRADE_EVENT_POSITION_VOLUME_CHANGE)!=0)

#define IS_WAITING_POSITION_MODIFIED       ((m_waiting_event&TRADE_EVENT_POSITION_MODIFY)!=0)

#define IS_WAITING_POSITION_CLOSED         ((m_waiting_event&TRADE_EVENT_POSITION_CLOSE)!=0)

#define IS_WAITING_POSITION_STOP_TAKE      ((m_waiting_event&TRADE_EVENT_POSITION_STOP_TAKE)!=0)

主要是看m_waiting_event的相应标志位有没有设置,而m_waiting_event是通过WaitEvent函数设置,但是没有哪个地方有调用WaitEvent,请问要在哪里调用WaitEvent呢?

1、标记上处理OnTrade事件: OnTradeProcess(true);

2、通过WaitEvent 设置想侦听的交易事件: WaitEvent(TRADE_EVENT_POSITION_OPEN| TRADE_EVENT_POSITION_CLOSE); // 只侦听开仓与平仓事件

3、重载虚成员函数(事件): TradeEventPositionOpened, TradeEventPositionClosed。在发生开仓和平仓的时候,就能收到事件通知了。

原因: