Beschrijving
De COBVOnRingBuffer klasse is ontwikkeld voor het berekenen van de technische indicator On Balance Volume (On Balance Volume, OBV) met behulp van het algoritme van de ringbuffer.
Declaratie
class COBVOnRingBuffer : public CArrayRing
Titel
#include <IncOnRingBuffer\COBVnRingBuffer.mqh>Het bestand van de COBVOnRingBuffer.mqh klasse moet worden geplaatst in de IncOnRingBuffer map die je moet aanmaken in MQL5\Include\. Twee bestanden met voorbeelden die door de klasse worden gebruikt, zijn bijgevoegd bij de beschrijving. Het bestand met de klasse van de ringbuffer moet ook in deze map staan.
Klasse methoden
//--- initialisatiemethode: bool Init( // retourneert false bij fout, true bij succes int period = 0, // de OBV periode int size_buffer = 256, // de grootte van de ringbuffer bool as_series = false // true als tijdserie, anders false );
De OBV periode wordt gebruikt zoals bij Integer: als de waarde 0 is (standaard) werkt de indicator zoals degene die bij de terminal is inbegrepen - hij wordt berekend voor alle bars van de grafiek. Als een andere positieve waarde is opgegeven, wordt het opgegeven aantal bars gebruikt (Moving Average principe) voor de waarde berekening bij elke grafiekbar.
//--- de methode van berekening op basis van een tijdserie of de indicatorbuffers: int MainOnArray( // retourneert het aantal verwerkte elementen const int rates_total, // de grootte van de arrays const int prev_calculated, // verwerkte elementen bij de vorige aanroep const double& price[], // prijs const long& volume[]); // volume );
//--- de methode van berekening op basis van afzonderlijke elementen van de array double MainOnValue( // retourneert de OBV waarde voor het opgegeven element (bar) const int rates_total, // de grootte van de array const int prev_calculated, // verwerkte elementen van de array const int begin, // waar de significante data van de array begint const double price, // prijs const long volume, // volume const int index // de index van het element (bar) );
//--- methoden voor toegang tot de data: int BarsRequired(); // Retourneert het benodigde aantal bars om de indicator te tekenen string Name(); // Retourneert de naam van de indicator int Period(); // Retourneert de periode int Size(); // Retourneert de grootte van de ringbuffer
Om de berekende gegevens van de indicator uit de ringbuffer te krijgen, is het mogelijk als uit een gewone array. Bijvoorbeeld:
//--- de klasse met de methoden van berekening van de OBV indicator: #include <IncOnRingBuffer\COBVOnRingBuffer.mqh> COBVOnRingBuffer obv; ... //+------------------------------------------------------------------+ //| Functie voor iteratie van de aangepaste indicator | //+------------------------------------------------------------------+ 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[]) { //--- de berekening van de indicator op basis van een tijdserie: obv.MainOnArray(rates_total,prev_calculated,close,tick_volume); ... //--- gebruik de gegevens van de ringbuffer "obv", // bijvoorbeeld, kopieer de gegevens in de indicatorbuffer: for(int i=start;i<rates_total && !IsStopped();i++) OBV_Buffer[i] = obv[rates_total-1-i]; // indicatorlijn ... //--- retourneer waarde van prev_calculated voor volgende aanroep: return(rates_total); }
Let op dat de indexering in de ringbuffer hetzelfde is als in de tijdserie.
Voorbeelden
- De indicator berekent het Test_OBV_OnArrayRB.mq5 bestand op basis van de prijs tijdserie. De toepassing van de MainOnArray() methode wordt gedemonstreerd.
- Het Test_OBV_OnValueRB.mq5 bestand demonstreert het gebruik van de MainOnValue() methode. Eerst wordt de OBV indicator berekend en getekend. Vervolgens wordt op basis van deze indicator ringbuffer nog een OBV getekend.

Het resultaat van het werk van de Test_OBV_OnArrayRB.mq5 met de grootte van de ringbuffer van 256 elementen

Het resultaat van het werk van de Test_OBV_OnValueRB.mq5 met de grootte van de ringbuffer van 256 elementen
Bij het schrijven van de code zijn de ontwikkelingen van MetaQuotes Software Corp., Integer en GODZILLA gebruikt.
Gerelateerde berichten
- PCA Synthetics: Automatische Coëfficiëntselectie voor MetaTrader 5
- iExposure Indicator: Beheer je Handelsposities Efficiënt met MetaTrader 5
- Efficiëntie Ratio (ER) Berekenen met de CEROnRingBuffer voor MetaTrader 5
- Efficiënt Grafische Objecten Kopiëren in MetaTrader 5 met ChartObjectsCopyPaste
- Correlatiecoëfficiënt: Een Onmisbare Indicator voor MetaTrader 5