Home Technische indicator Bericht

De CADXWOnRingBuffer: ADX Wilder Indicator voor MetaTrader 5

Bijlage
1356.zip (10.07 KB, Downloaden 0 keer)

Beschrijving

De CADXWOnRingBuffer klasse is ontworpen voor het berekenen van de technische indicator Average Directional Movement Index Wilder (Average Directional Movement Index Wilder, ofwel ADX Wilder) met behulp van het ring buffer algoritme. Dit biedt een efficiënte manier om deze indicator te berekenen binnen MetaTrader 5.

Declaratie

class CADXWOnRingBuffer

Titel

#include <IncOnRingBuffer\CADXWOnRingBuffer.mqh>

Het bestand CADXWOnRingBuffer.mqh moet worden geplaatst in de IncOnRingBuffer map, die je moet aanmaken in MQL5\Include\. Twee voorbeeldbestanden die de klasse gebruiken, zijn aan deze beschrijving toegevoegd. Zorg ervoor dat ook de bestanden van de ring buffer en de Moving Average in deze map staan.

Klasse methoden

//--- initialisatiemethode:
bool Init( // als er een fout is, retourneert false, bij succes - true
    int ma_period = 14, // de periode voor Moving Average smoothing
    ENUM_MA_METHOD ma_method = MODE_SMMA, // de methode voor Moving Average smoothing
    int size_buffer = 256, // de grootte van de ring buffer, het aantal opgeslagen data
    bool as_series = false // true, als het een tijdreeks is, false - als het een gewone indexering van de invoergegevens is
);
//--- berekeningsmethode op basis van een tijdreeks of indicator buffers:
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[], // de array met maximale waarden
    const double &low[], // de array met minimale waarden
    const double &close[] // de array met slotkoersen
);
//--- berekeningsmethode op basis van afzonderlijke elementen van de array
double MainOnValue( // retourneert de ADXW 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, // waar de significante data van de array begint
    const double high, // de maximale waarde
    const double low, // de minimale waarde
    const double close, // slotprijs
    const int index // de index van het element
);
//--- methoden voor toegang tot de data:
int BarsRequired(); // Retourneert het benodigde aantal bars om de indicator te tekenen
string NameADXW(); // Retourneert de naam van de indicator
string NameNDI(); // Retourneert de naam van de negatieve richting bewegingsindicatorlijn
string NamePDI(); // Retourneert de naam van de positieve richting indicatorlijn
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 ring buffer

De berekende gegevens van de indicator uit de ring buffer kunnen worden verkregen zoals uit een gewone array. Bijvoorbeeld:

#include <IncOnRingBuffer\CADXWOnRingBuffer.mqh>
CADXWOnRingBuffer adxw;

...

//+------------------------------------------------------------------+
//| 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:
    adxw.MainOnArray(rates_total, prev_calculated, high, low, close);

    ...
    
//--- kopieer de gegevens van de "adxw" ring buffers naar de indicator:
    for(int i=start; i<rates_total; i++)
    {
        ADXW_Buffer[i] = adxw[rates_total - 1 - i]; // gemiddelde richtingsindex Wilder
        PDI_Buffer[i]  = adxw.pdi[rates_total - 1 - i]; // positieve richtingsindex
        NDI_Buffer[i]  = adxw.ndi[rates_total - 1 - i]; // negatieve richtingsindex
    }

    ...
}

Houd er rekening mee dat de indexering in de ring buffer hetzelfde is als in de tijdreeks.

Voorbeelden

  1. Het Test_ADXW_OnArrayRB.mq5 bestand berekent de indicator op basis van de prijs tijdreeks. De toepassing van de MainOnArray() methode wordt gedemonstreerd.
  2. Het Test_ADXW_OnValueRB.mq5 bestand toont het gebruik van de MainOnValue() methode. Eerst wordt de ADXW indicator berekend en getekend. Vervolgens worden op basis van de ring buffer van deze indicator drie lijnen van de ADXW indicator berekend.


Het resultaat van de werking van de Test_ADXW_OnArrayRB.mq5 met de grootte van de ring buffer van 256 elementen



Het resultaat van de werking van de Test_ADXW_OnValueRB.mq5 met de grootte van de ring buffer van 256 elementen

 

Bij het schrijven van de code zijn ontwikkelingen van MetaQuotes Software Corp., Integer en GODZILLA gebruikt.

Gerelateerde berichten

Reactie (0)