MetaTrader 5 Strategy Tester: Bugs, Bugs, Verbesserungsvorschläge - Seite 54

 
Alexey Viktorov:

Sie haben es also nicht geschafft, ein Konto für die Beta zu registrieren?

Nein.
 

Der MT4-Tester hatte einen solchen Assistenten für GAs.


Dadurch konnte die Optimierungszeit erheblich verkürzt werden. Wenn das Gleichgewicht zum Beispiel auf dem Boden liegt, warum sollte man dann weiter gehen? MT5 hat das nicht. Deshalb müssen wir so vernünftige Dinge in unsere EAs einbauen. Ich glaube nicht, dass viele Autoren das tun. Es wäre also wahrscheinlich sinnvoll, diese Funktionalität auch auf MT5-Tester zu übertragen.


Auch die Assistenten für GA sind relevant. Hier ist die einfachste Variante.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Expert Advisors: Validieren

fxsaber, 2020.01.29 15:55

Ich empfehle, in meinen EAs einen ähnlichen GA-Helfer zu verwenden.

sinput int inMinTrades = 500; // Минимальное количество трейдов (позиций).
sinput int inMaxTrades = 90000; // Максимальное количество трейдов (позиций).

double OnTester()
{
  return(((TesterStatistics(STAT_TRADES) >= inMinTrades) && (TesterStatistics(STAT_TRADES) <= inMaxTrades)) ? TesterStatistics(STAT_PROFIT) : 0);
}

Sie erlaubt es der GA nicht, sich auf die Seite der schwachen statistischen Ergebnisse zu schlagen. Dadurch werden die Qualität des Ergebnisses und die Geschwindigkeit seiner Erreichung erhöht. Und für Validate filtert es auch Passagen mit schwachen statistischen Werten heraus.


Bei der Neuberechnung auf der Basis von drei Monaten setze ich beispielsweise die Mindestanzahl von Geschäften auf > 100. Andernfalls ist die Wahrscheinlichkeit höher, dass in der GA ein Durchgang gefunden wird, der aufgrund einer geringen Anzahl erfolgreicher (zufälliger) Abschlüsse den größten Gewinn bringt. Es ist klar, dass ein solcher Pass nichts mit der Auswahl für den weiteren Handel zu tun haben sollte.

Ich denke, es ist sinnvoll, dass der Prüfer solche Helfer hat. Dies gilt umso mehr, als es keinen Rechenaufwand erfordert.

 

Hallo zusammen.

Ich habe einen Multi-Market-Roboter. Sie handelt mit statistischer Arbitrage, Spreads. Der Roboter ist so konzipiert, dass er Instrumente aus der Marktübersicht selbst oder aus der Spreads-Datei (die sich im Stammverzeichnis des Programms im Ordner files befindet) übernimmt. Der Roboter analysiert die Daten, wählt die vielversprechendsten Instrumentenpaare aus und handelt mit ihnen.

Wenn die Handelsinstrumente nicht in den Eingabeparametern des Roboters aufgelistet sind, wie es normalerweise der Fall ist, sondern die Instrumente aus der Marktübersicht oder aus dem Ordner Dateien genommen werden, soll der Tester dann funktionieren?

 
Peresvet Timonkin:

Hallo zusammen.

Ich habe einen Multi-Market-Roboter. Sie handelt mit statistischer Arbitrage, Spreads. Der Roboter ist so konzipiert, dass er Instrumente aus der Marktübersicht selbst oder aus der Spreads-Datei (die sich im Stammverzeichnis des Programms im Ordner files befindet) übernimmt. Der Roboter analysiert die Daten, wählt die vielversprechendsten Instrumentenpaare aus und handelt mit ihnen.

Wenn die Handelsinstrumente nicht in den Eingabeparametern des Roboters aufgelistet sind, wie es normalerweise der Fall ist, sondern die Instrumente aus der Marktübersicht oder aus dem Ordner Dateien genommen werden, soll der Tester dann funktionieren?

Die Marktübersicht wird durch die Aufrufe des Codes zu den Symbolen erzeugt. Für einen Prüfer wird es in jeder Variante eine Währungsliste geben. Und in der realen Welt gibt es kein Problem.

Was auf dem Screenshot zu sehen ist, dient der Optimierung.
 
Alexey Viktorov:

Die Marktübersicht wird durch Symbolaufrufe aus dem Code gebildet. Für einen Prüfer muss es in jeder Variante eine Liste von Währungen geben. Und in der realen Welt gibt es kein Problem.

Was auf dem Screenshot zu sehen ist, dient der Optimierung.

Verstehe ich das richtig, dass Sie mit dieser Art von Einrichtung nicht testen können, wie ich es tue?

der Prüfer keine Daten aus der Marktübersicht aus der Historie entnehmen kann?

Und was die Datei betrifft, in der Handelswerkzeuge vorgeschrieben sind, kann der Prüfer auch nicht damit arbeiten?

Ich habe gerade das Handbuch gelesen, aber ich habe nichts darüber gefunden, es sagt, dass ich mehrere Strategien testen und optimieren kann, aber ich weiß nicht viel darüber.

 
Peresvet Timonkin:

Verstehe ich das richtig, dass Sie mit dieser Art von Einrichtung nicht testen können, wie ich es tue?

der Prüfer keine Daten aus der Marktübersicht aus der Historie entnehmen kann?

Und was die Datei betrifft, in der Handelswerkzeuge vorgeschrieben sind, kann der Prüfer auch nicht damit arbeiten?

Ich habe gerade das gesamte Handbuch für den Tester gelesen, ich konnte kein Wort darüber finden, es heißt, dass ich Multirate-Strategien testen und optimieren kann, aber ich weiß nicht viel darüber.

Wenn du dich anstrengst, kannst du alles erreichen. Fordern Sie z.B. in OnInit() die Ticks der gewünschten Währungen an und fügen Sie sie damit der Marktübersicht hinzu und arbeiten Sie dann mit der Marktübersicht. Aber in diesem Fall, egal wie man es betrachtet, sollte es eine Liste von Währungen geben. Es gibt zwei Möglichkeiten: die Arbeit mit der Liste und die Arbeit mit denjenigen im Marktbericht. Dementsprechend müssen wir eine Bedingung in OnInit(), wenn die Arbeit in den Tester, dann nur mit der Liste zu arbeiten. Es gibt einen solchen Expert Advisor auf dem Markt.

Was die Datei angeht: Das ist natürlich möglich, aber wir müssen den Speicherort der Datei berücksichtigen. Sie muss sich im Ordner des Testers oder in dem von allen Terminals gemeinsam genutzten Ordner befinden. Oder fügen Sie sie als Ressource ein.
 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

MetaTrader 5 Strategy Tester: Bugs, Bugs, Verbesserungsvorschläge

fxsaber, 2020.01.22 23:08

Mein Baujahr 2300. Im Pips-Modus habe ich begonnen, das Volumen zu berücksichtigen, Danke!


Allerdings wird der Gewinn von InOut-Geschäften in diesem Modus nicht korrekt berechnet.


Wenn wir im normalen Modus arbeiten, ist der Gewinn korrekt.



Daher funktioniert der Pips-Modus bei Netting nicht mehr (es wird ein überhöhter Gewinn angezeigt).


2310 relevant ist. Es ist nicht möglich, den Pips-Modus bei Netting zu verwenden.

 

In 2310 habe ich festgestellt, dass mein EA, der häufig Änderungen vornimmt, nicht profiliert werden kann.

Ich habe eine Testskizze angefertigt.

input int inFakeRange = 0;
sinput int inOffset = 10000;

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static long Ticket = -1;
  
  if (Ticket == -1)
    Ticket = OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask - inOffset * _Point, 0, 0, 0);
  else
    OrderModify(Ticket, Ask - inOffset * _Point, 0, 0, 0);
}

Es reproduziert die Unmöglichkeit, buchstäblich sofort ein Profil im Real-Tick-Modus zu erstellen, da alles sehr langsam ist.


Allerdings führt es auch dazu, dass das Terminal bei echten Ticks (auch im Pips-Modus) einen einzigen Durchlauf HOLDet! Nur eine Art Killer.


Wenn Sie die Optimierung (auf den ersten Parameter) durchführen, geht es problemlos, aber es bringt einige schlechte Gedanken über die Leistung hervor...


HH Wenn Sie das Programm im Visualizer ausführen und es schließen, bevor es fertig ist, hängt sich das Terminal auf.

 
fxsaber:

Wenn man es (für den ersten Parameter) optimiert, ist es in Ordnung, aber man bekommt einige schlechte Ideen über die Leistung...

Ich kann sie nur mit der virtuellen Variante vergleichen.

input int inFakeRange = 0;
sinput int inOffset = 10000;

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  VIRTUAL_TESTER // Запуск в виртуальном торговом окружении
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static long Ticket = -1;
  
  if (Ticket == -1)
    Ticket = OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask - inOffset * _Point, 0, 0, 0);
  else
    OrderModify(Ticket, Ask - inOffset * _Point, 0, 0, 0);
}


Normale Variante.

optimization finished, total passes 5
optimization done in 1 minutes 04 seconds
shortest pass 0:00:12.560, longest pass 0:00:13.608, average pass 0:00:12.808
local 5 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


Mit Virtual.

optimization finished, total passes 5
optimization done in 0 minutes 06 seconds
shortest pass 0:00:00.954, longest pass 0:00:02.060, average pass 0:00:01.231
local 5 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


Der Tester ist 13 Mal langsamer als ein einfacher Expert Advisor im Pips-Modus, in dem es nicht einmal Kontrollen gibt! Build 2310.

 
fxsaber:

Der Tester ist 13 Mal langsamer als ein einfacher EA im Pips-Modus, in dem es nicht einmal Kontrollen gibt! Build 2310.

Selbst dieser EA ist mehr als doppelt so langsam wie Virtual im Pips-Modus.

input int inFakeRange = 0;
sinput int inOffset = 10000;

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static long Ticket = -1;
  
  if (Ticket == -1)
    Ticket = OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask - inOffset * _Point, 0, 0, 0);
}

Warum ist das so? Der gesamte Expert Advisor setzt das BuyLimit auf den ersten Tick. Es gibt nichts anderes!