Diskussion zum Artikel "Die Rezepte MQL5 - Die Erstellung des Ringpuffers für eine schnelle Berechnung der Indikatoren im gleitenden Fenster" - Seite 3
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 Berechnung nur des letzten Indikatorwerts und nicht die vollständige Neuberechnung beim Eintreffen eines neuen Ticks ist eine solche Standardgeschichte, dass es seltsam ist, dass Sie überhaupt damit begonnen haben, sie zu diskutieren. Es ist doppelt seltsam, dass Sie dies als einen von Ihnen gefundenen Trick bezeichnen. In Wirklichkeit handelt es sich um einen Standard für die Erstellung aller Indikatoren. Es wird auch in der Dokumentation erwähnt. Aus diesem Grund verwenden alle Indikatoren die Neuberechnung beim letzten Bar/Tick.
Ich werde versuchen, ausführlicher zu antworten:
Es ist ein ziemlich schwerer Indikator. Er wird im Expert Advisor recht selten angefordert, nämlich solange, bis alle Bedingungen ausgelöst werden. Zum Beispiel alle, sagen wir, 300-1000 Bars (in der Tat, es hängt von einer Reihe von Bedingungen, die in bedingten Operatoren ausgedrückt werden). Und wenn Sie den Wert auch nur ein einziges Mal pro Balken erhalten, wird er öfter aufgerufen als der versteckte Indikator im Körper der bedingten Operatoren.
ungefähr so.
Im Prinzip sollte der Grenzwert bei diesem Ansatz immer gleich P sein.Ich werde versuchen, Ihnen eine ausführlichere Antwort zu geben:
Es handelt sich um einen ziemlich schweren Indikator. Im Expert Advisor wird er recht selten angefordert, d.h. bis alle Bedingungen ausgelöst werden. Zum Beispiel alle, sagen wir, 300-1000 Balken (in der Tat, es hängt von einer Reihe von Bedingungen, die in bedingten Operatoren ausgedrückt werden). Und wenn Sie den Wert auch nur einmal pro Balken erhalten, ist das mehr als der Aufruf des versteckten Indikators im Körper der bedingten Operatoren.
Dieser Ansatz führt übrigens nicht immer zu Einsparungen. Denn die verpassten Balken werden immer noch berechnet, wenn der Indikator aufgerufen wird.
Aber wenn ich weiß, dass die Bedingung selten erfüllt wird, verwende ich diese Methode, und wenn der Indikator oft aufgerufen wird, ist es besser, die gesamte Historie zu zählen.
Und natürlich sollte ich nur einen neuen Balken berechnen, da die alten bereits bekannt sind, ist es klar.
Nun dachte ich, dass es notwendig ist, streng von P ohne Vergleich zu beginnen
if (limit > P)limit=P;//эту строку вообще убрать и сделать сразу limit=P;Wenn im Zyklus die Berechnung von P ausgeht und dieser z.B. gleich 10 ist, dann wird die Berechnung von 10 bar ausgehen.
Aber das ist nicht so wichtig, wir können es so lassen, wie es ist. Das ist es nicht wert.
"Verpasste Balken werden immer noch berechnet, wenn der Indikator aufgerufen wird " können Sie genauer sein?
Um ehrlich zu sein, habe ich jetzt solche Indikatoren nur auf einem Bar Null oder dem ersten.
Hier ist zum Beispiel der Hauptteil des Codes von einem von ihnen:
Das heißt, dies sind Indikatoren für den Tester. Natürlich werden sie nicht für die Visualisierung verwendet, man kann in ihnen nichts sehen).
Ein Ringpuffer wird jedoch benötigt, wenn der Indikator aus mehreren Puffern besteht, wobei ein Array aus einem anderen aufgebaut wird.
"Verpasste Balken werden immer noch berechnet, wenn der Indikator aufgerufen wird" - können Sie das genauer erläutern?
Nehmen wir an, dass der Indikator aufgerufen wurde, als 1000 Balken auf dem Diagramm waren, und er hat sie gezählt. Beim nächsten Aufruf - Balken 1001 - wird ein Balken gezählt.
Aber wenn der nächste Aufruf erfolgt, wenn die Balken bereits 1500 sind, werden alle neuen (499) Balken gezählt.
Um ehrlich zu sein, jetzt habe ich solche Indikatoren Bedeutung nur auf eine Bar Null oder die erste Bar.
Was ist dann der Sinn von Indikatoren überhaupt? Übertragen Sie diese Berechnungen in Form einer Funktion in den Expert Advisor, wird es noch schneller sein.
Ich werde versuchen, eine ausführlichere Antwort zu geben:
Der Indikator wird bei jedem Balken berechnet, unabhängig davon, ob Sie ihn aufrufen oder nicht. Lesen Sie die Spezifikation.
Wenn Sie eine wirkliche Beschleunigung wünschen, verlagern Sie die Berechnungen innerhalb des EA. Es gibt keinen anderen Weg. Punktum. All die Beiträge darüber, wie erfolgreich man wenn einfügen kann , sind einfach nur lustig zu lesen.
Ihr Thema ist für diesen Thread unpassend. Beenden wir es hier.
Lieber Vasiliy
zunächst einmal danke ich Ihnen für diesen ausgezeichneten Artikel und seine Implementierungen mit verschiedenen Indikatoren.
Ich möchte Sie fragen, ob es möglich wäre, ein Codebeispiel für den Abschnitt der Berechnung von Hochs/Tiefs mit dem Ringpuffer zu veröffentlichen? Ich finde es schwierig, die richtigen Ergebnisse zu erhalten, wenn der Markt läuft. Es scheint, dass ich den Zeiger verliere, wenn ich die wechselnden Preise mit der Funktion OnChangeValue() aktualisiere.
Vielen Dank im Voraus.
Lieber Vasiliy
zunächst einmal danke ich Ihnen für diesen ausgezeichneten Artikel und seine Implementierungen mit verschiedenen Indikatoren.
Ich möchte Sie fragen, ob es möglich wäre, ein Codebeispiel für den Abschnitt der Berechnung von Hochs/Tiefs mit dem Ringpuffer zu veröffentlichen? Ich finde es schwierig, die richtigen Ergebnisse zu erhalten, wenn der Markt läuft. Es scheint, dass ich den Zeiger verliere, wenn ich die wechselnden Preise mit der Funktion OnChangeValue() aktualisiere.
Vielen Dank im Voraus.
Siehe dieses Beispiel: https://www.mql5.com/de/articles/3047#c6
Siehe dieses Beispiel: https://www.mql5.com/de/articles/3047#c6
Ich habe es gesehen. Ich habe auch die von Ihnen angegebenen Beispiele geprüft. Sie zeigen das gleiche Problem, das ich hatte, wenn es um die Aktualisierung der Werte geht, während der Markt läuft. Prüfen Sie die von Ihnen bereitgestellte Stochastik. Das Hinzufügen eines neuen Wertes ist kein Problem, aber wenn wir versuchen, Stoch.ChangeLast() oder OnChangeValue() in der Klasse CRiMaxMin zu verwenden, funktioniert es nicht. Der Wert wird nicht entsprechend geändert. Wenn Sie das überprüfen oder ein Beispiel für einen funktionierenden Code schicken könnten, wäre das sehr nett.
Ich danke Ihnen.
Ein super Artikel, der Mann kann programmieren!
Wenn doch die deutsche Übersetzung nicht so grauenhaft wäre!!!!!
Wo bitte finde ich die englische Version?
Kann man das irgendwo umschalten?