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
...fängt an, Aufrufe mit verschiedenen Parametern zu machen, multipliziert Indikatoren, verliert alle Handles und wundert sich dann über Bremsen und Speicherverbrauch.
Um ehrlich zu sein, habe ich nicht verstanden, wie man ein Handle verlieren kann, wenn es hinter den Kulissen von MetaTrader gespeichert ist.
p.s. Generell sollte sich der Autor des Artikels an der Diskussion beteiligen und ein paar Punkte zu seiner Sicht der Arbeit mit Indikator-Handles im MT5 erläutern.
Um ehrlich zu sein, habe ich nie verstanden, wie man einen Griff verlieren kann, wenn er hinter den Kulissen von MetaTrader gespeichert ist.
Mit diesem Ansatz zur Codequalität habe ich keine Fragen mehr.
Es ist nicht klar, was Sie mit Ihrer Aussage meinen. Soweit ich verstanden habe, werden Hendles nirgendwo geschlossen( es gibt keineAufrufe von IndicatorRelease ). Es gibt einen ständigen Aufruf von Standardfunktionen zur Erstellung von Hendles, wie z. B. iMACD:
Offensichtlich basiert das ganze Spiel hier auf der Tatsache, dass iMACD und ähnliche Funktionen das zuvor zurückgegebene Handle in sich selbst zwischenspeichern, so dass es keine Wiederherstellung des Indikators geben sollte.
Ja, ich hatte eine ursprüngliche Idee, um zu zeigen, dass man in MQL5 mit Indikatoren auf eine schicke Art und Weise arbeiten sollte: ein Handle sollte in OnInit() erstellt werden, und der Zugriff auf die Indikatordaten sollte durch CopyXXXX-Funktionen erfolgen, und wenn man die Neuerstellung von Handles im Stil von MQL4 verwendet, ist das sehr falsch und wird eine Katastrophe sein: es wird Speicher fressen. Dabei stellte sich jedoch heraus, dass der MQL5-Kernel so clever ist (offensichtlich gibt es eine interne Zwischenspeicherung von identischen Handles), dass er die Neuerstellung von Handles nicht zulässt.
Der Nebeneffekt ist, dass der MQL5-Kernel so gut konzipiert ist, dass er es MQL5 erlaubt, auf eine nicht zeitgemäße Weise zu arbeiten.
Ich habe keine Gemeinsamkeiten festgestellt.
Beide Artikel bieten das Gleiche - das Schreiben der einfachsten Variante im MQL4-Stil in MQL5. Vergleichen Sie dies
Forum über Trading, automatisierte Handelssysteme und das Testen von Handelsstrategien
Diskussion über den Artikel "LifeHack für Trader: Fast Food aus Indikatoren kochen"
Vasiliy Sokolov, 2018.01.25 16:05
und dies
In der Tat ist es das Gleiche.
Sollten sie vorhanden sein? Ich denke, der Titel des Artikels (oder eher seine Beschreibung) sagt eindeutig nur über Indikatoren?
Nach dem Titel zu urteilen, sollten sie das nicht. Aber der Artikel berührt die Arbeit mit Zeitreihen im Stil von MQL4. Und ohne sie erhalten wir eine unvollständige Lösung. Fast jeder verwendet "High[i]" in MQL4. Außerdem ist die Implementierung dieser Funktion leicht zu finden.
Leider unterstützt MQL keine Funktionen mit einer beliebigen Anzahl von Parametern, so dass es nicht möglich ist, iCustom "wie in MT4" zu implementieren.
Ich glaube nicht, dass es möglich ist, in einem Artikel eine vollwertige Engine zu schreiben, die den MT4-Stil vollständig emuliert. Das Thema war klar formuliert: Arbeiten mit Indikatoren im MQL4-Stil (schade, dass der Titel des Artikels das Thema nicht widerspiegelt, was verwirrend ist).
MQL4-Stil ist immer noch ein Konzept, aber nicht eine klare Einhaltung der Syntax.
Wenn Sie die Neuerstellung von Handles im Stil von MQL4 verwenden, ist das sehr falsch und verursacht Probleme: Es wird Speicher verbraucht.
Deshalb stellt sich die Frage, warum sie die falsche Arbeit implementiert haben, wenn es richtig und im Stil von MQL4 gemacht werden könnte?
MQL5 ist nicht schlau, es hat nur einen narrensicheren Schutz. Andernfalls würde jeder versehentliche Fehler unangenehme Konsequenzen nach sich ziehen. Aber der narrensichere Schutz ist, wie Leistungsmessungen zeigen, so konzipiert, dass es zu Leistungseinbußen kommt. Deshalb ist es notwendig, die "Neuerstellung des Handles" in den MQL5-Wrapper zu verlagern und sie (einen kleinen Teil der OOP-Fähigkeiten) vor den Augen des Benutzers zu verstecken.
... Aber auch die Absicherung ist, wie Leistungsmessungen zeigen, so angelegt, dass es einen Leistungsabfall gibt ...
Ja, das ist interessant. Ich werde die Geschwindigkeit messen und meine Ergebnisse hier posten.
Gemessen an den einfachsten Rohlingen.
Der Overhead beträgt etwa das Dreifache. Also ja, MetaTrader 5 braucht viel Zeit, um ein zwischengespeichertes Handle zu finden.
Ich hatte eine Idee, um dies zu testen: ein EA ähnlich dem"MACD MQL4 style EA short", nur dass man darin nicht zwei, sondern drei, vier, fünf Indikatoren ansprechen kann .... In diesem Zusammenhang bedeutet "Indikator" (am Beispiel des MACD) ein Indikator mit verschiedenen Parametern, aber jeweils einem Symbol.
Ich habe meinen vorherigen Beitrag gelöscht, weil ich festgestellt habe, dass der MACD MQL4 Style EA zusätzlich auf das Grafiksubsystem zugreift:
D.h. die durchgeführten Tests wurden nicht korrekt durchgeführt. Nachdem ich die Comment-Funktion kommentiert habe, ist die Leistung fast gleich:
Schlussfolgerungen: MetaTrader 5 findet den zuvor angelegten Cache immer noch effektiv und es ist möglich, den vorgeschlagenen Codestyle zu verwenden.
Aber der narrensichere Schutz ist, wie die Performancemessungen zeigen, so angelegt, dass es zu einem Leistungsabfall kommt. Deshalb ist es notwendig, die "Neuerstellung des Handles" in den MQL5-Wrapper zu verlagern, um sie (einen kleinen Teil der OOP-Funktionen) vor den Augen des Benutzers zu verstecken.
MetaTrader 5 benötigt recht viel Zeit, um ein zwischengespeichertes Handle zu finden.
Es gibt keine Gewissheit, dass ein Benutzer diesen Prozess generell beschleunigen kann. Offensichtlich wird der Overhead für die Berechnung der Hash-Funktion verwendet.
Eine Variante einer solchen Indikator-Hash-Funktion in allgemeiner Form wurde hier veröffentlicht
Ich habe mich dort nicht um die Leistung gekümmert, aber es war klar, dass jede Hash-Funktion ein Array von MqlParam-Werten sein muss. Und das kann nicht schnell funktionieren, wenn man bedenkt, dass es ein langsames String-Feld gibt.
Daher ist das Schreiben eines universellen Indikators schnelle Hash-Funktion viel schneller als das, was in MT5 gebaut ist eine offene Aufgabe. Aber ich bin kategorisch gegen den Aufruf von Indikatoren von irgendwo. Deshalb will ich das Thema nicht einmal verstehen.
Es gibt noch einen weiteren Gedanken zu smart MQL5. Es gibt eine Menge Expert Advisors, bei denen derselbe Indikator auf jedem Balken aufgerufen wird, aber mit unterschiedlichen Eingabeparametern. MQL5 "schießt" im Laufe der Zeit unnötige Griffe ab. Aber das ist eine universelle Lösung. Und in einem Expert Advisor kann der Autor diese Verantwortung auf sich nehmen, indem er selbst Handles tötet. Es liegt auf der Hand, dass es eine enorme Verschwendung von Rechenressourcen und Speicherplatz ist, wenn man hundert Handles durch hundert Bars schleppt. Aber ich habe noch keine EAs gesehen, die einen Handle auf diese Weise festnageln würden. Alles wird der "Cleverness von MQL5" überlassen, was die Autoren dazu zwingt, überhaupt nicht clever zu sein.
Aber wieder, Indikatoren und Bars sind böse.
Es gibt keine Gewissheit, dass ein Benutzer diesen Prozess generell beschleunigen kann. Offensichtlich wird der Overhead für die Berechnung der Hash-Funktion verwendet.
Eine Variante einer solchen Indikator-Hash-Funktion in allgemeiner Form wurde hier veröffentlicht
Nun, Sie wollten den Leser mit einer Menge Informationen in einem Artikel überhäufen. Aber was Ihre Methode betrifft - sie ist eine Frontal-Lösung, haben Sie andere ausprobiert? Und die Leistung verglichen?