Was die Funktionen Lowest und Highest zurückgeben - Seite 3

 
Ich werde versuchen, die Instabilität der Operation zu beschreiben.

Eine Möglichkeit. Es gibt noch andere.
Wir haben den ersten Strahl. Der Einfachheit halber - ausgehend von der Nullleiste. Der Null-Balken hat ein Maximum und ein Minimum. Der Kurs bewegt sich innerhalb des Balkens, ohne seine Extrema zu verändern. Da sich die Extrema nicht verändern, sollte der erste Strahl stillstehen und sich nicht bewegen. Aber das ist nicht der Fall. Der erste Strahl ruckt. Ändert seine Position. Dies ist lediglich eine Beschreibung der äußeren Erscheinungsform der Instabilität. Wenn der Algorithmus stabil arbeitet und sich die Marktparameter (Höchst- und Tiefstwert des letzten Balkens), von denen die Zickzack-Operation abhängt, nicht ändern, sollte der erste Strahl nicht schwanken. Ich habe selbst mit diesem Problem gekämpft. Aber bemerkte Merkmale von Suchfunktionen haben mich gezwungen, auf das Forum zu gehen.
========================
Wenn wir während der Berechnung des Indikators das Fenster verschieben (Shift,Shift+ExtDepth), kann das Auftreten eines neuen Extremums entweder mit einem neuen Preis oder damit zusammenhängen, dass das alte Extremum das Fenster verlassen hat. - Es wäre besser, dies explizit anzugeben. Um das klarzustellen. In der Sprachbeschreibung. Um die verborgenen Möglichkeiten der Sprache nicht zu erforschen.

Zu diesem Zweck wird die Zeile if(highpos!=shift) val=0.0; . Wie das im Standardcode gemacht wird, verstehe ich nicht. Nach der Tatsache zu urteilen, dass in meiner Variante baumelnde Extrema verschwinden, wird es entweder nicht richtig oder gar nicht gemacht. - Meine Lösung für dieses Problem ist anders: if (High[shift]=val) ZigZagBuffer[shift]=val; und if (Low[shift]=val) ZigZagBuffer[shift]=val;
Aber im Grunde ist es dasselbe. Doch damit sind nicht alle Probleme gelöst. Es ist die Art und Weise, wie wir die Folgen bekämpfen und nicht die Ursache. Ich habe versucht, die Folgen auf dieselbe Weise zu bekämpfen. Aber beim ersten Strahl funktioniert es nicht. Das Problem ist, dass der Zickzack-Algorithmus, sagen wir mal, nicht zerlegt. Lassen Sie mich das erklären. Die Berechnung wird über die gesamte Historie durchgeführt. Und wenn wir einen Teil davon korrigieren, bleibt die Verarbeitung unvollständig, sozusagen in der Nähe der Null-Linie. Ich finde nicht die richtigen Worte. Diese Unvollständigkeit in der Nähe der Nulllinie macht das Problem der korrekten Identifizierung von Extrema deutlich.

Ich habe vor nicht allzu langer Zeit versucht, die Fensterparameter anzupassen (Shift, Shift+ExtDepth). Ich habe neulich auch mit dem Fenster experimentiert. Aber bisher ohne Ergebnis.
 
Der Punkt ist, dass der Zick-Zack-Algorithmus, sagen wir mal, nicht zerlegt. Lassen Sie mich das erklären. Die Berechnung wird über die gesamte Historie durchgeführt. Und wenn wir einen Teil davon korrigieren, bleibt die Verarbeitung immer noch unvollständig, sozusagen in der Nähe der Null-Linie. Ich finde nicht die richtigen Worte. Diese Unvollständigkeit in der Nähe der Nulllinie macht das Problem der korrekten Identifizierung von Extrema deutlich. <br/ translate="no">.


Dieses Problem ist bekannt und kann theoretisch gelöst werden (ich habe den Algorithmus schon lange im Kopf). Wenn keine andere Lösung gefunden wird, werde ich den Zickzack-Algorithmus optimieren. Dabei wird wie folgt vorgegangen:
1) Der erste Durchlauf wird wie beim aktuellen Algorithmus über die gesamte Historie durchgeführt
2) Bei jedem Tick von Null Bar bis tief in die Historie werden zwei Extrema des Zigzag gesucht, das letzte Extremum wird zwangsweise gelöscht.
3) aus dem letzten (jetzt letzten) folgt wieder dem Standardverfahren der Zickzackberechnung.
4) Wenn das aktuelle Ende (der Schwanz des ZigZag) theoretisch ein Extremum sein kann (wir haben das Höchste vom letzten Tief oder umgekehrt), wird es auch ein Extremum.
5) mit einem neuen Häkchen wieder von vorne beginnen (Punkt 2)
 
nen:
Aber das ist nicht passiert. Der erste Strahl zuckt. Er ändert seine Position.

Ich habe das noch nicht gesehen. Bleibt ein Ende des Balkens fest? Und welche. Wenn es auf der Nullleiste liegt, sollte man sich vielleicht die Bedingungen genauer ansehen, unter denen Variablen vom Typ Double verglichen werden.

Wenn wir das Fenster während der Berechnung des Indikators verschieben (shift,shift+ExtDepth), kann das Auftreten eines neuen Extremums entweder mit dem neuen Preis oder damit zusammenhängen, dass das alte Extremum das Fenster verlassen hat. - Es wäre besser, dies explizit anzugeben. Um das klarzustellen. In der Sprachbeschreibung.

Dies scheint mir eher auf den Algorithmus als auf die Sprache zu verweisen. Eine Erinnerung daran, dass die Funktionen, die wir diskutieren, eigentlich nach dem maximalen (minimalen) Preiswert über das Intervall suchen, und nicht nach dem Extremwert, wäre also in einem Buch oder in einigen Kommentaren angebracht.
Um dies zu tun, füge ich die Zeile if(highpos!=shift) val=0.0; . Wie das im Standardcode gemacht wird, verstehe ich nicht. Nach der Tatsache zu urteilen, dass in meiner Variante baumelnde Extrema verschwinden, wird es entweder nicht richtig oder gar nicht gemacht. - Meine Lösung für dieses Problem ist anders: wenn (High[shift]=val) ZigZagBuffer[shift]=val; und wenn (Low[shift]=val) ZigZagBuffer[shift]=val;
Meine Version gefällt mir besser :). Es funktioniert mit ganzen Zahlen. Bei einem solchen Vergleich von Doppeln (wie Low[shift]==val) können gerade Schläge auftreten.
 
Rosh, ich habe die gleiche Möglichkeit. In meinem Kopf. Es gibt einige vage Punkte, die mich daran hindern, sie zu verwirklichen. Sagen wir es mal so. Punkt 4) ist etwas außerhalb des Algorithmus. Es ist bereits ein anderer Algorithmus. Und wenn der in Punkt 4) bearbeitete Abschnitt der Geschichte zur Verfügung steht, kann seine Bearbeitung mit dem Algorithmus ab Punkt 1) zur Zeichnung anderer Extrema führen. Das heißt, die Echtzeit und die Geschichte werden anders sein. Dies ist meiner Meinung nach nicht akzeptabel.
 
Rosh Ich habe die gleiche Möglichkeit. In meinem Kopf. Es gibt einige vage Punkte, die mich daran hindern, sie zu verwirklichen. Sagen wir es mal so. Punkt 4) ist etwas außerhalb des Algorithmus. Dies ist ein anderer Algorithmus. Und wenn der in Punkt 4) bearbeitete Abschnitt der Geschichte zur Verfügung steht, kann seine Bearbeitung mit dem Algorithmus ab Punkt 1) zur Zeichnung anderer Extrema führen. Das heißt, die Echtzeit und die Geschichte werden anders sein. Dies ist meiner Meinung nach nicht akzeptabel.


Punkt 4) wird beim nächsten Tick mit einer Datei über Punkt 2) verarbeitet
 
Дело в том, что алгоритм зигзага, скажем так, не расчленяется. Поясню это. Просчет проводится по всей истории. И если мы в какой-то части исправим ошибки, то в районе нулевого бара процесс обработки остается, скажем так, незавершенным. Затрудняюсь подобрать правильные слова. Так вот эта незавершенность в районе нулевого бара и вытаскивает на свет проблему правильного поиска экстремумов.


Dieses Problem ist bekannt und theoretisch lösbar (ein Algorithmus ist schon seit langem in Planung).
Gibt es eine verbale Beschreibung, was der Zickzackkurs bewirken soll? So etwas wie eine technische Spezifikation.
 
Ich habe das noch nicht gesehen. Bleibt ein Ende des Balkens befestigt? Und welche. Wenn es sich um einen Nulldurchgang handelt, sollte man sich vielleicht die Bedingungen genauer ansehen, unter denen Variablen vom Typ Double verglichen werden?
Das Problem ist, dass ich den Indikator, der den Zickzackkurs verwendet, unter sehr strengen Bedingungen teste. Auf Minuten und mit 2-1-1 Parametern. Was ist der Zweck solcher Tests? Diese Art der Prüfung deckt alle versteckten Schwachstellen recht schnell auf. Außerdem soll der Indikator ausnahmslos auf allen Zeitskalen funktionieren. Der Markt ist ein fraktales Gebilde. Es gibt viele Menschen, die auf Minutenbasis handeln. Warum sollten wir ihnen die Möglichkeit vorenthalten, mit dem vertrauten Werkzeug in einem kleinen Zeitrahmen zu arbeiten?

Meine Version gefällt mir besser.) Es funktioniert mit ganzen Zahlen. Wenn ein solcher Vergleich von Doubles (vom Typ Low[shift]==val) durchgeführt wird, kann es zu Beats kommen.
Bisher habe ich noch keine Schwierigkeiten bei der Arbeit mit Double gehabt. Diese Nummern werden unverändert im Speicher abgelegt. Aber mein Vergleich nimmt Werte aus einer einzigen Speicherzelle. Wenn an dieser Stelle ein Problem auftritt, handelt es sich um ein Problem der Hardware (d. h. des Computers). Es muss etwas an der Hardware getan werden.

Ich habe den Eindruck, dass sich dies nicht auf die Sprache, sondern auf den Algorithmus bezieht. Daher wäre eine Erinnerung daran, dass die Funktionen, die wir erörtern, eigentlich nach dem maximalen (minimalen) Preiswert über das Intervall suchen, und nicht nach einem Extremwert, für ein Buch oder einige Kommentare angebracht.

Ich habe es nur ein Extremum genannt. Es handelt sich dabei um das Maximum und Minimum des gewählten Intervalls. Es ist eine lange Aussprache. Aber die Bedeutung ist dieselbe.
 
Gibt es eine verbale Beschreibung, was der Zickzackkurs bewirken soll? So etwas wie eine Aufgabenstellung?
Das gab es lange Zeit auf CodeBase.mql4.com. Aber diese Beschreibung ist sehr schwer zu verstehen. Und widersprüchlich. Ich glaube, Slava hat im Laufe des Sommers den Code des Zickzacks verfeinert. Danach war nur noch ein Teil der früheren Beschreibung auf der Website vorhanden.
 
nen:
Die Arbeit mit Double hat bisher keine Schwierigkeiten bereitet. Diese Nummern werden unverändert im Speicher abgelegt. Und mein Vergleich nimmt Werte aus einer einzigen Speicherstelle. Wenn hier ein Problem auftritt, ist es eine Frage der Hardware - des Computers. Es muss etwas an der Hardware getan werden.
Nun, ich orientiere mich am Code in der Verzweigung. Und es berechnet jedes Mal den Wert. Es ist einfach sicherer, beim Vergleich von dou nicht == zu verwenden.
 
Nun, ich stütze mich auf den Code in der Verzweigung. Und es berechnet jedes Mal den Wert. Ja, das stimmt. Die Nummer einer Zelle wird gefunden. Aus dieser Zelle (Zeitreihe) wird der Wert des maximalen oder minimalen Balkens entnommen. Es wird davon ausgegangen, dass der Höchstwert auf diesem Balken gefunden wurde. Dieser Wert wird dann zusammen mit der gefundenen Nummer in den Indikatorpuffer gestellt. Das Maximum des Indikators sollte mit dem Maximum des Balkens übereinstimmen. In meinem Code wird das Maximum auch aus dem Array (Zeitreihe) mit der gleichen gefundenen Zahl genommen und mit dem Wert von val verglichen. Es wird geprüft, ob wir das Richtige tun: Wir legen den Wert von val in den Puffer mit dieser Nummer. Er sollte auch gleich dem Maximum des Balkens sein. Der Vergleich von Zahlen, die von derselben Stelle stammen, ist durchaus korrekt.
Grund der Beschwerde: