Home Technische indicator Bericht

Efficiëntie Ratio (ER) Berekenen met de CEROnRingBuffer voor MetaTrader 5

Bijlage
1374.zip (6.13 KB, Downloaden 0 keer)

Beschrijving

De CEROnRingBuffer klasse is speciaal ontworpen om de technische indicator Efficiëntie Ratio (ER) te berekenen. Deze indicator wordt gebruikt in de Adaptieve Bewegende Gemiddelde (Adaptive Moving Average, AMA) met behulp van het algoritme van de ringbuffer.

Declaratie

class CEROnRingBuffer : public CArrayRing

Titel

#include <IncOnRingBuffer\CEROnRingBuffer.mqh>

Het bestand van de CEROnRingBuffer.mqh klasse moet in de IncOnRingBuffer map worden geplaatst, die je moet aanmaken in MQL5\Include\. Twee voorbeeldbestanden die de klasse gebruiken, zijn bijgevoegd in de beschrijving. Het bestand van de ringbuffer moet ook in deze map staan.

Klasse methoden

//--- initialisatiemethode:
bool Init(                                  // als er een fout is, retourneert het false; als het succesvol is - true
   int            periode        = 34,       // de periode voor de berekening van de ER  
   int            grootte_buffer   = 256,      // de grootte van de ringbuffer, het aantal opgeslagen gegevens
   bool           als_reeks     = false     // true, als een tijdreeks; false - als een gewone indexering van de invoergegevens
   );
//--- de methode voor berekening op basis van een tijdreeks of indicatorbuffer:          
int MainOnArray(                  // retourneert het aantal verwerkte elementen  
   const int     totaal_aantal,     // de grootte van de array array[]
   const int     eerder_berekend, // verwerkte elementen bij de vorige aanroep
   const double &array[]          // de array van de invoerwaarden
   );
//--- de methode voor berekening op basis van de afzonderlijke serie-elementen van de array           
double MainOnValue(              // retourneert de ER-waarde voor het opgegeven element
   const int    totaal_aantal,     // de grootte van de array
   const int    eerder_berekend, // verwerkte elementen van de array
   const int    begin,           // vanaf waar de significante gegevens van de array beginnen
   const double waarde,           // de elementwaarde van de array
   const int    index            // de elementindex
    );
//--- de methoden voor toegang tot de gegevens:
int    BarsRequired();   // Retourneert het noodzakelijke aantal bars om de indicator te tekenen
string Name()            // Retourneert de naam van de indicator
int    Period()          // Retourneert de periode van de ER-berekening
int    Grootte();           // Retourneert de grootte van de ringbuffer

Je kunt de berekende gegevens van de indicator uit de ringbuffer halen, net zoals uit een gewone array. Bijvoorbeeld:

//--- de klasse met de methoden voor de berekening van de ER-indicator:
#include <IncOnRingBuffer\CEROnRingBuffer.mqh>
CEROnRingBuffer er;

...

//+------------------------------------------------------------------+
//| Aangepaste indicator iteratiefunctie                              |
//+------------------------------------------------------------------+
int OnCalculate(const int    totaal_aantal, 
                const int    eerder_berekend, 
                const int    begin, 
                const double &prijs[]) 
  {
//--- berekening van de indicator op basis van prijs tijdreeksen:
   er.MainOnArray(totaal_aantal, eerder_berekend, prijs);

...

//--- gebruik gegevens van de ringbuffer "er",
//    bijvoorbeeld, kopieer gegevens in de indicatorbuffers:
   for(int i=start;i<totaal_aantal;i++)
     {
      ER_Buffer[i]   = er[totaal_aantal-1-i];          // indicatorlijn
     }
//--- retourneer waarde van eerder_berekend voor volgende aanroep:
   return(totaal_aantal);
  }

Let op dat de indexering in de ringbuffer hetzelfde is als in de tijdreeks.

Voorbeelden

  1. Het Test_ER_OnArrayRB.mq5 bestand berekent de indicator op basis van prijs tijdreeksen. De toepassing van de MainOnArray() methode wordt gedemonstreerd.
  2. Het Test_ER_OnValueRB.mq5 laat het gebruik van de MainOnValue() methode zien. Eerst wordt de ER-indicator berekend en getekend. Daarna wordt op basis van de ringbuffer van deze indicator nog een ER getekend.


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



De resultaten van het werk van de Test_ER_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)