und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5
Klasse zum Zeichnen des MFI unter Verwendung des Ringbuffers - Indikator für den MetaTrader 5
- Ansichten:
- 718
- Rating:
- Veröffentlicht:
- 2016.05.13 14:20
- Aktualisiert:
- 2016.11.22 07:34
- Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Beschreibung
Die CMFIOnRingBuffer Klasse wurde zur Berechnung des technischen Indikators Money Flow Index (Money Flow Index, MFI) unter Verwendung des Algorithmus des Ringbuffers entwickelt.
Deklaration
class CMFIOnRingBuffer : public CArrayRing
Titel
#include <IncOnRingBuffer\CMFIOnRingBuffer.mqh>
Die Datei der CMFIOnRingBuffer.mqh Klasse muss in den IncOnRingBuffer Ordner kopiert werden, der in MQL5\Include\ erzeugt werden muss. Zwei Dateien mit Beispielen die von dieser Klasse verwendet werden wurden dieser Beschreibung angehängt. Die Datei mit der Klasse des Ringbuffers und die Klasse des Moving Average müssen sich auch in diesem Ordner befinden.
Klassenmethoden
//--- initialization method: bool Init( // gibt bei Fehler false zurück, // bei Erfolg - true int period = 14, // Periode des MFI ENUM_MA_METHOD method = MODE_SMA, // Glättungsmethode ENUM_APPLIED_PRICE applied_price = PRICE_TYPICAL, // Preiskonstante auf der die Indikator Berechnung durchgeführt wird ENUM_APPLIED_VOLUME applied_volume = VOLUME_TICK, // Volumen für die Berechnung int size_buffer = 256, // Größe des Ringbuffers bool as_series = false // true bei Zeitreihen, ansonsten false ); //--- Methode zur Berechnung basierend auf einer Zeitreihe oder einem Indikatorenbuffer: int MainOnArray( // gibt die Anzahl der verarbeiteten Element zurück const int rates_total, // die Größe des Arrays const int prev_calculated, // verabeitete Elemente im vorherigen Aufruf const double& open[], // Eröffnungspreise const double& high[], // Hochpreise const double& low[], // Tiefpreises const double& close[], // Schlusspreise const long& tick_volume[], // Tickvolumen const long& volume[]); // Aktienvolumen ); //--- Methode zur Berechnung auf Basis von einzelnen Reihenelementen des Arrays double MainOnValue( // gibt den MFI Wert für das Mengenelement (Balken) zurück const int rates_total, // die Größe des Arrays const int prev_calculated, // verarbeitete Element des Arrays const int begin, // von wo die signifikanten Daten des Arrays beginnen const double open, // Eröffnungspreis des Balken const double high, // Höchstpreis des Balken const double low, // Tiefpreis des Balken const double close, // Schlusspreis des Balken const long tick_volume, // Tickvolumen des Balken const long volume, // Aktienvolumen des Balken const int index // Element (Balken) Index ); //--- Zugriffsmethoden auf die Daten: int BarsRequired(); // Gibt notwendige Zahl von Balken zurück, die zum Zeichnen des Indikators benötigt werden string Name(); // Gibt den Namen des Indikators zurück int Period(); // Gibt die Periode zurück string Method(); // Gibt die Methode in Form einer Textzeile zurück ENUM_APPLIED_PRICE Price(); // Gibt den Typ des zu verwendenden Preises zurück ENUM_APPLIED_VOLUME Volume(); // Gibt den Typ des zu verwendenden Volumens zurück int Size(); // Gibt die Größe des Ringbuffers zurück
Die berechneten Daten des Indikators vom Ringbuffer zu erhalten ist wie bei gewöhnlichen Arrays möglich. Zum Beispiel:
//--- Klasse mit den Methoden für die Berechnung des MFI Indikators: #include <IncOnRingBuffer\CMFIOnRingBuffer.mqh> CMFIOnRingBuffer mfi; ... //+------------------------------------------------------------------+ //| Benutzerdefinierte Indikatoriterationsfunktion | //+------------------------------------------------------------------+ 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[]) { //--- Berechnung des Indikators basierend auf Preiszeitreihen: mfi.MainOnArray(rates_total,prev_calculated,open,high,low,close,tick_volume,volume); ... //--- verwende Daten des "mfi" Ringbuffers, // zum Beispiel, kopiere Daten in den Indikatorbuffer: for(int i=start;i<rates_total && !IsStopped();i++) MFI_Buffer[i] = mfi[rates_total-1-i]; // Indikatorlinie ... //--- Rückgabewert von prev_calculated für nächsten Aufruf: return(rates_total); }
Beachten Sie, dass die Indexierung für den Ringbuffer die gleiche ist, wie für Zeitreihen.
Beispiele
- Die Datei Test_MFI_OnArrayRB.mq5 berechnet den Indikator auf Basis der Preiszeitreihe. Die Anwendung der MainOnArray() Methode wird demonstriert
- Die Test_MFI_OnValueRB.mq5 Datei demonstriert die Verwendung der MainOnValue() Methode. Zuerst wird der MFI Indikator berechnet und gezeichnet. Dann wird auf Basis des Ringbuffer dieses Indikators ein weiterer MFI -Indikator gezeichnet.
Das Ergebnis der Arbeit des Test_MFI_OnArrayRB.mq5 mit der Größe des Ringbuffers von 256 Elementen Bei der Programmierung wurden die Entwicklungen der MetaQuotes Software Corp., Integer und GODZILLA verwendet.
Das Ergebnis der Arbeit des Test_MFI_OnValueRB.mq5 mit der Größe des Ringbuffers von 256 Elementen
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/1395
Der typical semaphore Trend Indikator.
ytg_Fractals_PriceIndikator für fraktale Preislevel
Diese Klasse wurde zur Berechnung des technischen Indikators Momentum (Momentum) mit Hilfe des Algorithmus des Ringbuffers entworfen.
Breakout Bars Trend EAExpert Advisor basierend auf dem Breakout Bars Trend v2 Indikator. Abhängig von den Einstellungen wird der Einstieg bei einer Trendumkehr ausgeüfhrt, d.h. nach Überspringen der gesetzten Anzahl von Fehlsignalen.