Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Twitter!
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
Bibliotheken

TradeTransactions - Bibliothek für den MetaTrader 5

Ansichten:
843
Rating:
(30)
Veröffentlicht:
2018.11.09 08:26
\MQL5\Indicators\fxsaber\ \MQL5\Experts\fxsaber\ \MQL5\Include\fxsaber\TradeTransactions\
Resource.mqh (0.63 KB) ansehen
String.mqh (0.45 KB) ansehen
\MQL5\Include\
MQL5 Freelance Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Asynchrone Handelsaufträge haben einen großen Vorteil - hohe Geschwindigkeit beim Versand in großen Mengen. Die Verbreitung solcher Aufträge wird jedoch durch eine Unannehmlichkeit begleitet - die Ergebnisse der Auftragsausführung sind nur in OnTradeTransaction zu sehen, so dass ein Benutzer ein Ereignismodell seiner Handelsstrategie erstellen müssen, wenn sie die asynchrone Ausführung wünschen. Dies ist nicht immer einfach (EAs) und manchmal sogar unmöglich (Skripte).

Die Bibliothek löst dieses Problem. Sie bietet jederzeit Zugriff auf alle Transaktionen im Handelsterminal (vollständige Daten der entsprechenden OnTradeTransaction) seit dem Start der Anwendung, was den Prozess der asynchronen Ausführung Ihrer Programme vereinfacht.

Beispiele

Das Beispiel unten zeigt das Arbeitsprinzip der Bibliothek:

// Ausdruck aller Transaktionen ohne OnTradeTransaction

#include <fxsaber\TradeTransactions\TradeTransactions.mqh> // Zugriff auf die Daten von OnTradeTransaction irgendwo im Programm

TRADETRANSACTIONS Transactions; // Handelstransaktionen

const bool Init = EventSetMillisecondTimer(100);

void OnTimer()
{
  static uint Total = 0;
  const uint NewTotal = Transactions.Total(); // Anzahl der gesicherten Transaktionen
  
  for (uint i = Total; i < NewTotal; i++) // Schleife über alle neue Transaktionen
  {
    MqlTradeTransaction Trans;
    MqlTradeRequest Request;
    MqlTradeResult Result;
    
    // Abfrage und Ausdruck aller Daten der jeweiligen Transaktion.
    Print(TimeToString(Transactions[i].Get(Trans, Request, Result)) + "\n" + 
          ToString(Trans) + ToString(Request) + ToString(Result));        
  }
  Total = NewTotal;
}

Starten Sie diesen EA und versuchen Sie, Handelsaufträge manuell auszuführen. Der Expert Advisor druckt alle Details so aus, als ob er OnTradeTransaction verwenden würde. Obwohl er das nicht tut!

Es kann viele praktische Szenarien für die Nutzung solcher Funktionen geben. Zum Beispiel, wenn Sie einen mehrere Symbole handeln. Zum Beispiel, wenn Sie mehrere Positionen innerhalb des Codes schnell öffnen müssen. Wenn sie offen sind, können Sie zusätzliche Handelsoperationen durchführen, ohne die Funktion OnCalculate zu verlassen.

Da wir häufig auf das Ergebnis eines massiven Versands von asynchronen Aufträgen warten müssen, verfügt die Bibliothek über die entsprechende Fähigkeit, die anhand eines solchen Beispiels schnell bewertet werden kann.

// Beispiel für massive asynchrone Handelsaufträge mit Warten auf ein Ergebnis.

#include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006
#include <fxsaber\TradeTransactions\TradeTransactions.mqh> // Zugriff auf die Daten von OnTradeTransaction irgendwo im Programm

TRADETRANSACTIONS Transactions; // Handelstransaktionen

// Eröffnen einer Vielzahl von Positionen, so schnell wie möglich. Rückkehr, wenn die Positionen eröffnet wurden.
bool OpenPositions( const int Amount = 10 )
{
  uint RequestID[];
  
  for (int i = ArrayResize(RequestID, Amount) - 1; i >= 0; i--)
  {
    const string Symb = SymbolName(i, true);
    
    RequestID[i] = OrderSendAsync(Symb, OP_BUY, 1, SymbolInfoDouble(Symb, SYMBOL_ASK), 100, 0, 0); // Senden des asynchronen Auftrags
  }
  
  return(Transactions.Waiting(RequestID)); // Warten auf die Serverantwort von allen asynchronen Aufträgen
}

// Alles schließen, so schnell wie möglich. Rückkehr, sobald alles bestätigt wurde.
bool CloseAll()
{
  uint RequestID[];
  
  for (int i = ArrayResize(RequestID, OrdersTotal()) - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS))
      // Senden asynchroner Aufträge
      RequestID[i] = (OrderType() <= OP_SELL) ? OrderCloseAsync(OrderTicket(), OrderLots(), OrderClosePrice(), 100) : OrderDeleteAsync(OrderTicket());
  
  return(Transactions.Waiting(RequestID)); // Warten auf die Serverantwort von allen asynchronen Aufträgen
}

void OnStart()
{
  if (OpenPositions())
    Print(CloseAll());
}

Natürlich ist dies ein Skript, aber es erlaubt trotzdem das Arbeiten mit Transaktionen mittels der Bibliothek. Der Start zeigt, wie man schnell mehrere Handelspositionen/Aufträge öffnet und schließt.

Eigenschaften

  • Der Code von Indicators\fxsaber\TradeTransactions.mq5 sollte kompiliert werden.
  • Es wird die Bibliothek TypeToBytes verwendet.
  • Der Quellcode der Bibliothek (ResourceData.mqh) bietet eine Universalklasse, die es Ihnen ermöglicht, bequem die Daten von Resources zu sichern oder zu lesen.

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

Skyscraper Skyscraper

Ein Trendindikator nach Art des NRTR mit einer zusätzlichen Mittellinie.

XRSI_Candle_Vol_Zer_Alerts XRSI_Candle_Vol_Zer_Alerts

Der Indikator XRSI_Candle_Vol_Zer bietet Alerts, sendet E-Mails und Push-Benachrichtigungen bei einem neuen Handelssignal.

Easy Canvas Easy Canvas

Die Bibliothek und die Klasse iCanvas vereinfachen das Programmschreiben beim Verwenden von Hintergründen.

Previous Candle Breakdown 3 Previous Candle Breakdown 3

"Previous Candle Breakdown" Expert Advisor.