Startseite Technischer Indikator Beitrag

Fraktale Zeichnen mit Ringpuffer: Ein Indikator für MetaTrader 5

Anhang
1422.zip (6.86 KB, Herunterladen 0 mal)

Beschreibung

Der CFractalsOnRingBuffer ist ein leistungsstarker Indikator zur Berechnung der Fraktale (Fraktale) unter Verwendung des Ringpuffer-Algorithmus (Ringpuffer).

Deklaration

class CFractalsOnRingBuffer

Titel

#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>

Die Datei CFractalsOnRingBuffer.mqh muss im Verzeichnis IncOnRingBuffer abgelegt werden, das im MQL5\Include\ Verzeichnis erstellt werden muss. Zwei Beispiel-Dateien, die die Klasse verwenden, sind ebenfalls in der Beschreibung enthalten. Die Datei mit der Klasse des Ringpuffers muss ebenfalls in diesem Ordner platziert werden.

Klassenmethoden

//--- Initialisierungsmethode:
bool Init(                      // gibt false bei Fehler, true bei Erfolg zurück
   int  bars_right  = 2,        // Anzahl der Balken rechts vom Extremum
   int  bars_left   = 2,        // Anzahl der Balken links vom Extremum
   int  size_buffer = 256,      // Größe des Ringpuffers
   bool as_series   = false     // true, wenn Zeitreihe, sonst false
   );
//--- Berechnungsmethode basierend auf Zeitreihe oder Indikatorpuffern:
int MainOnArray(                  // gibt die Anzahl der bearbeiteten Elemente zurück
   const int     rates_total,     // Größe der Arrays
   const int     prev_calculated, // bearbeitete Elemente beim vorherigen Aufruf
   const double& high[],          // Array der Höchstwerte
   const double& low[],           // Array der Tiefstwerte
   );
//--- Berechnungsmethode für Fraktale basierend auf Elementen der Hoch-Array:
double MainOnHigh(               // gibt den Wert des oberen Fraktals für den Index-balken_rechts zurück
   const int    rates_total,     // Größe des Arrays
   const int    prev_calculated, // bearbeitete Elemente des Arrays
   const int    begin,           // von wo die signifikanten Daten des Arrays anfangen
   const double high,            // aktueller Balken Höchstwert
   const int    index            // aktueller Element (Balken) Index
   );
//--- Berechnungsmethode für untere Fraktale basierend auf Elementen der Tief-Array:
double MainOnLow(                // gibt den Wert des unteren Fraktals für den Index-balken_rechts zurück
   const int    rates_total,     // Größe des Arrays
   const int    prev_calculated, // bearbeitete Elemente des Arrays
   const int    begin,           // von wo die signifikanten Daten des Arrays anfangen
   const double low,             // aktueller Balken Tiefstwert, aktuelles Array-Element Höchstwert
   const int    index            // aktueller Element (Balken) Index
   );
//--- Methoden zum Zugriff auf die Daten:
int    BarsRequired();  // Gibt die Anzahl der benötigten Balken zum Zeichnen des Indikators zurück
string Name();          // Gibt den Namen des Indikators zurück
string NameUpper()      // Gibt den Namen der oberen Fraktale zurück
string NameLower()      // Gibt den Namen der unteren Fraktale zurück
int    BarsRight()      // Gibt die Anzahl der Balken rechts vom Extremum zurück
int    BarsLeft()       // Gibt die Anzahl der Balken links vom Extremum zurück
int    Size();          // Gibt die Größe des Ringpuffers zurück

Um die berechneten Daten des Indikators aus den Ringpuffern zu erhalten, kann man diese wie aus einem gewöhnlichen Array abrufen. Zum Beispiel:

//--- Klasse mit den Berechnungsmethoden des Fraktalindikators:
#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>
CFractalsOnRingBuffer fractals;

...

//+------------------------------------------------------------------+
//| Funktion zur Iteration des benutzerdefinierten Indikators                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
//--- Berechnung des Indikators basierend auf der Preisdatenreihe:
   fractals.MainOnArray(rates_total,prev_calculated,high,low);

...

//--- Verwendung der Daten aus den Ringpuffern "fractals",
//    z.B. Kopieren der Daten in den Indikatorpuffer:
   for(int i=start;i<rates_total-BarsRight && !IsStopped();i++)
     {
      UpperBuffer[i] = fractals.upper[rates_total-1-i]; // obere Fraktale
      LowerBuffer[i] = fractals.lower[rates_total-1-i]; // untere Fraktale
     }

...

//--- Rückgabewert von prev_calculated für den nächsten Aufruf:
   return(rates_total);
  }

Bitte beachten Sie, dass die Indizierung in den Ringpuffern der gleichen wie in der Zeitreihe entspricht.

Beispiele

  1. Der Indikator berechnet die Datei Test_Fractals_OnArrayRB.mq5 basierend auf der Preiszeitreihe. Die Anwendung der Methode MainOnArray() wird demonstriert.
  2. Die Datei Test_Fractals_OnValueRB.mq5 zeigt die Verwendung der Methode MainOnValue(). Zuerst wird der Fraktalindikator berechnet und gezeichnet. Dann wird auf Basis dieses Indikators ein weiterer Fraktal gezeichnet.


Das Ergebnis der Arbeit des Test_Fractals_OnArrayRB.mq5 mit einer Ringpuffergröße von 256 Elementen



Das Ergebnis der Arbeit des Test_Fractals_OnValueRB.mq5 mit einer Ringpuffergröße von 256 Elementen

 

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

Verwandte Beiträge

Kommentar (0)