MACD Teken met Ringbuffer: Een Gids voor MetaTrader 5 Traders

Mike 2012.12.28 17:51 59 0 0
Bijlage

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
   constint     rates_total,     // de grootte van de array array[]
   constint     prev_calculated, // verwerkte elementen bij de vorige aanroep
   constdouble &array[]          // de array van de invoerwaarden
   );
//--- de methode van berekening op basis van de afzonderlijke serie-elementen van de arraydouble MainOnValue(              // retourneert de MACD-waarde voor het ingestelde element
   constint    rates_total,     // de grootte van de array
   constint    prev_calculated, // verwerkte elementen van de array
   constint    begin,           // vanaf waar de significante gegevens van de array beginnen
   constdouble value,           // de elementwaarde van de array
   constint    index            // de elementindex
   );
//--- methoden voor toegang tot de gegevens:int    BarsRequired();   // Retourneert het aantal benodigde bars om de indicator te tekenenstring Name()            // Retourneert de naam van de indicatorstring NameMain()            // Retourneert de naam van de hoofdlijn van de indicatorstring NameSignal()            // Retourneert de naam van de signaallijn van de indicatorstring FastMethod()      // Retourneert de methode van smoothing van de snelle lijn in de vorm van een tekstlijnstring SlowMethod()      // Retourneert de methode van smoothing van de langzame lijn in de vorm van een tekstlijnstring SignalMethod()      // Retourneert de methode van smoothing van de signaallijn in de vorm van een tekstlijnint    FastPeriod()      // Retourneert de periode van smoothing van de snelle lijnint    SlowPeriod()      // Retourneert de periode van smoothing van de langzame lijnint    SignalPeriod()      // Retourneert de periode van smoothing van de signaallijnint    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                              |//+------------------------------------------------------------------+intOnCalculate(constint    rates_total, 
                constint    prev_calculated, 
                constint    begin, 
                constdouble &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.

Lijst
Reactie 0