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

Klasse zum Zeichnen des AMA unter Verwendung des Ringbuffers - Indikator für den MetaTrader 5

Ansichten:
879
Rating:
(17)
Veröffentlicht:
2016.05.13 14:12
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

Die Klasse CAMAOnRingBuffer zur Berechnung des technischen Indikators Adaptive Moving Average (Adaptive Moving Average, AMA) mit Hilfe des Algorithmus des Ringbuffers entworfen.  

Deklaration

class CAMAOnRingBuffer : public CArrayRing

Titel

#include <IncOnRingBuffer\CAMAOnRingBuffer.mqh>

Die Datei der CAMAOnRingBuffer.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 Efficiency Ratio müssen sich auch in diesem Ordner befinden.

Klassenmethoden

//--- initialization method:
bool Init(                                  // false bei Fehler, bei Erfolg true
   int            period        = 10,       // Periode des AMA 
   int            fast_period   = 2,        // Periode des schnellen EMA 
   int            slow_period   = 30,       // Periode des langsamen EMA
   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 AMA 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();           // Gibt den Namen des Indikators zurück
string FastPeriod();       // Gibt die Periode für die Glättung des schnellen EMA zurück  
int     SlowPeriod();       // Gibt die Periode für die Glättung des langsamen EMA zurück
int    Period();            // Gibt die Periode des AMA 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 AMA Indikators:
#include <IncOnRingBuffer\CAMAOnRingBuffer.mqh>
CAMAOnRingBuffer ama;

...

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

...

//--- verwende Daten des "ama" Ringbuffers, ,
//    zum Beispiel, kopiere Daten in den Indikatorbuffer:
   for(int i=start;i<rates_total;i++)
      AMA_Buffer[i] = ama[rates_total-1-i];          // Indikatorlinie

//--- 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_AMA_OnArrayRB.mq5 berechnet den Indikator auf Basis der Preiszeitreihe. Die Anwendung der MainOnArray() Methode wird demonstriert
  2. Die Test_AMA_OnValueRB.mq5 Datei demonstriert die Verwendung der MainOnValue() Methode. Zuerst wird der AMA Indikator berechnet und gezeichnet. Dann wird auf Basis des Ringbuffers des Indikators der AMA gezeichnet. 


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



Das Ergebnis der Arbeit des Test_AMA_OnValueRB.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/1375

Klasse zum Zeichnen des ER unter Verwendung des Ringbuffers Klasse zum Zeichnen des ER unter Verwendung des Ringbuffers

Die Klasse wurde zur Berechnung des technischen Indikators Efficiency Ratio (Efficiency Ratio, ER) unter Verwendung des Algorithmus des Ringbuffers entworfen.

ytg_Japan_Candles ytg_Japan_Candles

Indikator der Kerzenmuster (Japanese candlesticks)

Breakout Bars Trend v2 Breakout Bars Trend v2

Die zweite (bearbeitete und hinzugefügte) Version des alternativen Indikators für die Trenddefinition basierend auf dem Ausbruch von Balken und Entfernung zu den Extrema. Die Ausbruchslevel und Größe des vorherigen Trends wurden hinzugefügt.

Vereinfachte Klasse des CArrayRing256 Ringbuffers Vereinfachte Klasse des CArrayRing256 Ringbuffers

Diese Klasse ist die vereinfachte Version der CArrayRing Klasse: sie hat eine vorgegebene fixe Größe von 256 Elementen, sie ist schneller und erlaubt Minizeitreihen, Minibuffer, kurze Buffer zu organisieren um Datenstörme sofort innerhalb des Expert Advisors oder Indikators zu speichern.