Beschreibung
Die Klasse CDEMAOnRingBuffer ist dafür konzipiert, den technischen Indikator Double Exponential Moving Average (DEMA) unter Verwendung des Ringpuffer-Algorithmus zu berechnen.
Deklaration
class CDEMAOnRingBuffer : public CArrayRing
Titel
#include <IncOnRingBuffer\CDEMAnRingBuffer.mqh>Die Datei CDEMAOnRingBuffer.mqh muss im Ordner IncOnRingBuffer platziert werden, der im Verzeichnis MQL5\Include\ erstellt werden muss. Zwei Beispiel-Dateien, die von dieser Klasse verwendet werden, sind in der Beschreibung angehängt. Auch die Dateien für den Ringpuffer und den Moving Average sollten in diesem Ordner vorhanden sein.
Methoden der Klasse
//--- Initialisierungsmethode: bool Init( // gibt false bei Fehler zurück, true bei Erfolg int period = 12, // die DEMA-Periode ENUM_MA_METHOD method = MODE_EMA, // die Glättungsmethode int size_buffer = 256, // die Größe des Ringpuffers bool as_series = false // true, wenn Zeitreihe, sonst false );
//--- Berechnungsmethode basierend auf einer Zeitreihe oder den Indikator-Puffern: int MainOnArray( // gibt die Anzahl der verarbeiteten Elemente zurück const int rates_total, // die Größe des Arrays const int prev_calculated, // verarbeitete Elemente beim vorherigen Aufruf const double& price[], // das Array für die Berechnung );
//--- Berechnungsmethode basierend auf separaten Elementen des Arrays: double MainOnValue( // gibt den DEMA-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, // von wo die signifikanten Daten des Arrays starten const double value, // der Wert des Elements (Bars) const int index // der Index des Elements (Bars) );
//--- Methoden zum Zugriff auf die Daten: int BarsRequired(); // Gibt die erforderliche Anzahl von Bars zum Zeichnen des Indikators zurück string Name(); // Gibt den Namen des Indikators zurück int Period(); // Gibt die Periode zurück int Size(); // Gibt die Größe des Ringpuffers zurück double MA(int index); // Gibt den Wert des Moving Average zurück, der Index entspricht dem einer Zeitreihe
Um die berechneten Daten des Indikators aus dem Ringpuffer zu erhalten, kann dies wie aus einem gewöhnlichen Array geschehen. Zum Beispiel:
//--- Die Klasse mit den Methoden zur Berechnung des DEMA-Indikators: #include <IncOnRingBuffer\CDEMAOnRingBuffer.mqh> CDEMAOnRingBuffer dema; ... //+------------------------------------------------------------------+ //| Benutzerdefinierte Indikator-Iterierfunktion | //+------------------------------------------------------------------+ int OnCalculate( const int rates_total, // die Größe des Arrays price[] const int prev_calculated, // verarbeitete Bars beim vorherigen Aufruf const int begin, // von wo die signifikanten Daten starten const double& price[]) // das Array für die Berechnung { //--- Berechnung des Indikators basierend auf einer Zeitreihe: dema.MainOnArray(rates_total, prev_calculated, price); ... //--- Verwendung der Daten aus dem "dema"-Ringpuffer, // zum Beispiel: Daten in den Indikator-Puffer kopieren: for(int i=start; iIsStopped(); i++) DEMA_Buffer[i] = dema[rates_total - 1 - i]; // die DEMA-Indikatorlinie ... //--- Rückgabewert von prev_calculated für den nächsten Aufruf: return(rates_total); }
Bei der Berechnung der DEMA wird auch die Berechnung des Moving Average mit denselben Parametern durchgeführt. Wir können die Daten aus dem MA-Ringpuffer mit der MA-Methode (int index) abrufen:
//--- Verwendung der Daten aus dem Moving Average-Ringpuffer, // zum Beispiel: Daten in den Indikator-Puffer kopieren: for(int i=start; iIsStopped(); i++) MA_Buffer[i] = dema.MA(rates_total - 1 - i); // die Moving Average-Indikatorlinie
Bitte beachten Sie, dass die Indizierung in den Ringpuffern derjenigen in der Zeitreihe entspricht.
Beispiele
- Die Indikatorberechnung erfolgt in der Datei Test_DEMA_OnArrayRB.mq5 basierend auf der Preis-Zeitreihe. Die Anwendung der MainOnArray()-Methode wird demonstriert.
- Die Datei Test_DEMA_OnValueRB.mq5 zeigt die Verwendung der MainOnValue()-Methode. Zuerst wird der DEMA-Indikator berechnet und gezeichnet. Anschließend wird auf Basis dieses Indikator-Ringpuffers ein weiterer DEMA gezeichnet.

Das Ergebnis der Arbeit des Tests Test_DEMA_OnArrayRB.mq5 mit einer Ringpuffergröße von 256 Elementen.

Das Ergebnis der Arbeit des Tests Test_DEMA_OnValueRB.mq5 mit einer Ringpuffergröße von 256 Elementen.
Bei der Programmierung wurden die Entwicklungen von MetaQuotes Software Corp., Integer und GODZILLA verwendet.
Verwandte Beiträge
- Tägliche prozentuale Veränderung in MT5 – Indikator für MetaTrader 5
- Uniformitätsfaktor-Indikator für MetaTrader 5: Analysiere deine Preisbewegungen
- Boom Index Spike Pattern – Ein Leitfaden für MetaTrader 5 Trader
- Marktfazilitätsindex (BW MFI) – Ein hilfreicher Indikator für MetaTrader 5
- Stunden-Puffer für Datenanalyse im MetaTrader 5