Beschrijving
De CDEMAOnRingBuffer klasse is ontworpen voor het berekenen van de technische indicator Dubbele Exponentiële Beweeglijke Gemiddelde (Double Exponential Moving Average, DEMA) met behulp van het algoritme van de ringbuffer.
Declaratie
class CDEMAOnRingBuffer : public CArrayRing
Titel
#include <IncOnRingBuffer\CDEMAnRingBuffer.mqh>Het bestand van de CDEMAOnRingBuffer.mqh klasse moet in de IncOnRingBuffer map worden geplaatst die je moet aanmaken in MQL5\Include\. Twee bestanden met voorbeelden die door de klasse worden gebruikt, zijn aan de beschrijving toegevoegd. Het bestand met de klassen van de ringbuffer en de Beweeglijke Gemiddelde moeten ook in deze map staan.
Klasse-methoden
//--- initialisatiemethode: bool Init( // bij fout retourneert het false, bij succes - true int periode = 12, // de DEMA periode ENUM_MA_METHOD methode = MODE_EMA, // de methode van gladstrijken int grootte_buffer = 256, // de grootte van de ringbuffer bool als_reeks = false // true, als een tijdreeks, anders - false );
//--- de methode van berekening op basis van een tijdreeks of de indicatorbuffers: int MainOnArray( // retourneert het aantal verwerkte elementen const int totale_koersen, // de grootte van de array const int eerder_berekend,// verwerkte elementen bij de vorige oproep const double& prijs[], // de array voor berekening );
//--- de methode voor berekening op basis van afzonderlijke serie-elementen van de array double MainOnValue( // retourneert de DEMA waarde voor het opgegeven element (bar) const int totale_koersen, // de grootte van de array const int eerder_berekend,// verwerkte elementen van de array const int begin, // vanaf waar de significante data van de array begint const double waarde, // de waarde van het element (bar) const int index // de index van het element (bar) );
//--- de 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 Periode(); // Retourneert de periode int Grootte(); // Retourneert de grootte van de ringbuffer double MA(int index); // Retourneert de waarde van de Beweeglijke Gemiddelde, indexering is zoals in een tijdreeks
Om de berekende gegevens van de indicator uit de ringbuffer te krijgen, kan dat zoals van een gewone array. Bijvoorbeeld:
//--- de klasse met de methoden voor de berekening van de DEMA indicator: #include <IncOnRingBuffer\CDEMAOnRingBuffer.mqh> CDEMAOnRingBuffer dema; ... //+------------------------------------------------------------------+ //| Aangepaste indicator iteratiefunctie | //+------------------------------------------------------------------+ int OnCalculate (const int totale_koersen, // de grootte van de array prijs[] const int eerder_berekend, // verwerkte bars bij de vorige oproep const int begin, // vanaf waar de significante data begint const double& prijs[]) // de array voor de berekening { //--- berekening van de indicator op basis van een tijdreeks: dema.MainOnArray(totale_koersen,eerder_berekend,prijs); ... //--- gebruik de data uit de "dema" ringbuffer, // bijvoorbeeld, kopieer de data in de indicatorbuffer: for(int i=start;i<totale_koersen && !IsStopped();i++) DEMA_Buffer[i] = dema[totale_koersen-1-i]; // de DEMA indicatorlijn ... //--- retourneer de waarde van eerder_berekend voor de volgende oproep: return(totale_koersen); }
Bij de berekening van de DEMA wordt ook de berekening van de Beweeglijke Gemiddelde met dezelfde parameters uitgevoerd. We kunnen de gegevens uit de MA ringbuffer halen met behulp van de MA methode(int index):
//--- gebruik de data uit de Beweeglijke Gemiddelde ringbuffer, // bijvoorbeeld, kopieer de data in de indicatorbuffer: for(int i=start;i<totale_koersen && !IsStopped();i++) MA_Buffer[i] = dema.MA(totale_koersen-1-i); // de Beweeglijke Gemiddelde indicatorlijn
Houd er rekening mee dat de indexering in de ringbuffers hetzelfde is als in de tijdreeks.
Voorbeelden
- De indicator berekent het Test_DEMA_OnArrayRB.mq5 bestand op basis van de prijs tijdreeks. De toepassing van de MainOnArray() methode wordt gedemonstreerd.
- Het Test_DEMA_OnValueRB.mq5 bestand toont het gebruik van de MainOnValue() methode. Eerst wordt de DEMA indicator berekend en getekend. Vervolgens wordt op basis van deze indicator ringbuffer nog een DEMA getekend.

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

Het resultaat van het werk van de Test_DEMA_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
- Efficiëntie Ratio (ER) Berekenen met de CEROnRingBuffer voor MetaTrader 5
- PCA Synthetics: Automatische Coëfficiëntselectie 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