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 constint rates_total, // de grootte van de arrays constint prev_calculated, // verwerkte elementen bij de vorige aanroep constdouble& price[], // prijs constlong& volume[]); // volume );
//--- de methode van berekening op basis van afzonderlijke elementen van de arraydouble MainOnValue( // retourneert de OBV waarde voor het opgegeven element (bar) constint rates_total, // de grootte van de array constint prev_calculated, // verwerkte elementen van de array constint begin, // waar de significante data van de array begint constdouble price, // prijs constlong volume, // volume constint index // de index van het element (bar) );
//--- methoden voor toegang tot de data:int BarsRequired(); // Retourneert het benodigde aantal bars om de indicator te tekenenstring Name(); // Retourneert de naam van de indicatorintPeriod(); // Retourneert de periodeint 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 |//+------------------------------------------------------------------+intOnCalculate(constint rates_total, constint prev_calculated, constdatetime& time[], constdouble& open[], constdouble& high[], constdouble& low[], constdouble& close[], constlong& tick_volume[], constlong& volume[], constint& 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.

Reactie 0