当stopLoss或takeProfit发生时触发并捕获事件

时间:2015-12-22 15:48:33

标签: algorithmic-trading mql4

MQL4 中,我知道如何设置 stopLoss takeProfit

然而,当这些事件真正发生时,我想做点别的事。

是否有与此相关的事件监听器?

2 个答案:

答案 0 :(得分:0)

不,没有这样的直接事件监听器。

可是:

我们可以创建一个这样的,并在 OnTick() 事件绑定处理程序的基础上测试它的激活。

void OnTick(){                         // MQL4 system-initiated event-handler
// ---
   myOnTickStealthTP_EventMONITOR();   //      my Event Monitor
   myOnTickStealthSL_EventMONITOR();   //      my Event Monitor
// ---       

// other code

}

答案 1 :(得分:0)

很遗憾, MQL4 中没有交易事件。

但是,它可以这样模拟(仅逻辑代码,可能无法编译):

#property copyright "No copyright, can be used freely, Joseph Lee"
#property link      "https://www.facebook.com/joseph.fhlee"

int vaiTicketList[];
int start() {
    int viIndex;

    // -----------------------------------------------------------
    // EVENT CHECK SECTION:
    // Check vaiTicketList (populated in the previous cycle) to see if
    // each of the (previously) open ticket is still currently open.
    // -----------------------------------------------------------

    for( viIndex=0; viIndex<ArrayRange(vaiTicketList,0); viIndex++) {
        // Check if Ticket which was previously opened in the last
        // cycle is no longer open now.

        if(!OrderSelect( vaiTicketList[viIndex], SELECT_BY_TICKET ) ) {
            // -----------------------------------
            // EVENT CATEGORIZATION: 
            // -----------------------------------
            // Handle possible events here:
            // -- Close event: (OrderSelect( ticket, SELECT_BY_TICKET, MODE_HISTORY) == true)
            if( OrderSelect(vaiTicketList[viIndex], SELECT_BY_TICKET, MODE_HISTORY) )
                eventTrade_Closed( vaiTicketList[viIndex] );

            // -- StopLoss (  Buy:  When OrderClosePrice() <= OrderStopLoss(), 
            //                Sell: When OrderClosePrice() >= OrderStopLoss() )
            // -- TakeProfit (Buy:  When OrderClosePrice() >= OrderTakeProfit(),
            //                Sell: When OrderClosePrice() <= OrderTakeProfit() )
            // -- Expiration, Cancel, etc, etc
        }
    }

    // -----------------------------------------------------------
    // Store a list of all currently OPEN trade tickets into array.
    // This is used to be compared in the next tick.
    // -----------------------------------------------------------
    ArrayResize( vaiTicketList, OrdersTotal() );
    for ( viIndex=0; viIndex<OrdersTotal();  viIndex++) {
        if(OrderSelect(viIndex, SELECT_BY_POS, MODE_TRADES)) {
            vaiTicketList[viIndex]  = OrderTicket();
        }
    }
    // -----------------------------------------------------------
};

// ---------------------------------------
// This is the Trade Close event handler
// ---------------------------------------
bool eventTrade_Closed( int pviTicket ) {
    bool    vbIsEventBubble = true;
    // Do something here to handle the event.
    // FEATURE: vbIsEventBubble TRUE will allow event bubbles.

    return( vbIsEventBubble);
}

bool eventTrade_otherPossibleEvents1() {};
bool eventTrade_otherPossibleEvents2() {};
bool eventTrade_otherPossibleEvents3() {};
bool eventTrade_otherPossibleEventsN() {};

沿着这条线的东西。希望它有所帮助。