Beschrijving
De CTEMAOnRingBuffer klasse is ontwikkeld voor het berekenen van de technische indicator Triple Exponential Moving Average (TEMA) met behulp van het algoritme van de ringbuffer.
Declaratie
class CTEMAOnRingBuffer : public CArrayRing
Titel
#include <IncOnRingBuffer\CTEMAnRingBuffer.mqh>Het bestand van de CTEMAOnRingBuffer.mqh klasse moet in de IncOnRingBuffer map worden geplaatst, die moet worden aangemaakt in MQL5\Include\. Twee bestanden met voorbeelden die door de klasse worden gebruikt, zijn bijgevoegd in de beschrijving. Bestanden met de klassen van de ringbuffer, DEMA en Moving Average moeten ook in deze map staan.
Klasse Methoden
//--- initialisatie methode: bool Init( // als er een fout is, retourneert het false, als het succesvol is - true int period = 12, // de TEMA periode ENUM_MA_METHOD method = MODE_EMA, // de methode van gladstrijken int size_buffer = 256, // de grootte van de ringbuffer bool as_series = false // true, als het een tijdreeks is, anders - false );
//--- de methode voor berekening gebaseerd op een tijdreeks of de indicatorbuffers: int MainOnArray( // retourneert het aantal verwerkte elementen const int rates_total, // de grootte van de array const int prev_calculated, // verwerkte elementen bij de vorige oproep const double& price[], // de array voor berekening );
//--- de methode voor berekening op basis van afzonderlijke serie-elementen van de array double MainOnValue( // retourneert de TEMA waarde voor het ingestelde element (bar) 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 data van de array begint const double value, // de waarde van het element (bar) const int index // de index van het element (bar) );
//--- de methodes 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 double MA(int index); // Retourneert de waarde van de Moving Average, indexering is zoals in een tijdreeks double DEMA(int index); // Retourneert de waarde van de DEMA, indexering is zoals in een tijdreeks
Om de berekende data van de indicator uit de ringbuffer te verkrijgen, is het mogelijk zoals uit een gewone array. Bijvoorbeeld:
//--- de klasse met de methodes voor de berekening van de TEMA indicator: #include <IncOnRingBuffer\CTEMAOnRingBuffer.mqh> CTEMAOnRingBuffer tema; ... //+------------------------------------------------------------------+ //| Custom indicator iteratiefunctie | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // de grootte van de array price[] const int prev_calculated, // verwerkte bars bij de vorige oproep const int begin, // vanaf waar de significante data begint const double& price[]) // de array voor berekening { //--- berekening van de indicator op basis van een tijdreeks: tema.MainOnArray(rates_total,prev_calculated,price); ... //--- gebruik de data uit de "tema" ringbuffer, // bijvoorbeeld, kopieer de data in de indicatorbuffer: for(int i=start;i<rates_total && !IsStopped();i++) TEMA_Buffer[i] = tema[rates_total-1-i]; // de TEMA indicatorlijn ... //--- retourneer waarde van prev_calculated voor de volgende oproep: return(rates_total); }
Bij het berekenen van de TEMA wordt ook de berekening van de Moving Average en DEMA met dezelfde parameters uitgevoerd. We kunnen de data uit de MA ringbuffer en DEMA verkrijgen met behulp van de MA methode(int index) en DEMA(int index), respectievelijk:
//--- gebruik de data uit de Moving Average en DEMA ringbuffers, // bijvoorbeeld, kopieer ze in de indicatorbuffers: for(int i=start;i<rates_total && !IsStopped();i++) { MA_Buffer[i] = dema.MA(rates_total-1-i); // de Moving Average indicatorlijn DEMA_Buffer[i] = dema.DEMA(rates_total-1-i); // de DEMA indicatorlijn }
Let op dat de indexering in de ringbuffers hetzelfde is als in de tijdreeks.
Voorbeelden
- De indicator berekent het Test_TEMA_OnArrayRB.mq5 bestand op basis van de prijs tijdreeks. Het gebruik van de MainOnArray() methode wordt gedemonstreerd.
- De Test_TEMA_OnValueRB.mq5 demonstreert het gebruik van de MainOnValue() methode. Eerst wordt de TEMA indicator berekend en getekend. Daarna wordt op basis van deze indicator ringbuffer nog een TEMA getekend.

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

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