Home Technische indicator Bericht

Stochastic Oscillator Berekenen met de Ringbuffer in MetaTrader 5

Bijlage
1372.zip (10.26 KB, Downloaden 0 keer)

Beschrijving

De CStochasticOnRingBuffer klasse is ontworpen voor het berekenen van de technische indicator Stochastic Oscillator (Stochastic Oscillator) met behulp van het algoritme van de ringbuffer.

Declaratie

class CStochasticOnRingBuffer

Titel

#include <IncOnRingBuffer\CStochasticOnRingBuffer.mqh>

Het bestand CStochasticOnRingBuffer.mqh moet worden geplaatst in de map IncOnRingBuffer die moet worden aangemaakt in MQL5\Include\. Twee voorbeeldbestanden 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 period_k = 5, // de periode %K
    int period_d = 3, // de periode %D
    int period_s = 3, // de periode van vertraging %K
    ENUM_MA_METHOD method = MODE_SMA, // de methode %D
    int size_buffer = 256, // de grootte van de ringbuffer, het aantal opgeslagen gegevens
    bool as_series = false // true, als een tijdreeks, false - als een gebruikelijke indexering van de invoergegevens
    );
//--- berekeningsmethode op basis van 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[], // de maximumwaarde array
    const double &low[], // de minimumwaarde array
    const double &close[] // close price array
    );
//--- berekeningsmethode op basis van de afzonderlijke serie-elementen van de array
double MainOnValue(// retourneert de Stochastic waarde voor het ingestelde element
    const int rates_total, // de grootte van het element
    const int prev_calculated, // verwerkte elementen van de array
    const int begin, // van waar de significante gegevens van de array beginnen
    const double high, // de maximumwaarde 
    const double low, // de minimumwaarde 
    const double close, // close price 
    const int index // het elementindex
    );
//--- toegangsmethoden tot de gegevens:
int BarsRequired(); // Retourneert het benodigde aantal bars om de indicator te tekenen
string Name(); // Retourneert de naam van de indicator
string NameSignal(); // Retourneert de naam van de signaallijnindicator
string Method(); // Retourneert de methode van smoothing in de vorm van de tekstregel
int PeriodK(); // Retourneert de periode van %K
int PeriodS(); // Retourneert de periode van vertraging %K
int PeriodD(); // Retourneert de periode van %D
int Size(); // Retourneert de grootte van de ringbuffer

De berekende gegevens van de indicator uit de ringbuffer zijn toegankelijk zoals uit een gewone array. Bijvoorbeeld:

//--- de klasse met de methoden voor het berekenen van de Stochastic indicator:
#include <IncOnRingBuffer\CStochasticOnRingBuffer.mqh>
CStochasticOnRingBuffer st;

...

//+------------------------------------------------------------------+
//| 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 op basis van de prijs tijdreeks:
    st.MainOnArray(rates_total, prev_calculated, high, low, close);

...

//--- gebruik de gegevens van de ringbuffers "st",
// bijvoorbeeld, kopieer de gegevens in de indicatorbuffers:
    for(int i=start; i<rates_total && !IsStopped(); i++)
    {
        MainBuffer[i] = st[rates_total - 1 - i]; // de hoofdregel van de indicator
        SignalBuffer[i] = st.signal[rates_total - 1 - i]; // de signaallijn van de indicator
    }

...

//--- retourneer waarde van prev_calculated voor volgende aanroep:
    return(rates_total);
    }

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

Voorbeelden

  1. Het bestand Test_Stochastic_OnArrayRB.mq5 berekent de indicator op basis van de prijs tijdreeks. Het gebruik van de MainOnArray() methode wordt gedemonstreerd.
  2. Het bestand Test_Stochastic_OnValueRB.mq5 demonstreert het gebruik van de MainOnValue() methode. Eerst wordt de Stochastic Oscillator indicator berekend en getekend. Vervolgens worden op basis van de ringbuffer nog twee Stochastic Oscillator lijnen getekend.


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



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