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

Vereinfachte Klasse des CArrayRing256 Ringbuffers - Bibliothek für den MetaTrader 5
- Ansichten:
- 724
- Rating:
- Veröffentlicht:
- 2016.05.13 14:13
-
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Beschreibung
Diese Klasse ist die vereinfachte Version der CArrayRing Klasse: sie hat eine vorgegebene fixe Größe von 256 Elementen, sie ist schneller und erlaubt Minizeitreihen, Minibuffer, kurze Buffer zu organisieren um Datenstörme sofort innerhalb des Expert Advisors oder Indikators zu speichern.
Vereinfachung basierend auf der Eigenschaft der uchar-Variable, die im Arrayindex verwendet wird. Zum Beispiel im Code
double array[UCHAR_MAX+1]; // Ringbufferdaten uchar index=0; // Bufferelementindex while(!IsStopped()) { array[++index]; // gehe zum nächsten Element des Buffers ... }
Der Arrayindex nimmt immer Werte von 0 bis 255 ein und geht nie über die Grenzen der Arraydimension hinaus. Er erlaubt es, alle Prüfungen von den Methoden zu entfernen, verbunden mit einem möglichen Ausstieg aus dem Index über die Arraygrenzen hinaus, indem die Methoden selbst vereinfacht wurden und die Performance verbessert wurde. Aber die Buffergröße ist immer konstant und hat die Größe von 256 Elementen. Für viele Aufgaben ist das eine akzeptable Alternative zur universellen Klasse CArrayRing im Tausch gegen eine höhere Verarbeitungsgeschwindigkeit.
сlass CArrayRing256
Titel
#include <IncOnRingBuffer\CArrayRing256.mqh>
Die Datei der CArrayRing256.mqh Klasse sollte in den Ordner IncOnRingBuffer der in MQL5\Include\ erstellt werden muss kopiert werden.
Klassenmethoden
//--- Buffer-Initialisierungsmethode: void Init( double volue=EMPTY_VALUE // Wert für leere Positionen des Buffers ); //--- Methode zum Hinzufügen von neuen Elementen zum Buffer: void Add( const double element // hinzzufügender Elementwert ); //--- diese Methode schreibt den Elementwert des gegebenen Index zurück: void Update( // gibt bei Fehler false zurück, bei Erfolg - true const double element, // neuer Wert des Elements const uchar index=0 // der Elementindex ); //--- diese Methode gibt den Elementwert des gegebenen Index zurück: double At( // gibt den Wert für das Mengenelement zurück const uchar index // der Elementindex ) const; //--- Methode gibt den Wert des Elements zurück, das zuletzt in den Buffer geschrieben wurde: double Last() const; //--- Methode überschreibt den letzten Elementwert im Buffer: void Last( const double element // neuer Wert des Elements ); //--- Methode gibt die Größe des Ringbuffers zurück: int Size();
Hinweis:
- Die Größe des Ringbuffers ist immer konstant gleich 256 Elementen
- in der gegebenen Realisierung des Ringbuffers wird die Indexierung wir in Zeitreihen akzeptiert, d.h. das Gegenteil wie üblich
Beispiele
Verwendung dieser Klasse ist ähnlich wie bei CArrayRing . Es gibt ein paar Unterschiede:
- Die Init() Methode wird zur Initialisierung des Buffers mit dem definierten Wert verwendet;
- Die Resize() Methode gibt es nicht, da die Größe des Buffers immer konstant ist.
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/1379

Die zweite (bearbeitete und hinzugefügte) Version des alternativen Indikators für die Trenddefinition basierend auf dem Ausbruch von Balken und Entfernung zu den Extrema. Die Ausbruchslevel und Größe des vorherigen Trends wurden hinzugefügt.

Diese Klasse wurde zur Berechnung des technischen Indikators Adaptive Moving Average (Adaptive Moving Average, AMA) mit Hilfe des Algorithmus des Ringbuffers entworfen.

Die CSV Datei wurde geschrieben um Wirtschaftnachrichten zu schreiben, aber es gab ein Problem, bei dem das Terminal nicht zwischen Zeilen unterschied, genauer gesagt deren Nummer wenn mit der CSV-Datei gearbeitet wurde. Daher habe ich beschlossen meine Lösung des Problems zu teilen.

Der X-bars Fractals Indikator erlaubt die Einstellung der Anzahl von Balken, die sich links und rechts vom Fraktal befinden. Gut geeignet sowohl für lokale, als auch für globale Extrema