Home Technische indicator Bericht

Leer de OBV Indicator Teken met de Ringbuffer in MetaTrader 5

Bijlage
1402.zip (6.42 KB, Downloaden 0 keer)

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

  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.

Gerelateerde berichten

Reactie (0)