![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
.
Jedenfalls habe ich versucht, die hohen Fraktale nur zu bilden, wenn eine andere Bedingung eintritt, wie iMACD Kreuze, oder EMA Kreuze oder einige andere Indikatoren Kreuze.
So dass die Fraktale nur auf dem Indikator angezeigt werden, wenn alle Bedingungen erfüllt sind.
Ich war nicht sicher, was Sie genau zu tun versuchen, aber versuchen Sie dies, beachten Sie die externen Eingänge.
Wie sind Sie genau zu diesem Schluss gekommen und worin besteht der funktionale Unterschied?
Ich bin zu dieser Schlussfolgerung gekommen, weil ich wahrscheinlich von der OOP-Perspektive ausgegangen bin. Ja, das gilt nicht für den Fall von MQL4, wenn ich mich recht erinnere. Obwohl es eine gute Praxis sein kann?
Oder vielleicht so etwas wie das?
Sie sollten wirklich IndicatorCounted() verwenden, denn wenn Sie es so machen, zeichnet Ihr Indikator all diese Objekte bei jedem neuen Tick neu, anstatt sie alle nur einmal zu zeichnen und neue hinzuzufügen, wenn neue Balken gebildet werden
Ich bin zu diesem Schluss gekommen, weil ich wahrscheinlich aus der OOP-Perspektive geschaut habe. Ja, das gilt nicht für den Fall von MQL4, wenn ich mich recht erinnere. Obwohl es eine gute Praxis sein kann?
Es ist immer eine gute Praxis, den Umfang zu begrenzen. Es ist immer eine gute Praxis, Variablen/Objekte dort zu definieren, wo sie verwendet werden, und sie an diesem Punkt zu initialisieren.
Die Definition eines Objekts außerhalb der Schleife führt zu einer Standardkonstruktion plus N Zuweisungen. Die Definition innerhalb der Schleife führt zu N Konstruktionen mit Wert - normalerweise schneller.
Sorgen Sie sich nie um Optimierungen, bis Sie beweisen können, dass die Änderung einen Unterschied macht.
Es ist immer eine gute Praxis, den Anwendungsbereich zu begrenzen. Es ist immer eine gute Praxis, Variablen/Objekte dort zu definieren, wo sie verwendet werden, und sie an diesem Punkt zu initialisieren.
Die Definition eines Objekts außerhalb der Schleife führt zu einer Standardkonstruktion plus N Zuweisungen. Die Definition innerhalb der Schleife führt zu N Konstruktionen mit Wert - normalerweise schneller.
Machen Sie sich keine Gedanken über Optimierungen, solange Sie nicht beweisen können, dass die Änderung einen Unterschied macht.
Dies sollte auch für seinen Iterator gelten. for (int i=0;...
Allerdings bin ich etwas verwirrt, warum die Deklaration der Variablen (schnellere und langsamere) außerhalb der Schleife nicht gut ist, während sie innerhalb der Schleife in Ordnung ist
Und trotzdem funktioniert der int i = Bars außerhalb der Schleife oder innerhalb der Schleife?
Jedenfalls ist es gut zu sehen, dass einige meiner Ideen, an denen ich gearbeitet habe, bereits in diesem Thread gepostet wurden. Das sind gute Nachrichten und bedeutet, dass ich dem Ziel, eines Tages selbst etwas zu programmieren, ein Stück näher komme. Ein kleiner Fortschritt ist also besser als gar keiner. Danke
So, jetzt kann ich daran arbeiten, einige der Indikatorzeiten zu vergleichen, ich werde versuchen, das jetzt herauszufinden.
Zum Beispiel:
Vergleiche v1[i] mit v2[i] Aktuell gebildete Indikatorzeiten && / || if(v1[i] time is > v2[i] time) und andere Vergleiche wie diese.
Vielen Dank für die vielen Tipps, das war eine große Hilfe.
Es ist immer eine gute Praxis, den Anwendungsbereich zu begrenzen. Es ist immer eine gute Praxis, Variablen/Objekte dort zu definieren, wo sie verwendet werden, und sie an diesem Punkt zu initialisieren.
Die Definition eines Objekts außerhalb der Schleife führt zu einer Standardkonstruktion plus N Zuweisungen. Die Definition innerhalb der Schleife führt zu N Konstruktionen mit Wert - normalerweise schneller.
Machen Sie sich keine Gedanken über Optimierungen, solange Sie nicht beweisen können, dass die Änderung einen Unterschied macht.
Ok, ich scheine jetzt einige Varianten eines funktionierenden Codes zu haben, danke.
Allerdings bin ich etwas verwirrt, warum die Deklaration der Variablen (schneller und langsamer) außerhalb der Schleife nicht gut ist, während sie innerhalb der Schleife in Ordnung ist
Und dennoch funktioniert der int i = Bars außerhalb der Schleife oder innerhalb der Schleife?
Wenn Sie einen Indikator erstellen, wenden Sie Ihren Code auf jeden einzelnen Balken im Diagramm an. Das bedeutet, dass Sie den Wert des Macd-Indikators so abrufen müssen, wie er für jeden dieser historischen Balken war.
In Ihrem ursprünglichen Code haben Sie das getan:
Der letzte Parameter 1 ist der Wert des Macd, wie er in Balken 1 des Charts war, dem Balken vor dem aktuellen Balken, der als Balken 0 indexiert istOffensichtlich wollen Sie nicht diesen einen Wert des macd in Ihrem bedingten Operator für den gesamten historischen Chart verwenden.
Sie müssen den macd auf denselben Balkenindex wie jeden einzelnen Balken indexieren, so dass Sie zum Beispiel bei Balken 500 Folgendes benötigen
Der letzte Parameter muss sich ändern, damit er mit der Bar-Nummer übereinstimmt, auf die Ihr Indikator seine Algorithmen anwendet.
Aus diesem Grund benötigen Sie ihn innerhalb der Schleife, so dass Sie den Schleifenzyklus-Iterator ( i ) für den letzten Parameter verwenden können, damit Sie Ihren Macd-Wert so erhalten, wie er für jeden Balken des historischen Charts war.
Ich hoffe, das hilft, die Dinge ein wenig zu klären.
Versuchen Sie diese Änderung
Und warum ist dies besser als for(int i = Bars ??
Bitte um Ratschläge, danke