Beschrijving
De CMFIOnRingBuffer klasse is ontwikkeld om de technische indicator Money Flow Index (MFI) te berekenen met behulp van het algoritme van de ringbuffer.
Declaratie
class CMFIOnRingBuffer : public CArrayRing
Titel
#include <IncOnRingBuffer\CMFIOnRingBuffer.mqh>Het bestand CMFIOnRingBuffer.mqh moet in de map IncOnRingBuffer geplaatst worden die je moet aanmaken in MQL5\Include\. Twee bestanden met voorbeelden die door de klasse gebruikt worden, zijn bijgevoegd in de beschrijving. Het bestand met de klasse van de ringbuffer en de klasse van de Moving Average moeten ook in deze map staan.
Klasse-methoden
//--- initialisatie methode: bool Init(// als er een fout is, retourneert het false, // als succesvol - true int period = 14, // de periode van de MFI ENUM_MA_METHOD method = MODE_SMA, // de methode van smoothen ENUM_APPLIED_PRICE applied_price = PRICE_TYPICAL, // prijs gebruikt voor berekening ENUM_APPLIED_VOLUME applied_volume = VOLUME_TICK, // volume gebruikt voor berekening int size_buffer = 256, // de grootte van de ringbuffer bool as_series = false // true, als tijdreeks, anders - false );
//--- de methode van berekening gebaseerd op de 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 oproep const double& open[], // open prijzen const double& high[], // de maximale prijzen const double& low[], // de minimale prijzen const double& close[], // sluitprijzen const long& tick_volume[], // tick volume const long& volume[]); // stock volume );
//--- methode van berekening op basis van de afzonderlijke serie-elementen van de array double MainOnValue(// retourneert de MFI-waarde voor het ingestelde element (bar) const int rates_total, // de grootte van de array const int prev_calculated, // verwerkte elementen van de array const int begin, // van waar de significante data van de array begint const double open, // prijs van bar opening const double high, // de maximale prijs van de bar const double low, // de minimale prijs van de bar const double close, // prijs van bar sluiting const long tick_volume, // tick volume van de bar const long volume, // stock volume van de bar const int index // de element (bar) index );
//--- de methoden van toegang tot de data: int BarsRequired(); // Retourneert het benodigde aantal bars om de indicator te tekenen string Name(); // Retourneert de naam van de indicator int Period(); // Retourneert de periode string Method(); // Retourneert de methode in de vorm van de tekstlijn ENUM_APPLIED_PRICE Price(); // Retourneert het type van de gebruikte prijs ENUM_APPLIED_VOLUME Volume(); // Retourneert het type van het gebruikte volume int Size(); // Retourneert de grootte van de ringbuffer
Om de berekende data van de indicator uit de ringbuffer te verkrijgen, kan dit op dezelfde manier als vanuit een gewone array. Bijvoorbeeld:
//--- de klasse met de methoden van berekening van de MFI indicator: #include <IncOnRingBuffer\CMFIOnRingBuffer.mqh> CMFIOnRingBuffer mfi; ... //+------------------------------------------------------------------+ //| 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 tijdreeks: mfi.MainOnArray(rates_total,prev_calculated,open,high,low,close,tick_volume,volume); ... //--- gebruik gegevens van de ringbuffers "mfi", // bijvoorbeeld, kopieer gegevens in de indicatorbuffer: for(int i=start;i<rates_total && !IsStopped();i++) MFI_Buffer[i] = mfi[rates_total-1-i]; // indicatorlijn ... //--- retourneer waarde van prev_calculated voor volgende oproep: return(rates_total); }
Let op dat de indexering in de ringbuffer hetzelfde is als in de tijdreeks.
Voorbeelden
- Het bestand
Test_MFI_OnArrayRB.mq5berekent de indicator op basis van de prijs tijdreeks. De toepassing van deMainOnArray()methode wordt gedemonstreerd. - Het bestand
Test_MFI_OnValueRB.mq5demonstreert het gebruik van deMainOnValue()methode. Eerst wordt de MFI-indicator berekend en getekend. Daarna wordt op basis van deze ringbuffer van deze indicator nog een MFI-indicator getekend.

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

Het resultaat van het werk van de Test_MFI_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
- PCA Synthetics: Automatische Coëfficiëntselectie voor MetaTrader 5
- Efficiëntie Ratio (ER) Berekenen met de CEROnRingBuffer voor MetaTrader 5
- iExposure Indicator: Beheer je Handelsposities Efficiënt met MetaTrader 5
- Efficiënt Grafische Objecten Kopiëren in MetaTrader 5 met ChartObjectsCopyPaste
- Verbeter je Handelsstrategieën met de ColorXADX Indicator voor MetaTrader 5