Home Technische indicator Bericht

ADX Berekenen met de Ringbuffer: Een Gids voor MetaTrader 5

Bijlage
1343.zip (9.86 KB, Downloaden 0 keer)

Beschrijving

De CADXOnRingBuffer klasse is ontworpen voor het berekenen van de technische indicator Average Directional Movement Index (ADX) met behulp van een ringbuffer algoritme. Dit biedt een efficiënte manier om de ADX-waarden te berekenen binnen MetaTrader 5.

Declaratie

class CADXOnRingBuffer

Titel

#include <IncOnRingBuffer\CADXOnRingBuffer.mqh>

Het bestand van de CADXOnRingBuffer.mqh klasse moet worden geplaatst in de IncOnRingBuffer folder, die je moet aanmaken in MQL5\Include\. Twee voorbeeldbestanden die door deze klasse worden gebruikt, zijn toegevoegd aan de beschrijving. Het bestand met de ringbuffer klasse en het bestand met de Moving Average klasse moeten ook in deze folder staan.

Klasse methoden

//--- initialisatie methode:
bool Init(                                 // als er een fout is, retourneert false, als succesvol - true
   int            ma_period   = 14,       // periode van Moving Average smoothing 
   ENUM_MA_METHOD ma_method   = MODE_EMA, // methode van Moving Average smoothing
   int            size_buffer = 256,      // de grootte van de ringbuffer, aantal opgeslagen data
   bool           as_series   = false     // true, als een tijdreeks, false als normale indexering van de inputgegevens
   );            
//--- methode van berekening gebaseerd op een tijdreeks of indicatorbuffers:          
int MainOnArray(                  // retourneert het aantal verwerkte elementen  
   const int     rates_total,     // de grootte van de arrays
   const int     prev_calculated, // verwerkte elementen bij de vorige aanroep
   const double &high[]           // het maximale waarde array
   const double &low[]            // het minimale waarde array
   const double &close[]           // sluitprijs array
   );
//--- methode voor berekening gebaseerd op de afzonderlijke serie elementen van de array            
double MainOnValue(              // retourneert de ADX 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 waarden van de array beginnen
   const double high,            // het maximale waarde 
   const double low,             // het minimale waarde 
   const double close,           // sluitprijs 
   const int    index            // het element index
   );
//--- methoden voor toegang tot de data:
int    BarsRequired();   // Retourneert het benodigde aantal bars om de indicator te tekenen
string NameADX();        // Retourneert de naam van de indicator
string NameNDI();        // Retourneert de naam van de negatieve directionele movement indicator lijn
string NamePDI();        // Retourneert de naam van de positieve directionele movement indicator lijn
string MAMethod();       // Retourneert de methode van smoothing in de vorm van een tekstregel  
int    MAPeriod();       // Retourneert de periode van smoothing
int    Size();           // Retourneert de grootte van de ringbuffer

Je kunt de berekende gegevens van de indicator uit de ringbuffer verkrijgen zoals uit een normale array. Bijvoorbeeld:

#include <IncOnRingBuffer\CADXOnRingBuffer.mqh>
CADXOnRingBuffer adx;

...

//+------------------------------------------------------------------+
//| Aangepaste indicator iteratiefunctie                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
//--- berekening van de indicator:
   adx.MainOnArray(rates_total,prev_calculated,high,low,close);

   ...
     
//--- kopiëren van de gegevens van de "adx" ringbuffers naar de indicator:
   for(int i=start;i<rates_total;i++)
     {
      ADX_Buffer[i]=adx[rates_total-1-i];      // gemiddelde directionele movement index
      PDI_Buffer[i]=adx.pdi[rates_total-1-i];  // positieve directionele index
      NDI_Buffer[i]=adx.ndi[rates_total-1-i];  // negatieve directionele index
     }

   ...
}

Let op dat de indexering in de ringbuffer hetzelfde is als in de tijdreeks.

Voorbeelden

  1. Het Test_ADX_OnArrayRB.mq5 bestand berekent de indicator op basis van de prijs tijdreeks. De toepassing van de MainOnArray() methode wordt gedemonstreerd.
  2. Het Test_ADX_OnValueRB.mq5 bestand laat het gebruik van de MainOnValue() methode zien. Eerst wordt de ADX indicator berekend en getekend. Daarna worden op basis van de ringbuffer van deze indicator drie lijnen van de ADX indicator berekend.


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



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