Home Technische indicator Bericht

MACD Teken met Ringbuffer: Een Gids voor MetaTrader 5 Traders

Bijlage
1361.zip (9.66 KB, Downloaden 0 keer)

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 CMACDOnRingBuffer

Titel

#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

  1. Het Test_MACD_OnArrayRB.mq5 bestand berekent de indicator op basis van prijs tijdseries. De toepassing van de MainOnArray() methode wordt gedemonstreerd.
  2. Het Test_MACD_OnValueRB.mq5 bestand toont het gebruik van de MainOnValue() 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

Reactie (0)