Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ichbin es leid, die Snapshots zu debuggen. Endlich ist es perfekt. Ein Berater, nichts. Zwei - perfekt. 20 - Katastrophe: CPU ist unter 100%. HistorySelect verzögert sich um viele Millisekunden.
Es scheint, dass MT5 nicht für den gleichzeitigen Betrieb mehrerer Expert Advisors gedacht ist.
Schreiben Sie einen Stresstest oder einen gewöhnlichen Expert Advisor?
Höchstwahrscheinlich handelt es sich um einen Multi-Thread-Stresstest in einer einzigen Basis. Ich werde es also wiederholen:
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
MT5 und Geschwindigkeit in Aktion
Renat Fatkhullin, 2020.09.16 12:47
Wenn ich es richtig verstehe, gibt es dort keinen EA, sondern einen Stresstester für jedes Symbol. Damit ändert sich der Fall völlig. Und es zeigt, dass sich die Anfangsbedingungen verstecken.
Das heißt, dass auf 8(4+HT) CPUs 16 Threads (+N Worker-Terminal-Threads parallel) nonstop und ohne Verzögerung in ein synchronisiertes Symboldatenbankobjekt einbrechen. Lese-/Schreibsperren werden durcheinander gebracht, weil ständig ein Tick geschrieben wird.
In der Regel kann in einem solchen Profil, je nach Steilheit des Prozessors und seiner Beherrschung der Threads, jeder Thread zwischen 60% und 80% der Zeit mit Warten verbringen.
Und das unabhängig von der Art der Aufgabe.
Wenn Sie tatsächlich in 20 Threads ununterbrochen um eine Ressource kämpfen, gibt es mehrere Möglichkeiten:
Lesen Sie den Karton sorgfältig durch. Wenn N Threads auf ein einziges Sync-Objekt treffen, beträgt die leere Wartezeit 60-80%.
Und die Grenze der Multithreading-Effizienz wird bei etwa 8-12 Threads liegen. Mit zunehmender Anzahl von Threads sinkt die Abtastrate. Bei 2600k ist die Effizienzgrenze sogar noch niedriger.
Schreiben Sie einen Stresstest oder die Arbeit eines gewöhnlichen Experten?
Gewöhnlich
Vielmehr handelt es sich um einen Multi-Thread-Stresstest in einer einzigen Basis. Ich wiederhole also:
Wenn Sie tatsächlich in 20 Threads ununterbrochen um eine einzige Ressource kämpfen, gibt es mehrere Möglichkeiten:
Lesen Sie den Karton sorgfältig durch. Wenn N Threads auf ein einziges Sync-Objekt stoßen, liegt die leere Wartezeit bei 60-80 %.
Und die Grenze der Multithreading-Effizienz wird irgendwo bei 8-12 Threads liegen. Wenn die Anzahl der Threads steigt, sinkt die Abtastrate. Bei 2600k ist die Effizienzgrenze sogar noch niedriger.
Vollständige Zwischenspeicherung der Historie. Aber auch dies erfordert den Aufruf von HistorySelect(0, INT_MAX).
Als Experiment habe ich alle für die Handelslogik notwendigen Aufrufe der Historie gestrichen. Die Belastung der CPU hat stark abgenommen.
Wenn es 20 Roboter gibt, bedeutet das im Allgemeinen, dass man mit nur einem Terminal eine Katastrophe auslösen kann, wenn man sie über die gesamte Geschichte hinweg aufruft. Über mehrere Terminals können wir nicht einmal sprechen.
Und ich habe das Gefühl, dass das Synchro-Objekt nicht nur Geschichte ist. SymbolInfoTick, CopyTicks und etwas anderes, wie es scheint.
Jedenfalls kann ich nicht einmal fünf Terminals mit jeweils einem Dutzend Robotern in Betrieb nehmen.
Der Blick auf den Bremsprofiler ist ein Flop.
Gewöhnlich
Vollständige Zwischenspeicherung des Verlaufs. Aber auch dies erfordert den Aufruf von HistorySelect(0, INT_MAX).
Ich habe versuchsweise alle für die Handelslogik notwendigen Historienaufrufe abgeschaltet. Die Belastung der CPU hat stark abgenommen.
Wenn es 20 Roboter gibt, bedeutet das im Allgemeinen, dass man mit nur einem Terminal eine Katastrophe auslösen kann, wenn man sie über die gesamte Geschichte hinweg aufruft. Über mehrere Terminals können wir nicht einmal sprechen.
Und ich habe das Gefühl, dass das Synchro-Objekt nicht nur Geschichte ist. SymbolInfoTick, CopyTicks und etwas anderes, wie es scheint.
Jedenfalls kann ich nicht einmal fünf Terminals mit jeweils einem Dutzend Robotern in Betrieb nehmen.
Der Blick auf den Bremsprofiler ist ein Flop.
Weder Beweise noch numerische Daten.
1) Wie oft pro Sekunde führt jeder EA HistorySelect-Abfragen durch?
2) Welche Funktionen werden genau verlangsamt?
3) Protokolle?
4) Was ist das Prinzip der Roboter?
Alles in allem, wenn es 20 Roboter gibt, dann ist es eine Katastrophe mit nur einem Terminal, wenn man die Geschichte in ihnen anspricht. Mehrere Terminals kommen nicht in Frage.
Vielleicht im Gegenteil - jedes Terminal wird sein eigenes Synchro-Objekt unterstützen, und es wird keine Warteschlange mit 20 EAs dazu geben?
Versuchen Sie, 1 Roboter auf 1 Terminal laufen zu lassen, es wird interessant sein, das Ergebnis zu sehen.
Vielleicht im Gegenteil - jedes Terminal wird sein eigenes Sync-Objekt unterstützen und es wird keine Warteschlange mit 20 EAs dazu geben?
Versuchen Sie, 1 Roboter auf 1 Terminal laufen zu lassen, es ist interessant, das Ergebnis zu sehen.
Leider wird das Ergebnis dieses Experiments keine Antwort auf die Frage geben, was zu tun ist.
Leider wird das Ergebnis dieses Experiments keine Antwort auf die Frage geben, was zu tun ist.
Überdenken Sie das Konzept des Handelsroboters
Hinzugefügt
Ich habe 3 Terminals auf real + 1 Demo, in denen ich arbeite
Jedes Terminal hat 42 Roboter, die OnBoorEvent mit 3 bis 4 Zeichen verwenden,
Außerdem wird alle 0,5 Sekunden ein Timer ausgelöst und jeder Roboter greift auf die globalen Variablen des Terminals zu,
und nutzt 8,34 GB von 32 GB RAM und 6,7% der CPU
Und nichts wird langsamer, außer dem TM5-Server zu Beginn der Handelssitzungen.
Es gibt weder Beweise noch numerische Daten.
1) Wie oft pro Sekunde führt jeder Experte HistorySelect-Abfragen durch?
2) Welche Funktionen werden genau verlangsamt?
3) Protokolle?
4) Welches Prinzip steckt hinter den Robotern?
Es fällt mir sehr schwer, diese Fragen zu beantworten, weil ich selbst nicht in der Lage bin, die Ursachen für die Verlangsamung zu erkennen. Der Profiler wird nicht einmal ausgeführt. Ihre Messungen sind Betrug, denn die Verzögerung kommt bereits von der CPU. Die Reduzierung des Zugriffs auf Umgebungsfunktionen durch Snapshots und Caching hat leider nicht die erwartete Wirkung gezeigt. Ich warte auf einen Profiler, der in der Lage sein wird, den Expert Advisor zu kompilieren.
Während ich damit beschäftigt war, fand ich im Strategietester ein solches Durcheinander mit der Handelshistorie.
Das Ergebnis ist
Ich habe diesen Fehler kaum bemerkt und versuche schon seit über einer Stunde, eine Wiederholung zu schreiben. Der Code ist schwachsinnig, aber er zeigt das Problem. Ob es etwas Ähnliches nicht im Tester, sondern im Terminal gibt, weiß ich nicht.
Suchbegriff: Oshibka 013.
ZS b2626 - behoben.
Überdenken Sie das Konzept des Handelsroboters
Nur ein Roboter, der mit allen Symbolen handelt?
Nur ein Roboter, der mit allen Symbolen handelt?
Verschiedene Roboter, die aber alle ungefähr nach dem gleichen Muster aufgebaut sind.
An einem Terminal sind jeweils 42 Arbeitsplätze beteiligt, bei drei Terminals sind es 126, also etwa 400 Symbole.
Hinzugefügt
Zur Wiederholung (ich)
Jeder Roboter verwendet OnBoorEvent mit 3 bis 4 Zeichen,
plus alle 0,5 Sekunden wird ein Timer ausgelöst + jeder Roboter greift auf dieGlobal Variables des Terminals zu,
8,34 GB von 32 GB RAM und 6,7 % CPU-Nutzung
Und nichts verlangsamt sich, außer dem TM5-Server (oder der Openreach-Hardware) zu Beginn der Handelssitzungen.
Unterschiedliche Roboter, aber alle ungefähr nach dem gleichen Schema gebaut.
An einem Terminal sind jeweils 42 Stellen beteiligt, an drei - 126 sind es etwa 400 Zeichen
Hinzugefügt
Um (mich) zu wiederholen.
Jeder Roboter verwendet OnBoorEvent mit 3 bis 4 Zeichen,
plus alle 0,5 Sekunden wird ein Timer ausgelöst + jeder Roboter greift auf dieGlobal Variables des Terminals zu,
8,34 GB von 32 GB RAM werden genutzt und 6,7% der CPU werden genutzt
Und nichts verlangsamt sich, außer dem TM5-Server (oder Open's Iron) zu Beginn der Handelssitzungen.
Das Seltsame ist, dass bei mir das Gegenteil der Fall ist.
Mein Gerät hat 4 Terminals, ich habe die Anzahl der Expert Advisors auf etwa 200 reduziert, ich habe alle OnBooks abgeschaltet, bin zu OnTick zurückgekehrt und habe meine Hardware aktualisiert, aber die Probleme sind die gleichen wie bei fxsaber.
Aber bei meinem Opener gibt es schon lange keine Lags mehr am Morgen. Und was sie einmal waren! Manchmal bis zu 75 Sekunden :)