Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Telegram!
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
Indikatoren

Klasse zum Zeichnen des OBV unter Verwendung des Ringbuffers - Indikator für den MetaTrader 5

Ansichten:
752
Rating:
(21)
Veröffentlicht:
2016.05.13 14:22
Aktualisiert:
2016.11.22 07:34
\MQL5\Indicators\OnRingBuffer\ \MQL5\Include\IncOnRingBuffer\
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Beschreibung

Die COBVOnRingBuffer Klasse wurde zur Berechnung des technischen Indikators On Balance Volume (On Balance Volume, OBV) unter Verwendung des Algorithmus des Ringbuffers entworfen.  

Deklaration

class COBVOnRingBuffer : public CArrayRing

Titel

#include <IncOnRingBuffer\COBVnRingBuffer.mqh>

Die Datei der COBVOnRingBuffer.mqh Klasse muss in den IncOnRingBuffer Ordner kopiert werden, der in MQL5\Include\ erzeugt werden muss. Zwei Dateien mit Beispielen die von dieser Klasse verwendet werden wurden dieser Beschreibung angehängt. Die Datei mit der Klasse vom Ringbuffer muss auch in diesem Ordner sein.

Klassenmethoden

//--- initialization method:
bool Init(                                        // gibt bei Fehler false zurück, bei Erfolg - true
   int                 period      = 0,           // die OBV Periode
   int                 size_buffer = 256,         // Größe des Ringbuffers
   bool                as_series   = false        //true bei Zeitreihen, ansonsten false
   );

Die OBV Periode wird verwendet wie bei IncADOnArray: wenn der Wert 0 ist (Standard), arbeitet der Indikator wie der im Terminal integrierte - er wird für alle Balken des Charts berechnet. Für den Fall, dass ein anderer positiver Wert angegeben wurde, wird diese Anzahl Anzahl von Balken zur Berechnung des Wertes eines jeden Balkens verwendet (Prinzip des gleitenden Durchschnitts). 

//--- Methode zur Berechnung basierend auf einer Zeitreihe oder einem Indikatorenbuffer:          
int MainOnArray(                  // gibt die Anzahl der verarbeiteten Element zurück  
   const int     rates_total,     // die Größe des Arrays
   const int     prev_calculated, // verabeitete Elemente im vorherigen Aufruf
   const double& price[],         // price
   const long&   volume[]);       // Volumen
   );
//--- Methode zur Berechnung basierend auf separaten Reihenelementen des Arrays           
double MainOnValue(              // returns the OBV value for the set element (Balken)
   const int    rates_total,     // die Größe des Arrays
   const int    prev_calculated, // verarbeitete Element des Arrays
   const int    begin,           // von wo die signifikanten Daten des Arrays beginnen
   const double price,           // Preis
   const long   volume,          // Volumen
   const int    index            // Element (Balken) Index 
   );
//--- Zugriffsmethoden auf die Daten:
int                 BarsRequired(); // Gibt notwendige Zahl von Balken zurück, die zum Zeichnen des Indikators benötigt werden
string              Name();         // Gibt den Namen des Indikators zurück
int                 Period();       // Gibt die Periode zurück
int                 Size();         // Gibt die Größe des Ringbuffers zurück

Die berechneten Daten des Indikators vom Ringbuffer zu erhalten ist wie bei gewöhnlichen Arrays möglich. Zum Beispiel:

//--- Klasse mit den Methoden für die Berechnung des OBV Indikators:
#include <IncOnRingBuffer\COBVOnRingBuffer.mqh>
COBVOnRingBuffer obv;

...

//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikatoriterationsfunktion                   |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
//--- Berechnung des Indikators basierend auf Preiszeitreihen:
      obv.MainOnArray(rates_total,prev_calculated,close,tick_volume);

...

//--- verwende die Daten des "obv" Buffers,
//    zum Beispiel, kopiere Daten in den Indikatorbuffer:
   for(int i=start;i<rates_total && !IsStopped();i++)
      OBV_Buffer[i] = obv[rates_total-1-i]; // Indikatorlinie

...

//--- Rückgabewert von prev_calculated für nächsten Aufruf:
   return(rates_total);
  }

Beachten Sie, dass die Indexierung für den Ringbuffer die gleiche ist, wie für Zeitreihen.

Beispiele

  1. Der Indikator berechnet die Test_OBV_OnArrayRB.mq5 Datei auf Basis der Preiszeitreihe. Die Anwendung der MainOnArray() Methode wird demonstriert
  2. Die Test_OBV_OnValueRB.mq5 Datei demonstriert die Verwendung der MainOnValue() Methode. Zuerst wird der OBV Indikator berechnet und gezeichnet. Dann wird auf Basis des Ringbuffers des Indikators der OBV gezeichnet. 


Das Ergebnis der Arbeit des Test_OBV_OnArrayRB.mq5 mit der Größe des Ringbuffers von 256 Elementen



Das Ergebnis der Arbeit des Test_OBV_OnValueRB.mq5 mit der Größe des Ringbuffers von 256 Elementen

 

Bei der Programmierung wurden die Entwicklungen der MetaQuotes Software Corp.Integer und GODZILLA verwendet.

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

Der 4-color АО Indikator Der 4-color АО Indikator

Der 4-color АО Indikator.

Breakout Bars Trend EA Breakout Bars Trend EA

Expert Advisor basierend auf dem Breakout Bars Trend v2 Indikator. Abhängig von den Einstellungen wird der Einstieg bei einer Trendumkehr ausgeüfhrt, d.h. nach Überspringen der gesetzten Anzahl von Fehlsignalen.

StepSto_v1 StepSto_v1

Der Trendindikator. Die Indikatorlinie auf Level 50 kann als Punkt zur Bestimmung des Trends dienen

SuperSR6 SuperSR6

Indikator zum Zeichnen möglicher Unterstützungs-/Widerstandslinien auf Fraktale