Fractals Berekenen met de Ringbuffer in MetaTrader 5

Mike 2013.01.18 22:00 34 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 succesint bars_right = 2, // aantal bars rechts van het extremumint bars_left = 2, // aantal bars links van het extremumint size_buffer = 256, // grootte van de ringbufferbool as_series = false// true indien tijdreeks, anders false
);
//--- methode voor berekening op basis van tijdreeks of indicatorbuffers:int MainOnArray( // retourneert aantal verwerkte elementenconstint rates_total, // grootte van de arraysconstint prev_calculated, // verwerkte elementen van vorige oproepconstdouble& high[], // array van de maximum waardenconstdouble& 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 elementconstint rates_total, // grootte van de arrayconstint prev_calculated, // verwerkte elementen van de arrayconstint begin, // waar de significante data van de array begintconstdouble high, // huidige bar maximumconstint 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 elementconstint rates_total, // grootte van de arrayconstint prev_calculated, // verwerkte elementen van de arrayconstint begin, // waar de significante data van de array begintconstdouble low, // huidige bar minimumconstint index // huidige element (bar) index
);
//--- methoden voor toegang tot de data:int BarsRequired(); // retourneert benodigde aantal bars om de indicator te tekenenstring Name(); // retourneert de naam van de indicatorstring NameUpper(); // retourneert de naam van opwaartse fractalsstring NameLower(); // retourneert de naam van neerwaartse fractalsint BarsRight(); // retourneert aantal bars rechts van het extremumint BarsLeft(); // retourneert aantal bars links van het extremumint 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 |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
    constint prev_calculated,
    constdatetime& time[],
    constdouble& open[],
    constdouble& high[],
    constdouble& low[],
    constdouble& close[],
    constlong& tick_volume[],
    constlong& volume[],
    constint& 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