Beschreibung
Die CAMAOnRingBuffer-Klasse dient zur Berechnung des technischen Indikators Adaptive Moving Average (Adaptive Moving Average, AMA) unter Verwendung des Ringpuffers.
Deklaration
class CAMAOnRingBuffer : public CArrayRing
Titel
#include <IncOnRingBuffer\CAMAOnRingBuffer.mqh>Die Datei CAMAOnRingBuffer.mqh muss im Ordner IncOnRingBuffer abgelegt werden, der im Verzeichnis MQL5\Include\ erstellt werden muss. In dieser Beschreibung sind zwei Dateien mit Beispielen aus diesem Ordner beigefügt. Die Datei der Klasse Ringpuffer und die Klasse des Effizienzverhältnisses müssen ebenfalls in diesem Ordner vorhanden sein.
Methoden der Klasse
//--- Initialisierungsmethode: bool Init( // Bei Fehler wird false zurückgegeben, bei Erfolg - true int period = 10, // Der Zeitraum der AMA int fast_period = 2, // Der Zeitraum der schnellen EMA int slow_period = 30, // Der Zeitraum der langsamen EMA int size_buffer = 256, // Die Größe des Ringpuffers, Anzahl der gespeicherten Daten bool as_series = false // true, wenn es sich um eine Zeitreihe handelt, false - wenn es sich um eine normale Indizierung der Eingabedaten handelt );
//--- Methode zur Berechnung basierend auf einer Zeitreihe oder Indikatorenpuffer: 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 );
//--- Methode zur Berechnung basierend auf einzelnen Elementen der Array-Serie: double MainOnValue( // gibt den AMA-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, // Elementwert des Arrays const int index // Elementindex );
//--- Methoden zum Zugriff auf die Daten: int BarsRequired(); // Gibt die erforderliche Anzahl von Balken zum Zeichnen des Indikators zurück string Name(); // Gibt den Namen des Indikators zurück string FastPeriod(); // Gibt den Zeitraum der schnellen EMA-Glättung zurück int SlowPeriod(); // Gibt den Zeitraum der langsamen EMA-Glättung zurück int Period(); // Gibt den Zeitraum der AMA zurück int Size(); // Gibt die Größe des Ringpuffers zurück
Um die berechneten Daten des Indikators aus dem Ringpuffer zu erhalten, funktioniert dies wie aus einem gewöhnlichen Array. Zum Beispiel:
//--- Klasse mit Methoden zur Berechnung des AMA-Indikators: #include <IncOnRingBuffer\CAMAOnRingBuffer.mqh> CAMAOnRingBuffer ama; ... //+------------------------------------------------------------------+ //| Benutzerdefinierte Indikator-Iterationsfunktion | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- Berechnung des Indikators basierend auf der Preis-Zeitreihe: ama.MainOnArray(rates_total, prev_calculated, price); ... //--- Daten aus dem Ringpuffer "ama" verwenden, // z.B. die Daten in den Indikatorpuffer kopieren: for(int i=start; i<rates_total; i++) AMA_Buffer[i] = ama[rates_total - 1 - i]; // Indikatorlinie //--- Rückgabewert von prev_calculated für den nächsten Aufruf: return(rates_total); }
Bitte beachten Sie, dass die Indizierung im Ringpuffer der in der Zeitreihe entspricht.
Beispiele
- Die Datei Test_AMA_OnArrayRB.mq5 berechnet den Indikator basierend auf der Preis-Zeitreihe. Die Anwendung der Methode MainOnArray() wird demonstriert.
- Die Datei Test_AMA_OnValueRB.mq5 zeigt die Verwendung der Methode MainOnValue(). Zuerst wird der AMA-Indikator berechnet und gezeichnet. Dann wird auf Basis dieses Indikator-Ringpuffers ein weiterer AMA gezeichnet.

Das Ergebnis der Arbeit des Test_AMA_OnArrayRB.mq5 mit der Größe des Ringpuffers von 256 Elementen

Das Ergebnis der Arbeit des Test_AMA_OnValueRB.mq5 mit der Größe des Ringpuffers von 256 Elementen
Bei der Programmierung wurden 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 MT4 – Indikator für MetaTrader 4
- Tägliche prozentuale Veränderung in MT5 – Indikator für MetaTrader 5
- Erstelle deinen eigenen neuronalen Netzwerk-Prädiktor für MetaTrader 4
- Zwei-Pole Glättungs-Oszillator – Indikator für MetaTrader 4