Startseite Technischer Indikator Beitrag

OBV Indikator in MetaTrader 5: Nutzung des Ringpuffers für optimale Berechnungen

Anhang
1402.zip (6.42 KB, Herunterladen 0 mal)

Beschreibung

Die Klasse COBVOnRingBuffer dient zur Berechnung des technischen Indikators On Balance Volume (OBV), unter Verwendung des Algorithmus des Ringpuffers.

Deklaration

class COBVOnRingBuffer : public CArrayRing

Titel

#include <IncOnRingBuffer\COBVOnRingBuffer.mqh>

Die Datei COBVOnRingBuffer.mqh muss im Ordner IncOnRingBuffer abgelegt werden, der im Pfad MQL5\Include\ erstellt werden muss. Zwei Beispiel-Dateien, die die Verwendung der Klasse demonstrieren, sind in der Beschreibung angefügt. Auch die Datei mit der Ringpuffer-Klasse sollte sich in diesem Ordner befinden.

Methoden der Klasse

//--- Initialisierungsmethode:
bool Init( // bei Fehler false, bei Erfolg true
   int period = 0, // die OBV-Periode
   int size_buffer = 256, // die Größe des Ringpuffers
   bool as_series = false // true, wenn Zeitreihe, sonst false
);

Die OBV-Periode wird wie bei einem Integer verwendet: Wenn der Wert 0 (Standard) ist, funktioniert der Indikator wie der im Terminal integrierte – er wird für alle Balken des Charts berechnet. Bei Angabe eines anderen positiven Wertes wird die angegebene Anzahl von Balken (nach dem Prinzip des gleitenden Durchschnitts) für die Berechnung des Wertes an jedem Chartbalken verwendet.

//--- Berechnungsmethode basierend auf einer Zeitreihe oder den Indikatorpuffern:
int MainOnArray( // gibt die Anzahl der verarbeiteten Elemente zurück
   const int rates_total, // Größe der Arrays
   const int prev_calculated, // verarbeitete Elemente beim vorherigen Aufruf
   const double& price[], // Preis
   const long& volume[] ); // Volumen
   );
//--- Berechnungsmethode basierend auf einzelnen Elementen des Arrays
double MainOnValue( // gibt den OBV-Wert für das festgelegte Element (Balken) zurück
   const int rates_total, // Größe des Arrays
   const int prev_calculated, // verarbeitete Elemente des Arrays
   const int begin, // von wo die signifikanten Daten des Arrays beginnen
   const double price, // Preis
   const long volume, // Volumen
   const int index // der Element (Balken) Index
);
//--- Methoden zum Zugriff auf die Daten:
int BarsRequired(); // Gibt die notwendige Anzahl von Balken zurück, um den Indikator zu zeichnen
string Name(); // Gibt den Namen des Indikators zurück
int Period(); // Gibt die Periode zurück
int Size(); // Gibt die Größe des Ringpuffers zurück

Die berechneten Daten des Indikators können aus dem Ringpuffer wie aus einem gewöhnlichen Array abgerufen werden. Zum Beispiel:

//--- die Klasse mit den Methoden zur Berechnung des OBV-Indikators:
#include <IncOnRingBuffer\COBVOnRingBuffer.mqh>
COBVOnRingBuffer obv;

...

//+------------------------------------------------------------------+
//| 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 einer Zeitreihe:
      obv.MainOnArray(rates_total, prev_calculated, close, tick_volume);

...

//--- Verwendung der Daten aus dem Ringpuffer "obv",
//    z.B. Kopieren der Daten in den Indikatorpuffer:
      for (int i=start; iIsStopped(); i++)
        OBV_Buffer[i] = obv[rates_total-1-i]; // Indikatorlinie

...

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

Bitte beachten Sie, dass das Indizieren im Ringpuffer dasselbe ist wie in der Zeitreihe.

Beispiele

  1. Der Indikator berechnet die Datei Test_OBV_OnArrayRB.mq5 auf Basis der Preis-Zeitreihe. Die Anwendung der Methode MainOnArray() wird demonstriert.
  2. Die Datei Test_OBV_OnValueRB.mq5 zeigt die Verwendung der Methode MainOnValue(). Zuerst wird der OBV-Indikator berechnet und gezeichnet. Dann wird auf Basis dieses Indikator-Ringpuffers ein weiterer OBV gezeichnet.


Das Ergebnis der Arbeit der Datei Test_OBV_OnArrayRB.mq5 mit einer Ringpuffergröße von 256 Elementen



Das Ergebnis der Arbeit der Datei Test_OBV_OnValueRB.mq5 mit einer Ringpuffergröße von 256 Elementen

 

Bei der Erstellung des Codes wurden Entwicklungen von MetaQuotes Software Corp., Integer und GODZILLA verwendet.

Verwandte Beiträge

Kommentar (0)