Leer de OBV Indicator Teken met de Ringbuffer in MetaTrader 5

Mike 2013.01.17 00:38 18 0 0
Bijlage

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

  1. De indicator berekent het Test_OBV_OnArrayRB.mq5 bestand op basis van de prijs tijdserie. De toepassing van de MainOnArray() methode wordt gedemonstreerd.
  2. 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.

Lijst
Reactie 0