Beschreibung
Die CMACDOnRingBuffer-Klasse wurde entwickelt, um den technischen Indikator Moving Average Convergence/Divergence (MACD) mithilfe des Ringpuffer-Algorithmus zu berechnen.
Deklaration
class CMACDOnRingBufferTitel
#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>Die Datei CMACDOnRingBuffer.mqh sollte im Ordner IncOnRingBuffer abgelegt werden, den du im Verzeichnis MQL5\Include\ anlegen musst. Zwei Beispiel-Dateien, die von der Klasse verwendet werden, sind dieser Beschreibung angehängt. Auch die Datei der Ringpuffer-Klasse und die Klasse für den gleitenden Durchschnitt müssen in diesem Ordner vorhanden sein.
Methoden der Klasse
//--- Initialisierungsmethode: bool Init( // Gibt false zurück, wenn ein Fehler auftritt, true bei Erfolg int fast_period = 12, // Zeitraum des schnellen gleitenden Durchschnitts int slow_period = 26, // Zeitraum des langsamen gleitenden Durchschnitts int signal_period = 9, // Zeitraum des Signalgleitenden Durchschnitts ENUM_MA_METHOD fast_method = MODE_EMA, // Methode für schnellen gleitenden Durchschnitt ENUM_MA_METHOD slow_method = MODE_EMA, // Methode für langsamen gleitenden Durchschnitt ENUM_MA_METHOD signal_method = MODE_SMA, // Methode für Signalgleitenden Durchschnitt int size_buffer = 256, // Größe des Ringpuffers, Anzahl der gespeicherten Daten bool as_series = false // true, wenn eine Zeitreihe, false bei normalem Indexing der Eingabedaten );
//--- Berechnungsmethode basierend auf einer Zeitreihe oder dem Indikatorpuffer: int MainOnArray( // Gibt die Anzahl der verarbeiteten Elemente zurück const int rates_total, // Größe des Arrays array[] const int prev_calculated, // verarbeitete Elemente beim vorherigen Aufruf const double &array[] // Array der Eingabewerte );
//--- Berechnungsmethode basierend auf den einzelnen Elementen der Array-Serie: double MainOnValue( // Gibt den MACD-Wert für das festgelegte Element zurück const int rates_total, // Größe des Arrays const int prev_calculated, // verarbeitete Elemente des Arrays const int begin, // von wo die signifikanten Daten des Arrays beginnen const double value, // das Wertelement des Arrays const int index // der Elementeindex );
//--- Methoden zum Zugriff auf die Daten: int BarsRequired(); // Gibt die erforderliche Anzahl an Bars zurück, um den Indikator zu zeichnen string Name() // Gibt den Namen des Indikators zurück string NameMain() // Gibt den Namen der Hauptlinie des Indikators zurück string NameSignal() // Gibt den Namen der Signal-Linie des Indikators zurück string FastMethod() // Gibt die Methode der Glättung der schnellen Linie als Text zurück string SlowMethod() // Gibt die Methode der Glättung der langsamen Linie als Text zurück string SignalMethod() // Gibt die Methode der Glättung der Signal-Linie als Text zurück int FastPeriod() // Gibt den Zeitraum der Glättung der schnellen Linie zurück int SlowPeriod() // Gibt den Zeitraum der Glättung der langsamen Linie zurück int SignalPeriod() // Gibt den Zeitraum der Glättung der Signal-Linie zurück int Size(); // Gibt die Größe des Ringpuffers zurück
Die berechneten Daten des Indikators können aus dem Ringpuffer wie aus einem gewöhnlichen Array abgerufen werden. Zum Beispiel:
//--- Die Klasse mit den Methoden zur Berechnung des MACD-Indikators: #include <IncOnRingBuffer\CMACDOnRingBuffer.mqh> CMACDOnRingBuffer macd; ... //+------------------------------------------------------------------+ //| Funktion zur Iteration des benutzerdefinierten Indikators | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- Berechnung des Indikators basierend auf der Preisdatenreihe: macd.MainOnArray(rates_total,prev_calculated,price); ... //--- Nutzung der Daten aus den "macd" Ringpuffern, // Daten in den Indikator-Puffern kopieren: for(int i=start;i<rates_total;i++) { MainBuffer[i] = macd[rates_total-1-i]; // Indikator-Histogramm SignalBuffer[i] = macd.signal[rates_total-1-i]; // Signal-Linie des Indikators } //--- Rückgabewert von prev_calculated für den nächsten Aufruf: return(rates_total); }
Bitte beachte, dass die Indizierung im Ringpuffer derjenigen in der Zeitreihe entspricht.
Beispiele
- Die Datei
Test_MACD_OnArrayRB.mq5berechnet den Indikator basierend auf der Preisdatenreihe. Die Anwendung derMainOnArray()-Methode wird demonstriert. - Die Datei
Test_MACD_OnValueRB.mq5zeigt die Verwendung derMainOnValue()-Methode. Zuerst wird der MACD-Indikator berechnet und gezeichnet. Dann wird auf Basis des Ringpuffers dieses Indikators ein weiterer MACD-Indikator gezeichnet.

Das Ergebnis der Arbeit der Test_MACD_OnArrayRB.mq5 mit einer Ringpuffergröße von 256 Elementen

Das Ergebnis der Arbeit der Test_MACD_OnValueRB.mq5 mit einer Ringpuffergröße von 256 Elementen
Bei der Erstellung des Codes wurden Entwicklungen von MetaQuotes Software Corp., Integer und GODZILLA verwendet.
Verwandte Beiträge
- Tägliche prozentuale Veränderung in MT4 – Indikator für MetaTrader 4
- Uniformitätsfaktor-Indikator für MetaTrader 5: Analysiere deine Preisbewegungen
- Erstelle deinen eigenen neuronalen Netzwerk-Prädiktor für MetaTrader 4
- Tägliche prozentuale Veränderung in MT5 – Indikator für MetaTrader 5
- Boom Index Spike Pattern – Ein Leitfaden für MetaTrader 5 Trader