Es gibt ja zwei überladene Varianten von OnCalculate(). Nun ist mir bei nachfolgender Variante nachfolgendes aufgefallen:
begin nimmt nie einen anderen Wert als 0 an.
Obwohl in einem Beispiel begin sehr wohl eingesetzt wird.
https://www.mql5.com/de/articles/37 von Nikolay Kositsin
Es hat zwar dort keine Auswirkungen daß der Wert immer 0 ist, aber was soll das!? Wieder einmal eine Verunsicherung für Einsteiger?
Hat bei irgend jemandem begin jemals einen anderen Wert als 0 angenommen?
Kannst Du ein konkretes Beispiel geben inkl. dem, was 'rauskommt'?
Ich denke, mit dieser Version von OnCalculate() kann man Indikatoren von Indikatoren oder anderen Preisreihen berechnen - hast Du so ein
Beispiel?
Kannst Du ein konkretes Beispiel geben inkl. dem, was 'rauskommt'?
Ich denke, mit dieser Version von OnCalculate() kann man Indikatoren von Indikatoren oder anderen Preisreihen berechnen - hast Du so
ein Beispiel?
Also kleines Beispiel mit beiden Varianten. Für die 2. Variante Zeile 2 auskommentieren.
#define VARIANTE_1 // auskommentieren für andere Variante #property indicator_chart_window #property indicator_buffers 0 #property indicator_plots 0 #ifdef VARIANTE_1 #property description "OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[])" #else #property description "OnCalculate" #property description " (const int rates_total," #property description " const int prev_calculated," #property description " const datetime &time[]," #property description " const double &open[]," #property description " ...." #property description " const int &spread[])" #endif #ifdef VARIANTE_1 int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) #else 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 &tick_volume[], const long &volume[], const int &spread[]) #endif { int start=(prev_calculated==0)?0:prev_calculated-1; // startindex berechnen Comment("\nrates_total " +IntegerToString(rates_total)+ "\nprev_calculated "+IntegerToString(prev_calculated)+ #ifdef VARIANTE_1 "\nbegin " +IntegerToString(begin)+ #endif "\nstart " +IntegerToString(start)); if(rates_total!=prev_calculated) // nur beim begin einer neuen bar unterschiedlich Delay(500); // kleine pause sonst sieht man das nicht for(int i=start; i<rates_total; i++) // übliche Schleife für indikatoren { } return(rates_total); } void Delay(int mSecs=100) // waits number of mSecs(milliseconds) { datetime endTime=GetTickCount()+mSecs; // calculate the endTime while(GetTickCount()<=endTime) // wait in a loop until endTime is reached ChartRedraw(); }
Die kleine Funktion Delay ist auch eine der wenigen Möglichkeiten den Tester gezielt zu bremsen.
Beim Startbildschirm ergeben sich durch die Varianten auch Unterschiede in den Tabs: Ein zusätzlicher Tab (Parameters) erscheint bei
Variante 1.
Ein weiteres Beispiel wird folgen, da ich mir zu https://www.mql5.com/de/forum/328359 Gedanken gemacht habe.
Das hat dann diese Fragen aufgeworfen.
Da ich keine Ahnung von Indikatoren habe (nie benutzt) ,wie wird denn die OnCalculate aufgerufen ?
Irgendwer oder was muss diesen Parameter ja übergeben.
Oder besser gesagt wo ? Laut Doku ist "begin" nur der Versatz ab wann der Indikator saubere Werte liefern DARF.
Denke das ist ein Relikt aus den Anfängen des MTs und wurde über die Jahre Vergessen.
Da ich keine Ahnung von Indikatoren habe (nie benutzt) ,wie wird denn die OnCalculate aufgerufen ?
Irgendwer oder was muss diesen Parameter ja übergeben.
Oder besser gesagt wo ? Laut Doku ist "begin" nur der Versatz ab wann der Indikator saubere Werte liefern DARF.
Denke das ist ein Relikt aus den Anfängen des MTs und wurde über die Jahre Vergessen.
OnCalculate() wird wie OnInit(), OnTick() etc. vom System aufgerufen. Die Parameter bekommst du vom System mit Daten befüllt.
Ich halte es auch für ein Relikt.
OnCalculate() wird wie OnInit(), OnTick() etc. vom System aufgerufen. Die Parameter bekommst du vom System mit Daten befüllt.
Ich halte es auch für ein Relikt.
Begin wird auf etwas anderes als 0 gesetzt, wenn Sie einen anderen Indikator als Preis [] angeben.
Platzieren Sie beispielsweise einen gleitenden Durchschnitt in einem Diagramm. Wenden Sie dann den angehängten Indikator auf dasselbe Diagramm an und setzen Sie auf der Registerkarte "Parameter" die Option "Daten des vorherigen Indikators" für das Feld "Anwenden auf".
Dies kann auch durch Code erfolgen.
=
Begin wird auf etwas anderes als 0 gesetzt, wenn Sie einen anderen Indikator als Preis [] angeben.
Platzieren Sie beispielsweise einen gleitenden Durchschnitt in einem Diagramm. Wenden Sie dann den angehängten Indikator auf dasselbe Diagramm an und setzen Sie auf der Registerkarte "Parameter" die Option "Daten des vorherigen Indikators" für das Feld "Anwenden auf".
Dies kann auch durch Code erfolgen.
Danke für die Info! Steht das irgendwo in der Dokumentation?
Die ist ja mittlerweile als pdf über 5800 Seiten lang. https://www.mql5.com/files/pdf/mql5.pdf
Dazu kommen noch die Dokumentations-links https://www.mql5.com/en/docs https://www.mql5.com/de/docs usw.
- www.mql5.com
Danke für die Info! Steht das irgendwo in der Dokumentation?
...Ich weiß nicht, es gibt viele Dinge in der Dokumentation, aber nicht immer gut organisiert. Es gibt auch Dinge, die Sie aus Erfahrung lernen
müssen.
- 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.
Es gibt ja zwei überladene Varianten von OnCalculate(). Nun ist mir bei nachfolgender Variante nachfolgendes aufgefallen:
begin nimmt nie einen anderen Wert als 0 an.
Obwohl in einem Beispiel begin sehr wohl eingesetzt wird.
https://www.mql5.com/de/articles/37 von Nikolay Kositsin
Es hat zwar dort keine Auswirkungen daß der Wert immer 0 ist, aber was soll das!? Wieder einmal eine Verunsicherung für Einsteiger?
Hat bei irgend jemandem begin jemals einen anderen Wert als 0 angenommen?