Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Facebook!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Expert Advisors

TypePendingOrderTriggered - Experte für den MetaTrader 5

Ansichten:
939
Rating:
(25)
Veröffentlicht:
2017.04.03 10:24
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Der EA zeigt das Beispiel der Lösung der Aufgabe: wie man den Moment bestimmen soll, wenn eine Pending Order ausgelöst wurde?

Wie funktioniert der EA: in der Funktion OnTradeTransaction() wir erwarten eine Transaktion des Typs "TRADE_TRANSACTION_DEAL_ADD":

TRADE_TRANSACTION_DEAL_ADD

Das Hinzufügen der Transaktion zur History. Das wird als Ergebnis der Ausführung der Order oder Operationen mit dem Kontostand.


Wenn wir eine solche Transaktion gefangen haben, dann fügen wir direkt die Flagge "bln_find_order" der Suche des Orders ein und ordnen der Variable "ul_find_order" das Ticket des Orders zu:

//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//+------------------------------------------------------------------+
//| TRADE_TRANSACTION_DEAL_*                                         |
//| The following fields in MqlTradeTransaction structure            |
//| are filled for trade transactions related to deals handling      |
//| (TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE       |
//| and TRADE_TRANSACTION_DEAL_DELETE):                              |
//|  •deal - deal ticket;                                            |
//|  •order - order ticket, based on which a deal has been performed;|
//|  •symbol - deal symbol name;                                     |
//|  •type - trade transaction type;                                 |
//|  •deal_type - deal type;                                         |
//|  •price - deal price;                                            |
//|  •price_sl - Stop Loss price (filled, if specified in the order, |
//|  •based on which a deal has been performed);                     |
//|  •price_tp - Take Profit price (filled, if specified             |
//|   in the order, based on which a deal has been performed);       |
//|  •volume - deal volume in lots.                                  |
//|  •position - the ticket of the position that was opened,         |
//|   modified or closed as a result of deal execution.              |
//|  •position_by - the ticket of the opposite position.             |
//|   It is only filled for the out by deals                         |
//|   (closing a position by an opposite one).                       |
//+------------------------------------------------------------------+
//--- 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)
     {
      bln_find_order=true;                // true -> you should look for a order
      ul_find_order=trans.order;
     }
  }

In OnTick() überprüfen wir die ganze Zeit den Zustand der Flagge "bln_find_order" und wenn die Flagge true gleich ist — dann beginnen wir die Suche nach dem Order.

  • Zuerst versuchen wir über das Ticket den Ordner zu finden
  • Wenn der Versuch erfolgreich ist (das heißt, dass der Order bereits in der History eingeschrieben ist), bestimmen wir den Typ dieses Orders. Für den Aufruf nach Eigenschaften des Orders aus der Handelshistory muss man  HistoryOrderGetInteger verwenden.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(bln_find_order) // true -> you should look for a order
     {
      static long counter=0;
      Print("Attempt number ",counter);
      ResetLastError();
      if(HistoryOrderSelect(ul_find_order))
        {
         long type_order=HistoryOrderGetInteger(ul_find_order,ORDER_TYPE);
         if(type_order==ORDER_TYPE_BUY_LIMIT || type_order==ORDER_TYPE_BUY_STOP ||
            type_order==ORDER_TYPE_SELL_LIMIT ||type_order==ORDER_TYPE_SELL_STOP)
           {
            Print("The pending order ",ul_find_order," is found! Type of order is ",
                  EnumToString((ENUM_ORDER_TYPE)HistoryOrderGetInteger(ul_find_order,ORDER_TYPE)));
            bln_find_order=false;         // true -> you should look for a order
            counter=0;
            return;
           }
         else
           {
            Print("The order ",ul_find_order," is not pending");
            bln_find_order=false;         // true -> you should look for a order
            return;
           }
        }
      else
        {
         Print("Order ",ul_find_order," is not find, error#",GetLastError());
        }
      counter++;
     }
  }

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/17610

XCCXCandleKeltner XCCXCandleKeltner

Der Keltner-Kanal, der bezüglich des Mittelwertes des Oszillators XCCX in der Kerzenart gebaut ist.

STD_HTF STD_HTF

Der Indikator STD mit der Veränderungsmöglichkeit des Timeframes des Indikators in den Eingangsparametern

HistoryPositionInfo HistoryPositionInfo

Es liefert den Gewinn der Positionen in Punkten aufgrund der Handelshistory zurück.

CDir (MT5) - die Klasse für das Erhalten des Titels des Katalogs CDir (MT5) - die Klasse für das Erhalten des Titels des Katalogs

Die Klasse CDir ist für das Erhalten der Angaben über die Dateien und die Ordner außer "dem Sandkasten" MQL5 ähnlich des Befehls MS-DOS Dir vorgesehen. Es ist der Aufruf der system-DLL eingesetzt, deshalb es ist nötig, ihre Verwendung zu erlauben.