Beschreibung
Der CFractalsOnRingBuffer ist ein leistungsstarker Indikator zur Berechnung der Fraktale (Fraktale) unter Verwendung des Ringpuffer-Algorithmus (Ringpuffer).
Deklaration
class CFractalsOnRingBufferTitel
#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
- Der Indikator berechnet die Datei Test_Fractals_OnArrayRB.mq5 basierend auf der Preiszeitreihe. Die Anwendung der Methode MainOnArray() wird demonstriert.
- 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
- Uniformitätsfaktor-Indikator für MetaTrader 5: Analysiere deine Preisbewegungen
- Tägliche prozentuale Veränderung in MT5 – Indikator für MetaTrader 5
- Boom Index Spike Pattern – Ein Leitfaden für MetaTrader 5 Trader
- Effizienzverhältnis (ER) mit dem Ringpuffer in MetaTrader 5 berechnen
- Stunden-Puffer für Datenanalyse im MetaTrader 5