MT5 Baujahr 1455
Indikator für den Test:
#property indicator_buffers 0
#property indicator_plots 0
int OnInit(void) {return(INIT_SUCCEEDED);}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &Time[],
const double &Open[],
const double &High[],
const double &Low[],
const double &Close[],
const long &TickVolume[],
const long &Volume[],
const int &Spread[]
) {
static int si_Tick = 0;
Print(++si_Tick, ": prev_calculated = ", prev_calculated);
return(rates_total);
}
1. Indikator in das Diagramm einfügen
2. Schließen Sie das Terminal
3. offenes Terminal
Protokoll:
2016.10.17 08:04:38.757 Test (USDJPY,M15) 2: prev_calculated = 100322
2016.10.17 08:04:39.060 Test (USDJPY,M15) 3: prev_calculated = 0
2016.10.17 08:04:39.837 Test (USDJPY,M15) 4: prev_calculated = 100322
2016.10.17 08:04:39.837 Test (USDJPY,M15) 5: prev_calculated = 100322
...
Übersehe ich etwas oder ist es unmöglich, der Variablen prev_calculated zu vertrauen, ich muss die Krücke knacken?
MT5 Baujahr 1455
Indikator für den Test:
#property indicator_buffers 0
#property indicator_plots 0
int OnInit(void) {return(INIT_SUCCEEDED);}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &Time[],
const double &Open[],
const double &High[],
const double &Low[],
const double &Close[],
const long &TickVolume[],
const long &Volume[],
const int &Spread[]
) {
static int si_Tick = 0;
Print(++si_Tick, ": prev_calculated = ", prev_calculated);
return(rates_total);
}
1. Indikator in das Diagramm einfügen
2. Schließen Sie das Terminal
3. offenes Terminal
Protokoll:
2016.10.17 08:04:38.757 Test (USDJPY,M15) 2: prev_calculated = 100322
2016.10.17 08:04:39.060 Test (USDJPY,M15) 3: prev_calculated = 0
2016.10.17 08:04:39.837 Test (USDJPY,M15) 4: prev_calculated = 100322
2016.10.17 08:04:39.837 Test (USDJPY,M15) 5: prev_calculated = 100322
...
Übersehe ich etwas oder ist es unmöglich, der Variablen prev_calculated zu vertrauen, ich muss die Krücke knacken?
Die Variable prev_calculated kann auch ohne History-Paging auf 0 zurückgesetzt werden, wenn sich die Prüfsumme geändert hat (dies ist eine grobe Antwort von servicedesk).
Ich verstehe. Danke. Also zum Schreiner...
Operatoren *(Dereferenzierung/Inderektion) und &(Adresse-von) hinzugefügt, keine weiteren Sprachänderungen werden vorgenommen/geplant
Bitte klären Sie die folgenden Punkte:
* Abrufen einer Variablen per Referenz - gilt nur für:
2. Objekte strukturieren
3. Grundlegende Typen
Handelt es sich in diesem Zusammenhang nur um rlvalue oder auch um lvalue?
Die Aufgabe des Programmierers besteht darin, ein solches Ereignis abzufangen
Ich bin also kein Programmierer - meine Aufgaben sind andere. Carpenter, schätze ich - ich werde 'die Krücke benutzen' und denken, dass ich 'das Ereignis auffange'.
Und ich übertreibe nicht, denn der erklärte Zweck dieser Variablen ist es, die
Zusätzlich zu diesem Zweck soll es auch eine Änderungsmarkierung in der Historie sein, und es soll einige andere Änderungen verfolgen. All dies ist nützlich, aber wir können es nicht für seinen direkten Zweck verwenden - um zu zeigen, wie viele "Balken beim vorherigen Aufruf verarbeitet wurden" - prev_calculated.
Ich bin also kein Programmierer - meine Aufgaben sind andere. Carpenter, schätze ich - ich werde 'die Krücke benutzen' und denken, dass ich 'das Ereignis auffange'.
Und ich übertreibe nicht, denn der erklärte Zweck dieser Variablen ist es, die
Zusätzlich zu diesem Zweck soll es auch eine Änderungsmarkierung in der Historie sein, sowie einige andere Änderungen, um den Überblick zu behalten. All dies ist nützlich, aber Sie können es nicht für seinen direkten Zweck verwenden - um zu zeigen, wie viele "Balken beim vorherigen Aufruf verarbeitet wurden" - prev_calculated
Ich bin also kein Programmierer - meine Aufgaben sind andere. Carpenter, schätze ich - ich werde 'die Krücke benutzen' und denken, dass ich 'das Ereignis auffange'.
Und ich übertreibe nicht, denn der erklärte Zweck dieser Variablen ist es, die
Zusätzlich zu diesem Zweck soll es auch eine Änderungsmarkierung in der Historie sein, sowie einige andere Änderungen, um den Überblick zu behalten. All dies ist nützlich, aber wir können es nicht für seinen direkten Zweck verwenden - um zu zeigen, wie viele Takte im vorherigen Aufruf verarbeitet wurden - prev_calculated
Ist prev_calculated=0, bedeutet dies, dass eine vollständige Neuberechnung durchgeführt werden sollte. Alle Standardindikatoren werden in diesem Fall vollständig neu berechnet.
Was ist nicht klar?
Es heißt, dass sich die Prüfsumme im Laufe der Geschichte geändert hat. Es wäre billiger, den Indikator neu zu berechnen, als herauszufinden, warum sich die Prüfsumme geändert hat.
In der Dokumentation wird ausdrücklich erwähnt, dass
Beachten Sie den Zusammenhang zwischen dem Rückgabewert von OnCalculate() und dem zweiten Eingabeparameter prev_calculated. Der Parameter prev_calculated im Funktionsaufruf enthält einen Wert , der von OnCalculate() beim vorherigenAufruf zurückgegeben wurde.Dies ermöglicht sparsame Algorithmen für die Berechnung des benutzerdefinierten Indikators, um wiederholte Berechnungen für die Balken zu vermeiden, die sich seit dem letzten Aufruf dieser Funktion nicht verändert haben.
Dazu reicht es in der Regel aus, den Wert des Parameters rates_total zurückzugeben, der die Anzahl der Takte im aktuellen Funktionsaufruf enthält. Wenn sich seit dem letzten Aufruf von OnCalculate() die Preisdaten geändert haben (eine tiefere Historie wurde gepumpt oder Historienleerstellen wurden gefüllt), dann wird der Wert des Eingabeparameters prev_calculated vom Terminal auf Null gesetzt.
Wie wäre es, den gesamten Indikator bei 0 neu zu berechnen? Meiner Meinung nach die beste Lösung.
Das ist genau das, was Sie tun sollten: Wenn prev_calculate==0 empfangen wird, sollten Sie den GANZEN Indikator neu berechnen. Da rev_calculate==0 ist in der Regel ein History Swap. Und wenn die Historie vertauscht wird, kann es neue Balken geben, die übersehen oder nicht früher berechnet wurden - d.h. die Indikatorwerte werden falsch sein.
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.