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
Die Klasse zum Zeichnen des DEMAs mit dem Ringbuffer - Indikator für den MetaTrader 5
- Ansichten:
- 765
- Rating:
- Veröffentlicht:
- 2016.05.16 07:37
- 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 Klasse CDEMAOnRingBuffer dient zur Berechnung des technischen Indikators doppelt exponentieller gleitender Durchschnitt (Double Exponential Moving Average, DEMA) mit dem Algorithmus des Ringbuffers.
Deklaration
class CDEMAOnRingBuffer : public CArrayRing
Titel
#include <IncOnRingBuffer\CDEMAnRingBuffer.mqh>
Die Datei CDEMAOnRingBuffer.mqh muss im Verzeichnis IncOnRingBuffer kopiert werden, der ggf. in MQL5\Include\ erstellt werden muss. Zwei Dateien mit Anwendungsbeispielen dieser Klasse sind beigefügt. Die Dateien mit den Klassen des Ringbuffers und Gleitenden Durchschnitts müssen auch in diesen Ordner liegen.
Klassen-Methoden
//--- Initialisierungs-Methode: bool Init( // false im Fehlerfall, true im Erfolgsfall int period = 12, // die DEMA Periodenlänge ENUM_MA_METHOD method = MODE_EMA, // Glättungsmethode int size_buffer = 256, // Größe des Ringbuffers bool as_series = false // true, wenn Zeitreihe, sonst false ); //--- Methode der Berechnung mittels Zeitreihe oder Indikatorpuffer: int MainOnArray( // gibt die Anzahl der berechneten Elemente zurück const int rates_total, // Größe des Arrays const int prev_calculated, // Anzahl der zuletzt berechneten Elemente const double& price[], // Array für die Berechnung ); //--- Methode der Berechnung auf Basis einzelner Elemente double MainOnValue( // liefert den DEMA-Wert einer Bar const int rates_total, // Größe des Arrays const int prev_calculated, // berechnete Werte des Arrays const int begin, // Startpunkt der Berechnung const double value, // Wert an der Stelle der Bar const int index // Index der Bar );
//--- Methoden des Datenzugriffs: int BarsRequired(); // Liefert die notwendige Anzahl der Bars des Indikators string Name(); // Liefert den Namen des Indikators int Period(); // Liefert die Periodenlänge des Charts int Size(); // Liefert die Größe des Ringbuffers double MA(int index); // Liefert dem Wert des gleitenden Durchschnitts, Indizierung ist wie bei einer Zeitreihe
Die berechneten Daten des Indikators erhalten Sie aus dem Ringbuffer wie aus einem Array. Zum Beispiel:
//--- Die Klasse mit den Methoden zur Berechnung des DEMA-Indikators: #include <IncOnRingBuffer\CDEMAOnRingBuffer.mqh> CDEMAOnRingBuffer dema; ... //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // Größe des Preisarrays price[] const int prev_calculated, // Anzahl bereits berechneter Elemente const int begin, // Startpunkt der zu berechnenden Daten const double& price[]) // Kalkulationsarray der Preise { //--- Berechnung des Indikators basierend auf einer Zeitreihe: dema.MainOnArray(rates_total,prev_calculated,price); ... //--- Verwendung der Daten aus dem Ringbuffer des "dema", // zum Beispiel, kopieren Sie die Daten in den Indikator-Buffer: for(int i=start;i<rates_total && !IsStopped();i++) DEMA_Buffer[i] = dema[rates_total-1-i]; // die DEMA Indikatorlinie ... //--- Rückgabe des neuen Wertes für prev_calculated für den nächsten Aufruf: return(rates_total); }
Für die Berechnung des DEMA wird auch der gleitende Durchschnitt mit den gleichen Parametern berechnet. Wir erhalten diese Daten des MA aus dessen Ringbuffer mit MA(int index):
//--- Verwendung der Daten aus dem Ringbuffer, // zum Beispiel, kopieren Sie die Daten in den Indikator-Buffer: for(int i=start;i<rates_total && !IsStopped();i++) MA_Buffer[i] = dema.MA(rates_total-1-i); // die Linie des gleitenden Durchschnitts
Bitte beachten Sie, die Indizierung des Ringbuffers ist genau gleich der von Zeitreihen.
Beispiele
- Datei Test_DEMA_OnArrayRB.mq5 - der Indikator rechnet auf der Basis von Preis-Zeitreihen. Es zeigt die Verwendung der Methode MainOnArray()
- Datei Test_DEMA_OnValueRB.mq5 zeigt die Verwendung der Methode MainOnValue(). Zunächst wird der Indikator DEMA berechnet und gezeichnet. Dann wird auf dieser Grundlage des Ringbuffers des Indikators der nächste DEMA-Wert berechnet wird.
Das Ergebnis der Test_DEMA_OnArrayRB.mq5 mit der Größe des Ringbuffers von 256 Elementen Für das Programm wurden Elemente von MetaQuotes Software Corp., Integer und GODZILLA verwendet.
Das Ergebnis der Test_DEMA_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/1416
Einfacher Trendindikator in NRTR-Form
Exp_StepSto_v1Ein Expert Advisor auf Basis der Signale des StepSto_v1 Stochastik Oszillators
Die Klasse dient zur Berechnung des technischen Indikators dreifacher exponentieller gleitender Durchschnitt (Triple Exponential Moving Average, TEMA) mit dem Algorithmus des Ringbuffers.
ytg_MA_TFGleitender Durchschnitt mit der Wahl des TF.