Beschrijving
De CMACDOnRingBuffer klasse is ontworpen voor de berekening van de technische indicator Moving Average Convergence/Divergence (MACD) met behulp van het algoritme van de ringbuffer.
Declaratie
class CMACDOnRingBufferTitel
#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>Het bestand van de CMACDOnRingBuffer.mqh klasse moet worden geplaatst in de IncOnRingBuffer map die in MQL5\Include\ moet worden aangemaakt. Twee bestanden met voorbeelden die door de klasse worden gebruikt, zijn aan de beschrijving toegevoegd. Het bestand met de klasse van de ringbuffer en de klasse van Moving Average moeten ook in deze map staan.
Klasse methoden
//--- initialisatiemethode: bool Init( // als er een fout is, retourneert het false, als het succesvol is - true int fast_period = 12, // de periode van snelle Moving Average int slow_period = 26, // de periode van langzame Moving Average int signal_period = 9, // de periode van de signaal Moving Average ENUM_MA_METHOD fast_method = MODE_EMA, // de methode van snelle Moving Average ENUM_MA_METHOD slow_method = MODE_EMA, // de methode van langzame Moving Average ENUM_MA_METHOD signal_method = MODE_SMA, // de methode van signaal Moving Average int size_buffer = 256, // de grootte van de ringbuffer bool as_series = false // true, als het een tijdserie is, false als het een gebruikelijke indexering van de invoergegevens is );
//--- de methode van berekening op basis van een tijdserie of de 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 van berekening op basis van de afzonderlijke serie-elementen van de array double MainOnValue( // retourneert de MACD-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 aantal benodigde bars om de indicator te tekenen string Name() // Retourneert de naam van de indicator string NameMain() // Retourneert de naam van de hoofdlijn van de indicator string NameSignal() // Retourneert de naam van de signaallijn van de indicator string FastMethod() // Retourneert de methode van smoothing van de snelle lijn in de vorm van een tekstlijn string SlowMethod() // Retourneert de methode van smoothing van de langzame lijn in de vorm van een tekstlijn string SignalMethod() // Retourneert de methode van smoothing van de signaallijn in de vorm van een tekstlijn int FastPeriod() // Retourneert de periode van smoothing van de snelle lijn int SlowPeriod() // Retourneert de periode van smoothing van de langzame lijn int SignalPeriod() // Retourneert de periode van smoothing van de signaallijn int Size(); // Retourneert de grootte van de ringbuffer
Om de berekende gegevens van de indicator uit de ringbuffer te verkrijgen, kan dit net als bij een gebruikelijke array. Bijvoorbeeld:
//--- de klasse met de methoden van de MACD-indicatorberekeningen: #include <IncOnRingBuffer\CMACDOnRingBuffer.mqh> CMACDOnRingBuffer macd; ... //+------------------------------------------------------------------+ //| 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 prijs tijdseries: macd.MainOnArray(rates_total,prev_calculated,price); ... //--- gebruik de gegevens van de "macd" ringbuffers, // kopieer de gegevens in de indicatorbuffers: for(int i=start;i<rates_total;i++) { MainBuffer[i] = macd[rates_total-1-i]; // indicator histogram SignalBuffer[i] = macd.signal[rates_total-1-i]; // signaallijn van de indicator } //--- retourneer waarde van prev_calculated voor volgende aanroep: return(rates_total); }
Let op dat indexeren in de ringbuffer hetzelfde is als in de tijdsserie.
Voorbeelden
- Het
Test_MACD_OnArrayRB.mq5bestand berekent de indicator op basis van prijs tijdseries. De toepassing van deMainOnArray()methode wordt gedemonstreerd. - Het
Test_MACD_OnValueRB.mq5bestand toont het gebruik van deMainOnValue()methode. Eerst wordt de MACD-indicator berekend en getekend. Vervolgens wordt op basis van de ringbuffer van deze indicator nog een MACD-indicator getekend.

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

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