Naja ohne Code ist das schon schwierig!
- Aber kennst Du im Editor: Debug => Profiling. Damit kann man erkennen, wo ein EA die Zeit verliert!
- 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
- Zieh auch den Task-Manager zu rate über die Recourcenbelastung durch das Terminal.
- www.mql5.com
Hi,
hast Du schon versucht, die optimierungswürdigen Codeteile via Profiling (https://www.metatrader5.com/de/metaeditor/help/development/profiling) zu identifizieren?
VG
- www.metatrader5.com
Naja ohne Code ist das schon schwierig!
- Aber kennst Du im Editor: Debug => Profiling. Damit kann man erkennen, wo ein EA die Zeit verliert!
- 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
- 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
Naja ohne Code ist das schon schwierig!
- Aber kennst Du im Editor: Debug => Profiling. Damit kann man erkennen, wo ein EA die Zeit verliert!
- 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
- 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
- www.mql5.com
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!
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!
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.
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?
- www.mql5.com
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
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.