Expert Advisor funktioniert im Strategietester, aber nicht auf dem Liveaccount

 

Hallo,

ich habe einen EA geschrieben, der 36 Symbole der Marktübersicht gleichzeitig handeln soll. Dies funktioniert im Strategietester genau so, wie erwartet, er führt also exakt das Programm aus. Wenn ich das Programm jedoch Live im Demo-Account ausführen will, bricht er ab einem gewissen Punkt ab. Grundsätzlich, ist die Ausführung des Programms auch viel zu langsam. Jeden Tick sollten alle Symbole ausgewertet werden, was im Bereich von Microsekunden liegen sollte (wenn man die benötige Rechenzeit im Strategietester als Grundlage nimmt). Wird das Programm jedoch Live ausgeführt, dauert aber das Abarbeiten der For-Schleife  unglaubliche 30 Sekunden ( ich kann also jedes For von Hand mitzählen, so langsam wird es ausgeführt), im Strategietester ist die Ausführung dagegen extrem schnell, wie man es eben erwarten würde.

Ich denke also, dass das Programm aufgrund der extrem langsamen Ausführung, nicht korrekt ausgeführt wird, da die "Ticks" wohl schneller reinkommen als mein Programm in den nächsten "Modus" gehen kann, weil die For-Schleife so extrem langsam ausgeführt wird, was aber nicht an der Geschwindigkeit des Prozessors liegt, sondern daran, dass der Code so langsam ausgeführt wird.

Kann mir dazu vielleicht jemand eine fundierte Antwort geben?

Freundliche Grüße

Paul


Noch ein Hinweis: eine frühere Version des Programms, die dem aktuellen Stand nicht mehr ganz entspricht, führt nur 3 Symbole aus, scheint aber korrekt zu funktionieren.

Wie teste ich einen Handelsroboter vor dem Kauf
Wie teste ich einen Handelsroboter vor dem Kauf
  • www.mql5.com
Der Kauf eines Handelsroboters am MQL5 Markt hat bestimmte Vorzüge gegenüber ähnlichen Möglichkeiten - ein automatisiertes System kann direkt im MetaTrader5-Terminal getestet werden. Vor dem Kauf kann und soll ein Expert Advisor sorgfältig in allen ungünstigen Modi im eingebauten Strategietester ausgeführt werden, um das System komplett zu...
 

Naja ohne Code ist das schon schwierig!

  1. Aber kennst Du im Editor: Debug => Profiling. Damit kann man erkennen, wo ein EA die Zeit verliert!
  2. Bei 36 Symbolen würde ich die Ram-Belastung (beginnt der PC zu swappen) beachten! Hier gibt es die Infos, die abgefragt werden können: https://www.mql5.com/de/docs/constants/environment_state/terminalstatus#enum_terminal_info_double
  3. Zieh auch den Task-Manager zu rate über die Recourcenbelastung durch das Terminal.
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Medium Zustand / Zustand des Client-Terminals
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Medium Zustand / Zustand des Client-Terminals
  • www.mql5.com
Identifikatoren zum Abrufen der Information über das Client-Terminal mit den Funktionen TerminalInfoInteger() und TerminalInfoString(). Als Parameter erwarten diese Funktionen Werte aus den Enumerationen ENUM_TERMINAL_INFO_INTEGER und ENUM_TERMINAL_INFO_STRING. Wenn Sie den Wert des Parameters wissen, können Sie die Größe der...
 

Hi,

hast Du schon versucht, die optimierungswürdigen Codeteile via Profiling (https://www.metatrader5.com/de/metaeditor/help/development/profiling) zu identifizieren?


VG

Code-Profiling - Programme entwickeln - MetaEditor Hilfe
Code-Profiling - Programme entwickeln - MetaEditor Hilfe
  • www.metatrader5.com
Profiling bedeutet das Sammeln von Programmparametern während der Ausführung. Während eines Profiling werden die Ausführungszeit und die Anzahl der Aufrufe einzelner Funktionen und Programmcode-Zeilen erfasst. Mit diesem Tool ist der Programmierer in der Lage, die langsamsten Codeabschnitte zu finden und zu optimieren. Das Profiling kann sowohl...
 
Carl Schreiber:

Naja ohne Code ist das schon schwierig!

  1. Aber kennst Du im Editor: Debug => Profiling. Damit kann man erkennen, wo ein EA die Zeit verliert!
  2. Bei 36 Symbolen würde ich die Ram-Belastung (beginnt der PC zu swappen) beachten! Hier gibt es die Infos, die abgefragt werden können: https://www.mql5.com/de/docs/constants/environment_state/terminalstatus#enum_terminal_info_double
  3. Zieh auch den Task-Manager zu rate über die Recourcenbelastung durch das Terminal.

Ich werde mir das mal ansehen (1). Die Ressourcenbelastung ist minimal, der Prozessor ist quasi nur leicht belastet und der RAM nur minimal gefüllt ich glaube das sind nur 1-2GB (ich schaue das nochmal nach - update rund 1GB) (3). Was meinst du mit Swappen genau? (2)

Der Code hat die Form:

OnInit{ Lade Symbole der Marktübersicht (36)}

OnTick{

Geschichten zu Vorbereitung

For{

für jedes Symbol wird Handelslogik ausgeführt z.B. Preisabfrage für alle Symbole, Indikatoren für alle Symbole und Befehle zum Handeln usw.

}//Ende For <- dieses For wird sehr langsam ausgeführt

}//Ende OnTick

 
liju1970:

Hi,

hast Du schon versucht, die optimierungswürdigen Codeteile via Profiling (https://www.metatrader5.com/de/metaeditor/help/development/profiling) zu identifizieren?


VG

Nein habe ich nicht, werde ich mir auch mal ansehen.
 
Carl Schreiber:

Naja ohne Code ist das schon schwierig!

  1. Aber kennst Du im Editor: Debug => Profiling. Damit kann man erkennen, wo ein EA die Zeit verliert!
  2. Bei 36 Symbolen würde ich die Ram-Belastung (beginnt der PC zu swappen) beachten! Hier gibt es die Infos, die abgefragt werden können: https://www.mql5.com/de/docs/constants/environment_state/terminalstatus#enum_terminal_info_double
  3. Zieh auch den Task-Manager zu rate über die Recourcenbelastung durch das Terminal.

Ok ich habe jetzt das Profiling durchgeführt. Quasi die gesamte zeit wird in CopyBuffer verbracht. Ich verstehe nur nicht genau, warum sich das Programm Live anders verhält wie im Tester. Selbst wenn die Zeit dort verbracht wird, müsste man das doch im Tester merken.

Zwei Bilder dazu sind unten.


Live:

https://www.bilder-upload.eu/bild-138b28-1579512841.jpg.html


Strategietester:

https://www.bilder-upload.eu/bild-d18e16-1579513272.jpg.html

Wie man eine Handelsstrategie in MetaTrader 5 schnell entwickeln und debuggen kann
Wie man eine Handelsstrategie in MetaTrader 5 schnell entwickeln und debuggen kann
  • www.mql5.com
Automatische Scalping-Systeme gelten zurecht als der Höhepunkt des algorithmischen Tradings, aber es ist auch am kompliziertesten, einen Code für diese Systeme zu schreiben. In diesem Artikel zeigen wir, wie man mithilfe von eingebauten Werkzeugen für Debugging und visuelles Testen Strategien entwickeln kann, die auf der Analyse eingehender...
 

Naja, dann weißt Du ja jetzt genau, wo Du ansetzen musst.

Warum im Tester nicht? Weil alle Preise vorab geladen wurden, während bei 36 Symbolen ständig neue 'reinkommen aber Genaues dazu könnten Dir nur die Entwickler sagen.

So ist es, also finde einen Weg bzw. löse Dein Problem zB. indem Du das Terminal mehrfach installierst. Bei 6 hätte jedes Terminal nur 6 Charts, aber zum Broker gäbe es 6 'Kanäle' - vermute ich einmal!

 
Carl Schreiber:

Naja, dann weißt Du ja jetzt genau, wo Du ansetzen musst.

Warum im Tester nicht? Weil alle Preise vorab geladen wurden, während bei 36 Symbolen ständig neue 'reinkommen aber Genaues dazu könnten Dir nur die Entwickler sagen.

So ist es, also finde einen Weg bzw. löse Dein Problem zB. indem Du das Terminal mehrfach installierst. Bei 6 hätte jedes Terminal nur 6 Charts, aber zum Broker gäbe es 6 'Kanäle' - vermute ich einmal!

Ok, ich werde mal schauen, was sich machen lässt. Gibt es irgendeine Supportstelle, die man empfehlen könnte?
 
DasUnding:

ich habe einen EA geschrieben, der 36 Symbole der Marktübersicht gleichzeitig handeln soll.

Wenn ich es recht verstehe läuft dieser EA auf EINEM Chart.

Was ist wenn auf diesem Chart kein Tick reinkommt? Dann handelt der EA nicht.

Also müsste der EA durch einen Timer 'angestupst' werden um zu handeln.

Diese Vorgehensweise halte ich nicht für klug.

Auf jedem Chart eine Instanz des EAs laufen lassen halte ich für besser,

und diese mit den bereits besprochenen 'Globalen Variablen' steuern.

Das kannst du auf mehreren Instanzen des MT5 auf einem PC laufen lassen, oder auf mehreren PCs.

 
Nö, ich denke nicht! Das Problem ist wahrscheinlich die Überlastung des Systems aus des Terminal mit Deinem EA, Internet und Broker - wer soll wie supporten?
 
Otto Pauser:

Wenn ich es recht verstehe läuft dieser EA auf EINEM Chart.

Was ist wenn auf diesem Chart kein Tick reinkommt? Dann handelt der EA nicht.

Also müsste der EA durch einen Timer 'angestupst' werden um zu handeln.

Diese Vorgehensweise halte ich nicht für klug.

Auf jedem Chart eine Instanz des EAs laufen lassen halte ich für besser,

und diese mit den bereits besprochenen 'Globalen Variablen' steuern.

Das kannst du auf mehreren Instanzen des MT5 auf einem PC laufen lassen, oder auf mehreren PCs.

Also so wie ich das verstehe, braucht man ein Fenster auf das der EA angewendet wird - also sollte er erstmal auf einem Chart laufen. Im Code selber werden aber Preisabfragen für alle Symbole gemacht und entsprechende Kriterien ausgewertet. Im Strategietester wird der Test mit einem Symbol gestartet, jedoch über SymbolSelect die anderen ebenfalls "rangeholt". Dies funktioniert auch, er handelt, dann im Tester alle 36 Symbole und gibt mir ein entsprechendes Chart-Bild für jedes Symbol aus.

So wie ich das nun verstehe, ist es mögliche, einen oder mehrere EAs pro "Symbol-Chart" auszuführen und die Variablen an weitere Instanzen  zu übergeben. Wie würde man das machen? Bzw. welche Befehle braucht man dazu, bzw wie funktioniert die Übergabe? Also am Beispiel einer einfachen Zahl int i=1;

Also ich habe einen EA der an Symbol A anliegt und einen an Symbol B

Ich habe nun einen Zahl in A int i=1; Wie kann ich sie in B abrufen?

Wie teste ich einen Handelsroboter vor dem Kauf
Wie teste ich einen Handelsroboter vor dem Kauf
  • www.mql5.com
Der Kauf eines Handelsroboters am MQL5 Markt hat bestimmte Vorzüge gegenüber ähnlichen Möglichkeiten - ein automatisiertes System kann direkt im MetaTrader5-Terminal getestet werden. Vor dem Kauf kann und soll ein Expert Advisor sorgfältig in allen ungünstigen Modi im eingebauten Strategietester ausgeführt werden, um das System komplett zu...