Beschrijving
De COsMAOnRingBuffer klasse is ontworpen om de technische indicator Moving Average of Oscillator (OsMA) te berekenen met behulp van het algoritme van de ringbuffer.
Declaratie
class COsMAOnRingBuffer : public CArrayRing
Titel
#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>Het bestand van de COsMAOnRingBuffer.mqh klasse moet in de map IncOnRingBuffer worden geplaatst, die moet worden aangemaakt in MQL5\Include\. Twee bestanden met voorbeelden die door de klasse uit deze map worden gebruikt, zijn aan de beschrijving toegevoegd. Bestanden met de ringbuffer, de MACD en Moving Average klassen moeten ook in deze map staan.
Klasse methoden
//--- initialisatie methode: bool Init( // als er een fout is, retourneert het false, als het succesvol is - true int fast_period = 12, // de periode van snelle Moving Average smoothing int slow_period = 26, // de periode van langzame Moving Average smoothing int signal_period = 9, // de periode van signal Moving Average smoothing ENUM_MA_METHOD fast_method = MODE_EMA, // de methode van snelle Moving Average smoothing ENUM_MA_METHOD slow_method = MODE_EMA, // de methode van langzame Moving Average smoothing ENUM_MA_METHOD signal_method = MODE_SMA, // de methode van signal Moving Average smoothing int size_buffer = 256, // de grootte van de ringbuffer, het aantal opgeslagen gegevens bool as_series = false // true, als het een tijdserie is, false als het een gebruikelijke indexering van de invoergegevens is );
//--- de methode van berekening gebaseerd op een tijdserie of indicatorbuffer: int MainOnArray( // retourneert het aantal verwerkte elementen const int rates_total, // de grootte van de array array[] const int prev_calculated, // verwerkte elementen bij de vorige aanroep const double &array[] // de array van de invoerwaarden );
//--- de methode van berekening gebaseerd op de afzonderlijke serie-elementen van de array double MainOnValue( // retourneert de OsMA waarde voor het set 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 gegevens van de array beginnen const double value, // significante elementen van de array const int index // het elementindex );
//--- de methoden om toegang te krijgen tot gegevens: int BarsRequired(); // Retourneert het benodigde aantal bars voor het tekenen van de indicator string Name() // Retourneert de naam van de indicator string FastMethod() // Retourneert de methode van smoothing van de snelle lijn in de vorm van de tekstlijn string SlowMethod() // Retourneert de methode van smoothing van de langzame lijn in de vorm van de tekstlijn string SignalMethod() // Retourneert de methode van smoothing van de signaallijn in de vorm van de tekstlijn int FastPeriod() // Retourneert de periode van smoothing van de snelle lijn int SlowPeriod() // Retourneert de periode van smoothing van de langzame lijn int SignalPeriod() // Retourneert de periode van smoothing van de signaallijn int Size(); // Retourneert de grootte van de ringbuffer
Om de berekende gegevens van de indicator uit de ringbuffer te halen, is het mogelijk zoals uit een gewone array. Bijvoorbeeld:
//--- de klasse met de methoden van de indicatorberekening OsMA: #include <IncOnRingBuffer\COsMAOnRingBuffer.mqh> COsMAOnRingBuffer osma; ... //+------------------------------------------------------------------+ //| Aangepaste indicator iteratiefunctie | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- de berekening van de indicator op basis van een prijs tijdserie: osma.MainOnArray(rates_total,prev_calculated,price); ... //--- gebruik de gegevens uit de "osma" ringbuffers, // kopieer de gegevens in de indicatorbuffer: for(int i=start;i<rates_total;i++) OsMABuffer[i]=osma[rates_total-1-i]; // indicator histogram //--- retourneer waarde van prev_calculated voor de volgende aanroep: return(rates_total); }
Let op dat de indexering in de ringbuffer hetzelfde is als in de tijdserie.
Voorbeelden
- Het
Test_OsMA_OnArrayRB.mq5bestand berekent de indicator op basis van prijs tijdseries. De toepassing van deMainOnArray()methode wordt gedemonstreerd. - Het
Test_OsMA_OnValueRB.mq5bestand demonstreert het gebruik van deMainOnValue()methode. Eerst wordt de OsMA indicator berekend en getekend. Daarna wordt op basis van deze ringbuffer van deze indicator nog een OsMA indicator getekend.

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

Het resultaat van het werk van de Test_OsMA_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.
Reactie 0