Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Twitter!
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

Klasse um den MACD unter Verwendung des Ringbuffers zu zeichnen - Indikator für den MetaTrader 5

Ansichten:
857
Rating:
(19)
Veröffentlicht:
2016.05.13 14:01
Aktualisiert:
2016.11.22 07:34
\MQL5\Include\IncOnRingBuffer\ \MQL5\Indicators\IncOnRingBuffer\
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Beschreibung

Diese Klasse wurde zur Berechnung des technischen Indikators Moving Average Konvergenz/Divergenz (Moving Average Convergence/Divergence, MACD) mit Hilfe des Algorithmus des Ringbuffers entworfen. 

Deklaration

class CMACDOnRingBuffer

Titel

#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>

Die Datei der CMACDOnRingBuffer.mqh Klasse muss in den IncOnRingBuffer Ordner kopiert werden, der in MQL5\Include\ erzeugt werden muss. Zwei Dateien mit Beispielen die von dieser Klasse verwendet werden wurden dieser Beschreibung angehängt. Die Datei mit der Klasse des Ringbuffers und die Klasse des Moving Average müssen sich auch in diesem Ordner befinden.

Klassenmethoden

//--- initialization method:
bool Init(                                  // false bei Fehler, bei Erfolg true
   int            fast_period   = 12,       // Periode des Glättung des Moving Average
   int            slow_period   = 26,       // Periode des Glättung des langsamen Moving Average
   int            signal_period = 9,        // Periode der Glättung der Signallinie des Moving Average 
   ENUM_MA_METHOD fast_method   = MODE_EMA, // Methode der Glättung des schnellen Moving Average
   ENUM_MA_METHOD slow_method   = MODE_EMA, // Methode der Glättung des langsamen Moving Average
   ENUM_MA_METHOD signal_method = MODE_SMA, // Methode der Glättung der Signalelinie des Moving Average
   int            size_buffer   = 256,      // Größe des Ringbuffers, Anzahl der gespeicherten Daten
   bool           as_series     = false     // true bei Zeitreihen, false wenn die übliche Indexierung ein Eingabedaten angewendet werden soll
   );
//--- Methode zur Berechnung basierend auf einer Zeitreihe oder einem Indikatorenbuffer:          
int MainOnArray(                  // gibt die Anzahl der verarbeiteten Element zurück  
   const int     rates_total,     // Größe des Array array[]
   const int     prev_calculated, // verabeitete Elemente im vorherigen Aufruf
   const double &array[]          // Array für die Eingabewerte
   );
//--- Methode zur Berechnung basierend auf separaten Reihenelementen des Arrays           
double MainOnValue(              // gibt den MACD Wert für das Mengenelement zurück
   const int    rates_total,     // die Größe des Arrays
   const int    prev_calculated, // verarbeitete Element des Arrays
   const int    begin,           // von wo die signifikanten Daten des Arrays beginnen
   const double value,           // Elementwert des Arrays
   const int    index            // der Elementindex
   );
//--- Zugriffsmethoden auf die Daten:
int    BarsRequired();   // Gibt notwendige Zahl von Balken zurück, die zum Zeichnen des Indikators benötigt werden
string Name()            // Returns the name of the Indikator
string NameMain()        // Gibt den Namen des Indikators zurück
string NameSignal()      // gibt den Namen der Indikatorsignallinie zurück
string FastMethod()      // Gibt die Glättungsmethode der schnellen Linie in Form einer Textzeile zurück
string SlowMethod()      // Gibt die Glättungsmethode der langsamen Linie in Form einer Textzeile zurück
string SignalMethod()    // Gibt die Glättungsmethode der Signallinie in Form einer Textzeile zurück
int    FastPeriod()      // Gibt die Periode für die Glättung der schnellen Linie zurück
int    SlowPeriod()      // Gibt die Periode für die Glättung der langsamen Linie zurück
int    SignalPeriod()    // Gibt die Periode für die Glättung der Signallinie  zurück
int    Size();           // Gibt die Größe des Ringbuffers zurück

Die berechneten Daten des Indikators vom Ringbuffer zu erhalten ist wie bei gewöhnlichen Arrays möglich. Zum Beispiel:

//--- Klasse mit den Methoden für die Berechnung des MACD Indikators:
#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>
CMACDOnRingBuffer macd;

...

//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikatoriterationsfunktion                   |
//+------------------------------------------------------------------+
int OnCalculate(const int    rates_total, 
                const int    prev_calculated, 
                const int    begin, 
                const double &price[]) 
  {
//--- Berechnung des Indikators basierend auf Preiszeitreihen:
   macd.MainOnArray(rates_total,prev_calculated,price);

...

//--- use the data from the "macd" ring buffers,
//    kopiere Daten in den Indikatorbuffer:
   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];   // Signallinie des Indikators
     }
//--- Rückgabewert von prev_calculated für nächsten Aufruf:
   return(rates_total);
  }

Beachten Sie, dass die Indexierung für den Ringbuffer die gleiche ist, wie für Zeitreihen.

Beispiele

  1. Die Datei Test_MACD_OnArrayRB.mq5 berechnet den Indikator auf Basis der Preiszeitreihe. Die Anwendung der MainOnArray() Methode wird demonstriert
  2. Die Datei Test_MACD_OnValueRB.mq5 demonstriert die Verwendung der MainOnValue() Methode. Zuerst wird der MACD Indikator berechnet und gezeichnet. Dann wird auf Basis des Ringbuffer dieses Indikators ein weiterer MACD-Indikator gezeichnet. 


Das Ergebnis der Arbeit des  Test_MACD_OnArrayRB.mq5 mit einer gesetzten Ringbuffergröße von 256 Elementen



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

 

Bei der Programmierung wurden die Entwicklungen der MetaQuotes Software Corp.Integer und GODZILLA verwendet.

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

VininI_Trend_LRMA VininI_Trend_LRMA

Ein Trend Indikator der seine Werte von den Signalen des LRMA Moving Average Indikator und der Gruppe seiner Signallinien, deren Periode sich in einer arithmetischen Reihe ändern, ableitet.

VininI_Trend_XMA_WPR VininI_Trend_XMA_WPR

Ein Trend Indikator der seine Werte von den Signalen des Williams Percent Range Indikator und der Gruppe seiner Signallinien, deren Periode sich in einer arithmetischen Reihe ändern, ableitet.

EF_distance EF_distance

Weitere Veriante von Gleitenden Durchschnitten...

Exp_CorrectedAverage Exp_CorrectedAverage

Ausbruchsystem mit dem CorrectedAverage Moving Average.