und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5
- Ansichten:
- 993
- Rating:
- 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

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

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

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

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.