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 um einen Ringbuffer zu erstellen - Bibliothek für den MetaTrader 5
- Ansichten:
- 1002
- Rating:
- Veröffentlicht:
- 2016.05.13 13:44
- Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Beschreibung
Ein Ringbuffer ist eine Organisationsform, um Daten zu speichern. Üblicherweise präsentiert er ein Array von endlicher Länge bei dem das älteste Element durch die neuesten Daten ersetzt wird. Es gibt somit immer Zugriff auf eine bestimmte Anzahl der letzten Daten. Vor allem verwendet für asynchrones Lesen und Schreiben von Stromdaten. Für weitere Details siehe hier.
Wenn man Expert Advisors und Indikatoren schreibt, braucht man oft nicht die berechneten Werte für alle Balken. Es reicht aus, die letzten Daten, zum Beispiel für 100 Balken vorrätig zu halten. Dafür eignet sich der Ringbuffer. Offensichtliche Vorteile:
- Berechnungen werden schneller
- Speicherökonomie
- einfach zu verwenden, Sie müssen sich nicht um die Arraygrenzen kümmern.
сlass CArrayRing
Titel
#include <IncOnRingBuffer\CArrayRing.mqh>
Die Datei der CArrayRing.mqh Klasse muss in den IncOnRingBuffer Ordner kopiert werden, der in MQL5\Include\ erzeugt werden muss. Untenstehende Links geben Beispiele für die Verwendung dieser Klasse.
Klassenmethoden
//--- die Buffer-Initialisierungsmethode: bool Init( // gibt bei Fehler false zurück, bei Erfolg - true int size, // Ringbuffergröße double volue=EMPTY_VALUE // Bedeutung für leere Positionen des Buffers ); //--- die Methode zum Hinzufügen von neuen Elementen zum Buffer: void Add( const double element // hinzzufügender Elementwert ); //--- diese Methode überschreibt jenen Elementwert mit dem gegebenen Index: bool Update( // gibt bei Fehler false zurück, bei Erfolg - true const double element, // neuer Wert des Elements const int index=0 // Elementindex ); //--- diese Methode gibt den Elementwert des gegebenen Index zurück: double At( // zurückgegebener Elementwert const int index // Elementindex ) const; //--- diese Methode gibt den Wert des Elements zurück, das zuletzt in den Buffer geschrieben wurde: double Last() const; //--- diese Methode überschreibt den letzten Elementwert im Buffer: void Last( const double element // neuer Wert des Elements ); //--- diese Methode gibt die Größe des Ringbuffers zurück: int Size(); //--- diese Methode ändert die Größe des Ringbuffers: bool Resize( const int size // Neue Größe );
Hinweis:
- wenn die Buffergröße vermindert wird, wird wie gewöhnlich nicht das letzte, sondern das älteste Element verworfen
- in der gegebenen Realisierung des Ringbuffers wird die Indexierung wir in Zeitreihen akzeptiert, d.h. das Gegenteil wie üblich
Beispiele
Zur Zeit der Veröffentlichung gibt es drei Beispiele zur Anwendung des Ringbuffers:
- Klasse zum Zeichnen von gleitenden Durchschnitten
- Klasse zum Zeichnen der Average True Range
- Klasse zum Zeichnen des Average Directional Movement Index
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/1340
Das Zeichnen dieses gleitenden Durchschnitts basiert auft der Demarks Methode "Daily Range Projections".
Exp_ColorStochNRHandelssystem, basierend auf den Signalen des ColorStochNR Oszillators
Der Indikator zeigt die Ausbruchslinie
Klasse zum Zeichnen des gleitenden Durchschnitts unter Verwendung es RingbuffersDiese Klasse wurde zur Berechnung des Gleitenden Durchschnitt (Moving Average) mit Hilfe des Algorithmus des Ringbuffers entworfen.