Startseite Technischer Indikator Beitrag

DEMA mit Ringpuffer: So integriert ihr den Indikator in MetaTrader 5

Anhang
1416.zip (9.14 KB, Herunterladen 0 mal)

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

  1. Die Indikatorberechnung erfolgt in der Datei Test_DEMA_OnArrayRB.mq5 basierend auf der Preis-Zeitreihe. Die Anwendung der MainOnArray()-Methode wird demonstriert.
  2. 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

Kommentar (0)