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
Die Idee ist gut, aber die Umsetzung ist nicht richtig. In einer privaten Nachricht geantwortet:
fxsaber
Guten Tag!
Könnten Sie die Handelslogik an Ihre Handelsbibliothek anpassen, um ihre Leistung zu messen?
Forum über Handel, automatisierte Handelssysteme und das Testen von Handelsstrategien.
Bibliotheken: TesterBenchmark
fxsaber, 2017.08.15 19:31
Die Plätze wurden wie folgt verteilt
ZЫ Ich frage mich, wie viel andere Handelsbibliotheken zeigen...
Danke!
Ich verstehe nicht, die Leistung von was? Die Bibliothek? Sie funktioniert nicht ohne eine Strategie. Sie brauchen eine Strategie. Dann müssen wir die Leistung der Strategie messen, die mit Hilfe der Bibliothek geschrieben wurde. Nehmen wir an, wir haben sie gemessen und das Ergebnis erhalten. Womit sollen wir es vergleichen? Wir müssen es mit der gleichen Strategie vergleichen, die in reinem MQL geschrieben wurde. Woher bekommen wir zwei Strategien? Angenommen, wir haben zwei solche Strategien. Aber wo ist die Garantie, dass sie in Bezug auf die Handelsein- und -ausgänge identisch sind? Angenommen, wir haben zwei Strategien, die garantiert identisch sind, dann messen wir ihre Geschwindigkeiten. Die Geschwindigkeiten unterscheiden sich nur geringfügig. Bedeutet dies, dass der Motor effizient ist? Nein, das bedeutet es nicht, denn die Strategie nutzt nicht alle Fähigkeiten der Engine/MQL. Plötzlich stellt sich heraus, dass die Engine um ein Vielfaches langsamer arbeitet, wenn Sie eine lange Historie von Kursen in einer anderen Strategie anfordern. Heißt das, dass die Engine um ein Vielfaches langsamer arbeitet als reine MQL? Nein, es bedeutet nicht, dass dieser spezielle Vorgang langsamer ist, aber wenn Sie die Klassen, die Daten liefern, optimieren, wird sich in neuen Versionen herausstellen, dass die Engine bei demselben Vorgang schneller arbeitet als das System CopyXXX. Das ist der Grund, warum die Hauptsache in dieser ganzen Geschichte nicht klar ist: was wir sind und womit wir vergleichen.
Die Idee ist gut, aber die Umsetzung ist nicht richtig. In einer privaten Nachricht geantwortet:
#include <TesterBenchmark.mqh>und Sie brauchen nichts weiter zu tun. Dann wählen Sie Optimierung und führen sie aus. Sie werden die Leistung in den Protokollen sehen.
In Ihrem Code des Test-Expert Advisors wird bei jedem Tick eine vollständige Suche nach Geschäften in der Historie durchgeführt, wobei ihr Gesamtlot und ihr Gewinn berücksichtigt werden, und das Volumen des aktuellen Geschäfts wird berechnet:
Ihr Expert Advisor tut nichts anderes, als HistorySelect zu laden. Daher kann er kein Maßstab für die Messung der Leistung von etwas anderem als HistorySelect selbst sein. Daher sind Ihre Aussagen, die ich zitiere:"MT5 ist 4,4 mal schneller als MT4!" sollte zumindest korrigiert werden zu HistorySelect in MT5 ist 4,4 mal schneller als ein ähnlicher, interner Vorgang in MT4.
Was meine Engine CStrategy betrifft, so erlaubt sie derzeit nicht, mit Trades zu arbeiten, sondern nur mit Positionen, so dass das Beispiel, wie es jetzt geschrieben ist, nicht in CStrategy verwendet werden kann.
P.S. Ich möchte anmerken, dass in Ihrem Beispiel die Geschwindigkeit der Arbeit gleich O(n) ist. Und der einzige Unterschied zwischen MT4 und MT5 in diesem Fall ist die Geschwindigkeit von HistorySelect/HistoryOrderSelect. Natürlich wird CStrategy bei Aufgaben mit einer Komplexität von O(n) grundlegende Aufrufe verwenden, in diesem Fall HistorySelect, und natürlich wird es etwas langsamer sein als der direkte Aufruf von HistorySelect. Aber wenn Sie z. B. HistoryOrderSelect(ticket) aufrufen müssen - hier kann alles viel interessanter sein, und in einigen Aufgaben wird CStrategy den Standardzugriff auf die Umgebung unterbrechen, da der Zugriff über ein Wörterbuch erfolgt und Daten im Speicher des Programms gespeichert werden.
In Ihrem Code des Test-Expert Advisors wird bei jedem Tick eine vollständige Suche nach Geschäften in der Historie durchgeführt, wobei ihr Gesamtlot und ihr Gewinn berücksichtigt werden, und das Volumen des aktuellen Geschäfts wird berechnet:
Ihr Expert Advisor tut nichts anderes, als auf HistorySelect zu laden. Daher kann er kein Maßstab für die Messung der Leistung von etwas anderem als HistorySelect selbst sein. Daher sind Ihre Aussagen, die ich zitiere:"MT5 ist 4,4 mal schneller als MT4!" sollte zumindest korrigiert werden zu HistorySelect in MT5 ist 4,4 mal schneller als ein ähnlicher, interner Vorgang in MT4.
Sie haben voreilige Schlüsse gezogen. Das angegebene Stück wird nur einmal alle Intervall-Sekunden bei der Eröffnung einer Position ausgeführt. Das heißt, sehr selten.
Was meine CStrategy-Engine betrifft, so erlaubt sie derzeit nicht die Arbeit mit Trades, sondern nur mit Positionen, so dass das Beispiel, wie es jetzt geschrieben ist, nicht in CStrategy verwendet werden kann.
Hier ist der MQL4-Code des OnTick-Test-EA, der ebenfalls nur mit Positionen arbeitet.
Es ist natürlich nicht schwer, eine so einfache Logik auf Ihre API umzuschreiben. Aber wenn Sie einen Vorschlag für einen besseren EA haben, um die Leistung der Handels-API zu analysieren (nur Handel, keine Zeitreihen usw.), würde ich mich freuen, Ihre Version der Handelslogik zu sehen. Ich kann es schnell für reines MQL5, MQL4 und Trade.mqh umschreiben.
ZY Beim Start eines Testberaters wählen Sie balance = 1e7. So haben Sie immer genug Mittel, um eine Position zu eröffnen.
Sie haben voreilige Schlüsse gezogen. Das angegebene Stück wird nur einmal pro Intervallsekunde an der Position "Eröffnung" ausgeführt. Das heißt, sehr selten.
Hier ist der MQL4-Code von OnTick des Test-Expert Advisors, der ebenfalls nur mit Positionen arbeitet.
Es ist natürlich nicht schwer, eine solch einfache Logik auf Ihre API umzuschreiben. Aber wenn Sie einen Vorschlag für einen besseren EA haben, um die Leistung der Handels-API zu analysieren (nur Handel, keine Zeitreihen usw.), würde ich mich freuen, Ihre Version der Handelslogik zu sehen. Ich kann sie schnell für reines MQL5, MQL4 und Trade.mqh umschreiben.Schauen Sie sich Ihren Code genau an und sagen Sie mir, was er misst
Hier gibt es zwei Engpässe: die for-Schleife und das Senden des Auftrags selbst. Möchten Sie vergleichen, wo die for-Schleife schneller arbeitet? In CTrade oder in reinem MQL? Wo ist es schneller, einen Auftrag zu senden? In CTrade oder in OrderSend? Natürlich ist OrderSend schneller, weil in CTrade viele Prüfungen durchgeführt werden, bevor die Order gesendet wird. Aber welche Schlussfolgerungen sollten daraus gezogen werden?
Schauen Sie sich Ihren Code genau an und sagen Sie mir, was er misst
Hier gibt es zwei Engpässe: die for-Schleife und das eigentliche Versenden der Bestellung. Wollen Sie vergleichen, wo die for-Schleife schneller arbeitet?
Aus irgendeinem Grund sehen Sie das nicht
Das angegebene Stück wird nur einmal alle Intervall-Sekunden beim Öffnen einer Position ausgeführt. D.h. sehr selten.
Wo ist es schneller, eine Order zu senden? In CTrade oder OrderSend? Natürlich ist es in OrderSend schneller, weil in CTrade viele Prüfungen durchgeführt werden, bevor die Order gesendet wird. Aber welche Auswirkungen hat das?
CTrade führt viel weniger Prüfungen durch als die gleichen MT4Orders. Die Schlussfolgerungen sind nun einfach - SB hinkt dem reinen MQL5 um 16% hinterher und kann absolut präzise beschleunigt werden. Und wer CTrade nutzt, verliert zusätzliches Geld in der Cloud während der Optimierung und Zeit für die Optimierung selbst.
Sie verstehen immer noch nicht, was Ihr Code tut. Ich habe den Profiler absichtlich laufen lassen und innerhalb einer Stunde 1800 Trades mit 1-Sekunden-Intervallen gemacht. 99,66% der OnTick-Ausführungszeit werden von zwei OrderSend-Funktionen in Anspruch genommen:
Was werden Sie optimieren? Die restlichen 0,34 % sind bedeutungslos. Sie können OrderSend nicht optimieren.
Nun gut. Der interessanteste Teil. Fügen Sie #include <Trade\Trade.mqh> ein und sehen Sie, was sich bei Verwendung der CTrade-Bibliothek geändert hat:
Der Aufruf von Trade.Buy/Sell und Trade.PositionClose benötigt jetzt 100% der Zeit. Wir gehen zu Trade.PositionClose und ta-da-mmmm:
D.h. in 99,97% der Zeit benötigt Trade.PositionClose denselben OrderSend. Ähnlich verhält es sich mit Trade.Buy und Trade.Sell.
Was wollen Sie also in SB optimieren? Wo ist der Gegenstand des Tests? Was testen Sie im Allgemeinen?
(Für diejenigen, die die Profiling-Zahlen nicht verstehen, erkläre ich es: 99,97% der Programmausführungszeit wird durch das direkte Senden von Aufträgen über OrderSend verbraucht, die restlichen 0,03% entfallen auf die CTrade-Bindung mit den erforderlichen Prüfungen vor dem Senden der Aufträge. Das heißt, die Verwendung eines kompetenten OOP führt zu so vernachlässigbaren Verzögerungen, dass sie vernachlässigt werden können und als gleich Null angesehen werden können. Es sind nicht 0,03 %, sondern sogar noch weniger, denn die meiste Zeit dieser 0,03 % wird von obligatorischen Prüfungen in Anspruch genommen, die auf kompetente Weise implementiert werden sollten, sei es im prozeduralen Code oder an anderer Stelle).
Ich habe extra den Profiler laufen lassen und innerhalb einer Stunde habe ich 1800 Trades in 1-Sekunden-Intervallen erreicht.
Was hat das mit Online zu tun? Es geht um das Testgerät.
Was hat das mit Online zu tun? Es geht um den Tester.
Wenn wir über MT5 und seinen Strategietester sprechen, werden dort dieselben 99 % der Zeit (na ja, vielleicht etwas weniger) für die Nachbildung der Handelsumgebung aufgewendet (daher die langsamen Läufe im Vergleich zu MT4). Und es gibt keinen Grund zu glauben, dass OrderSend, wenn es im wirklichen Leben 99,9 % der Zeit benötigt, im Strategietester plötzlich um zwei Größenordnungen schneller funktionieren wird.
Vasily, reden Sie ernsthaft über die Angemessenheit der OrderSend-Ausführungsgeschwindigkeit im Tester und in Echtzeit?
Online ist sie am langsamsten, weil sie Informationen an den Server sendet und auf eine Antwort wartet, während sie im Tester (wenn man die Verzögerung nicht mit einbezieht, aber das stand nicht zur Debatte) sofort sendet und wartet.
Die Aufgabe dieser Bibliothek ist es, die Geschwindigkeit des Testers (in Bezug auf die Handelsfunktionen) zu messen.