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
Ansichten:
100
Rating:
(6)
Veröffentlicht:
MQL5 Freelance Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Schnelle JavaScript-Version der Report-Bibliothek für Handelsbefehle im MT4-Stil, implementiert über MT4Orders oder Virtual.

Arbeitet bis zu 10 Mal schneller als Report, NTML-Dateigröße ist kleiner, kann bis zu 5,4 Millionen Reportzeilen hochladen und anzeigen (Screenshot unten).

Funktionalität: (dieselbe wie Report)

  • Zeigt Trades an, die von MT4, MT5, ihren Testern oder virtuellen Testern ausgeführt wurden.
  • Zeigt Charts
  • Öffnet die HTML-Datei mit dem Bericht in einem Browser (erfordert die Erlaubnis zur Verwendung der DLL und den Befehl #define REPORT_BROWSER).

Unterschiede zum Report:

  • Im MT5-Seitencode werden alle Daten für den Bericht sofort als Array in die Datei ausgegeben, ohne dass Zeilen mit HTML-Code zusammengesetzt werden. Dies führt zu einer großen Geschwindigkeitssteigerung und Reduzierung der Dateigröße.

  • Die Berechnung der Statistiken, die Erstellung der Diagramme und die Generierung des HTML-Codes mit den Handelszeilen erfolgt auf der Browserseite im JavaScript-Code. Es wird ein Paginator erstellt, der die erforderliche Seite anzeigt.

  • Die Diagramme zeigen die Geschäfte auf einer Zeitskala und nicht auf einer einheitlichen Skala nach Geschäftsnummer an. So können wir sehen, dass ein Expert Advisor in Woche 1 1000 Geschäfte getätigt hat und weitere 52 Wochen lang inaktiv war.
    Hier ist ein anschauliches Beispiel mit 3386 Geschäften für 5 Jahre:
    Zahl_vs_Zeit
    Die gleichen Geschäfte werden in beiden Charts angezeigt.
    Der obere Chart ist mit einem einheitlichen Schritt zwischen den Geschäften aufgebaut (wie der MetaQuotes-Tester jetzt zeigt). Das sieht vielversprechend aus.
    Das untere Diagramm ist auf einer Zeitskala aufgebaut und zeigt, dass der Expert Advisor in 5 Jahren nur wenige Wochen gehandelt hat. 1 Pixel horizontal = 1 Woche.
    Nach dem unteren Diagramm ist sofort klar, dass es am Anfang 2 Jahre Inaktivität geben wird, dann wird der Expert Advisor ein paar Wochen lang handeln und dann wieder 2,5 Jahre lang inaktiv sein. Ein solcher Handel ist nicht so interessant wie der Eindruck aus dem ersten Chart.

  • Der Balance-Chart mit Optionen ohne Slippage, ohne Kommission, ohne Kommission und Slippage wurde durch den Profit (P/L) Chart mit den gleichen Optionen (ohne Balance-Operationen) ersetzt.

  • Es wurde ein separates Saldo-Diagramm hinzugefügt, das die Einzahlungen/Abhebungen von Saldooperationen anzeigt. Auf diese Weise können Sie die Arbeit der Handelsoperationen auf dem P/L-Diagramm und ihre Beträge mit Balanceoperationen separat sehen.

  • Wenn Sie auf ein beliebiges Diagramm klicken, wird ein interaktives Google.charts geöffnet. Darin können Sie zoomen und die Geschäfte im Detail sehen. 4 P/L-Diagramme mit 100.000 offenen Geschäften für ~10 Sekunden.

  • Das TurnOver-Diagramm wird durch ein Diagramm mit P/L für Käufe, Verkäufe und deren Betrag ersetzt. Auf diese Weise können Sie erkennen, ob Ihre Strategie bullish oder bearish ist. Sie können beschließen, eine der Handelsrichtungen auszuschalten, wenn sie nicht profitabel ist. Darunter sehen Sie das Diagramm des Schlusskurses des Instruments. Es ist praktisch zu verfolgen, wie Käufe bei steigenden Kursen Gewinn und Verkäufe Verlust machen und umgekehrt, wenn der Kurs fällt. Wenn es mehrere Instrumente gibt, werden deren Preise zusammen angezeigt. Es ist besser, nur eines der Instrumente per Filter auszuwählen, um nur dessen Preis zu sehen.

  • Hinzugefügt wurden Diagramme der Slippages und der kumulativen Slippages bei Eröffnung, Schließung und deren Summe, die Idee wurde von hier übernommen https://www.mql5.com/ru/blogs/post/760817.

  • Die Spalten des Berichts wurden ein wenig umgeordnet, aber es gibt ein Kontrollkästchen, mit dem sie wie in Report-e neu angeordnet werden können. Falls Sie sich damit besser auskennen.

  • Wenn Sie in Virtual arbeiten, können Sie mehrere Aufrufe an QuickReport machen und Berichte für jeden virtuellen (wenn es mehrere gibt) und/oder realen MT5-Tester generieren.

Beispiele für die Verwendung:

  • einfach mit MT4Orders
    #include <MT4Orders.mqh>
    #define REPORT_BROWSER            // Open report in browswer automatically. Require DLL.
    //#include <Report.mqh>
    #include <MT4Orders_QuickReport.mqh>//
    
    void OnInit(){}
    
    void OnTick(){ strategy (); }
    
    void OnDeinit(const int  reason ){
       QuickReport("report", true);
    }
    
    int TimeHour     ( datetime time ){return((int)((time / 3600) % 24));}//Aktuelle Stunde am Tag. 3600 Sekunden in der Stunde
    
    void strategy (){
      string Symb = _Symbol;
      MqlTick Tick;
      if (SymbolInfoTick(Symb, Tick)){    
        if(TimeHour(TimeCurrent())<23 && TimeHour(TimeCurrent())>0 ){return;} 
        OrderSend(Symb, OP_BUY,  10, Tick.ask, 0, Tick.bid, Tick.bid,  NULL, 1000);
        OrderSend(Symb, OP_SELL, 10, Tick.bid, 0, Tick.ask, Tick.ask,  NULL, 1000);
       }
    }
    
  • großer Testcode

  • einfach mit Virtual
    #include <MT4Orders.mqh>
    
    #include <fxsaber\Virtual\Virtual.mqh>
    #define REPORT_BROWSER            // Open report in browswer automatically. Require DLL.
    //#include <Report.mqh>
    #include <MT4Orders_QuickReport.mqh>
    
    double OnTester() { //or OnDeinit()
       for (int v = 0 ; v <= VIRTUAL::Total(); v++){if (VIRTUAL::SelectByIndex(v)){QuickReport("report_"+(string)v, true, v);}} //Bericht für jeden Prüfer anzeigen
       return(AccountInfoDouble(ACCOUNT_BALANCE)); 
    }
  • Beschreibung der Aufrufparameter
    void QuickReport(string file_name, bool is_open_file_in_browser=true, int virtual_number=0, bool hide_account_and_name=false, bool common_path=false, bool fileANSI=true){...}
    file_name - Dateiname für die Aufzeichnung
    is_open_file_in_browser - öffnet die Datei automatisch im Browser, wenn die Berechnung abgeschlossen ist (DLL-Berechtigung ist erforderlich). Die Dateien werden während der Optimierung nicht automatisch geöffnet, da es mehrere Tausend davon geben kann.
    virtual_number - (um mit Virtual zu arbeiten) Nummer des virtuellen Testers (-1 - wird automatisch ermittelt, 0 - MT5-Tester, >0 - virtuelle Tester)
    hide_account_and_name - Kontonummer und Name ausblenden
    common_path - im gemeinsamen Ordner der Terminals speichern. Um zu verhindern, dass die Dateien während der Optimierung von einem anderen Agenten überschrieben werden, wird den Dateinamen die Agentennummer (3000, 3001,...) hinzugefügt. Beim Speichern im Testerordner (false) werden sie im Ordner des Agenten gespeichert, der die Berechnungen durchgeführt hat.
    fileANSI - Speichern in ANSI-Kodierung oder in UNICODE. Die Größe von UNICODE-Dateien ist 2-mal größer und ihre Verarbeitung dauert länger. Wenn Sie also viele Daten hochladen, z. B. 1 GB, ist es wirtschaftlicher, ANSI zu verwenden. UNICODE wird für die Kompatibilität mit Diensten von Drittanbietern hinzugefügt, falls Sie es benötigen.


Beispielbericht für 5,4 Millionen Transaktionen:

( Virtueller Bericht mit mehr als 100 000 Zeilen frisst auf meinem Computer den gesamten Speicher und hängt sich auf, deshalb habe ich eine JavaScript-Version erstellt).

QuickReport-Beispiel

Dieser Bericht zeigte Firefox. Chrome hängt sich auf, er braucht kleinere Dateien.

Mehr als 5,4 Millionen Zeilen können in eine Datei hochgeladen werden, aber der Firefox-Browser kann nicht mehr verarbeiten.

Beim Laden dieses Berichts verbrauchte der Browser etwa 6 GB Speicher (ca. 1 Minute), gab ihn dann wieder frei, woraufhin der Bericht auf der Seite angezeigt wurde: (Bericht verbraucht 5-6 GB bei 80-100 Tausend Zeilen).

Speicherverbrauch


Detailliertes Diagramm mit Zoomfunktion.

Durch Klicken auf ein beliebiges Diagramm wird ein interaktives Diagramm mit diesem Diagramm geöffnet, mit der Möglichkeit zum Zoomen für eine detaillierte Betrachtung.
Es gibt 2 Optionen:

  1. Die Standardeinstellung ist das kostenlose Google.charts
  2. Sie können Highcharts einbinden, das als kommerzielles Produkt schneller und bequemer ist, aber nur von Programmierern während der Entwicklung kostenlos genutzt werden kann; wenn ein Projekt/Produkt veröffentlicht wird, muss eine Lizenz erworben und jährlich erneuert werden. Lesen Sie hier mehr https://shop.highcharts.com/

Sie können Logarithmic - logarithmische Skala auswählen (kann nützlich sein, wenn Sie exponentielles Bilanzwachstum haben). Für Highcharts können Sie zusätzlich Ordinal - einheitlicher Schritt (wie in MetaQuotes-Testerberichten) auswählen. Nachdem Sie diese Elemente geändert haben, müssen Sie erneut auf das gewünschte Diagramm klicken, um die gewählte Option anzuwenden.

Beispiel aus Google.chart: (Zoomen mit dem Mausrad).


Beispiel von Highcharts: (Änderung der Skala durch Auswahl des gewünschten Bereichs mit der Maus).


Ausgeführte MT5 Pending Orders

Bei Aufträgen, die durch das Auslösen von Pending Orders entstanden sind, zeigt das Feld Typ in dunkelblauer Farbe den Typ der Pending Order (Buy limit, Sell limit, Buy stop oder Sell stop), die Zeit vom Setzen bis zum Auslösen der Order in Sekunden und den Typ der aktivierten Order/Position. Diese Informationen werden nur für MT5-Terminals oder -Tester angezeigt, virtuelle Tester oder MT4 liefern diese Informationen nicht.



Gewinn- und Verlustdiagramme nach Stunde und Wochentag.

Im Gegensatz zum MQ-Tester werden Gewinne und Verluste nicht zum Zeitpunkt ihres Auftretens angezeigt, sondern zum Zeitpunkt des Einstiegs in einen Handel. Das macht es einfacher zu verstehen, dass Einstiege in einer bestimmten Stunde meist unrentabel sind, und diese Stunde für Einstiege einfach auszuschalten.
Zusätzlich wurden Charts zu Käufen und Verkäufen erstellt.


Wenn Sie auf eines dieser Diagramme klicken, erhalten Sie Tabellen mit den genauen Beträgen nach Stunden und Tagen. Es gibt auch Kontrollkästchen, mit denen Sie Stunden und Tage aus den Eingaben ausschließen können - die Diagramme und Tabellen werden dann neu aufgebaut und Sie können das Ergebnis ohne zusätzliche Tests auswerten. Es ist ein Analogon zu BestInterval von Fxsaber, aber grober (mit einem Schritt von 1 Stunde) und ohne Automatisierung. Das M10-Intervall wurde hinzugefügt, um die Schrittweite zu verringern.

Einige stündliche oder tägliche Gewinnausbrüche auf diesen Charts sind bei kleinen Testzeiträumen zu sehen. Die obigen Charts zeigen einen 1-monatigen Test mit einem Aufwärtstrend. Käufe sind also mit Gewinn und Verkäufe mit Verlust verbunden. Wenn Sie den Test auf ein Jahr oder länger ausdehnen, in dem mehrere große Trends in beide Richtungen verlaufen, wird alles gleichmäßig verschmiert und in der Regel unrentabel, so dass es unwahrscheinlich ist, dass Sie etwas ausschalten und eine signifikante Veränderung des Gewinns erzielen können.
Hier ist, was auf der gleichen Strategie mit dem Test für 1 Jahr wurde: (Sie sollten fast alles ausschalten).

Es kann also kaum die Grundlage Ihrer Strategie werden.


Filterung von Aufträgen.

Es wurden viele Filter hinzugefügt, um Aufträge nach verschiedenen Parametern anzuzeigen.


Buy, Sell, Buy limit, Sell limit, Buy stop, Sell stop, Balance - Sie können jede Art von Orders aus dem Bericht entfernen.
Symbols - zeigt die gesamte Liste der verwendeten Instrumente an, Sie können nur die notwendigen auswählen.
Magic - Sie können nur Orders mit der angegebenen Magic anzeigen
Min Lot, Max Lot - Sie können Orders mit den erforderlichen Lots auswählen
Negative Slippage - Sie können Orders mit negativer Slippage separat für Eröffnungs- oder Schließungsorders anzeigen
Swap - zeigt Orders mit Swaps > 0
Min LengthTime - Orders mit einer Dauer von mehr als der angegebenen Zeit (angegeben durch die Anzahl der Tage, Stunden, Minuten und Sekunden)
Max LengthTime - Orders mit einer Dauer von weniger als der angegebenen Zeit
Open Time - Zeit der Ordereröffnung von und bis zum angegebenen Datum
Close Time - Zeit der Orderschließung von und bis zum angegebenen Datum
TP, SL - Orders, die mit TP- oder SL-Auslösung endeten
Gewinne, Verluste - Orders mit Gewinn oder Verlust (Kommissionen und Swaps sind nicht enthalten, sie können den Endgewinn negativ machen)
Ablehnungen - nicht ausgeführte Orders.

Mit der Schaltfläche Zurücksetzen können Sie die Filter auf die Standardwerte zurücksetzen und alle Aufträge ohne Filterung anzeigen lassen.


Zusätzliche Optionen:



  1. Sie können das Startdatum des Vorwärtstests angeben. Nach dessen Anwendung werden die Statistiken des vollständigen Plots, des Plots vor dem angegebenen Datum (BackTest) und des Plots danach (ForwardTest) berechnet. Die Diagramme zeigen eine vertikale Linie an diesem Datum.
  2. Alte Spaltenreihenfolge - die Spaltenreihenfolge wird wie in der Berichtsbibliothek neu geordnet.

P.S.: Je mehr Kommentare zu den Geschäften, desto weniger Zeilen können angezeigt werden. Ein Bericht mit 5,4 Millionen Zeilen hatte keine Kommentare außer "Ende des Tests". Es ist also besser, sie nicht einzufügen, wenn der Bericht mehr als 4 Millionen Transaktionen umfasst.

P.P.S. Funktioniert sowohl im MT5 als auch im MT4. Danke an fxsaber für die Modifikation für MT4.

Verbesserungsmöglichkeiten:

  • Sie können versuchen, den Bericht in eine Binärdatei zu entladen und im Browser zu lesen, vielleicht funktioniert das auch mit einer großen Anzahl von 5,4 Millionen Zeilen. Aber dann müssen wir die Binärdatei aufgrund von Sicherheitseinschränkungen manuell auswählen. Das heißt, wir können den Bericht nicht sofort nach dem Test automatisch öffnen.

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

iCHO Trend CCIDualOnMA Filter iCHO Trend CCIDualOnMA Filter

Strategie basierend auf dem Standardindikator iCHO (Chaikin Oscillator, CHO) und dem benutzerdefinierten Indikator 'CCIDualOnMA'.

Panel für manuelle Positionsverfolgung Panel für manuelle Positionsverfolgung

Panel basierend auf der Klasse CDialog. Arbeit am aktuellen Symbol. Löschen, Einstellen von Take Profit, Einstellen von Breakeven für eine Gruppe von Positionen

Basisbibliothek zum Erstellen von Volume-Profilen Basisbibliothek zum Erstellen von Volume-Profilen

Grundlegende Bibliothek zur Erstellung von Volumenprofilen im Diagramm.

Winkel und Geschwindigkeit Winkel und Geschwindigkeit

Der Indikator zeigt den Winkel oder die durchschnittliche Geschwindigkeit der Preisänderung an.