Startseite Technischer Indikator Beitrag

Adaptive Moving Average: CAMAOnRingBuffer für MetaTrader 5

Anhang
1375.zip (8.46 KB, Herunterladen 0 mal)

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

  1. Die Datei Test_AMA_OnArrayRB.mq5 berechnet den Indikator basierend auf der Preis-Zeitreihe. Die Anwendung der Methode MainOnArray() wird demonstriert.
  2. 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

Kommentar (0)