Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Twitter!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Bibliotheken

Klasse um einen Ringbuffer zu erstellen - Bibliothek für den MetaTrader 5

Ansichten:
1002
Rating:
(41)
Veröffentlicht:
2016.05.13 13:44
\MQL5\Include\IncOnRingBuffer\
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.
Deklaration

с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:

 

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/1340

XMUV XMUV

Das Zeichnen dieses gleitenden Durchschnitts basiert auft der Demarks Methode "Daily Range Projections".

Exp_ColorStochNR Exp_ColorStochNR

Handelssystem, basierend auf den Signalen des ColorStochNR Oszillators

CorrectedAverage CorrectedAverage

Der Indikator zeigt die Ausbruchslinie

Klasse zum Zeichnen des gleitenden Durchschnitts unter Verwendung es Ringbuffers Klasse zum Zeichnen des gleitenden Durchschnitts unter Verwendung es Ringbuffers

Diese Klasse wurde zur Berechnung des Gleitenden Durchschnitt (Moving Average) mit Hilfe des Algorithmus des Ringbuffers entworfen.