Beschreibung
Die Klasse COsMAOnRingBuffer wurde entwickelt, um den technischen Indikator Moving Average of Oscillator (OsMA) mithilfe des Ringpuffer-Algorithmus zu berechnen.
Deklaration
class COsMAOnRingBuffer : public CArrayRing
Titel
#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>Die Datei COsMAOnRingBuffer.mqh sollte im Ordner IncOnRingBuffer abgelegt werden, den ihr im Verzeichnis MQL5\Include\ erstellen müsst. Zwei Beispiel-Dateien, die von dieser Klasse verwendet werden, sind ebenfalls angehängt. Dateien mit Ringpuffer, MACD und Moving Average Klassen sollten ebenfalls in diesem Ordner vorhanden sein.
Klassenmethoden
//--- Initialisierungs-Methode: bool Init( // gibt false bei Fehler zurück, true bei Erfolg int fast_period = 12, // Zeitraum der schnellen Moving Average Glättung int slow_period = 26, // Zeitraum der langsamen Moving Average Glättung int signal_period = 9, // Zeitraum der Signal Moving Average Glättung ENUM_MA_METHOD fast_method = MODE_EMA, // Methode der schnellen Moving Average Glättung ENUM_MA_METHOD slow_method = MODE_EMA, // Methode der langsamen Moving Average Glättung ENUM_MA_METHOD signal_method = MODE_SMA, // Methode der Signal Moving Average Glättung int size_buffer = 256, // Größe des Ringpuffers, Anzahl der gespeicherten Daten bool as_series = false // true, falls Zeitreihe, false bei normaler Indizierung der Eingabedaten );
//--- Berechnungsmethode basierend auf einer Zeitreihe oder Indikatorpuffer: int MainOnArray( // gibt die Anzahl der verarbeiteten Elemente zurück const int rates_total, // Größe des Arrays array[] const int prev_calculated, // verarbeitete Elemente bei vorherigem Aufruf const double &array[] // Array der Eingabewerte );
//--- Berechnungsmethode basierend auf den separaten Serien-Elementen des Arrays double MainOnValue( // gibt den OsMA-Wert für das festgelegte Element zurück const int rates_total, // Größe des Arrays const int prev_calculated, // verarbeitete Elemente des Arrays const int begin, // von wo die relevanten Daten des Arrays beginnen const double value, // relevante Elemente des Arrays const int index // Element-Index );
//--- Methoden zum Zugriff auf Daten: int BarsRequired(); // Gibt die notwendige Anzahl an Balken für die Anzeige des Indikators zurück string Name() // Gibt den Namen des Indikators zurück string FastMethod() // Gibt die Methode der Glättung der schnellen Linie als Text zurück string SlowMethod() // Gibt die Methode der Glättung der langsamen Linie als Text zurück string SignalMethod() // Gibt die Methode der Glättung der Signallinie als Text zurück int FastPeriod() // Gibt den Zeitraum der Glättung der schnellen Linie zurück int SlowPeriod() // Gibt den Zeitraum der Glättung der langsamen Linie zurück int SignalPeriod() // Gibt den Zeitraum der Glättung der Signallinie zurück int Size(); // Gibt die Größe des Ringpuffers zurück
Die berechneten Daten des Indikators aus dem Ringpuffer können wie aus einem gewöhnlichen Array abgerufen werden. Zum Beispiel:
//--- Klasse mit den Methoden zur Berechnung des Indikators OsMA: #include <IncOnRingBuffer\COsMAOnRingBuffer.mqh> COsMAOnRingBuffer osma; ... //+------------------------------------------------------------------+ //| Benutzerdefinierte Indikator-Iteration Funktion | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- Berechnung des Indikators basierend auf einer Preis-Zeitreihe: osma.MainOnArray(rates_total,prev_calculated,price); ... //--- Verwendung der Daten aus den "osma" Ringpuffern, // Kopieren der Daten in den Indikatorpuffer: for(int i=start;i<rates_total;i++) OsMABuffer[i]=osma[rates_total-1-i]; // Indikator-Histogramm //--- Rückgabewert von prev_calculated für den nächsten Aufruf: return(rates_total); }
Bitte beachtet, dass die Indizierung im Ringpuffer der gleichen wie in der Zeitreihe entspricht.
Beispiele
- Die Datei
Test_OsMA_OnArrayRB.mq5berechnet den Indikator basierend auf der Preis-Zeitreihe. Die Anwendung derMainOnArray()-Methode wird demonstriert. - Die Datei
Test_OsMA_OnValueRB.mq5zeigt die Verwendung derMainOnValue()-Methode. Zuerst wird der OsMA-Indikator berechnet und gezeichnet. Dann wird auf Basis dieses Ringpuffers ein weiterer OsMA-Indikator gezeichnet.

Das Ergebnis der Arbeit der Test_OsMA_OnArrayRB.mq5 mit einer Ringpuffer-Größe von 256 Elementen.

Das Ergebnis der Arbeit der Test_OsMA_OnValueRB.mq5 mit einer Ringpuffer-Größe von 256 Elementen.
Bei der Programmierung wurden Entwicklungen von MetaQuotes Software Corp., Integer und GODZILLA verwendet.
Kommentar 0