- DRAW_NONE
- DRAW_LINE
- DRAW_SECTION
- DRAW_HISTOGRAM
- DRAW_HISTOGRAM2
- DRAW_ARROW
- DRAW_ZIGZAG
- DRAW_FILLING
- DRAW_BARS
- DRAW_CANDLES
- DRAW_COLOR_LINE
- DRAW_COLOR_SECTION
- DRAW_COLOR_HISTOGRAM
- DRAW_COLOR_HISTOGRAM2
- DRAW_COLOR_ARROW
- DRAW_COLOR_ZIGZAG
- DRAW_COLOR_BARS
- DRAW_COLOR_CANDLES
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:
- Linie
- Sektion (Segment)
- Histogramm
- Pfeil (Symbol)
- Die gefärbte Fläche (Kanal zu füllen)
- Balken
- 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
|
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 |
---|---|---|---|
Wird nicht auf dem Chart visuell dargestellt, aber man kann die Werte des entsprechenden Puffers in "Data Window" finden |
1 |
- |
|
Eine Linie wird auf die Werte des entsprechenden Puffers gezeichnet (leere Werte im Puffer sind unerwünscht) |
1 |
- |
|
Liniensegmente werden zwischen den Werten des jeweiligen Puffers (in der Regel eine Menge von leeren Werten) gezeichnet |
1 |
- |
|
Ein Histogramm wird von der Null-Linie bis den Werte des jeweiliges Puffer gezeichnet (leere Werte sind erlaubt) |
1 |
- |
|
Ein Histogramm wird auf zwei Indikator-Puffer gezeichnet (leere Werte sind erlaubt) |
2 |
- |
|
Wird als Symbols gezeichnet (leere Werte sind erlaubt) |
1 |
- |
|
Ist dem Stil DRAW_SECTION ähnlich, aber im Gegensatz zu ihm kann er vertikale Segmente auf einem Balken bauen |
2 |
- |
|
Farbfüllung zwischen zwei Linien. In "Data Window" werden zwei Werte der entsprechenden Puffer angezeigt |
2 |
- |
|
Wird als Balken auf dem Chart gezeichnet. In "Data Window" werden vier Werte der entsprechenden Puffer angezeigt |
4 |
- |
|
Wird als Kerzen auf dem Chart gezeichnet. In "Data Window" werden vier Werte der entsprechenden Puffer angezeigt |
4 |
- |
|
Eine Linie, für die Sie Farben auf verschiedenen Bars ändern sowie ihre Farbe jederzeit wechseln können |
1 |
1 |
|
Ist dem Stil DRAW_SECTION ähnlich, aber die Farbe jeder Sektion kann individuell eingegeben werden; die Farbe kann dynamisch angegeben werden |
1 |
1 |
|
Ist dem Stil DRAW_HISTOGRAM ähnlich, aber jede Band kann ihre eigene Farbe haben; die Farbe kann dynamisch angegeben werden |
1 |
1 |
|
Ist dem Stil DRAW_HISTOGRAM2 ähnlich, aber jede Band kann ihre eigene Farbe haben; die Farbe kann dynamisch angegeben werden |
2 |
1 |
|
Ist dem Stil DRAW_ARROW ähnlich, aber jedes Symbol kann seine eigene Farbe haben. Farbe kann dynamisch geändert werden |
1 |
1 |
|
Stil DRAW_ZIGZAG mit den Fähigkeiten der individuellen Farbgebung der Sektionen und dynamischen Farbwechsel |
2 |
1 |
|
Stil DRAW_BARS mit den Fähigkeiten der individuellen Farbgebung der Balken und dynamischen Farbwechsel |
4 |
1 |
|
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
|
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
|
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
|
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
|
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)
|
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
|
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
|
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
|
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.