- Stile der Indikator in den Beispielen
- Zusammenhang zwischen Eigenschaften des Indikators und entsprechenden Funktionen
- SetIndexBuffer
- IndicatorSetDouble
- IndicatorSetInteger
- IndicatorSetString
- PlotIndexSetDouble
- PlotIndexSetInteger
- PlotIndexSetString
- PlotIndexGetInteger
Benutzerindikatoren
Gruppe der Funktionen, die für die Erzeugung der Benutzerindikatoren verwendet werden. Diese Funktionen können nicht beim Schreiben von Scripts und Ratgebern verwendet werden.
Funktion |
Massnahme |
---|---|
Verbindet den Indikatorpuffer mit dem eindimensionalen dynamischen Feld Feld des Typs double |
|
Gibt den Wert des Indikators vor, der den Typ double hat |
|
Gibt Eigenschaftswert des Indikators vor, der den Typ int hat |
|
Gibt Eigenschaftswert des Indikators vor, der den Typ string hat |
|
Gibt Zeilenwert des Indikators vor, der den Typ double hat |
|
Gibt Zeilenwert des Indikators vor,der den Typ int hat |
|
Gibt Zeilenwert des Indikators vor, der den Typ string hat |
|
Gibt Zeilenwert des Indikators zurück, der den ganzzahligen Typ hat |
Eigenschaften der Indikator können mit Hilfe der Compiler-Direktiven oder mit Funktionen angegeben werden. Um dies besser zu verstehen, ist es empfehlenswert, dass Sie Stile der Indikator in den Beispielen studieren.
Alle notwendigen Berechnungen der Benutzerindikatoren muessen in der vorbestimmten Funktion OnCalculate() untergeordnet werden .Wenn die kurze Aufrufform der Funktion OnCalculate() der Art
int OnCalculate (const int rates_total, const int prev_calculated, const int begin, const double& price[]) |
verwendet wird, enthält die Variable rates_total den Wert der gesamten Anzahl der Elemente des Feldes price[], das als Eingabe-Parameter für Berechnung der Anzeigerwerte übertragen wurde.
Parameter prev_calculated – ist das Ergebnis der Durchführung der Funktion OnCalculate() auf dem vorangehenden Level und ermöglicht sparsamen Algorythmus für Berechnung der Indikatorwerte zu gestalten. ZB wenn der laufende Wert rates_total=1000, und prev_calculated=999, dann ist es vielleicht genug, Berechnungen nur für einen Wert des Anzeigerpuffers zu machen.
Wenn die Information über die Größe des Eingabefeldes price unzugaenglich waere, wuerde es zur Notwendigkeit führen, Berechnungen für 1000 Werte jedes Indikatorpuffers zu machen. Beim ersten Aufruf der Funktion OnCalculate() ist der Wert prev_calculated=0. Wenn sich das Feld price[] irgendwie verändert hat, ist prev_calculated in diesem Fall auch 0.
Parameter begin zeigt die Anzahl der Initialwerte des Feldes price, die keine Daten für die Berechnung enthalten. ZB wenn als Eingabefeld die Werte des Indikators Accelerator Oscillator verwendet wurden (für den die ersten 37 Werte nicht berechnet werden), ist begin=37. Als Beispiel betrachten wir einen einfachen Anzeiger:
#property indicator_chart_window
|
Ziehen wir das aus dem Fenster "Navigator" ins Fenster des Indikators Accelerator Oscillator und geben wir an, dass Berechnungen auf der Grund der Werte des früheren Indikators durchgeführt werden:
Im Ergebnis wird der Wert prev_calculated beim ersten Aufruf der Funktion OnCalculate() 0 sein, bei weiteren Aufrufen wird der Wert dem Werten rates_total gleich sein (bis die Anzahl der Bars am Preischart größer wird).
Wert des Parameters begin wird der Anzahl der Initialbars gleich, für die Werte des Indikators Accelerator nicht berechnet werden auf Grund der Logik dieses Indikators. Wenn wir den Ausgangskode des Benutzerindikators Accelerator.mq5 ansehen, sehen wir in der Funktion OnInit() die folgenden Zeilen:
//--- sets first bar from what index will be drawn
|
Gerade durch die Funktion PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, empty_first_values) stellen wir die Anzahl der unbedeutenden ersten Werte im Nullindikatorfeld, die wir für die Berechnungen (empty_first_values) nicht zu beachten brauchen. So haben wir Mechanismen um:
- die Anzahl der Initialwerte des Indikators anzugeben, die für Berechnungen im anderen Benutzerindikator nicht zu verwendet sind;
- die Information über die Anzahl der ersten Werte zu bekommen, die beim Aufruf eines anderen Benutzerundikatots ignoriert werden muessen, ohne in Logik der Berechnungen zu gehen.