Home Technische indicator Bericht

AMA Indicator Berekenen met de Ringbuffer in MetaTrader 5

Bijlage
1375.zip (8.46 KB, Downloaden 0 keer)

Beschrijving

De CAMAOnRingBuffer klasse is ontworpen voor het berekenen van de technische indicator Adaptive Moving Average (Adaptive Moving Average, AMA) met behulp van het algoritme van de ringbuffer.

Declaratie

class CAMAOnRingBuffer : public CArrayRing

Titel

#include <IncOnRingBuffer\CAMAOnRingBuffer.mqh>

Het bestand van de CAMAOnRingBuffer.mqh klasse moet worden geplaatst in de IncOnRingBuffer map, die moet worden aangemaakt in MQL5\Include\. Twee voorbeeldbestanden die met de klasse zijn gebruikt, zijn aan de beschrijving toegevoegd. Het bestand van de klasse van de ringbuffer en de klasse van Efficiency Ratio moeten ook in deze map staan.

Methoden van de klasse

//--- initialisatie methode:
bool Init(                                  // als er een fout optreedt, retourneert het false, als het succesvol is - true
   int            period        = 10,       // de periode van de AMA 
   int            fast_period   = 2,        // de periode van de snelle EMA 
   int            slow_period   = 30,       // de periode van de langzame EMA
   int            size_buffer   = 256,      // de grootte van de ringbuffer, het aantal opgeslagen gegevens
   bool           as_series     = false     // true, als het een tijdreeks is, false - als het een gebruikelijke indexering van de invoergegevens is
   );
//--- de methode voor berekening op basis van een tijdreeks of indicatorbuffer:          
int MainOnArray(                  // retourneert het aantal verwerkte elementen  
   const int     rates_total,     // de grootte van de array array[]
   const int     prev_calculated, // 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 AMA waarde voor het ingestelde element
   const int    rates_total,     // de grootte van de array
   const int    prev_calculated, // verwerkte elementen van de array
   const int    begin,           // vanaf waar de significante gegevens van de array beginnen
   const double value,           // de elementwaarde van de array
   const int    index            // de elementindex
    );
//--- methoden voor toegang tot de gegevens:
int    BarsRequired();   // Retourneert het benodigde aantal bars om de indicator te tekenen
string Name();           // Retourneert de naam van de indicator
string FastPeriod();       // Retourneert de periode van snelle EMA smoothing  
int     SlowPeriod();         // Retourneert de periode van langzame EMA smoothing
int    Period();           // Retourneert de periode van de AMA
int    Size();           // Retourneert de grootte van de ringbuffer

Om de berekende gegevens van de indicator uit de ringbuffer te halen, kan dit net als uit een gewone array. Bijvoorbeeld:

//--- de klasse met methoden voor de berekening van de AMA indicator:
#include <IncOnRingBuffer\CAMAOnRingBuffer.mqh>
CAMAOnRingBuffer ama;

...
//+------------------------------------------------------------------+
//| Aangepaste indicator iteratiefunctie                              |
//+------------------------------------------------------------------+
int OnCalculate(const int    rates_total, 
                const int    prev_calculated, 
                const int    begin, 
                const double &price[]) 
  {
//--- berekening van de indicator op basis van de prijs tijdreeks:
   ama.MainOnArray(rates_total,prev_calculated,price);

...
//--- gebruik de gegevens van de ringbuffer "ama",
//    bijvoorbeeld, kopieer de gegevens in de indicatorbuffer:
   for(int i=start;i<rates_total;i++)
      AMA_Buffer[i] = ama[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 tijdreeks.

Voorbeelden

  1. Het Test_AMA_OnArrayRB.mq5 bestand berekent de indicator op basis van de prijs tijdreeks. De toepassing van de MainOnArray() methode wordt gedemonstreerd.
  2. Het Test_AMA_OnValueRB.mq5 bestand toont het gebruik van de MainOnValue() methode. Eerst wordt de AMA indicator berekend en getekend. Vervolgens wordt op basis van deze indicator ringbuffer nog een AMA getekend. 


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



Het resultaat van het werk van de Test_AMA_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)