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
- Het Test_AMA_OnArrayRB.mq5 bestand berekent de indicator op basis van de prijs tijdreeks. De toepassing van de MainOnArray() methode wordt gedemonstreerd.
- 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
- PCA Synthetics: Automatische Coëfficiëntselectie voor MetaTrader 5
- Efficiëntie Ratio (ER) Berekenen met de CEROnRingBuffer voor MetaTrader 5
- iExposure Indicator: Beheer je Handelsposities Efficiënt met MetaTrader 5
- Efficiënt Grafische Objecten Kopiëren in MetaTrader 5 met ChartObjectsCopyPaste
- Verbeter je Handelsstrategieën met de ColorXADX Indicator voor MetaTrader 5