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 constint rates_total, // Größe des Arrays array[] constint prev_calculated, // verarbeitete Elemente bei vorherigem Aufruf constdouble &array[] // Array der Eingabewerte );
//--- Berechnungsmethode basierend auf den separaten Serien-Elementen des Arraysdouble MainOnValue( // gibt den OsMA-Wert für das festgelegte Element zurück constint rates_total, // Größe des Arrays constint prev_calculated, // verarbeitete Elemente des Arrays constint begin, // von wo die relevanten Daten des Arrays beginnen constdouble value, // relevante Elemente des Arrays constint index // Element-Index );
//--- Methoden zum Zugriff auf Daten:int BarsRequired(); // Gibt die notwendige Anzahl an Balken für die Anzeige des Indikators zurückstring Name() // Gibt den Namen des Indikators zurückstring FastMethod() // Gibt die Methode der Glättung der schnellen Linie als Text zurückstring SlowMethod() // Gibt die Methode der Glättung der langsamen Linie als Text zurückstring SignalMethod() // Gibt die Methode der Glättung der Signallinie als Text zurückint FastPeriod() // Gibt den Zeitraum der Glättung der schnellen Linie zurückint SlowPeriod() // Gibt den Zeitraum der Glättung der langsamen Linie zurückint SignalPeriod() // Gibt den Zeitraum der Glättung der Signallinie zurückint 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 |//+------------------------------------------------------------------+intOnCalculate(constint rates_total, constint prev_calculated, constint begin, constdouble &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