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
Hallo SDC,
ich habe es verstanden. Vielen Dank dafür.
wenn es 100 bar gibt, beginnen die Gesamtraten von 0 bis 99.
Am Anfang, pre_cal =0 --> limit=100 bar - 0 =100.
for(int=1 bis limit=100; I++)
ganz am Ende ist I=100(Indexwert) und es gibt keinen solchen Balken 100.
Um den maximalen Wert I=99 zu erreichen, setze ich limit -1;
Ich frage mich, ob es einen besseren Weg gibt.
Was mich außerdem verwirrt, ist, dass ich bei vielen anderen Indikatoren den gleichen Ansatz verwende und es kein solches Problem mit dem Überschreiten des Bereichs gibt.
Außerdem danke ich Ihnen für die Expertentabelle.
SCFX
Darüber hinaus, was mich verwirrt ist, dass in vielen anderen Indikator, verwende ich den gleichen Ansatz und es gibt keine solche out of range Problem.
vor B600 außerhalb des Bereichs war nicht ein kritischer Fehler
Um den maximalen Wert von I=99 zu erreichen, setze ich daher den Grenzwert -1;
Ich frage mich, ob es einen besseren Weg gibt.
Ihr Code zeichnet nun den Chartverlauf von Balken 1 aufwärts ohne Fehler, aber er zeichnet nicht für neue Balken. Es gibt viele Möglichkeiten, es zu codieren, je nachdem, was Sie wollen, dass es zu tun. Schauen Sie sich die mitgelieferten Indikatoren im Metaeditor an, um zu sehen, wie die MQ-Programmierer es machen. Wenn Sie deren Code lesen können und den Grund für jede Zeile verstehen, werden Sie keine Probleme haben, Indikatoren zu erstellen.
Ich habe es jetzt verstanden, DEZA.
Für mich persönlich ist es schwer vorstellbar, wenn ich das Dokument lese. Dennoch bin ich mir nicht sicher, warum prev_calculated= Total_rates -1.
Deshalb mache ich hier ein numerisches Beispiel. Ich hoffe, dass es jemandem, der so neu ist wie ich, helfen könnte.
Normalerweise sehen wir:
Limit= rates_total- prev_calculated; //(no-1)
ODER
for(i=1;i<limit;i++) oder for(i=1;i<=limit;i++)
Das Wichtigste ist, dass LIMIT >=1 ist. In meiner Situation ist LIMIT=0 und deshalb wird der Indikator nicht REFESHED, wenn ein neuer Tick hereinkommt.
Warum, wird sich zeigen. (Ich denke, die Ursache ist die prev_calculated zumindest in meinem Fall)
Angenommen, ich hänge den Indikator an, wenn es 100 Balken im Chart gibt. Hier sind die Werte der Variablen:
Erste Wertetabelle
Variable
Total_rates 100
Index of bar 0-99
prev_calculated 0
Limit 100
Loop i value 1-99
Alles ist gut. Der Wert wird das erste Mal von Takt 1 bis zum Beginn des Charts angezeigt.Wie viele Balken wurden bereits berechnet? Es ist ein kritischer Punkt zu meinem Fehler und ich bin nicht 100% klar.
Wenn ein neuer Balken beginnt, wird im Chart jetzt 101 Balken angezeigt. Der Indikator wird nicht für den bereits geschlossenen Balken aktualisiert, der jetzt Balken 1 ist.
Zweite Wertetabelle
Variable
Total_rates 101
Index of bar 0-100
prev_calculated 99 OR 100 (siehe unten)
Limit2 OR 1
Schleife i Wert 1bis1 OR 1 bis 0
Basierend auf der 1. Tabelle, Indikator berechnen 99 bar (wie es Schleife von 1 bis 99).
Die Lösung ist also ganz klar: Mach for(i=1; ___ dieser hier muss größer als 1 sein for (<) oder größer oder gleich 1 for (<=)___; i++). In meinem letzten Code ist es gleich 0.Im Dokument heißt es jedoch: "ABER wenn es nicht der erste Aufruf von start() ist, wird der Wert gleich Balken-1 zurückgegeben). Es wird also 101-1=100 zurückgegeben.
Dieser eine andere Balken verursacht Probleme. Wenn das System 100 als prev_calculated zurückgibt.
Sie sehen, dass die Schleife funktioniert, wenn prev_calculated=99 ist.
Wenn prev_calculated jedoch 100 ist, funktioniert die Schleife nicht, da das Limit von 0 oder -1 abhängt.
Kann mir jemand helfen, die Logik hinter prev_calculated= Bars-1 in diesem Fall zu verstehen?
Ich hoffe es hilft.
SCFX
prev_calculated == rates_total
Ich habe es jetzt verstanden, SDC.
Für mich persönlich ist es schwer vorstellbar, wenn ich das Dokument lese. Dennoch bin ich mir nicht sicher, warum prev_calculated= Total_rates -1.
SCFX
Erstellen Sie einen neuen Indikator, fügen Sie diesen Code in die Startfunktion ein, hängen Sie ihn an einen 1-Minuten-Chart und beobachten Sie die Alarme, wenn die Ticks eintreffen.
Sie werden sehen, dass rates_total die aktuelle Anzahl der Balken ist.
prev_calculated ist die Anzahl der Balken, die zum vorherigen Tick vorhanden waren.
prev_calculated == rates_total
Erstellen Sie einen neuen Indikator, fügen Sie diesen Code in die Startfunktion ein, hängen Sie ihn an ein 1-Minuten-Diagramm an und beobachten Sie die Warnungen, wenn die Ticks eintreffen.
Sie werden sehen, dass rates_total die aktuelle Anzahl der Ticks ist.
prev_calculated ist die Anzahl der Balken, die zum vorherigen Tick vorhanden waren.
Wow, das ist seltsam.
In dem zuvor geposteten Link heißt es, dass wenn :BUT, wenn es nicht der erste Aufruf von start() ist, der Wert gleich Bars-1 zurückgegeben wird.
Wie kommt es, dass er Bars (Rate_totals) zurückgibt.
Ja, ich weiß, dass man das sagt, aber es ist nicht ganz richtig.
Was tatsächlich passiert, ist Folgendes.
rates_total == Gesamtzahl der Balken bei Ankunft des aktuellen Ticks. prev_calculated == Gesamtzahl der Balken bei Ankunft des vorherigen Ticks.
Sie haben also 3 Hauptzustände von prev-calculated vs rates_total: Indikator geladen, Ticks in der Mitte des Balkens, erster Tick des neuen Balkens.
prev_calculated == 0 beim ersten Durchlauf, weil es seit dem Laden des Indikators keinen vorherigen Tick gab.
Auch wenn das Diagramm geändert oder eine Historie hinzugefügt wird, wird prev_calculated wieder auf Null zurückgesetzt.
Der Rückgabewert von OnCalculate wird nicht verwendet, aber es ist am besten, den Standardrückgabewert (rates_total) zu verwenden, falls das jemals behoben wird.
Ich weiß, was in den neuen Dokumenten steht. Wenn man es so macht, muss man prev_calculated auf einen Wert ungleich Null testen und rates_total - prev_calculated um eins nach unten korrigieren. Das ist zurück zu dekrement indicator_counted Verwirrung.
Es macht keinen Sinn, return( rates_total - 1 ) zu machen, denn der Wert von prev_calculated ist so, als ob er return(rates_total) wäre, unabhängig davon, was Sie ihm gesagt haben.