MetaTrader 5 / Indikatoren

Klasse zum Zeichnen des ADX unter Verwendung des Ringbuffers - Indikator für den MetaTrader 5

1372
(24)

Beschreibung

Die CADXOnRingBuffer Klasse wurde zur Berechnung des technischen Indikators Average Directional Movement Index (Average Directional Movement Index, ADX) unter Vernwendung des Algorithmus des  Ringbuffers entwickelt. 

Deklaration

class CADXOnRingBuffer

Titel

#include <IncOnRingBuffer\CADXOnRingBuffer.mqh>

Die Datei der CADXOnRingBuffer.mqh Klasse sollte in den Ordner IncOnRingBuffer der in MQL5\Include\ erstellt werden muss kopiert werden. Zwei Dateien mit Beispielen die von dieser Klasse verwendet werden wurden dieser Beschreibung angehängt. Die Datei mit der Klasse des Ringbuffers und die Klasse des Moving Average müssen sich auch in diesem Ordner befinden.

Klassenmethoden

//--- initialization method: bool Init(                                // gibt bei Fehler false zurück, bei Erfolg - true    int            ma_period   = 14,       // Periode des Glättung des Moving Average    ENUM_MA_METHOD ma_method   = MODE_EMA, // Methode des Moving Average    int            size_buffer = 256,      // die Größe des Ringbuffers, die Anzahl der gespeicherten Daten    bool           as_series   = false     // wahr, wenn es sich um eine Zeitreihe handelt, falsch wenn die übliche Indexierung für die Eingabedaten verwendet werden soll    );             //--- Methode zur Berechnung basierend auf Zeitreihen oder Indikatorenbuffers:           int MainOnArray(                  // gibt die Anzahl der verarbeiteten Element zurück      const int     rates_total,     // die Größe des Arrays    const int     prev_calculated, // verabeitete Elemente im vorherigen Aufruf    const double &high[]           // Maximalwert Array    const double &low[]            // Minimalwert Array    const double &close[]          // Schlusspreis Array    ); //--- Methode zur Berechnung basierend auf separaten Reihenelementen des Arrays             double MainOnValue(              // gibt den ADX Wert für das Mengenelement zurück    const int    rates_total,     // die Größe des Arrays    const int    prev_calculated, // verarbeitete Element des Arrays    const int    begin,           // von wo die signifikanten Werte des Arrays beginnen    const double high,            // der Maximalwert     const double low,             // der Minimlalwert     const double close,           // Schlusspreis     const int    index            // der Elementindex    ); //--- Zugriffsmethoden auf die Daten: int    BarsRequired();   // Gibt notwendige Zahl von Balken zurück, die zum Zeichnen des Indikators benötigt werden string NameADX();        // Gibt den Namen des Indikators zurück string NameNDI();        // Gibt den Namen der negativen Directional Movement Indikatorenlinie zurück string NamePDI();        // Gibt den Namen der positiven Directional Movement Indikatorenlinie zurück string MAMethod();       // Gibt die Glättungsmethode in Form einer Textzeile zurück  int    MAPeriod();       // Gibt die Periode für die Glättung zurück int    Size();           // Gibt die Größe des Ringbuffers zurück 

Die berechneten Daten des Indikators vom Ringbuffer zu erhalten ist wie bei gewöhnlichen Arrays möglich. Zum Beispiel:

#include <IncOnRingBuffer\CADXOnRingBuffer.mqh> CADXOnRingBuffer adx; ... //+------------------------------------------------------------------+ //| Benutzerdefinierte Indikatoriterationsfunktion                   | //+------------------------------------------------------------------+ 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[])   { //--- Berechnung des Indikators:    adx.MainOnArray(rates_total,prev_calculated,high,low,close);    ...      //--- kopiert die Daten vom "adx" Ringbuffer in den Indikator:    for(int i=start;i<rates_total;i++)      {       ADX_Buffer[i]=adx[rates_total-1-i];      // average directional movement index       PDI_Buffer[i]=adx.pdi[rates_total-1-i];  // positiver Directional Index       NDI_Buffer[i]=adx.ndi[rates_total-1-i];  // negative Directional Index      }    ...   } 

Beachten Sie, dass die Indexierung für den Ringbuffer die gleiche ist, wie für Zeitreihen.

Beispiele

  1. Die Test_ADX_OnArrayRB.mq5 Datei berechnet den Indikatoren auf Basis der Preiszeitreihe. Die Anwendung der MainOnArray() Methode wird demonstriert
  2. Die Test_ADX_OnValueRB.mq5 Datei demonstriert die Verwendung der MainOnValue() Methode. Zuerst wird der ADX Indikator berechnet und gezeichnet. Dann werden auf Basis des Ringbuffer dieses Indikators drei Linien des ADX Indikator berechnet. 


Das Ergebnis der Arbeit des Test_ADX_OnArrayRB.mq5 mit der Größe des Ringbuffer von 256 Elementen



Das Ergebnis der Arbeit des Test_ADX_OnValueRB.mq5 mit der Größe des Ringbuffer von 256 Elementen

 

Bei der Programmierung wurden die Entwicklungen der MetaQuotes Software Corp.Integer und GODZILLA verwendet.

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/1343