Fractals Berekenen met de Ringbuffer in MetaTrader 5

Mike 2013.01.18 22:00 18 0 0
Bijlage

Beschrijving

De CFractalsOnRingBuffer is ontworpen om de Fractals technische indicator te berekenen met behulp van het algoritme van de ringbuffer. Dit maakt het mogelijk om fractals efficiënt te analyseren en toe te passen in jouw handelsstrategieën.

Declaratie

class CFractalsOnRingBuffer

Titel

#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>

Het bestand CFractalsOnRingBuffer.mqh moet worden geplaatst in de IncOnRingBuffer map die je moet aanmaken in MQL5\Include\. Twee voorbeeldbestanden die de klasse gebruiken, zijn bijgevoegd. Het bestand met de klasse van de ringbuffer moet ook in deze map staan.

Class methoden

//--- initialisatie methode:
bool Init( // retourneert false bij fout, true bij succes
    int bars_right = 2, // aantal bars rechts van het extremum
    int bars_left = 2, // aantal bars links van het extremum
    int size_buffer = 256, // grootte van de ringbuffer
    bool as_series = false // true indien tijdreeks, anders false
);
//--- methode voor berekening op basis van tijdreeks of indicatorbuffers:
int MainOnArray( // retourneert aantal verwerkte elementen
    const int rates_total, // grootte van de arrays
    const int prev_calculated, // verwerkte elementen van vorige oproep
    const double& high[], // array van de maximum waarden
    const double& low[] // array van de minimum waarden
);
//--- methode voor berekening van fractal op basis van aparte serie elementen van de array high[]
double MainOnHigh( // retourneert waarde van opwaartse fractal voor index-bars_right element
    const int rates_total, // 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, // huidige bar maximum
    const int index // huidige element (bar) index
);
//--- methode voor berekening van neerwaartse fractal op basis van aparte serie elementen van de array low[]
double MainOnLow( // retourneert neerwaartse fractal waarde voor index-bars_right element
    const int rates_total, // 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 low, // huidige bar minimum
    const int index // huidige element (bar) index
);
//--- methoden voor toegang tot de data:
int BarsRequired(); // retourneert benodigde aantal bars om de indicator te tekenen
string Name(); // retourneert de naam van de indicator
string NameUpper(); // retourneert de naam van opwaartse fractals
string NameLower(); // retourneert de naam van neerwaartse fractals
int BarsRight(); // retourneert aantal bars rechts van het extremum
int BarsLeft(); // retourneert aantal bars links van het extremum
int Size(); // retourneert grootte van de ringbuffer

De berekende data van de indicator kan uit de ringbuffers worden gehaald, net als uit een gewone array. Bijvoorbeeld:

//--- de klasse met de methoden van berekening van de Fractals indicator:
#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>
CFractalsOnRingBuffer fractals;

...

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

...

//--- gebruik de data uit de ringbuffers "fractals",
// bijvoorbeeld, kopieer de data naar de indicatorbuffer:
    for(int i=start; i < rates_total - BarsRight && !IsStopped(); i++)
    {
        UpperBuffer[i] = fractals.upper[rates_total - 1 - i]; // opwaartse fractals
        LowerBuffer[i] = fractals.lower[rates_total - 1 - i]; // neerwaartse fractals
    }

...

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

Let op: De indexering in de ringbuffers is hetzelfde als in de tijdreeks.

Voorbeelden

  1. De indicator berekent de Test_Fractals_OnArrayRB.mq5 op basis van de prijs tijdreeks. Het gebruik van de MainOnArray() methode wordt gedemonstreerd.
  2. Het bestand Test_Fractals_OnValueRB.mq5 demonstreert het gebruik van de MainOnValue() methode. Eerst wordt de Fractals indicator berekend en getekend. Vervolgens wordt er op basis van deze indicator nog een Fractal getekend met de ringbuffer.


Het resultaat van de werking van de Test_Fractals_OnArrayRB.mq5 met de grootte van de ringbuffer van 256 elementen



Het resultaat van de werking van de Test_Fractals_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