English Русский 中文 Español 日本語 Português 한국어 Français Italiano Türkçe
preview
Lernen Sie, wie man ein Handelssystem mit dem OBV entwickelt

Lernen Sie, wie man ein Handelssystem mit dem OBV entwickelt

MetaTrader 5Handel | 10 Juni 2022, 09:54
224 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Einführung

In diesem neuen Artikel werden wir etwas über einen neuen technischen Indikator erfahren, der mit dem Volumen umgehen kann und uns hilft, eine andere Perspektive zu sehen: Wir werden ausführlich über den Indikator On-Balance Volume (OBV) sprechen, um zu versuchen, dieses interessante Thema abzudecken und lernen Sie, wie Sie diesen technischen Indikator zu Ihren Gunsten nutzen können. Die folgenden Themen behandeln diesen Indikator:

  1. OBV-Definition
  2. OBV-Strategie
  3. OBV-Strategieplan
  4. OBV-Handelssystem
  5. Schlussfolgerung

Durch das Thema OBV-Definition lernen wir den OBV-Indikator im Detail kennen: Wir werden identifizieren, was er ist, wie er gemessen wird und wie wir ihn berechnen können, sowie ein Beispiel für seine Berechnung sehen. Danach können wir diesen Indikator gründlich identifizieren und lernen, um zu wissen, wie wir ihn richtig verwenden können. Wir werden lernen, wie man den OBV-Indikator verwendet, indem wir einfache Strategien anwenden, die auf dem Konzept des Indikators basieren – dies wird durch das Thema OBV-Strategie geschehen. Nachdem wir anhand einfacher Strategien identifiziert haben, wie man ihn verwendet, werden wir eine Blaupause für einfache Strategien entwerfen, die uns helfen wird, den MQL5-Code dieser Strategien zu schreiben, da diese Blaupause uns helfen wird, unsere Schritte zur Erstellung des Expert Advisors zu arrangieren und zu organisieren. Nach dem Entwerfen des Strategieplans sind wir bereit, unseren Code in MQL5 zu schreiben, um einen Expert Advisor zu erstellen und ihn in MetaTrader 5 zu verwenden, um unsere Handelsstrategien automatisch und genau mit unseren manuellen Aktionen auszuführen.

Ich muss erwähnen, dass wir in diesem Artikel MQL5 (MetaQuotes Language) verwenden werden, um unsere Expert Advisors zu schreiben und zu erstellen. Dann werden wir sie auf der Handelsplattform MetaTrader 5 ausführen. Wenn Sie mehr über die Installation von MetaTrader 5 erfahren möchten, um MQL5 verwenden zu können, das in MetaTrader 5 integriert ist, können Sie zu diesem Thema meinen vorheriger Artikel MQL5-Code im MetaEditor schreiben lesen. Ich empfehle, das Gelesene selbst anzuwenden, wenn Sie das Gelernte meistern möchten, da die Praxis ein sehr wichtiges Werkzeug ist, um alles zu meistern.

Haftungsausschluss: Alle Informationen werden in der vorliegenden Form nur zu Informationszwecken bereitgestellt und sind nicht für Handelszwecke oder als Ratschläge gedacht. Die Informationen garantieren kein Ergebnis welcher Art auch immer. Wenn Sie sich dafür entscheiden, diese Materialien auf einem Ihrer Handelskonten zu verwenden, tun Sie dies auf eigenes Risiko und Sie sind allein verantwortlich.

Lassen Sie uns nun tief in diesen Artikel einsteigen, um ein neues Tool kennenzulernen und es unserem Toolkit für ein verbessertes Handelserlebnis hinzuzufügen.


OBV-Definition

In diesem Teil werden wir mehr über den On-Balance Volume (OBV)-Indikator erfahren. Aber lassen Sie uns zuerst über das Volumen sprechen, da dieser Indikator einer der Volumenindikatoren ist. Das Volumen ist also die Anzahl der Aktien oder Kontrakte, die während eines bestimmten Zeitraums gehandelt werden. Wenn wir ein hohes Volumen sehen, bedeutet dies, dass ein Instrument aktiv gehandelt wird, und umgekehrt, wenn wir ein niedriges Volumen sehen, bedeutet dies, dass das Instrument nicht aktiv gehandelt wird.

Das Volumenkonzept ist sehr wichtig, denn wenn sich ein Instrument bei hohem Volumen nach oben oder unten bewegt, ist es stärker, als wenn diese Bewegung von einem niedrigen Volumen begleitet wird. Das Volumen muss sich mit dem Trend bewegen, wenn wir einen Aufwärtstrend haben, es ist besser zu sehen, dass das Volumen mit einer Aufwärtsbewegung zunimmt und mit Korrekturen nach unten abnimmt und umgekehrt, wenn wir einen Abwärtstrend haben, wir können feststellen, dass das Volumen mit Abwärtsbewegung zunimmt Bewegungen und nimmt mit Aufwärtskorrekturen ab.

Das Volumen bestätigt auch, ob die Ausbrüche echt oder nur falsche Ausbrüche sind: Wenn die Ausbrüche mit hohem Volumen durchgeführt werden, ist dies ein Signal dafür, dass diese Ausbrüche anhalten werden. 

Wenn diese Beziehung zwischen dem Trend und dem Volumen so weitergeht, wie ich es erwähnt habe, ist dies ein Zeichen der Stärke des aktuellen Trends, und wenn es sich ändert, ist dies ein Zeichen der Schwäche. Wenn Sie nicht wissen, was der Trend ist, können Sie das Thema aus einem früheren Artikel lesen.

Das On-Balance Volume (OBV) wurde von Joseph Granville entwickelt. Er misst den positiven und negativen Volumenstrom. Jetzt müssen wir wissen, wie wir es berechnen können. Die Berechnungsschritte sind wie folgt:

  1. Überprüfen Sie den Schlusskurs – ob er gestiegen oder gefallen ist.
  2. Addieren Sie das Volumen der letzten Tage zum vorherigen OBV-Wert.
  3. Subtrahieren Sie das Volumen der Ausfalltage vom vorherigen OBV-Wert.
  4. Wenn der heutige Schluss gleich dem gestrigen Schluss ist, entspricht der OBV-Wert von heute dem OBV-Wert von gestern.

Lassen Sie uns ein Beispiel dieser Schritte sehen und den OBV-Indikator berechnen. Angenommen, wir haben die folgenden Daten für ein Instrument:

Tag Schlusskurs Volumen
1 54
2 55 10000
3 60 15000
4 65 20000
5 60 10000
6 55 5000
7 60 7000
8 50 7500
9 8. 8000
10 49 5000
11 48 6000
12 47.75. 7500
13 48 9000
14 47.50. 10000
15 48 7000
16 47 7500
17 46 6000
18 44 5000
19 45 15000

So berechnen Sie den OBV-Indikator aus den vorherigen Daten:

Wir werden die Schlusskurse überprüfen und entscheiden, ob sie höher als der vorherige Schlusskurs sind oder nicht. Wenn es höher ist als der vorherige Schlusstag, fügen wir daneben "Positiv" hinzu, um darauf hinzuweisen, dass dieser Tag eine Aufwärtsbewegung aufweist. Wenn er niedriger als der vorherige Schlusstag ist, fügen wir daneben „Negativ“ hinzu, um darauf hinzuweisen, dass dieser Tag eine Abwärtsbewegung aufweist.

OBV-Berechnung 1

Dann addieren wir das Volumen der positiven Tage zum vorherigen OBV-Wert und subtrahieren das Volumen der negativen Tage vom vorherigen OBV-Wert.

OBV-Berechnung 2

Dann haben wir jetzt die OBV-Werte berechnet und es erscheint als Kurve, um den positiven und negativen Volumenstrom zu messen. Glücklicherweise müssen wir diesen Indikator nicht manuell berechnen, da Sie ihn unter den integrierten Indikatoren in MetaTrader 5 finden können. Das folgende Bild zeigt, wie dieser Indikator in den Chart eingefügt wird:

OBV-Einsatz

Sobald Sie den Indikator ausgewählt haben, öffnet sich das folgende Fenster mit den Parametern des Indikators:

OBV-Einsatz1

1 - die Art der Volumes.

2 - die Farbe der OBV-Kurve.

3 - der Stil der OBV-Kurve.

4 - die Dicke der OBV-Kurve.

Nachdem Sie die gewünschten Parameter eingestellt und auf OK geklickt haben, wird der Indikator an das Chart angehängt:

OBV angebracht


OBV-Strategie

In diesem Teil werden wir lernen, wie man den OBV-Indikator basierend auf seinem Konzept verwendet. Wir werden uns einfache Strategien ansehen. Beachten Sie jedoch, dass diese Strategien möglicherweise nicht für jeden geeignet sind. Daher müssen Sie jede Strategie testen, bevor Sie sie anwenden, um zu wissen, wie sehr sie für Sie nützlich sein wird. Hier betrachten wir all diese Strategien mit dem Hauptziel, die Grundlagen des OBV-Indikators zu lernen und zu sehen, wie er funktioniert.

  • Strategie eins: Einfache OBV-Bewegung

Gemäß dieser Strategie müssen wir die Richtung der OBV-Kurve identifizieren, indem wir den aktuellen OBV-Wert mit dem vorherigen OBV-Wert vergleichen und sehen, ob der aktuelle Wert größer als der vorherige ist, was bedeutet, dass der OBV steigt. Umgekehrt, wenn der aktuelle Wert niedriger ist als der vorherige, sinkt der OBV.

Sie können die Länge der Daten ändern, die Sie benötigen, um das aktuelle OBV mit früheren Daten zu vergleichen, aber hier teilen wir nur die Idee, wie wir den Indikator verwenden und wie wir diese Verwendung in MQL5 codieren können. Später können Sie es nach Ihren Vorlieben optimieren.

Aktueller OBV > vorheriger OBV -> OBV steigt

Aktueller OBV < vorheriger OBV --> OBV fällt

  • Strategie zwei: Einfache OBV-Stärke

Gemäß dieser Strategie müssen wir die Stärke des aktuellen OBV-Werts identifizieren, indem wir ihn mit dem Durchschnitt der vorherigen vier OBV-Werte vergleichen. Wenn der aktuelle OBV-Wert größer als der Durchschnitt der vorherigen vier OBV-Werte ist, ist der OBV stark und umgekehrt, wenn der aktuelle OBV-Wert niedriger als der Durchschnitt der vorherigen vier OBV-Werte ist, dann ist der OBV schwach.

Sie können auch die Länge des Durchschnitts verlängern, um ihn mit den aktuellen Daten zu vergleichen, aber das Ziel hier ist zu sehen, wie der Indikator verwendet wird. Dann können Sie alles nach Ihren Wünschen und Testergebnissen anpassen. 

Aktueller OBV > AVG der vorherigen vier OBV-Werte --> OBV ist stark

Aktueller OBV < AVG der vorherigen vier OBV-Werte --> OBV ist schwach

  • Strategie drei: Einfaches OBV – Aufwärtstrend

Wie wir wissen, ist es während des Aufwärtstrends besser zu sehen, wie sich das Volumen mit dem Trend bewegt. Der OBV sollte also mit der Aufwärtsbewegung steigen. Diese Strategie ermöglicht es also zu bewerten, ob die Bewegung stark ist oder nicht. Wir werden den aktuellen OBV-Wert und den vorherigen vergleichen und das aktuelle Hoch und das vorherige Hoch vergleichen. Wenn der aktuelle OBV-Wert größer als der vorherige OBV-Wert und das aktuelle Hoch größer als das vorherige Hoch ist, ist die Aufwärtsbewegung während des Aufwärtstrends stark.

Aktueller OBV > vorheriger OBV und das aktuelle Hoch > das vorherige Hoch --> Starke Bewegung während des Aufwärtstrends

  • Strategie vier: Einfaches OBV – Abwärtstrend

Während des Abwärtstrends ist es besser zu sehen, wie sich das Volumen mit dem Trend bewegt. Der OBV sollte mit der Abwärtsbewegung zunehmen. Dies ermöglicht es zu verstehen, ob die Bewegung stark ist oder nicht. Wir werden den aktuellen OBV-Wert und den vorherigen OBV-Wert vergleichen und die gleiche Zeit zwischen dem aktuellen Tief und dem vorherigen Tief vergleichen. Wenn der aktuelle OBV-Wert kleiner als der vorherige OBV-Wert und das aktuelle Tief kleiner als das vorherige Tief ist, ist die Abwärtsbewegung während des Abwärtstrends stark.

Aktueller OBV < vorheriger OBV und aktuelles Tief < vorheriges Tief --> Starke Bewegung während des Abwärtstrends


Setup-Strategie Blaupause

In diesem Teil entwerfen wir einen Entwurf für jede Strategie. Es wird eine klare Schritt-für-Schritt-Beschreibung geben, wie man ein Handelssystem für jede erwähnte Strategie entwirft. Zuerst müssen wir einen einfachen OBV entwerfen, um einen Kommentar zum Chart mit dem aktuellen OBV-Wert anzuzeigen. Hier ist die Blaupause dafür:

Einfache OBV-Blaupause

  • Strategie eins: Einfache OBV-Bewegung:

Bei dieser Strategie müssen wir die Richtung der OBV-Kurve basierend auf dem aktuellen OBV-Wert und dem vorherigen OBV-Wert kennen. Wir müssen also für jeden Tick den aktuellen OBV und den vorherigen OBV-Wert überprüfen, und wenn der aktuelle Wert größer als der vorherige ist, ist dies ein Zeichen dafür, dass der OBV steigt und umgekehrt, wenn der aktuelle Wert kleiner als ist Im vorherigen Fall ist dies ein Zeichen dafür, dass der OBV rückläufig ist.

Das Folgende ist eine Schritt-für-Schritt-Anleitung für diese Strategie, die uns dabei helfen soll, ein Handelssystem dafür zu entwerfen:

Einfache OBV-Bewegung Blaupause

  • Strategie zwei: Einfache OBV-Stärke:

Bei dieser Strategie müssen wir die Stärke des aktuellen OBV messen, indem wir ihn mit dem Durchschnitt der vorherigen vier Werte vergleichen. Wenn der aktuelle OBV größer als der Durchschnitt der vorherigen vier OBV-Werte ist, dann ist der OBV stark und umgekehrt, wenn der aktuelle OBV niedriger als der Durchschnitt der vorherigen vier OBV-Werte ist, dann ist der OBV schwach.

Das Folgende ist eine Schritt-für-Schritt-Anleitung zur Erstellung dieses Handelssystems:

Einfacher OBV-Stärke Blaupause

  • Strategie drei: Einfaches OBV – Aufwärtstrend:

Bei dieser Strategie müssen wir einen der Volumenindikatoren nutzen, nämlich den OBV, um die aktuelle Kursbewegung zu messen. Während eines Aufwärtstrends müssen wir also den aktuellen OBV-Wert überprüfen und mit dem vorherigen OBV-Wert vergleichen. Wenn der aktuelle Wert größer als der vorherige Wert ist, müssen wir den aktuellen Höchstpreis überprüfen und ihn mit dem vorherigen Höchstpreis vergleichen. Wenn der aktuelle Wert größer als der vorherige ist, ist dies ein Zeichen dafür, dass die aktuelle Aufwärtsbewegung während des Aufwärtstrends stark ist, weil der aktuelle OBV größer ist als der vorherige OBV und das aktuelle Hoch größer als das vorherige Hoch ist.

Im Folgenden finden Sie eine Schritt-für-Schritt-Anleitung zum Programmieren dieser Strategie:

Einfaches OBV – Aufwärtstrend Blaupause

  • Strategie vier: Einfaches OBV – Abwärtstrend:

Bei dieser Strategie müssen wir während des Abwärtstrends den aktuellen OBV-Wert überprüfen und mit dem vorherigen OBV-Wert vergleichen. Wenn der aktuelle Wert niedriger als der vorherige Wert ist, müssen wir den aktuellen niedrigen Preis überprüfen und mit dem vorherigen vergleichen niedriger Preis. Wenn der aktuelle Wert niedriger als der vorherige Wert ist, ist dies ein Zeichen dafür, dass die aktuelle Abwärtsbewegung während des Abwärtstrends stark ist, da der aktuelle OBV niedriger ist als der vorherige OBV und das aktuelle Tief niedriger ist als das vorherige Tief .

Im Folgenden finden Sie eine Schritt-für-Schritt-Anleitung zum Programmieren dieser Strategie:

Einfaches OBV – Abwärtstrend Blaupause


OBV-Handelssystem

In diesem interessanten Teil werden wir lernen, wie man ein Handelssystem für jede erwähnte Strategie erstellt, um die Vorteile der Programmierung und von MQL5 zu nutzen, da die Programmierung ein magisches Werkzeug ist, das uns helfen kann, unser Leben zu erleichtern, indem wir ein System erstellen, das was kann Wir tun dies manuell, und dies ist nicht der einzige Vorteil davon, da es genau und schnell ausführt und tut, was wir brauchen, und viele Vorteile bietet, die wir von der Programmierung profitieren können.

Jetzt werden wir damit beginnen, ein Handelssystem für jede Strategie zu erstellen. Zuerst erstellen wir ein einfaches OBV-Handelssystem, um einen Kommentar zum Chart mit dem aktuellen OBV-Wert zu generieren.

  • Erstellen eines Arrays für OBV mithilfe der „double“-Funktion, das „double“ ist ein reeller Typ oder Gleitkommatyp, der Werte mit einem Bruchteil darstellt. Zu Ihrer Information, es gibt zwei Arten von Gleitkommazahlen, nämlich double und float. Der Typ "double" repräsentiert Zahlen mit der doppelten Genauigkeit des Float-Typs:
double OBVArray[];
  • Sortieren des OBV-Arrays mithilfe der Funktion „ArraySetAsSeries“, die „true“ oder „false“ zurückgibt:
ArraySetAsSeries(OBVArray,true);

  • Das Definieren des OBV mithilfe der „iOBV“-Funktion nach dem Erstellen einer Integer-Variablen für OBVDef und die „iOBV“-Funktion gibt das Handle des On-Balance-Volume-Indikators zurück und seine Parameter sind (Symbol, Punkt, angewendetes Volumen):
int OBVDef =iOBV(_Symbol, _Period,VOLUME_TICK);
  • Füllen des OBVArray mit OBVDef unter Verwendung der Funktion „CopyBuffer“, die die Anzahl der kopierten Daten zurückgibt, und ihre Parameter sind (Indikator-Handle, Puffernummer, Startzeit, Stoppzeit, Puffer):
CopyBuffer(OBVDef,0,0,3,OBVArray);
  • Berechnung des aktuellen OBV-Werts nach Erstellung einer double-Variablen für OBVValue:
double OBVValue=OBVArray[0];
  • Erstellen eines Kommentars, indem Sie die Funktion "Comment" verwenden, um einen Kommentar zum Chart mit dem aktuellen OBV-Wert anzuzeigen:
Comment("OBV Value is: ",OBVValue);

Das Folgende ist also der vollständige Code für das vorherige Handelssystem, das als Kommentar mit dem aktuellen OBV-Wert angezeigt wird:

//+------------------------------------------------------------------+
//|                                                   Simple OBV.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   //creating an array for OBV
   double OBVArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(OBVArray,true);
   
   //defining OBV
   int OBVDef =iOBV(_Symbol, _Period,VOLUME_TICK);
   
   //defining EA, buffer, sorting in array
   CopyBuffer(OBVDef,0,0,3,OBVArray);
   
   //calculating current OBV value
   double OBVValue=OBVArray[0];
   
   //creating a comment with OBV value
   Comment("OBV Value is: ",OBVValue);  
  }
//+------------------------------------------------------------------+

Nachdem wir diesen Code kompiliert haben, können wir ihn im Navigator von MetaTrader 5 wie folgt finden:

OBV nav1

Wenn wir es ausführen wollten, doppelklicken wir auf die Datei oder ziehen sie per Drag & Drop auf das Chart. Das folgende Fenster wird angezeigt:

Einfaches OBV-Fenster

Nachdem Sie auf „OK“ geklickt haben, werden wir feststellen, dass der Expert Advisor wie im folgenden Bild an das Chart angehängt wird:

Einfaches OBV angebracht

Dann können wir feststellen, dass das generierte Signal genauso aussieht wie im folgenden Testbeispiel:

Einfaches OBV-Testsignal

Wenn wir sicherstellen wollten, dass wir den gleichen Wert wie der in Meta Trader 5 integrierte On Balance Volume Indikator erhalten, können wir dies tun, indem wir den On Balance Volume Indikator wie zuvor erwähnt einfügen, nachdem wir unseren erstellten Expert Advisor hinzugefügt haben werden feststellen, dass die Werte gleich sind, und das Folgende ist ein Beispiel dafür:

Einfaches OBV gleiches Signal des Indikators

 Jetzt müssen wir ein Handelssystem für jede erwähnte Strategie erstellen, und im Folgenden erfahren Sie, wie das geht.

  • Strategie eins: Einfache OBV-Bewegung:

Gemäß dieser Strategie müssen wir, genau wie ich es erwähnt habe, zwei Werte vergleichen und sie sind der aktuelle OBV-Wert mit dem vorherigen OBV-Wert, und entscheiden, ob der aktuelle Wert größer als der vorherige Wert ist. Wir brauchen ein Signal, das als Kommentar auf dem Chart mit der Aufschrift „OBV steigt“ erscheint zusammen mit dem aktuellen und den vorherigen OBV-Wert. Das Folgende ist der vollständige Code zum Erstellen dieser Art von Strategie:

//+------------------------------------------------------------------+
//|                                          Simple OBV movement.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
//creating an two arrays for OBV
   double OBVArray1[];
   double OBVArray2[];

//sorting the array from the current data
   ArraySetAsSeries(OBVArray1,true);
   ArraySetAsSeries(OBVArray2,true);

//defining OBV
   int OBVDef =iOBV(_Symbol, _Period,VOLUME_TICK);

//defining EA, buffer, sorting in array
   CopyBuffer(OBVDef,0,0,3,OBVArray1);
   CopyBuffer(OBVDef,0,0,3,OBVArray2);

//getting the value of current and previous OBV
   double OBVCurrentValue=NormalizeDouble(OBVArray1[0],5);
   double OBVPrevValue=NormalizeDouble(OBVArray2[1],5);

//creating conditions of rising and declining OBV based on its values   
   if(OBVCurrentValue>OBVPrevValue)
     {
      Comment("OBV is rising","\n","OBV current is ",OBVCurrentValue,"\n","OBV previous is ",OBVPrevValue);
     }

   if(OBVCurrentValue<OBVPrevValue)
     {
      Comment("OBV is declining","\n","OBV current is ",OBVCurrentValue,"\n","OBV previous is ",OBVPrevValue);
     }

  }
//+------------------------------------------------------------------+
  • Unterschiede in diesem Code:
 Erstellen von zwei Arrays für das OBV:
double OBVArray1[];
double OBVArray2[];

Festlegen der Richtung dieser beiden Arrays der aktuellen Daten:

ArraySetAsSeries(OBVArray1,true);
ArraySetAsSeries(OBVArray2,true);

Füllen dieser beiden Arrays:

CopyBuffer(OBVDef,0,0,3,OBVArray1);
CopyBuffer(OBVDef,0,0,3,OBVArray2);

Abrufen von Werten des aktuellen und vorherigen OBV mithilfe der „NormalizeDouble“-Funktion, die den Double-Werttyp mit voreingestellter Genauigkeit zurückgibt, nachdem eine Double-Variable für OBVCurrentValue und OBVPrevValue und Parameter von „NormalizeDouble“ erstellt wurde (Wert und Ziffern), der Wert wird das OBVArray sein und 5 sind die Dezimalstellen, das ist eine Anzahl von Ziffern nach dem Dezimalkomma:

double OBVCurrentValue=NormalizeDouble(OBVArray1[0],5);
double OBVPrevValue=NormalizeDouble(OBVArray2[1],5);

Festlegen der Bedingungen für steigende und fallende OBV mithilfe der „if“-Funktion:

if(OBVCurrentValue>OBVPrevValue)
   {
    Comment("OBV is rising","\n","OBV current is ",OBVCurrentValue,"\n","OBV previous is ",OBVPrevValue);
   }

if(OBVCurrentValue<OBVPrevValue)
   {
    Comment("OBV is declining","\n","OBV current is ",OBVCurrentValue,"\n","OBV previous is ",OBVPrevValue);
   }

Nach dem Kompilieren erscheint der Experte im Navigationsfenster im Ordner „Expert Advisors“ auf der MetaTrader 5-Handelsplattform wie folgt:

OBV nav2

Durch Doppelklick auf die Expertendatei erscheint folgendes Fenster:

Einfaches OBV-Bewegungsfenster

Durch Drücken von „OK“ wird der Experte wie folgt an das Chart gestartet:

Einfache OBV-Bewegung on Chart

Das Folgende sind Beispiele aus dem Testen auf generierte Signale gemäß dieser Strategie,

Steigender OBV:

einfachen OBV-Bewegung Steigendes Signal der einfachen OBV-Bewegung

Fallender OBV:

Einfache OBV-Bewegung fallendes Signal

  • Strategie zwei: Einfache OBV-Stärke:

Gemäß dieser Strategie müssen wir, wie bereits erwähnt, zwei Werte vergleichen, und zwar den aktuellen OBV-Wert und den Durchschnittswert der vorherigen vier OBV-Werte, nachdem dieser Durchschnitt berechnet wurde, und dann entscheiden, ob der aktuelle Wert größer als der Durchschnitt ist, was bedeutet, dass der OBV stark ist und umgekehrt, wenn der aktuelle Wert unter dem Durchschnitt liegt, bedeutet dies, dass der OBV schwach ist. Das Folgende ist der vollständige Code zum Erstellen eines Handelssystems für diese Strategie:

//+------------------------------------------------------------------+
//|                                          Simple OBV Strength.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   //creating an six arrays for OBV
   double OBVArray0[];
   double OBVArray1[];
   double OBVArray2[];
   double OBVArray3[];
   double OBVArray4[];
   
   //sorting arrays from the current data
   ArraySetAsSeries(OBVArray0,true);   
   ArraySetAsSeries(OBVArray1,true);
   ArraySetAsSeries(OBVArray2,true);
   ArraySetAsSeries(OBVArray3,true);
   ArraySetAsSeries(OBVArray4,true);
   
   //defining OBV
   int OBVDef =iOBV(_Symbol, _Period,VOLUME_TICK);
   
   //defining EA, buffer, sorting in arrays
   CopyBuffer(OBVDef,0,0,5,OBVArray0);
   CopyBuffer(OBVDef,0,0,5,OBVArray1);
   CopyBuffer(OBVDef,0,0,5,OBVArray2);
   CopyBuffer(OBVDef,0,0,5,OBVArray3);
   CopyBuffer(OBVDef,0,0,5,OBVArray4);
   
   //getting the value of current OBV & previous 5 values
   double OBVCurrentValue=NormalizeDouble(OBVArray0[0],5);         
   double OBVPrevValue1=NormalizeDouble(OBVArray1[1],5);
   double OBVPrevValue2=NormalizeDouble(OBVArray2[2],5);
   double OBVPrevValue3=NormalizeDouble(OBVArray3[3],5);
   double OBVPrevValue4=NormalizeDouble(OBVArray4[4],5);
   
   //calculating average of previous OBV value
   double OBVAVG=((OBVPrevValue1+OBVPrevValue2+OBVPrevValue3+OBVPrevValue4)/4);
   
   if(OBVCurrentValue>OBVAVG)
   {
      Comment("OBV is strong","\n","OBV current is ",OBVCurrentValue,"\n","OBV Average is ",OBVAVG,"\n","Previous four OBV Values: ", 
      "\n", "1= ",OBVPrevValue1,"\n", "2= ",OBVPrevValue2,"\n", "3= ",OBVPrevValue3,"\n", "4= ",OBVPrevValue4);
   }
   
   if(OBVCurrentValue<OBVAVG)
   {
      Comment("OBV is weak","\n","OBV current is ",OBVCurrentValue,"\n","OBV Average is ",OBVAVG,"\n","Previous four OBV Values: ",
      "\n", "1= ",OBVPrevValue1,"\n", "2= ",OBVPrevValue2,"\n", "3= ",OBVPrevValue3,"\n", "4= ",OBVPrevValue4);
   }
   
  }
//+------------------------------------------------------------------+
  • Unterschiede in diesem Code:

Erstellen von fünf Arrays für OBV-Werte:

double OBVArray0[];
double OBVArray1[];
double OBVArray2[];
double OBVArray3[];
double OBVArray4[];

Ausrichten des Zugriffs dieser erstellten Arrays aus den aktuellen Daten:

ArraySetAsSeries(OBVArray0,true);   
ArraySetAsSeries(OBVArray1,true);
ArraySetAsSeries(OBVArray2,true);
ArraySetAsSeries(OBVArray3,true);
ArraySetAsSeries(OBVArray4,true);

Füllen von OBVDef:

CopyBuffer(OBVDef,0,0,5,OBVArray0);
CopyBuffer(OBVDef,0,0,5,OBVArray1);
CopyBuffer(OBVDef,0,0,5,OBVArray2);
CopyBuffer(OBVDef,0,0,5,OBVArray3);
CopyBuffer(OBVDef,0,0,5,OBVArray4);

Abrufen der Werte des aktuellen und der vier vorherigen OBV:

double OBVCurrentValue=NormalizeDouble(OBVArray0[0],5);         
double OBVPrevValue1=NormalizeDouble(OBVArray1[1],5);
double OBVPrevValue2=NormalizeDouble(OBVArray2[2],5);
double OBVPrevValue3=NormalizeDouble(OBVArray3[3],5);
double OBVPrevValue4=NormalizeDouble(OBVArray4[4],5);

Berechnung des Durchschnitts der vorherigen vier OBV-Werte nach Erstellung einer Double-Variablen für die OBVAVG:

double OBVAVG=((OBVPrevValue1+OBVPrevValue2+OBVPrevValue3+OBVPrevValue4)/4);

Einstellungsbedingungen von starkem und schwachem OBV mit dem Kommentar:

if(OBVCurrentValue>OBVAVG)
{
 Comment("OBV is strong","\n","OBV current is ",OBVCurrentValue,"\n","OBV Average is ",OBVAVG,"\n","Previous four OBV Values: ", 
  "\n", "1= ",OBVPrevValue1,"\n", "2= ",OBVPrevValue2,"\n", "3= ",OBVPrevValue3,"\n", "4= ",OBVPrevValue4);
}
   
if(OBVCurrentValue<OBVAVG)
{
 Comment("OBV is weak","\n","OBV current is ",OBVCurrentValue,"\n","OBV Average is ",OBVAVG,"\n","Previous four OBV Values: ",
  "\n", "1= ",OBVPrevValue1,"\n", "2= ",OBVPrevValue2,"\n", "3= ",OBVPrevValue3,"\n", "4= ",OBVPrevValue4);
}

Nach dem Kompilieren finden wir den Experten genauso wie den folgenden im Navigator-Fenster:

OBV nav3

Das Folgende ist das Fenster des Experten nach Auswahl der Datei, die auf dem MetaTrader 5 ausgeführt werden soll:

Fenster der einfachen OBV-Stärke

Nachdem Sie auf „OK“ geklickt haben, wird der Experte wie im folgenden Bild an das Chart angehängt:

Einfache OBV-Stärke angehängt

Im Folgenden finden Sie Beispiele für das Testen von Signalen:

Starkes OBV:

Einfache OBV-Stärke starkes Signal

Schwaches OBV:

Einfache OBV-Stärke schwaches Signal

  • Strategie drei: Einfaches OBV – Aufwärtstrend:

Gemäß dieser Strategie müssen wir während des Aufwärtstrends prüfen, ob wir einen höheren Hochpreis und gleichzeitig einen höheren OBV-Wert haben. Wir müssen also prüfen, ob der aktuelle OBV-Wert größer als der vorherige OBV-Wert ist und wenn der aktuelle Höchstpreis größer als der vorherige Höchstpreis ist, dann haben wir ein Signal für eine „starke Bewegung während des Aufwärtstrends“. Das Folgende ist der vollständige Code zum Erstellen dieser Art von Strategie:

//+------------------------------------------------------------------+
//|                                         Simple OBV - Uptrend.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   //creating a string variable for signal
   string signal="";
   
   //creating two OBV arrays for OBV
   double OBVArray0[];
   double OBVArray1[];
   
   //creating two price arrays
   MqlRates PriceArray0[];
   MqlRates PriceArray1[];
   
   //sorting OBV arrays from the current data
   ArraySetAsSeries(OBVArray0,true);   
   ArraySetAsSeries(OBVArray1,true);   
   
   //sorting Price arrays from the current data
   ArraySetAsSeries(PriceArray0,true);
   ArraySetAsSeries(PriceArray1,true);     
      
   //fill arrays with price data
   int Data0=CopyRates(_Symbol,_Period,0,3,PriceArray0);
   int Data1=CopyRates(_Symbol,_Period,0,3,PriceArray1);
   
   //defining OBV
   int OBVDef =iOBV(_Symbol, _Period,VOLUME_TICK);

   //defining EA, buffer, sorting in arrays
   CopyBuffer(OBVDef,0,0,3,OBVArray0);
   CopyBuffer(OBVDef,0,0,3,OBVArray1);
            
   //getting the value of current & the previous OBV
   double OBVCurrentValue=NormalizeDouble(OBVArray0[0],5);         
   double OBVPrevValue=NormalizeDouble(OBVArray1[1],5);
    
   //getting the value of current high & the previous high
   double CurrentHighValue=NormalizeDouble(PriceArray0[0].high,5);         
   double PrevHighValue=NormalizeDouble(PriceArray1[1].high,5); 
      
   //strong move signal
   //if OBVCurrentValue>OBVPrevValue && current high> previous high
   if(OBVCurrentValue > OBVPrevValue && PriceArray0[0].high>PriceArray0[1].high)
   {
      signal="Strong move during uptrend";
   }

   //comment with the signal
   Comment("The signal is ",signal,"\n","OBVCurrentValue is :",OBVCurrentValue,
   "\n","OBVPrevValue is :", OBVPrevValue,"\n","Current high is :",CurrentHighValue,"\n","Previous high is :",PrevHighValue);            
  }
//+------------------------------------------------------------------+

Unterschiede in diesem Code:

Erstellen einer Zeichenfolgenvariablen für „Signal“ mithilfe der Funktion „Zeichenfolge“, die Textzeichenfolgen speichert, die leer sind, da wir sie später berechnen werden:

string signal="";

Erstellen von zwei Arrays für OBV mit der „double“-Funktion und zwei Arrays für Preise mit der „MqlRates“-Funktion, die Informationen über Preise, Volumen und Spread speichert:

//creating two OBV arrays for OBV
double OBVArray0[];
double OBVArray1[];
   
//creating two price arrays
MqlRates PriceArray0[];
MqlRates PriceArray1[];1[];

Ausrichten des Zugriffs dieser erstellten Arrays aus den aktuellen Daten:

//sorting OBV arrays from the current data
ArraySetAsSeries(OBVArray0,true);   
ArraySetAsSeries(OBVArray1,true);   
   
//sorting Price arrays from the current data
ArraySetAsSeries(PriceArray0,true);
ArraySetAsSeries(PriceArray1,true);

Füllen von Preisarrays mit Preisdaten mithilfe der Funktion „CopyRates“, die Verlaufsdaten der Struktur „MqlRates“ abruft, nachdem Integer-Variablen für Data0 und Data1 für jedes Array erstellt wurden:

int Data0=CopyRates(_Symbol,_Period,0,3,PriceArray0);
int Data1=CopyRates(_Symbol,_Period,0,3,PriceArray1);

OBV definieren und die beiden OBVArray damit füllen:

int OBVDef =iOBV(_Symbol, _Period,VOLUME_TICK);

CopyBuffer(OBVDef,0,0,3,OBVArray0);
CopyBuffer(OBVDef,0,0,3,OBVArray1);

Abrufen von Werten von OBV und Höhen:

//getting the value of current & the previous OBV
double OBVCurrentValue=NormalizeDouble(OBVArray0[0],5);         
double OBVPrevValue=NormalizeDouble(OBVArray1[1],5);
    
//getting the value of current high & the previous high
double CurrentHighValue=NormalizeDouble(PriceArray0[0].high,5);         
double PrevHighValue=NormalizeDouble(PriceArray1[1].high,5); 

Einstellungsbedingungen der „Starke Bewegung während des Aufwärtstrends“ und des Kommentars:

Comment("The signal is ",signal,"\n","OBVCurrentValue is :",OBVCurrentValue,
"\n","OBVPrevValue is :", OBVPrevValue,"\n","Current high is :",CurrentHighValue,"\n","Previous high is :",PrevHighValue); 

Wenn wir den Code kompilieren, finden wir den Experten im Navigationsfenster:

OBV nav4

Das Expertenfenster nach Auswahl der Datei, die auf dem MetaTrader 5 ausgeführt werden soll, sieht wie folgt aus:

Einfaches OBV - Aufwärtstrendfenster.

Nachdem Sie auf „OK“ geklickt haben, wird der Experte wie im folgenden Bild an das Chart angehängt:

Einfaches OBV – Aufwärtstrend angehängt

Das Folgende sind Beispiele aus dem Testen von Signalen,

Signal mit Datenfenster für die aktuellen Daten:

Einfaches OBV-Aufwärtstrendsignal mit aktuellem Datenfenster

Signal mit Datenfenster für die vorherigen Daten:

Einfaches OBV – Aufwärtstrendsignal mit vorherigem Datenfenster

  • Strategie vier: Einfaches OBV – Abwärtstrend:

Gemäß dieser Strategie wird es das Gegenteil der einfachen OBV-Aufwärtstrendstrategie sein, da wir prüfen müssen, ob wir einen niedrigeren Tiefstpreis und gleichzeitig einen niedrigeren Wert des OBV haben. Wir müssen also prüfen, ob der aktuelle OBV-Wert niedriger als der vorherige OBV-Wert ist und ob der aktuelle Tiefstpreis niedriger als der vorherige Tiefstpreis ist, dann haben wir ein Signal für eine „starke Bewegung während des Abwärtstrends“. Das Folgende ist der vollständige Code zum Erstellen dieser Art von Strategie:


//+------------------------------------------------------------------+
//|                                       Simple OBV - Downtrend.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   //create a string variable for signal
   string signal="";
   
   //creating two OBV arrays
   double OBVArray0[];
   double OBVArray1[];
   
   //creating two price arrays
   MqlRates PriceArray0[];
   MqlRates PriceArray1[];
   
   //sorting OBV arrays from the current data
   ArraySetAsSeries(OBVArray0,true);   
   ArraySetAsSeries(OBVArray1,true);   
   
   //sorting Price arrays from the current data
   ArraySetAsSeries(PriceArray0,true);
   ArraySetAsSeries(PriceArray1,true);     
      
   //fill array with price data
   int Data0=CopyRates(_Symbol,_Period,0,3,PriceArray0);
   int Data1=CopyRates(_Symbol,_Period,0,3,PriceArray1);
   
   //defining OBV
   int OBVDef =iOBV(_Symbol, _Period,VOLUME_TICK);

   //defining EA, buffer, sorting in arrays
   CopyBuffer(OBVDef,0,0,3,OBVArray0);
   CopyBuffer(OBVDef,0,0,3,OBVArray1);
            
   //getting the value of current OBV & the previous value
   double OBVCurrentValue=NormalizeDouble(OBVArray0[0],5);         
   double OBVPrevValue=NormalizeDouble(OBVArray1[1],5);
    
   //getting the value of current OBV & the previous value
   double CurrentLowValue=NormalizeDouble(PriceArray0[0].low,5);         
   double PrevLowValue=NormalizeDouble(PriceArray1[1].low,5); 
       
   //strong move signal
   //if OBVCurrentValue>OBVPrevValue && current low> previous low
   if(OBVCurrentValue < OBVPrevValue && PriceArray0[0].low<PriceArray0[1].low)
   {
      signal="Strong move during downtrend";
   }

   //comment with the signal
   Comment("The signal is ",signal,"\n","OBVCurrentValue is :",OBVCurrentValue,
   "\n","OBVPrevValue is :", OBVPrevValue,"\n","Current low is :",CurrentLowValue,"\n","Previous low is :",PrevLowValue);            
  }
//+------------------------------------------------------------------+
  • Unterschiede in diesem Code:

Einstellungsbedingung der „Starken Bewegung während des Abwärtstrends“ und des Kommentars:

Comment("The signal is ",signal,"\n","OBVCurrentValue is :",OBVCurrentValue,
"\n","OBVPrevValue is :", OBVPrevValue,"\n","Current low is :",CurrentLowValue,"\n","Previous low is :",PrevLowValue); 

Jetzt werden wir es kompilieren, dann können wir den Experten im Navigationsfenster wie folgt finden:

OBV nav5

Durch Ziehen und Ablegen der Datei auf dem Chart wird das folgende Fenster angezeigt:

Einfaches OBV - Abwärtstrendfenster

Durch Drücken der Schaltfläche "OK" wird der Experte wie im folgenden Bild angehängt:

Einfacher OBV - Abwärtstrend angebracht

Das Folgende ist ein Beispiel für generierte Signale aus Tests,

Signal mit aktuellem Datenfenster:

Einfaches OBV - Abwärtstrendsignal mit aktuellem Datenfenster

Signal mit dem vorherigen Datenfenster:

Einfaches OBV - Abwärtstrendsignal mit vorherigem Datenfenster


Schlussfolgerung

Am Ende dieses Artikels haben wir einen weiteren neuen technischen Indikator kennengelernt, der das Volumen in seiner Berechnung verwendet, um eine andere Perspektive im Chart zu sehen, um unsere Handelsentscheidungen zu verbessern. Dieser Indikator ist das On Balance Volume (OBV) und wir haben ihn im Detail gelernt, als wir lernten, was der OBV-Indikator ist, was er misst, und wir können ihn manuell berechnen, um zu wissen, was sich hinter seinen Grundlagen verbirgt. Wir haben auch gelernt, wie wir es gemäß seinen Grundlagen verwenden können, und haben einige einfache Strategien gelernt, die nützlich sein können oder uns helfen können, neue Ideen zu verwirklichen, die profitabel sein können, und das ist das Hauptziel dieses Artikels und anderer Artikel in dieser Serie. Wir haben eine Blaupause für jede erwähnte Strategie entworfen, um uns dabei zu helfen, den Code für jede Strategie zu schreiben, um ein Handelssystem für sie zu erstellen. Danach haben wir einen Expert Advisor für jede erwähnte Strategie von MQL5 (MetaQuotes Language) erstellt, um sie auf der MetaTrader 5-Handelsplattform auszuführen, um Signale automatisch und genau gemäß den voreingestellten Bedingungen und Regeln jeder Strategie zu generieren.

Ich möchte erwähnen, dass eines der vorteilhaftesten Dinge in der technischen Analyse darin besteht, dass wir je nach verwendetem Tool mehr als eine Perspektive auf das Finanzinstrument sehen und auch mehr als ein Tool oder Indikator kombinieren können, insbesondere wenn wir es verwenden einige Tools, um das Gesamtbild des Finanzinstruments zu sehen, um die geeignete Entscheidung klar treffen zu können, und dieser Ansatz hilft uns, ein zuverlässiges Handelssystem zu schaffen. Lassen Sie also diesen Ansatz vor sich liegen, während Sie etwas lesen oder lernen, um zu erkennen, welches Tool mit einem anderen verwendet werden kann, um Ihnen klarere Einblicke und bessere Ergebnisse zu liefern.

Ich muss noch einmal bestätigen, dass dieser Artikel und andere in dieser Serie nur zu Bildungszwecken dienen und nur für Anfänger gedacht sind, um die Wurzeln der Dinge zu lernen und zu erkennen, was wir durch Programmieren tun können, insbesondere durch MQL5, und wie sehr es uns hilft um unser Handelsgeschäft zu erleichtern und zu verbessern. Sie müssen jede Strategie testen, bevor Sie sie verwenden, da es nichts gibt, was für alle Menschen geeignet ist, und Sie müssen Ihre Arbeit tun, um alles zu testen und zu validieren, um zu sehen, ob es für Sie nützlich ist oder nicht. Ich rate Ihnen, alles selbst anzuwenden, um Ihr Lernen und Verstehen zu vertiefen.

Ich hoffe, dass Sie diesen Artikel nützlich fanden, und ich hoffe, dass Sie etwas über das Thema dieses Artikels oder über verwandte Themen in der Handelswelt gelernt haben. Wenn Sie diesen Artikel nützlich fanden und ähnliche Artikel lesen möchten, können Sie meine vorherigen Artikel in dieser Serie lesen, um zu erfahren, wie Sie ein Handelssystem auf der Grundlage beliebter technischer Indikatoren entwerfen.

Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/10961

Video: Wie man MetaTrader 5 und MQL5 für den einfachen automatisierten Handel einrichtet Video: Wie man MetaTrader 5 und MQL5 für den einfachen automatisierten Handel einrichtet
In diesem kleinen Videokurs lernen Sie, wie Sie den MetaTrader 5 für den automatisierten Handel herunterladen, installieren und einrichten. Sie erfahren auch, wie Sie die Chart-Einstellungen und die Optionen für den automatischen Handel anpassen können. Sie werden Ihren ersten Backtest durchführen und am Ende dieses Kurses werden Sie wissen, wie Sie einen Expert Advisor importieren, der automatisch 24/7 handeln kann, ohne dass Sie vor Ihrem Bildschirm sitzen müssen.
Video: Als Nächstes tragen Sie den Servernamen, Ihre Kontonummer und das Master-Passwort an. Video: Als Nächstes tragen Sie den Servernamen, Ihre Kontonummer und das Master-Passwort an.
Die Mehrheit der Studenten in meinen Kursen war der Meinung, dass MQL5 wirklich schwer zu verstehen ist. Darüber hinaus suchten sie nach einer einfachen Methode, um einige Prozesse zu automatisieren. Entdecken Sies, wie Sie sofort mit MQL5 arbeiten können, einfach durch das Lesen der in diesem Artikel enthaltenen Informationen. Selbst, wenn Sie noch nie etwas programmiert haben. Und auch für den Fall, dass Sie die vorhergehenden Illustrationen, die Sie beobachtet haben, nicht nachvollziehen können.
Erfahren Sie, wie Sie ein Handelssystem durch Accumulation/Distribution (AD) entwerfen Erfahren Sie, wie Sie ein Handelssystem durch Accumulation/Distribution (AD) entwerfen
Willkommen zu einem neuen Artikel aus unserer Serie über das Erlernen des Entwerfens von Handelssystemen auf der Grundlage der beliebtesten technischen Indikatoren. In diesem Artikel erfahren Sie mehr über einen neuen technischen Indikator, den Accumulation/Distribution Indikator, und darüber, wie Sie ein Handelssystem mit MQL5 entwerfen basierend auf einfachen AD-Handelsstrategien, um sie im MetaTrader 5 verwenden zu können.
Einen handelnden Expert Advisor von Grund auf neu entwickeln (Teil 7): Hinzufügen des Volumens zum Preis (I) Einen handelnden Expert Advisor von Grund auf neu entwickeln (Teil 7): Hinzufügen des Volumens zum Preis (I)
Dies ist einer der stärksten Indikatoren, die es derzeit gibt. Jeder, der versucht, ein gewisses Maß an Selbstvertrauen zu haben, muss diesen Indikator auf seinem Chart haben. Am häufigsten wird der Indikator von denjenigen verwendet, die beim Handel das „Tape Reading” bevorzugen. Dieser Indikator kann auch von denjenigen verwendet werden, die beim Handel nur die Preisbewegungen (Price Action) verwenden.