Schau, wie man Roboter kostenlos herunterladen kann

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

Konstantin Gruzdev | German English Русский 中文 Español 日本語 Português

Ansichten:
400
Rating:
Stimmen: 37
Veröffentlicht:
2016.05.13 13:44
\MQL5\Include\IncOnRingBuffer\

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:

 

Die Übersetzung aus dem Russischen wurde durch die MetaQuotes Software Corp. ausgeführt
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.