Wie kann man in MQL5 prüfen, ob eine Order im SL geschlossen wurde?

 

Für viele sicherlich eine einfache Antwort auf die Frage:

Wie kann man in MQL5 prüfen, ob eine Order im SL geschlossen wurde?

Per MQL4 war das relativ einfach, auch konnte man dort einfach einen OrderClosePrice() auslesen.

Wer hat eine geniale Antwort?


Danke.

 
WOLFRAM STEFFEN SIEGERT:

Für viele sicherlich eine einfache Antwort auf die Frage:

Wie kann man in MQL5 prüfen, ob eine Order im SL geschlossen wurde?

Per MQL4 war das relativ einfach, auch konnte man dort einfach einen OrderClosePrice() auslesen.

Wer hat eine geniale Antwort?


Danke.

https://www.mql5.com/de/docs/constants/tradingconstants/dealproperties#enum_deal_reason
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Handelskonstanten / Eigenschaften der Deals
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Handelskonstanten / Eigenschaften der Deals
  • www.mql5.com
Eigenschaften der Deals - Handelskonstanten - Konstanten, Enumerationen und Strukturen - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 

Und geht am besten über die TrancActions:

void OnTradeTransaction(const MqlTradeTransaction& trans,const MqlTradeRequest& request,const MqlTradeResult& result)
   {
    if(trans.type!=TRADE_TRANSACTION_DEAL_ADD)return;
    if(!HistoryDealSelect(trans.deal))return;
    if(HistoryDealGetInteger(trans.deal,DEAL_MAGIC)!=InpMagicNumber)return;
    if(HistoryDealGetInteger(trans.deal,DEAL_ENTRY)!=DEAL_ENTRY_OUT)return;
    if(HistoryDealGetString(trans.deal,DEAL_SYMBOL)!=_Symbol)return;
    long reason=HistoryDealGetInteger(trans.deal,DEAL_REASON);
    if(reason==DEAL_REASON_SL)
       {
        Print(__LINE__,__FILE__," we are afraid SL is hit);
       }
    else if(reason==DEAL_REASON_TP)
       {
        Print(__LINE__,__FILE__," TP is HIT!);
       }
   }
 
Alternativ natürlich über die order reason, quasi das gleiche wenn der deal schin weg ist
 
Euch erst einmal vielen Dank. Das hilft mir schon weiter.
 
probier mal:

void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result)
{
 
 if(trans.type != TRADE_TRANSACTION_DEAL_ADD)
    return;

  if(!HistoryDealSelect(trans.deal))
    return;

lastTradeHittedbySL(  trans,  request,   result);

}

void lastTradeHittedbySL(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result)
{

//--- get transaction type as enumeration value
  ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
  if(type==TRADE_TRANSACTION_DEAL_ADD)
  {
    long     deal_entry        =0;
    double   deal_profit       =0.0;
    double   deal_volume       =0.0;
    string   deal_symbol       ="";
    long     deal_magic        =0;
    long     deal_reason       =-1;
    if(HistoryDealSelect(trans.deal))
    {
      deal_entry=HistoryDealGetInteger(trans.deal, DEAL_ENTRY);
      deal_profit=HistoryDealGetDouble(trans.deal, DEAL_PROFIT);
      deal_volume=HistoryDealGetDouble(trans.deal, DEAL_VOLUME);
      deal_symbol=HistoryDealGetString(trans.deal, DEAL_SYMBOL);
      deal_magic=HistoryDealGetInteger(trans.deal, DEAL_MAGIC);
      deal_reason=HistoryDealGetInteger(trans.deal, DEAL_REASON);
    }
    else
      return;

    if(deal_symbol==m_symbol.Name() && deal_magic==SystemMagicNumber) 
      if(deal_entry==DEAL_ENTRY_OUT)
      {
        if(deal_reason==DEAL_REASON_SL)
        {
          slHit = true;
        }
        else slHit=false;
        //use this for TP settings
        //else if(deal_reason==DEAL_REASON_TP)

      }
  }

}

Grund der Beschwerde: