Alternative Implementierungen von Standardfunktionen/-ansätzen - Seite 2

 
Renat Fatkhullin:

Im Jahr 2016 haben die meisten C++-Compiler den gleichen Optimierungsgrad erreicht.

MSVC lässt einen bei jedem Update über die Verbesserungen staunen, und Intel C++ als Compiler ist zusammengewachsen - es hat sich immer noch nicht von seinem "internen Fehler" bei großen Projekten erholt.

Eine weitere Verbesserung des Compilers in der 1400er Version besteht darin, dass er komplexe Projekte schneller kompilieren kann.

Ohne diesen Dialog hätten wir wahrscheinlich nie davon erfahren. Weitere Informationen über die großartige Arbeit, die Sie leisten, wären sehr willkommen.
 
fxsaber:

Zum Thema. Sie müssen Alternativen zu den Standardfunktionen erstellen, da diese manchmal die falsche Ausgabe liefern. Hier ein Beispiel für eine Alternative zu SymbolInfoTick

Sie können SymbolInfoTick bei jedem Ereignis NewTick im Tester aufrufen und das Volumen-Feld summieren, um den Aktienumsatz zu ermitteln. Aber nein, das können Sie nicht! Ich muss viel mehr logische MySymbolInfoDouble machen.

Willkommen beim Programmieren, wo Sie der Schöpfer sind!

Wir geben Ihnen das umfassendste Tool, mit dem Sie tun können, was Sie wollen.

 
Renat Fatkhullin:

Sie können alles um Sie herum optimieren.

Es ist ein endloser Prozess. Aber in 99 % der Fälle ist es wirtschaftlich nicht tragbar.

Wir sprechen hier nicht von Optimierung, sondern davon, die alte Funktion an die neuen Gegebenheiten anzupassen. Sicher, Sie hätten NormalizeDouble auch gar nicht schreiben können. Und die Leute hätten ihre eigene Variante gemacht. Aber Sie haben sie erstellt, um Zeit zu sparen. Das war noch nicht genug. Und es wäre gut, das alte Fahrrad zu reparieren, um den gleichen Bestand an Werkzeugen zu erfüllen.
 
fxsaber:
Dabei geht es nicht um Optimierung, sondern darum, die alte Funktion an die neue Realität anzupassen. Es ist klar, dass Sie NormalizeDouble gar nicht hätten schreiben können. Und die Leute hätten ihre eigene Variante gemacht. Aber Sie haben sie erstellt, um Zeit zu sparen. Das ist jetzt nicht genug gewesen. Und es wäre gut, das alte Fahrrad zu reparieren, um den gleichen Bestand an Werkzeugen zu erfüllen.
Danke, wir werden uns das ansehen und sehen, ob wir die Bibliothek ändern können.
 

Übrigens, vor nicht allzu langer Zeit schlug @iliyas vor, viele Systemfunktionen zur Kompilierzeit als MQL5-Quellcode einzufügen, damit sie am Inlining und der maximalen Optimierung teilnehmen können.

Zuerst fand ich die Idee nicht gut, aber jetzt sehe ich, dass sie genial ist. Die gleiche MSVC tut es.

 
Renat Fatkhullin:
Danke, wir werden prüfen, ob wir die Bibliothek ändern können.

Sie haben das falsch verstanden. Nicht Bibliotheken, sondern NormalizeDouble. Um eine Überlast hinzuzufügen.

double NormalizeDouble( double Value, double TickSize );

Zur Normalisierung von Preisen und Lots bei TickSize = 25, VolumeStep = 0,5

Die Normalisierung würde zum Beispiel wie folgt aussehen

NormalizeDouble(Price, 0.00001) // Нормализация до пятого знака
NormalizeDouble(Price, 10.0) // Нормализация цены для RTS-9.16
NormalizeDouble(Price, 25.0) // Нормализация цены для MIX-9.16
 
Renat Fatkhullin:

Übrigens, vor nicht allzu langer Zeit schlug @iliyas vor, viele Systemfunktionen zur Kompilierzeit als MQL5-Quellcode einzufügen, damit sie am Inlining teilnehmen und die Optimierung maximieren können.

Ich fand die Idee nicht sofort gut, aber jetzt sehe ich, dass sie großartig wäre. Die gleiche MSVC tut es.

Es stellt sich heraus, dass #import ex5 das Übel der Optimierung ist.

Bitte beachten Sie die Eigenschaften des Präprozessors

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Wie führe ich eine sequentielle Aufzählung durch?

Alexey Navoykov, 2016.09.01 23:20

Ich habe bereits die obige Methode implementiert, und es ist nicht so schwer zu zeigen, wie man feste Anzahl von Argumenten in MQL5 verwenden, da die Anzahl der Makros auf 8 begrenzt ist. Ich habe also nur 3 Werte für enum.

Was das theoretische Aussehen angeht, ist es wahrscheinlich schneller, eine eigene Funktion zum Parsen von enum zu erstellen. Die Entwickler haben bereits versprochen, etwas zu erstellen.


Wie sich herausstellt, können sehr raffinierte und benutzerfreundliche Konstruktionen erstellt werden.

 
fxsaber:

Sie haben das falsch verstanden. Nicht Bibliotheken, sondern NormalizeDouble. Um eine Überlast hinzuzufügen.

Zur Normalisierung von Preisen und Lots bei TickSize = 25, VolumeStep = 0,5

Die Normalisierung würde zum Beispiel wie folgt aussehen

Auf diese Weise kann man sich nicht überlasten. Gleiche Funktionssignaturen.

Aber die Idee ist klar - die Funktion der Normalisierung unter Berücksichtigung der Zeckengranulation.

 
Renat Fatkhullin:

Auf diese Weise können Sie sich nicht überlasten. Gleiche Funktionssignaturen.

Hier scheint es kein Problem zu geben. In einer Variante ist der zweite Parameter int (war), in der anderen double (wird).

Aber die Idee ist klar - die Funktion der Normalisierung unter Berücksichtigung der Tick-Granulierung.

Ganz genau!
 

fxsaber

Es gibt einen Fehler in Ihrem Code