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 CADXOnRingBufferTitel
#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
- Het Test_ADX_OnArrayRB.mq5 bestand berekent de indicator op basis van de prijs tijdreeks. De toepassing van de MainOnArray() methode wordt gedemonstreerd.
- 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
- 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