Bibliotheken: MT4Orders - Seite 69

 

Teil einer Anzeige von Freelance.

Конвертация должна быть выполнена в родном MQL5 без использования сторонних библиотек типа MT4Orders.

Der Entwickler sollte den Quellcode zur Verfügung stellen, bevor der Auftrag abgeschlossen ist, um zu überprüfen, wie die Konvertierung durchgeführt wird.

Anscheinend funktioniert irgendwo etwas nicht richtig.

 
fxsaber #:

Die Datei ist defekt.

---

Das Archiv enthält die neueste Version

// 01.06.2021
// Fix: Kompatibilität mit dem Compiler-Build 2449 und höher.
// Fix: Verbesserte Synchronisation. ByPass.mqh muss auf dem neuesten Stand sein.
// Hinzufügen: OrderLots(true) - synchronisierte Größe der ausgewählten Position, wobei alle Aufträge berücksichtigt werden, die diese Position schließen.
 
Vitaly Muzichenko #:

Die Datei ist defekt

Muss heruntergeladen werden.

 
fxsaber #:

Zum Herunterladen erforderlich.

Ja, in der Tat. Es ist ein Wunder, verschiedene Dateien.

Ich danke Ihnen!
 
// Liste ändern:
// 06.01.2022
// Fix: Genaue Definition von Positionseröffnungsdaten und Provisionsgröße. Funktioniert nur im ByPass-Modus korrekt.
// Add: OrderDealsAmount() hinzugefügt - die Anzahl der MT5-Deals, die an der Positionsbildung beteiligt sind. Funktioniert nur im ByPass-Modus korrekt.

Wer sich mit Teilausführungen und CloseBy-Überschneidungen beschäftigt, dem empfehle ich dieses Update.

 
fxsaber #:

Wer sich mit Teilausführungen und CloseBy-Überschneidungen beschäftigt, dem empfehle ich dieses Update.

Überprüfen Sie das Skript auf Berechnungsgenauigkeit.

#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // ByPass-Modus für genaue Berechnungen.
#include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006

// Zusammenfassung aller monetären Operationen - im Stil von MT5.
double GetProfitMT5( void )
{
  double Res = 0;
  
  if (HistorySelect(0, INT_MAX))
    for (int i = HistoryDealsTotal() - 1; i >= 0; i--)
    {
      const ulong Ticket = HistoryDealGetTicket(i);
      
      Res += HistoryDealGetDouble(Ticket, DEAL_PROFIT) +
             HistoryDealGetDouble(Ticket, DEAL_SWAP) +
             HistoryDealGetDouble(Ticket, DEAL_COMMISSION);
    }
    
  return(Res);
}

// Zusammenfassung aller monetären Operationen - im MT4-Stil.
double GetProfitMT4( void )
{
  double Res = 0;

  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)  
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      Res += OrderProfit() + OrderSwap() + OrderCommission();
    
  return(Res);
}

void OnStart()
{
  if (PositionsTotal())
    MessageBox("The script works only if there are no open positions."); // Prüfen Sie nur, ob es keine offenen Stellen gibt.
  else
  {
    const double ProfitMT5 = GetProfitMT5(); // Zusammenfassung aller monetären Operationen - im Stil von MT5.
    const double ProfitMT4 = GetProfitMT4(); // Zusammenfassung aller monetären Operationen - im MT4-Stil.
    
    // Vergleichen Sie die nach verschiedenen Methoden berechneten Summen der Bargeldtransaktionen.
    Alert("MT5 (" + DoubleToString(ProfitMT5, 8) + ") == MT4 (" + DoubleToString(ProfitMT4, 8) + ") - " +
          (string)(bool)!NormalizeDouble(ProfitMT4 - ProfitMT5, 8));
    Print(__MT4ORDERS__);
  }  
}


Das Ergebnis ist eine Zeile.

Alert: MT5 (0.00000000) == MT4 (-0.00500000) - false
Alert: MT5 (0.00000000) == MT4 (0.00000000) - true

false - MT4Orders hat irgendwo einen Fehler. Bitte bei komplizierten Konten prüfen. Wenn falsch - lassen Sie es mich wissen.

 
fxsaber #:

Prüfen Sie das Skript auf die Richtigkeit der Berechnungen.

Bitte prüfen Sie es bei komplizierten Konten.

Die Prüfung hat gezeigt, dass die Bibliothek mit einer sehr komplexen Handelsgeschichte perfekt funktioniert. Verlässlichkeit 100%.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Bibliotheken: MT4Orders

fxsaber, 2022.01.06 03:18 AM

// Liste ändern:
// 06.01.2022
// Fix: Genaue Definition von Positionseröffnungsdaten und Provisionsgröße. Funktioniert nur im ByPass-Modus korrekt.
// Add: OrderDealsAmount() hinzugefügt - die Anzahl der MT5-Deals, die an der Positionsbildung beteiligt sind. Funktioniert nur im ByPass-Modus korrekt.

Am Beispiel von CustomReport möchte ich Ihnen zeigen, wie es aussieht

Von links nach rechts die hervorgehobenen Stellen.

  • OrderDealsAmount. Es sind Positionen, die durch die entsprechende Anzahl von Transaktionen erzeugt wurden. Im Allgemeinen können dies nicht nur ENTRY_IN-Geschäfte sein, sondern auch andere Arten von Geschäften.
  • Aus diesem Grund können die Eröffnungspreise so gebrochen sein - der volumengewichtete Durchschnittspreis aller Geschäfte, die die Position gebildet haben.
  • Größe der Provision in Pips. Es sollte nicht sehr unterschiedlich sein (wenn das Volumen groß ist) auf ein Symbol. Andernfalls - MT4Orders Fehler.

Der Fall auf dem Screenshot ist recht einfach. Es gibt viel kompliziertere Fälle, in denen OrderDealsAmount in Zehnerschritten gemessen wird. Zum Beispiel kann es in MT5 Positionen mit demselben Ticket geben, die sich in der Laufzeit nicht überschneiden. MT5-GUI zeigt an, dass es sich um eine Position handelt, mit der Eröffnungszeit der ersten Position. Und MT4Orders zeigt mehrere Positionen mit unterschiedlichen Eröffnungszeiten (und Preisen) und OrderTicketOpen (Ticket des Eröffnungsgeschäfts) an.


Kurzum, alles ist sehr genau und im üblichen MT4-Stil. Nur im ByPass-Modus.

 
// Liste ändern:
// 12.01.2022
// Fix: OrderPrint() gibt korrekte Daten von seltenen MT5 Order/Handelsarten aus.
 
// Liste ändern:
// 14.01.2022
// Fix: Erheblich beschleunigte OrderSelect(index, SELECT_BY_POS, MODE_HISTORY) im ByPass-Modus.