Bibliotheken: BestInterval

 

BestInterval:

Eine Bibliothek zur Berechnung des besten Handelsintervalls.

BestInterval

Autor: fxsaber

 

Es mag den Anschein haben, dass die Bibliothek etwas mit einem solchen Diagramm im Standardbericht des MT5-Testers gemeinsam hat


Ein Beispiel dafür, wie man Daten für ein solches Diagramm erhält, finden Sie unten

#include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006
#include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/de/code/22710

void OnStart()
{
  BESTINTERVAL BestInterval; // Erstellt ein Objekt zur Berechnung des besten Handelsintervalls
  
  BestInterval.Set(); // Eine Geschichte des Bietens veröffentlicht  
  BestInterval.DeleteWorseInterval() // Hat ein schlechtes Intervall weggeworfen

  double Profit[24], Loss[24];
  
  ArrayInitialize(Profit, 0);
  ArrayInitialize(Loss, 0);
  
  for (int i = BestInterval.GetAmount() - 1; i >= 0; i--)
  {
    const DEAL Deal = BestInterval[i];     // i-ter Abschluss in der neu berechneten Handelsgeschichte
    const int hour = Deal.OpenTime % 3600; // Stunde der i-ten Transaktion
    
    // Verteilen Sie den Gewinn auf die jeweiligen Arrays
    if (Deal.Profit > 0)
      Profit[hour] += Deal.Profit;
    else
      Loss[hour] -= Deal.Profit;    
  }
}


Tatsächlich ist die Bibliothek aber nicht für einzelne Läufe oder Visualisierungen gedacht. Sie wird zu 99% für die TS-Optimierung benötigt, da sie es ermöglicht, die coolen Modi eines TS herauszufinden, wenn solche Modi in ihm eingebettet sind, wenn auch im Verborgenen.


Das in der Bibliothek gezeigte Protokoll ist das Stadium der Analyse nach der Optimierung: ein Einzellauf. Dieses Protokoll zeigt einfach, wie sich eine bestimmte Instanz der TS (ein Satz von Eingabeparametern) in den berechneten Intervallen verhält. Es handelt sich also um eine zusätzliche Kontrolle, allerdings im Endstadium. Die Grundlage ist die Optimierung.

 

Die Bibliothek verwendet MT4Orders, um den Handelsverlauf abzurufen.

Es kann verschiedene Gründe geben, warum MT4Orders nicht verwendet werden sollte. Zum Beispiel für Handelsanalysatoren von Drittanbietern.

In jedem Fall ist dieses Szenario vorgesehen:

#include <fxsaber\BestInterval\BestInterval.mqh> // Berechnung des besten Handelsintervalls

void OnDeinit( const int )
{
  BESTINTERVAL BestInterval; // Erstellt ein Objekt zur Berechnung des besten Handelsintervalls
  
  // Array der Abschlussgeschäfte
  DEAL Deals[];
  
  // Wir müssen zwei Felder für jede abschließende Transaktion schreiben
  // Deals[i].Profit - Gewinn des Geschäfts, mit dem die Position geschlossen wurde
  // Deals[i].OpenTime - Zeitpunkt des Öffnens (nicht des Schließens) der Position, an der das Geschäft geschlossen wird
      
// BestInterval.Set(); // Put-Handelshistorie - verwendet MT4Orders
  BestInterval.Set(Deals); // Eine selbst erstellte Bietungsgeschichte veröffentlicht
  
  const int AmountIntervals = 3; // Wie viele Handelsintervalle im schlimmsten Fall weggeworfen werden sollen
  
  for (int i = 0; i < AmountIntervals; i++)
    if (BestInterval.DeleteWorseInterval()) // Wenn etwas weggeworfen wurde
      Print(BestInterval.ToString());       // Drucken wir die erhaltenen Handelsdaten aus
    else
      break;                                // Sonst sind wir raus
}

D.h. Sie können alle Daten eingeben, die Sie zur Berechnung des besten Intervalls benötigen. Die Bibliothek ist plattformunabhängig.


Bitte beachten Sie, dass der Bibla-Algorithmus keine interne Optimierung der Parameter beinhaltet. Es gibt kein Überschießen, denn die Basis ist ein Durchlauf: O(n) (n ist die Anzahl der Geschäfte , die Positionen schließen ). Und die "langsamste" Verbindung ist ein QuickSort: O(n*log(n)). Deshalb ist er perfekt für die Optimierung geeignet, weil er den Prozess nicht verlangsamt.


Entwickler könnten den Algorithmus übernehmen (da es sich um einen Single-Pass-Algorithmus handelt), um seine Ergebnisse in den Single-Pass-Bericht aufzunehmen und einen Standardindikator zu erstellen.

Kennung

Beschreibung des statistischen Indikators

Typ

STAT_PROFIT

Nettogewinn am Ende des Tests, die Summe ausSTAT_GROSS_PROFIT und STAT_GROSS_LOSS (STAT_GROSS_LOSS ist immer kleiner oder gleich Null).

doppelt

STAT_BESTPROFIT

Gewinn im besten Intervall.

double

 

Die Idee der Bibliothek ist klar und die Umsetzung ist erstaunlich einfach zu bedienen. Ich danke Ihnen für die geleistete Arbeit.

Allerdings habe ich eine Anregung für den Autor: Wir brauchen ein Beispiel für die Verwendung auf einem bestimmten Expert Advisor - vom Beginn der Aktivierung der Bibliotheken bis zur Bildung des Filters.

 
Sergey Pavlov:

Die Idee der Bibliothek ist klar und die Umsetzung ist erstaunlich einfach zu bedienen. Ich danke Ihnen für die geleistete Arbeit.

Allerdings habe ich einen Vorschlag für den Autor: Wir brauchen ein Beispiel für die Verwendung auf einem bestimmten Expert Advisor - vom Beginn der Aktivierung von Bibliotheken zu filtern Bildung.

101% Unterstützung :)

 
Sergey Pavlov:

Sie benötigen ein Beispiel für die Anwendung auf einen bestimmten Expert Advisor - vom Beginn der Aktivierung der Bibliotheken bis zur Bildung eines Filters.

Werfen Sie einen Blick auf BestInterval_Example.mq5.

 

Чтобы применить найденный интервал после его расчета, нужно во входных параметрах указать BestInteval Action = true.



Merkmale.

  • Die Berechnung des besten Intervalls und dessen Anwendung im Tester erfolgt ohne Änderung des ursprünglichen Quellcodes des Expert Advisors.

  • S

    Bitte teilen Sie in den Kommentaren die Ergebnisse der Anwendung (wie oben) der Bibliothek VOR und NACH in Form von Bildern und entsprechenden Teilen von MT4/5 Single Pass Logs.


    Es ist viel einfacher geworden, das Berechnungsergebnis auf den Expert Advisor anzuwenden. Dazu müssen Sie nur ein paar Mal klicken.

    Hier eine kleine Zusammenfassung.

    1. Nehmen Sie einen beliebigen Expert Advisor und schreiben Sie diese Zeilen an dessen Anfang.

    #include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006
    
    #define  BESTINTERVAL_ONTESTER // Das Optimierungskriterium ist der Gewinn des besten Intervalls.
    #include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/de/code/22577
    #include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/de/code/22710

    2. Legen Sie die Anzahl der Intervalle fest, die geworfen werden sollen, und die Option, sie nicht anzuwenden.


    3. Stellen Sie die Optimierung ein, oder sofort einen einzelnen Lauf. Im Protokoll des Testers finden Sie die Berechnungsdaten, wenn Sie daran interessiert sind.

    Amount of Delete Intervals = 0
    00:00:00 - 23:59:59 : Profit = 18385.00, Total = 1070, PF = 1.61, Mean = 17.18, DD = 1769.00, RF = 10.39
    SUMMARY: 00:00:00 - 23:59:59 : Profit = 18385.00, Total = 1070, PF = 1.61, Mean = 17.18, DD = 1769.00, RF = 10.39
    
    Amount of Delete Intervals = 1
    00:00:00 - 10:07:47 : Profit = 4279.00, Total = 181, PF = 2.02, Mean = 23.64, DD = 834.00, RF = 5.13
    11:06:12 - 23:59:59 : Profit = 17349.00, Total = 768, PF = 1.95, Mean = 22.59, DD = 933.00, RF = 18.59
    SUMMARY: 00:00:00 - 23:59:59 : Profit = 21628.00, Total = 949, PF = 1.97, Mean = 22.79, DD = 862.00, RF = 25.09


    4. Schalten Sie nach dem Einzellauf die Option zur Aktivierung des besten Intervalls ein und starten Sie den Einzellauf erneut.


    5. Holen Sie sich den Testerbericht


    Und die Daten zu den angewandten Intervallen im Protokoll.

    Amount of Delete Intervals = 1
    00:00:00 - 10:07:47 : Profit = 4279.00, Total = 181, PF = 2.02, Mean = 23.64, DD = 834.00, RF = 5.13
    11:06:12 - 23:59:59 : Profit = 17349.00, Total = 768, PF = 1.95, Mean = 22.59, DD = 933.00, RF = 18.59
    SUMMARY: 00:00:00 - 23:59:59 : Profit = 0.00, Total = 0, PF = Max, Mean = 0.00
    


    Zusammenfassend alle Ergebnisse VOR und NACH dem besten Intervall + detaillierte Daten (addierte maximale Absenkung und Erholungsfaktor - per Saldo) für jedes Teilintervall des besten Intervalls.

     

    Sie können die Bibliothek über diesen Berater auschecken.

     

    Was soll das heißen?

    'OnTester' - function already defined and has body      BestInterval.mqh        504     8
    

    lässt sich nicht kompilieren

     
    Sergey Chalyshev:

    Wie meinen Sie das?

    lässt sich nicht kompilieren.

    Was haben Sie getan?

     
    fxsaber:

    Was haben Sie gemacht?

    Ich habe noch nichts getan, ich versuche, diesen Code zu kompilieren:

    #include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006
    
    #define  VIRTUAL_TESTER // Ausführung in einer virtuellen Handelsumgebung
    #define  BESTINTERVAL_ONTESTER // Das Optimierungskriterium ist der Gewinn des besten Intervalls.
    #include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/de/code/22577
    #include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/de/code/22710
    
    #include <..\Experts\fxsaber\TesterEA\TesterEA.mq4>

    ohne Virtual kompiliert er,

    ohne BestInterval kompiliert er auch,

    aber es lässt sich nicht zusammen kompilieren.