Stile der Indikator in den Beispielen

MetaTrader 5 Client Terminal enthielt 38 eingebaute Technische Indikatoren, die in MQL5-Programmen mithilfe der entsprechenden Funktionen verwendet werden können. Aber der Hauptvorteil der MQL5-Sprache ist die Fähigkeit, eigene Indikatoren, die dann in Expert Advisor für Erhaltung der Werte oder für die technische Analyse verwendet werden, zu erstellen.

Das ganze Reihe von Indikatoren kann aus mehreren grundlegenden Zeichenstile, die grafische graphische Konstruktionen genannt sind, abgeleitet werden. Eine Konstruktion ist eine Weise der Darstellung von Daten, die der Indikator berechnet, speichert und zeigt auf Aufruf. Es gibt sieben solcher grundlegenden Konstruktionen:

  1. Linie
  2. Sektion (Segment)
  3. Histogramm
  4. Pfeil (Symbol)
  5. Die gefärbte Fläche (Kanal zu füllen)
  6. Balken
  7. Japanische Kerzen

Jede Darstellung benötigt 1-5 Arrays des Typs double, in deren Indikatorwerte gespeichert werden. Für die Bequemlichkeit werden diese Arrays mit den Indikator-Puffern verbunden. Die Anzahl der Puffer im Indikator muss im Voraus durch Compiler-Direktiven deklariert werden, zum Beispiel:

#property indicator_buffers 3 // Anzahl der Puffer
#property indicator_plots   2 // Anzahl der graphischen Konstruktionen

Die Anzahl der Puffer im Indikator ist immer größer oder gleich der Anzahl von Konstrukten im Indikator.

Da jede grundlegende grafische Konstruktion kann Farbvariationen oder spezielle Darstellung haben, dann die tatsächliche Anzahl der Konstruktionen in der MQL5-Sprache ist 18:

Konstruktion

Beschreibung

Werte-Puffer

Farbpuffer

DRAW_NONE

Wird nicht auf dem Chart visuell dargestellt, aber man kann die Werte des entsprechenden Puffers in "Data Window" finden

1

-

DRAW_LINE

Eine Linie wird auf die Werte des entsprechenden Puffers gezeichnet (leere Werte im Puffer sind unerwünscht)

1

-

DRAW_SECTION

Liniensegmente werden zwischen den Werten des jeweiligen Puffers (in der Regel eine Menge von leeren Werten) gezeichnet

1

-

DRAW_HISTOGRAM

Ein Histogramm wird von der Null-Linie bis den Werte des jeweiliges Puffer gezeichnet (leere Werte sind erlaubt)

1

-

DRAW_HISTOGRAM2

Ein Histogramm wird auf zwei Indikator-Puffer gezeichnet (leere Werte sind erlaubt)

2

-

DRAW_ARROW

Wird als Symbols gezeichnet (leere Werte sind erlaubt)

1

-

DRAW_ZIGZAG

Ist dem Stil DRAW_SECTION ähnlich, aber im Gegensatz zu ihm kann er vertikale Segmente auf einem Balken bauen

2

-

DRAW_FILLING

Farbfüllung zwischen zwei Linien. In "Data Window" werden zwei Werte der entsprechenden Puffer angezeigt

2

-

DRAW_BARS

Wird als Balken auf dem Chart gezeichnet. In "Data Window" werden vier Werte der entsprechenden Puffer angezeigt

4

-

DRAW_CANDLES

Wird als Kerzen auf dem Chart gezeichnet. In "Data Window" werden vier Werte der entsprechenden Puffer angezeigt

4

-

DRAW_COLOR_LINE

Eine Linie, für die Sie Farben auf verschiedenen Bars ändern sowie ihre Farbe jederzeit wechseln können

1

1

DRAW_COLOR_SECTION

Ist dem Stil DRAW_SECTION ähnlich, aber die Farbe jeder Sektion kann individuell eingegeben werden; die Farbe kann dynamisch angegeben werden

1

1

DRAW_COLOR_HISTOGRAM

Ist dem Stil DRAW_HISTOGRAM ähnlich, aber jede Band kann ihre eigene Farbe haben; die Farbe kann dynamisch angegeben werden

1

1

DRAW_COLOR_HISTOGRAM2

Ist dem Stil DRAW_HISTOGRAM2 ähnlich, aber jede Band kann ihre eigene Farbe haben; die Farbe kann dynamisch angegeben werden

2

1

DRAW_COLOR_ARROW

Ist dem Stil DRAW_ARROW ähnlich, aber jedes Symbol kann seine eigene Farbe haben. Farbe kann dynamisch geändert werden

1

1

DRAW_COLOR_ZIGZAG

Stil DRAW_ZIGZAG mit den Fähigkeiten der individuellen Farbgebung der Sektionen und dynamischen Farbwechsel

2

1

DRAW_COLOR_BARS

Stil DRAW_BARS mit den Fähigkeiten der individuellen Farbgebung der Balken und dynamischen Farbwechsel

4

1

DRAW_COLOR_CANDLES

Stil DRAW_CANDLES mit den Fähigkeiten der individuellen Farbgebung der Kerzen und dynamischen Farbwechsel

4

1

 

Der Unterschied zwischen einem Indikator-Puffer und einem Array

In jedem Indikator deklarieren wir ein oder mehr Arrays vom Typ double auf die globale Ebene, die dann als Indikator-Puffer mit der SetIndexBuffer()-Funktion verwendet werden. Für Zeichnung der graphischen Konstruktionen eines Indikators sind nur die Werte der Indikator-Puffer verwendeten, alle anderen Arrays können nicht dafür genutzt werden. Darüber hinaus sind die Werte der Puffer in "Data Window" angezeigt.

Der Indicator-Puffer sollte dynamisch sein und erfordert keine Angabe der Größe - die Größe des Arrays, das als Indikator-Puffer verwendet wird, wird automatisch durch die Laufzeit-Subsystem des Terminals angegeben.

Indizierung-Richtung nach der Bindung des Arrays mit dem Indikator-Puffer ist standardmäßig wie in einem gewöhnlichen Array aufgestellt, aber Sie können die Funktion ArraySetAsSeries() verwenden, um die Methode für den Zugriff zu Elemente eines Arrays zu ändern. Standardmäßig wird der Indikator-Puffer verwendet, um Daten für die Darstellung zu speichern (INDICATOR_DATA).

Wenn Berechnung der Indikator-Werte Zwischen-Berechnungen und Speicherung von untergeordneter Wert für jedem Balken erfordert, so können Sie dieses Array während Bindung als Berechnung-Puffer deklarieren (INDICATOR_CALCULATIONS). Für die Zwischen-Werte kann ein regelmäßiges Array verwenden werden, aber in diesem Fall muss der Programmierer selbst die Größe des Arrays steuern.

Einige Darstellungen erlauben Farbe für jeden Balken anzugeben. Um Informationen über die Farbe zu speichern, werden Farbpuffer verwendet (INDICATOR_COLOR_INDEX). Die Farbe ist ein Integer-Typ color, aber nicht alle Indikator-Puffer müssen vom Typ double sein. Werte von der Farbpuffer und Hilfspuffer (INDICATOR_CALCULATIONS) können nicht mit der CopyBuffer() function erhalten werden.

Die Anzahl der Indikator Puffer muss durch den Compiler-Direktive #property indicator_buffers Anzahl_der_Puffers angegeben werden:

#property indicator_buffers 3  //  Der Indikator hat 3 Puffer

Die maximale Anzahl der Puffer in einem Indikator ist 512.

 

Relevanz von Indikator-Puffer und grafische Konstruktionen

Jede grafische Konstruktion basiert auf einem oder mehreren Indikator-Puffer. Zum Beispiel, Kerze brauchen vier Werte - die Preise von Open, High, Low und Close. Dementsprechend müssen Sie für den Indikator in Form von Kerzen 4 Indikator-Puffer und 4 Arrays vom Typ double für sie deklarieren. Zum Beispiel:

//--- Ein Indikator hat vier Puffer
#property indicator_buffers 4
//--- Der Indikator hat eine graphische Konstruktion
#property indicator_plots   1
//--- Graphische Konstruktion Nummer 1 wird als Kerzen gezeichnet
#property indicator_type1   DRAW_CANDLES
//--- Die Farbe der Kerzen ist clrDodgerBlue
#property indicator_color1  clrDodgerBlue
//--- 4 Arrays für die Puffer
double OBuffer[];
double HBuffer[];
double LBuffer[];
double CBuffer[];

 

Grafische Darstellungen verwenden automatisch die Indikator-Puffer in Übereinstimmung mit der Darstellung-Nummer. Nummer der Darstellungen beginnen von eins, Nummer der Puffer beginnen von Null. Wenn die erste Darstellung 4 Indikator-Puffer benötigt, dann werden erste 4 Indikator-Puffer für Zeichnung verwendet. Diese vier Puffer sollten durch die Funktion SetIndexBuffer() mit den entsprechenden Arrays mit der richtigen Indizierung gebunden werden.

//--- Bindung von Arrays und Indikator-Puffer
   SetIndexBuffer(0,OBuffer,INDICATOR_DATA);  // Der erste Puffer entspricht den Index 0
   SetIndexBuffer(1,HBuffer,INDICATOR_DATA);  // Der zweite Puffer entspricht den Index 1
   SetIndexBuffer(2,LBuffer,INDICATOR_DATA);  // Der dritte Puffer entspricht den Index 2
   SetIndexBuffer(3,CBuffer,INDICATOR_DATA);  // Der vierte Puffer entspricht den Index 3

Beim Zeichnung von Kerzen, verwendet der Indikator die erste vier Puffer, da sie Darstellung "Kerze" von der ersten Reihe deklariert wurde.

Wir ändern das Beispiel und fügen eine Konstruktion von einer einfacher Linie hinzu - DRAW_LINE. Nehmen wir nun an, dass die Linie Nummer 1 hat und die Kerzen Nummer 2 haben. Die Anzahl der Puffer und die Anzahl der Konstruktionen haben erhöht.

//--- Der Indikator hat fünf Indikator-Puffer
#property indicator_buffers 5
//--- Der Indikator hat zwei graphischen Konstruktionen
#property indicator_plots   2
//--- Graphische Konstruktion Nummer 1 wird als eine Linie gezeichnet
#property indicator_type1   DRAW_LINE
//--- Die Farbe der Linie ist clrDodgerRed
#property indicator_color1  clrDodgerRed
//--- Graphische Konstruktion Nummer 2 wird als Kerzen gezeichnet
#property indicator_type2   DRAW_CANDLES
//--- Die Farbe der Kerzen ist clrDodgerBlue
#property indicator_color2  clrDodgerBlue
//--- 5 Arrays für die Puffer
double LineBuffer[];
double OBuffer[];
double HBuffer[];
double LBuffer[];
double CBuffer[];

Die Reihenfolge der Konstruktionen hat verändert, jetzt kommt eine Linie und dann Kerzen. Daher wird die Reihenfolge der Puffer die gleiche sein - zum ersten Mal deklarieren wir den Linie-Puffer für Index Null, und dann vier Puffer für Kerzen.

   SetIndexBuffer(0,LineBuffer,INDICATOR_DATA);  // Der erste Puffer entspricht den Index 0
//--- Bindung von Arrays und Indikator-Puffer für Kerzen
   SetIndexBuffer(1,OBuffer,INDICATOR_DATA);     // Der zweite Puffer entspricht den Index 1
   SetIndexBuffer(2,HBuffer,INDICATOR_DATA);     // Der dritte Puffer entspricht den Index 2
   SetIndexBuffer(3,LBuffer,INDICATOR_DATA);     // Der vierte Puffer entspricht den Index 3
   SetIndexBuffer(4,CBuffer,INDICATOR_DATA);     // Der fünfte Puffer entspricht den Index 24 

Die Anzahl der Puffer und grafischen Konstruktionen können nur mit Compiler-Direktiven angegeben werden, die dynamischen Veränderungen dieser Eigenschaften mit Funktionen ist unmöglich.

 

Farbversionen von Stilen

Stile sind in zwei Gruppen eingeteilt. Die erste Gruppe enthält die Stile, in denen es kein Wort COLOR im Titel gibt, wir nennen diese Stile grundlegende Stile:

  • DRAW_LINE
  • DRAW_SECTION
  • DRAW_HISTOGRAM
  • DRAW_HISTOGRAM2
  • DRAW_ARROW
  • DRAW_ZIGZAG
  • DRAW_FILLING
  • DRAW_BARS
  • DRAW_CANDLES

Die zweite Gruppe enthält die Stile mit dem Wort COLOR in Titel, wer nennen sie Farbversionen:

  • DRAW_COLOR_LINE
  • DRAW_COLOR_SECTION
  • DRAW_COLOR_HISTOGRAM
  • DRAW_COLOR_HISTOGRAM2
  • DRAW_COLOR_ARROW
  • DRAW_COLOR_ZIGZAG
  • DRAW_COLOR_BARS
  • DRAW_COLOR_CANDLES

Alle Farbversionen der Stile unterscheiden sich von den grundlegenden Stile in dass sie eine Farbe für jeden Teil der graphischen Konstruktion anzugeben erlauben. Minimaler Teil der Konstruktion ist ein Balken, so kann man sagen, dass die Farbversionen die Farbe der Konstruktion auf jedem Balken einzugeben erlauben.

Um die Farbe der Konstruktion auf jeden Balken anzugeben, erhalten die Farbversionen der Stile ein zusätzlicher spezieller Puffer, um die Farbindexes zu speichern. Diese Indizes zeigen die Nummer der Farbe in einem speziellen Array mit einem vordefinierten Set von Farben. Die Größe des Arrays von Farben ist 64. Dies bedeutet, dass jede Farbversion erlaubt Färbung mit 54 verschiedenen Farben.

Das Set und die Anzahl der Farben im speziellen Array kann dynamisch durch Compiler-Direktive #property indicator_color angegeben werden (durch Kommata werden alle notwendigen Farben angegeben). Zum Beispiel, der Eintrag im Indikator:

//--- Wir definieren 8 Farben zum Einfärben von Kerzen (sie sind in dem speziellen Array gespeichert)
#property indicator_color1  clrRed,clrBlue,clrGreen,clrYellow,clrMagenta,clrCyan,clrLime,clrOrange

Hier ist angegeben, dass für die grafische Konstruktion Nummer acht Farben, die in einem speziellen Array gestellt werden, definiert sind. Als nächstes werden wir nicht die Farbe angeben, sondern nur ihr Index. Wenn wir rot für den Balken angeben sollen, dann müssen wir den Index der roten Farbe aus einem Array in Farbpuffer angeben. Die rote Farbe hat Nummer 1 in Direktive, Indexnummer 0 entspricht sie.

  //--- Definieren wir die Farbe der Kerze clrRed
  col_buffer[buffer_index]=0;

Ein Set von Farben für die Färbung kann dynamisch durch PlotIndexSetInteger()-Funktion verändert sein. Beispiel:

      //--- Wir geben die Farbe für jeden Index als die Eigenschaft PLOT_LINE_COLOR
      PlotIndexSetInteger(0,                    //  Nummer der Grafikstile
                          PLOT_LINE_COLOR,      //  Eigenschaftbezeichnung
                          plot_color_ind,       //  Index der Farbe, in dem wir die Farbe schreiben
                          color_array[i]);      //  Neue Farbe

 

Eigenschaften des Indikators und der grafischen Konstruktionen

Eigenschaften für graphischen Konstruktionen können durch Compiler-Direktiven und mit den entsprechenden Funktionen angegeben werden. Lesen Sie mehr darüber in der Sektion Zusammenhang zwischen Eigenschaften des Indikators und entsprechenden Funktionen. Dynamische Veränderung der Indikator-Eigenschaften durch Funktionen erlaubt es flexibler benutzerdefinierte Indikatoren zu erstellen.

 

Start der Zeichnung des Indikators im Chart

In vielen Fällen, unter den Bedingungen des Algorithmus, kann die Berechnung der Indikatorwerte nicht sofort mit dem aktuellen Balken gestartet werden, es ist erforderlich, die minimale Anzahl von vorgehenden Balken in der Geschichte zu versorgen. Zum Beispiel bedeuten viele Arten von Glättung, dass ein Array von Preisen für das vorgehenden N Balken erforderlich ist, und auf der Grundlage dieser Werte wird der Indikatorwert für den aktuellen Balken berechnet.

In solchen Fällen entweder gibt es keine Möglichkeit, die Indikatorwerte für die ersten N Balken zu berechnen, oder diese Werte sollen nicht auf dem Chart angezeigt werden und sind nur subsidiär für die Berechnung der folgenden Werte. Um nichts auf die erste N Balken in der Geschichte zu zeichnen, geben Sie den N Wert der Eigenschaft PLOT_DRAW_BEGIN für die entsprechende grafische Konstruktion ein:

//--- Bindung von Arrays und Indikator-Puffer für Kerzen
PlotIndexSetInteger(Nummer_der_graphischen_Konstruktion,PLOT_DRAW_BEGIN,N);

Hier:

  • Nummer_der_graphischen_Konstruktion – Wert von 0 bis indicator_plots-1 (Nummerierung der Konstruktionen beginnt mit Null).
  • N - Anzahl der ersten Balken in der Geschichte, auf denen der Indikator nicht auf dem Chart angezeigt werden soll.