Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Telegram!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Indikatoren

Die Klasse zum Zeichnen des TEMAs mit dem Ringbuffer - Indikator für den MetaTrader 5

Ansichten:
905
Rating:
(28)
Veröffentlicht:
2016.05.16 07:38
Aktualisiert:
2016.11.22 07:34
\MQL5\Include\IncOnRingBuffer\ \MQL5\Indicators\OnRingBuffer\
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Beschreibung

Die Klasse CTEMAOnRingBuffer dient zur Berechnung des technischen Indikators Triple Exponential Moving Average (Triple Exponential Moving Average, TEMA) mit dem Algorithmus des Ringbuffers.  

Deklaration

class CTEMAOnRingBuffer : public CArrayRing

Titel

#include <IncOnRingBuffer\CTEMAnRingBuffer.mqh>

Die Datei CTEMAOnRingBuffer.mqh muss im Verzeichnis IncOnRingBuffer kopiert werden, der ggf. in MQL5\Include\ erstellt werden muss. Zwei Dateien mit Anwendungsbeispielen dieser Klasse sind beigefügt. Die Datei mit den Klassen der Ringbuffer, DEMA und Gleitender Durchschnitt müssen auch in diesen Ordner liegen.

Klassen-Methoden

//--- Initialisierungs-Methode:
bool Init(                                // false im Fehlerfall, true im Erfolgsfall
   int            period      = 12,       // die Periodenlänge des TEMA
   ENUM_MA_METHOD method      = MODE_EMA, // Glättungsmethode
   int            size_buffer = 256,      // Größe des Ringbuffers
   bool as_series = false // true, wenn Zeitreihe, sonst false
   );
//--- Methode der Berechnung mittels Zeitreihe oder Indikatorpuffer:          
int MainOnArray(                  // gibt die Anzahl der berechneten Elemente zurück  
   const int     rates_total,     // Größe des Arrays
   const int     prev_calculated, // Anzahl der zuletzt berechneten Elemente
   const double& price[],         // Array für die Berechnung
   );
//--- Methode der Berechnung auf Basis einzelner Elemente           
double MainOnValue(              // liefert den TEMA-Wert einer Bar
   const int    rates_total,     // Größe des Arrays
   const int    prev_calculated, // berechnete Werte des Arrays
   const int    begin,           // Startpunkt der Berechnung
   const double value,           // Wert an der Stelle der Bar 
   const int    index            // Index der Bar
   );
//--- Methoden des Datenzugriffs:
int                 BarsRequired();  // Liefert die notwendige Anzahl der Bars des Indikators
string              Name();          // Liefert den Namen des Indikators
int                 Period();        // Liefert die Periodenlänge des Charts
int                 Size();          // Liefert die Größe des Ringbuffers
double              MA(int index);   // Liefert dem Wert des gleitenden Durchschnitts, Indizierung ist wie bei einer Zeitreihe
double              DEMA(int index); // Liefert dem Wert des DEMA, Indizierung ist wie bei einer Zeitreihe

Die berechneten Daten des Indikators erhalten Sie aus dem Ringbuffer wie aus einem Array. Zum Beispiel:

//--- Die Klasse mit den Methoden zur Berechnung des TEMA-Indikators:
#include <IncOnRingBuffer\CTEMAOnRingBuffer.mqh>
CTEMAOnRingBuffer tema;

...

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // Größe des Preisarrays price[]
                 const int prev_calculated,  // Anzahl bereits berechneter Elemente
                 const int begin,            // Startpunkt der zu berechnenden Daten
                 const double& price[])      // Array für die Berechnung
  {
//--- Berechnung des Indikators basierend auf einer Zeitreihe:
    tema.MainOnArray(rates_total,prev_calculated,price);

...

//--- Verwendung der Daten aus dem Ringbuffer des "tema",
//    zum Beispiel, kopieren Sie die Daten in den Indikator-Buffer:
   for(int i=start;i<rates_total && !IsStopped();i++)
      TEMA_Buffer[i] = tema[rates_total-1-i]; // die TEMA Indikatorlinie

...

//--- Rückgabe des neuen Wertes für prev_calculated für den nächsten Aufruf:
   return(rates_total);
  }

Für die Berechnung des TEMA werden auch der gleitende Durchschnitt und DEMA mit den gleichen Parametern berechnet. Wir erhalten diese Daten des MA aus dessen Ringbuffer und den DEMA mit MA(<s1>int</s1> index):

//--- Verwendung der Daten des MA und DEMA aus dem Ringbuffer,
//    zum Beispiel, kopieren Sie die Daten in den Indikator-Buffer:
   for(int i=start;i<rates_total && !IsStopped();i++)
     {
      MA_Buffer[i]   = dema.MA(rates_total-1-i);   // die Linie des gleitenden Durchschnitts
      DEMA_Buffer[i] = dema.DEMA(rates_total-1-i); // die Linie des DEMA
     }

Bitte beachten Sie, die Indizierung des Ringbuffers ist genau gleich der von Zeitreihen.

Beispiele

  1. Datei Test_TEMA_OnArrayRB.mq5 - der Indikator rechnet auf der Basis von Preis-Zeitreihen. Es zeigt die Verwendung der Methode MainOnArray()
  2. Datei Test_TEMA_OnValueRB.mq5 zeigt die Verwendung der Methode MainOnValue(). Zunächst wird der Indikator TEMA berechnet und gezeichnet. Dann wird auf dieser Grundlage des Ringbuffers des Indikators der nächste TEMA-Wert berechnet wird. 


Das Ergebnis der Test_TEMA_OnArrayRB.mq5 mit der Größe des Ringbuffers von 256 Elementen



Das Ergebnis der Test_TEMA_OnValueRB.mq5 mit der Größe des Ringbuffers von 256 Elementen

 

Für das Programm wurden Elemente von MetaQuotes Software Corp.Integer und GODZILLA verwendet.

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/1417

Die Klasse zum Zeichnen des DEMAs mit dem Ringbuffer Die Klasse zum Zeichnen des DEMAs mit dem Ringbuffer

Die Klasse dient zur Berechnung des technischen Indikators doppelt exponentieller gleitender Durchschnitt (Double Exponential Moving Average, DEMA) mit dem Algorithmus des Ringbuffers.

StepMA_v6.4 StepMA_v6.4

Einfacher Trendindikator in NRTR-Form

ytg_MA_TF ytg_MA_TF

Gleitender Durchschnitt mit der Wahl des TF.

Predict Predict

Eine Signal-Indikator mit drei Varianten