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
- Der Indikator berechnet die Datei
Test_OBV_OnArrayRB.mq5auf Basis der Preis-Zeitreihe. Die Anwendung der MethodeMainOnArray()wird demonstriert. - Die Datei
Test_OBV_OnValueRB.mq5zeigt die Verwendung der MethodeMainOnValue(). 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
- Tägliche prozentuale Veränderung in MT4 – Indikator für MetaTrader 4
- Tägliche prozentuale Veränderung in MT5 – Indikator für MetaTrader 5
- Uniformitätsfaktor-Indikator für MetaTrader 5: Analysiere deine Preisbewegungen
- Boom Index Spike Pattern – Ein Leitfaden für MetaTrader 5 Trader
- Open Range Breakout Indikator für MetaTrader 5: Ein unverzichtbares Tool für Trader