Beschreibung
Die Klasse CADXWOnRingBuffer wurde zur Berechnung des technischen Indikators Average Directional Movement Index Wilder (ADX Wilder) unter Verwendung des Ringpuffer-Algorithmus entwickelt. Diese Klasse ermöglicht es, die Berechnung effizient und schnell durchzuführen.
Deklaration
class CADXWOnRingBufferTitel
#include <IncOnRingBuffer\CADXWOnRingBuffer.mqh>Die Datei CADXWOnRingBuffer.mqh sollte im Ordner IncOnRingBuffer abgelegt werden, der im Pfad MQL5\Include\ angelegt werden muss. Zwei Beispiel-Dateien, die von dieser Klasse verwendet werden, sind der Beschreibung angehängt. Dateien mit der Klasse des Ringpuffers sowie der Klasse des Gleitenden Durchschnitts müssen ebenfalls in diesem Ordner vorhanden sein.
Methoden der Klasse
//--- Initialisierungsmethode: bool Init( // gibt bei Fehler false zurück, bei Erfolg true int ma_period = 14, // die Periode für die Glättung des Gleitenden Durchschnitts ENUM_MA_METHOD ma_method = MODE_SMMA, // die Methode der Glättung des Gleitenden Durchschnitts int size_buffer = 256, // die Größe des Ringpuffers, Anzahl der gespeicherten Daten bool as_series = false // true, wenn eine Zeitreihe, false - bei üblicher Indizierung der Eingabedaten );
//--- Berechnungsmethode basierend auf einer Zeitreihe oder Indikator-Puffern: int MainOnArray( // gibt die Anzahl der verarbeiteten Elemente zurück const int rates_total, // die Größe der Arrays const int prev_calculated, // verarbeitete Elemente beim vorherigen Aufruf const double &high[], // das Maximum-Werte-Array const double &low[], // das Minimum-Werte-Array const double &close[] // das Schlusskurs-Array );
//--- Berechnungsmethode auf Basis der einzelnen Elemente der Array-Serie double MainOnValue( // gibt den ADXW-Wert für das festgelegte Element zurück const int rates_total, // die Größe des Arrays const int prev_calculated, // verarbeitete Elemente des Arrays const int begin, // ab wo die signifikanten Daten des Arrays beginnen const double high, // das Maximum const double low, // das Minimum const double close, // Schlusskurs const int index // der Elementindex );
//--- Methoden zum Zugriff auf die Daten: int BarsRequired(); // Gibt die notwendige Anzahl der Bars zur Darstellung des Indikators zurück string NameADXW(); // Gibt den Namen des Indikators zurück string NameNDI(); // Gibt den Namen der negativen Bewegungsrichtung des Indikators zurück string NamePDI(); // Gibt den Namen des positiven Bewegungsrichtungsindicators zurück string MAMethod(); // Gibt die Methode der Glättung als Textzeile zurück int MAPeriod(); // Gibt die Glättungsperiode zurück int Size(); // Gibt die Größe des Ringpuffers zurück
Die abgerufenen Daten des Indikators aus dem Ringpuffer können wie aus einem üblichen Array entnommen werden. Zum Beispiel:
#include <IncOnRingBuffer\CADXWOnRingBuffer.mqh> CADXWOnRingBuffer adxw; ... //+------------------------------------------------------------------+ //| Benutzerdefinierte Indikator-Funktionsiteration | //+------------------------------------------------------------------+ 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: adxw.MainOnArray(rates_total,prev_calculated,high,low,close); ... //--- Kopieren der Daten aus den "adxw"-Ringpuffern in den Indikator: for(int i=start;i<rates_total;i++) { ADXW_Buffer[i] = adxw[rates_total-1-i]; // durchschnittlicher Bewegungsindex Wilder PDI_Buffer[i] = adxw.pdi[rates_total-1-i]; // positiver Bewegungsindex NDI_Buffer[i] = adxw.ndi[rates_total-1-i]; // negativer Bewegungsindex } ... }
Bitte beachten Sie, dass die Indizierung im Ringpuffer der gleichen wie in der Zeitreihe entspricht.
Beispiele
- Die Datei
Test_ADXW_OnArrayRB.mq5berechnet den Indikator basierend auf der Preisdatenreihe. Die Anwendung der MethodeMainOnArray()wird demonstriert. - Die Datei
Test_ADXW_OnValueRB.mq5zeigt die Nutzung der MethodeMainOnValue(). Zuerst wird der ADXW-Indikator berechnet und dargestellt. Anschließend werden auf Basis des Ringpuffers dieses Indikators drei Linien des ADXW-Indikators berechnet.

Das Ergebnis der Ausführung von Test_ADXW_OnArrayRB.mq5 mit einer Ringpuffergröße von 256 Elementen

Das Ergebnis der Ausführung von Test_ADXW_OnValueRB.mq5 mit einer Ringpuffergröße von 256 Elementen
Bei der Erstellung des Codes wurden die Entwicklungen von MetaQuotes Software Corp., Integer und GODZILLA verwendet.
Verwandte Beiträge
- Uniformitätsfaktor-Indikator für MetaTrader 5: Analysiere deine Preisbewegungen
- Tägliche prozentuale Veränderung in MT5 – Indikator für MetaTrader 5
- Open Range Breakout Indikator für MetaTrader 5: Ein unverzichtbares Tool für Trader
- Marktfazilitätsindex (BW MFI) – Ein hilfreicher Indikator für MetaTrader 5
- Stunden-Puffer für Datenanalyse im MetaTrader 5