Lernen Sie, wie man ein Handelssystem mit dem Volumen entwickelt

21 Juni 2022, 13:14
Mohamed Abdelmaaboud
0
200

Einführung

Willkommen zu diesem neuen Artikel in unserer Serie über das Entwerfen eines Handelssystems auf der Grundlage des beliebtesten technischen Indikators. Hier ist ein neuer wichtiger technischer Indikator, der uns Einblicke in eine andere Perspektive des Marktes gibt – der Volumenindikator. Wir werden diesen Indikator durch die folgenden Themen behandeln:

  1. Volumes-Definition
  2. Volumes-Strategie
  3. Blaupause
  4. Volumenhandelssystem
  5. Schlussfolgerung

Hier erfahren wir, was das Volumen ist und was es misst. Wir werden herausfinden, wie wir es in unserem Handel verwenden können und wie es für uns nützlich sein kann, indem wir einige einfache Strategien teilen, die auf dem dahinter stehenden Hauptkonzept basieren. Danach werden wir lernen, wie man eine Schritt-für-Schritt-Blaupause für jede erwähnte Strategie entwirft, um uns dabei zu helfen, ein Handelssystem auf der Grundlage dieser Strategien zu entwickeln. Dieser Schritt ist sehr wichtig, um jedes Handelssystem zu entwerfen. Dann kommen wir zum interessantesten Teil, dem Volumenhandelssystem, da wir lernen werden, wie wir all das, was wir erwähnt haben, oder sogar jede damit zusammenhängende aufschlussreiche Idee in ein Handelssystem von MQL5 umwandeln können, um auf der Grundlage dieser Strategien automatisch das zu generieren, was wir brauchen Helfen Sie uns, unsere Handelsreise zu vereinfachen, zu verbessern oder zu verbessern.

Wir werden also MQL5 (MetaQuotes Language) verwenden, das in das Handelsterminal MetaTrader 5 integriert ist. Wenn Sie mehr darüber erfahren möchten, wie man ihn herunterlädt und verwendet, lesen Sie das Thema Schreiben von MQL5-Code im MetaEditor aus dem vorherigen Artikel für weitere Informationen. Außerdem ist es für Ihr Lernen sehr nützlich, das Gelernte anzuwenden, da es Ihr Verständnis des Themas verbessern und vertiefen wird. Übung ist ein sehr wichtiger Faktor in jedem Lernprozess.

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 keinerlei Ergebnis. 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 in die Themen springen, um ein neues Tool kennenzulernen, das für unseren Handel nützlich sein kann.


Volumendefinition

Der Volumenindikator im Forex-Markt zeigt die Anzahl der Preisänderungen während einer bestimmten Zeit an, dh. das tatsächlich gehandelte Volumen, indem Kontrakte, Geld, Einheiten usw. identifiziert werden. Der Volumenindikator kann uns einen Hinweis auf Angebot und Nachfrage geben oder er ist ein Hinweis auf die Liquidität auf dem Markt. Wenn es also ein hohes Volumen gibt, ist dies ein Hinweis auf die Höhe der Nachfrage im Falle eines Anstiegs oder des Angebots im Falle eines Rückgangs. Wir können sagen, dass das Volumen sehr nützlich sein kann, da es eine Bestätigung des Trends sein wird. Wenn Sie mehr über den Trend erfahren möchten, können Sie das Thema aus einem der früheren Artikel lesen.

Das Volumen folgt dem Trend. Dies ist ein sehr nützliches Werkzeug, um zu bestätigen, ob die aktuelle Bewegung stark sein wird oder ob es eine Schwäche gibt. Es ist besser zu sehen, dass das Volumen während des Aufwärtstrends mit Aufwärtsbewegungen zunimmt und mit der Abwärtskorrektur abnimmt. Während des Abwärtstrends wird das Volumen mit Abwärtsbewegungen zunehmen und es wird ein signifikantes Signal sein, aber manchmal können wir diese Abwärtsbewegungen ohne hohes Volumen finden, da die Preise ohne Volumen fallen können. Mit anderen Worten, es ist nicht notwendig, ein hohes Volumen mit Abwärtsbewegungen im Abwärtstrend zu sehen. Im Falle einer Aufwärtskorrektur während des Abwärtstrends wird das Volumen abnehmen.

Das Volumen kann uns bei Abweichungen einen Hinweis darauf geben, dass der aktuelle Trend schwach ist. Abweichungen bedeuten, dass wir feststellen, dass sich das Volumen in die entgegengesetzte Richtung des Preises bewegt, was diese Preisrichtung nicht bestätigt.

Dasselbe, was wir zuvor über seine Berechnung erwähnt haben:

Auf dem Forex-Markt:

Volumen = Anzahl der Preisänderungen innerhalb eines bestimmten Zeitraums

An der Börse:

Volumen = Handelsvolumen * Preis

Beispiel: Wenn wir 1000 Aktien Handelsvolumen einer Aktie zu einem Preis von 10 $ haben. Der vollständige Code sieht also wie folgt aus:

Volumen = 1000 * $10 = $10,000

Hier gibt es einen Unterschied aufgrund der Dezentralisierung des Forex-Marktes im Gegensatz zum Aktienmarkt.

Wir müssen es nicht manuell berechnen, da wir es im MetaTrader 5 finden können. Alles, was Sie tun müssen, ist es aus den verfügbaren Indikatoren auszuwählen:

Einfügen --> Indikatoren --> Volumes --> Volumes

Vol einfügen

Nachdem Sie den Volumenindikator wie in Schritt vier in der vorherigen Abbildung ausgewählt haben, wird das Fenster des Volumenindikators geöffnet:

Vol-Parameter

1. Farbe bei einem größeren Volumen des Balkens.

2. Farbe bei einem kleineren Volumen des Balkens.

3. Verwendetes Volumen (Tick oder Real).

4. Dicke der Balken 

Nach der Bestimmung der vorherigen Parameter wird es auf dem Chart gestartet:

Bd. gestartet

Grün bedeutet, dass der aktuelle Balken größer als der vorherige Balken ist, aber rot bedeutet, dass der aktuelle Balken kleiner als der vorherige ist.


Volumen-Strategie

In diesem Teil werden wir einfache Volumenstrategien erwähnen, um zu verstehen, wie der Volumenindikator verwendet werden kann. Sicherlich werden Sie feststellen, dass diese Strategien optimiert werden müssen, und das ist normal, da Ihr Hauptziel ist, zu verstehen, wie der Volumenindikator basierend auf seinem Konzept verwendet werden kann und wie ein Handelssystem basierend auf seinen Grundlagen entworfen wird. Sie müssen also jede dieser Strategien testen, bevor Sie sie auf Ihrem echten Konto anwenden.

  • Strategie eins: Vol - Bewegung:

Basierend auf dieser Strategie müssen wir das aktuelle Volumen mit dem vorherigen vergleichen, um auf dieser Grundlage das geeignete Signal zu bestimmen. Wenn das aktuelle größer ist als das vorherige, ist dies ein Signal für zunehmende Volumina. Wenn das aktuelle geringer ist als das vorherige, wird dies ein verringertes Signalvolumen sein.

Einfach,

Aktuelles Volumen > Vorheriges Volumen --> Volumen erhöht.

Aktuelles Volumen < Vorheriges Volumen --> Volumen verringert.

  • Strategie zwei: Vol - Stärke:

Basierend auf dieser Strategie müssen wir zwischen dem aktuellen Volumenwert und dem Durchschnitt der vorherigen fünf Werte vergleichen, um die Stärke dieses Volumenindikators zu bestimmen. Wenn der aktuelle Wert über dem Durchschnitt liegt, ist dies ein Signal für ein starkes Volumen. Wenn das aktuelle unter dem Durchschnitt liegt, ist dies ein Signal für ein schwaches Volumen.

Also,

Aktuell > AVG --> starkes Volumen

Aktuelle < AVG --> schwaches Volumen

  • Strategie drei: Preis & Volumen - Aufwärtstrend:

Gemäß dieser Strategie werden wir während des Aufwärtstrends die aktuellen und vorherigen Hochs mit den aktuellen und vorherigen Volumenwerten vergleichen, um zu entscheiden, ob es ein Kaufsignal gibt oder kein Signal. Wenn das aktuelle Hoch über dem vorherigen und das aktuelle Volumen über dem vorherigen liegt, ist dies ein Kaufsignal, aber wenn das aktuelle Hoch über dem vorherigen liegt und das aktuelle Volumen unter dem vorherigen Volumen liegt, ist dies kein Signal.

Aktuelles Hoch > vorheriges Hoch && aktuelles Volumen > vorheriges Volumen --> Kaufsignal während des Aufwärtstrends

  • Strategie vier: Preis & Volumen - Abwärtstrend:

Diese Strategie ist die Umkehrung der vorherigen. Während des Abwärtstrends werden wir die aktuellen und vorherigen Tiefs mit den aktuellen und vorherigen Volumenwerten vergleichen, um zu entscheiden, ob es ein Verkaufssignal gibt oder ob es kein Signal gibt. Wenn das aktuelle Tief unter dem vorherigen und das aktuelle Volumen über dem vorherigen liegt, ist es ein Verkaufssignal, aber wenn das aktuelle Tief unter dem vorherigen liegt und das aktuelle Volumen unter der vorherigen Volumen ist, ist es kein Signal .

Aktuelles Tief < vorheriges Tief && aktuelles Volumen > vorheriges Volumen --> Verkaufssignal im Abwärtstrend

  • Strategie fünf: MA & Vol-Strategie:

Gemäß dieser Strategie vergleichen wir zwei Längen von gleitenden Durchschnitten, eine ist kurz und die andere ist lang, und die Werte des aktuellen und des vorherigen Volumens, um zu entscheiden, ob es ein Kauf- oder ein Verkaufssignal gibt. Wenn der kürzere MA kleiner als der längere MA ist, dann der kürzere über den längeren steigt und gleichzeitig das aktuelle Volumen über dem vorherigen Volumen liegt, ist dies ein Kaufsignal. Wenn der kürzere MA über dem längeren liegt, der kürzere dann unter den längeren fällt und gleichzeitig das aktuelle Volumen über dem vorherigen Volumen liegt, handelt es sich um ein Verkaufssignal.

kurzer MA < langem MA, dann kurzer MA > langem MA && aktuelles Volumen > vorheriges Volumen --> Kaufsignal

kurzer MA > langem MA, dann kurzer MA < langem MA && aktuelles Volumen> vorherige Volumen--> Verkaufssignal


Volumenstrategie Blaupause

In diesem Teil werden wir einen Entwurf für jede Strategie entwerfen. Der Grund für den Entwurf des Entwurfs ist, uns dabei zu helfen, zu organisieren, was wir tun möchten, um ein Handelssystem zu erstellen. Dieser Schritt ist sehr wichtig und unerlässlich, um unsere Ideen zu ordnen und um Schritt für Schritt zu identifizieren, was wir tun möchten.

Zuerst erstellen wir einen Entwurf für ein einfaches Handelssystem, das den aktuellen Wert des Volumenindikators nur als Kommentar auf dem Chart schreibt. Wir brauchen das System, um die Werte des Volumenindikators in jedem Tick zu überprüfen und dann den aktuellen Wert auf dem Chart als Kommentar zurückzugeben. Das Folgende ist eine Schritt-für-Schritt-Anleitung zur Erstellung dieses Handelssystems:

Einfaches Vol Blaupause


  • Strategie eins: Vol - Bewegung:

Gemäß dieser Strategie müssen wir ein einfaches Handelssystem erstellen, das Signale generiert, die uns über die Bewegung des Volumens informieren (ob es zunimmt oder abnimmt), indem es zwei Werte des aktuellen und des vorherigen Volumenindikators vergleicht. Das System muss also diese beiden Werte bei jedem Tick überprüfen und dann darüber informieren, dass das Volumen zunimmt, wenn das aktuelle Volumen größer als das vorherige ist, oder darüber informieren, dass das Volumen abnimmt, wenn das aktuelle Volumen niedriger als die vorherige ist. Das Folgende ist eine Schritt-für-Schritt-Anleitung zur Erstellung dieses Handelssystems:

Vol - Bewegung Blaupause


  • Strategie zwei: Vol - Stärke:

Gemäß dieser Strategie müssen wir ein einfaches Handelssystem erstellen, um Signale zu generieren, die uns über die Stärke des Volumens informieren, basierend auf einem Vergleich zwischen dem aktuellen Wert des Volumenindikators und dem Durchschnitt der vorherigen fünf Werte davon. Wir müssen also das System all diese Werte überprüfen lassen und dann bei jedem Tick den Durchschnitt der vorherigen fünf Vol-Werte berechnen. Danach wird ein geeignetes Signal generiert. Wenn das aktuelle Volumen größer ist als das durchschnittliche Volumen, wird das generierte Signal ein starkes Volumen, aktuelles Volumen, die vorherigen fünf Volumenwerte und den Durchschnittswert als Kommentar auf dem Chart schreiben, sodass jeder Wert in einer eigenen Zeile steht. Wenn der aktuelle Wert kleiner ist als der Durchschnittswert, ist der generierte Wert ein schwaches Volumen. Der aktuelle, die vorherigen fünf Volumenwerte und der Durchschnitt werden als Kommentar auf dem Chart geschrieben, jeder Wert in einer separaten Zeile. Das Folgende ist eine Schritt-für-Schritt-Anleitung zur Erstellung dieses Handelssystems:

Vol - Stärke Blaupause


  • Strategie drei: Preis & Volumen - Aufwärtstrend:

Gemäß dieser Strategie müssen wir ein einfaches Handelssystem erstellen, das während des Aufwärtstrends funktioniert, um ein Kaufsignal zu generieren, nachdem Tick für Tick aktuelle und frühere Hochs sowie aktuelle und frühere Volumenindikatorwerte überprüft wurden. Basierend auf dieser Strategie benötigen wir sie, um ein Kaufsignal zu generieren: aktuelles Hoch, vorheriges Hoch, aktuelles Volumen und vorheriges Volumen auf dem Chart als Kommentar und jeden Wert in einer separaten Zeile, wenn der aktuelle Höchstwert größer als der vorherige ist und der aktuelle Volumenwert größer als der vorherige ist oder nur alle vorherigen Arten von Werten ohne Kaufsignal generiert werden, wenn das aktuelle Hoch größer als das vorherige und der aktuelle Volumenwert niedriger als das vorherige ist. Das Folgende ist eine Schritt-für-Schritt-Anleitung zur Erstellung dieses Handelssystems:

für den Aufwärtstrendfür den Aufwärtstrend Price_Vol - Blaupause

  • Strategie vier: Preis & Volumen - Abwärtstrend:

Diese Strategie ist das Gegenteil der vorherigen. Wir müssen ein einfaches Handelssystem erstellen, das während des Abwärtstrends funktioniert, um ein Verkaufssignal zu erzeugen, nachdem es Tick für Tick aktuelle und frühere Tiefs überprüft hat, zusätzlich zu den aktuellen und früheren Volumenindikatorwerten. Dann brauchen wir das System, um ein Verkaufssignal zu generieren. Aktuelles Tief, vorheriges Tief, aktuelles Volumen und vorheriges Volumen als Kommentar werden auf dem Chart geschrieben, jeder Wert in einer separaten Zeile. Wenn der aktuelle Tiefstwert kleiner als der vorherige ist und der aktuelle Volumenwert größer als der vorherige ist, oder um nur alle vorherigen Werte zu generieren, ohne ein Verkaufssignal, wenn das aktuelle Tief kleiner als das vorherige ist und gleichzeitig der aktuelle Volumenwert kleiner als der vorherige ist. Wir können einen Schritt-für-Schritt-Blaupause sehen, um dieses Handelssystem wie folgt zu erstellen:

Price_Vol - Abwärtstrend Blaupause


  • Strategie fünf: MA & Vol-Strategie:

Nach dieser Strategie müssen wir ein Handelssystem erstellen, das zwei Indikatoren, das Volumen und den gleitenden Durchschnitt, Tick für Tick überprüfen kann, um zu entscheiden, ob es ein Kauf- oder Verkaufssignal gibt, das auf einem Vergleich zwischen zwei gleitenden Durchschnitten basiert, von denen einer kurz und der andere lang ist. Liegt der kürzere über dem längeren, nachdem er vor darunter war und ist gleichzeitig das aktuelle Volumen größer als der vorherige. In diesem Fall soll unser System ein Kaufsignal erzeugen. Im zweiten Szenario liegt der kürzere unter dem längeren MA, nachdem er vorher über dem längeren MA und zur gleichen Zeit ist das aktuelle Volumen größer als die vorherige, in diesem Fall soll unser System ein Verkaufssignal erzeugen. Im Folgenden finden Sie die Schritt-für-Schritt-Blaupause zum Erstellen dieser Art von Strategie:

MA_Vol Blaupause


Handelssystem für Volumen

Wir sind zum interessantesten Teil in diesem Artikel gekommen, in dem es darum geht, wie man alle vorherigen in ein Handelssystem übersetzt, um uns automatisch und genau Signale zu geben. Wir werden ein Handelssystem für jede Strategie entwerfen, aber zuerst werden wir ein Handelssystem entwerfen, um den aktuellen Volumenwert zu generieren, der die Grundlage jeder Strategie bildet.

  • Erstellen eines Arrays für die Volumina vom Typ "double".
double VolArray[];
  • Sortieren des Arrays mithilfe der ArraySetAsSeries-Funktion, die einen booleschen Wert (true oder false) zurückgibt.
ArraySetAsSeries(VolArray,true);
  • Definieren des Volumens mithilfe von iVolumes nach dem Erstellen der Variablen für VolDef. Die Funktion iVolumes gibt das Handle des Volumes-Indikators zurück und seine Parameter sind (Symbol, Periode, angewendetes Volumen). Wir haben (_Symbol) verwendet, um für das aktuelle Symbol anwendbar zu sein, und (_period), um für den aktuellen Zeitrahmen anwendbar zu sein.
int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);
  • Füllen des Arrays mithilfe der CopyBuffer-Funktion, um die Daten aus dem Volumenindikator zu erhalten.
CopyBuffer(VolDef,0,0,3,VolArray);
  • Wir berechnen das Volumen mithilfe der Funktion NormalizeDouble, nachdem die Variable für VolValue erstellt wurde. Die NormalizeDouble-Funktion gibt einen Double-Wert zurück.
int VolValue=NormalizeDouble(VolArray[0],5);
  • Erstellen der Funktion des Kommentars des Volumenindikatorwerts mithilfe der Kommentarfunktion.
Comment("Volumes Value is: ",VolValue);

Das Folgende ist der vollständige Code des vorherigen Handelssystems:

//+------------------------------------------------------------------+
//|                                               Simple Volumes.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 an array for Volume
   double VolArray[];

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

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating current vol value
   int VolValue=NormalizeDouble(VolArray[0],5);

//creating a comment with current vol value
   Comment("Volumes Value is: ",VolValue);
  }
//+------------------------------------------------------------------+

Nachdem wir diesen Code kompiliert haben, um ihn in MetaTrader 5 ausführen zu können, finden wir ihn im Navigator-Fenster:

 Nav1

Durch Doppelklicken auf die Datei oder Ziehen und Ablegen auf dem Chart erscheint das EA-Fenster:

Einfaches Vol-Fenster

Dann finden wir den EA, der auf dem Chart gestartet wurde:

 Einfacher Vol. gestartet

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

Einfaches Vol.-Signal

  • Strategie eins: Vol Bewegung:

Um ein Handelssystem zu erstellen, das uns durch einen Kommentar zum Chart mit der Bewegung des Volumenindikators auf der Grundlage des Vergleichs zwischen dem Wert des aktuellen Volumens und dem vorherigen benachrichtigt, schreiben wir unseren Code wie folgt:

//+------------------------------------------------------------------+
//|                                               Vol - 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()
  {
//Create an array for Volume
   double VolArray[];

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

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating current vol value
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//Conditions of vol movements
//Volume increasing
   if(VolCurrentValue>VolPrevValue)
     {
      Comment("Volumes increased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }

//Volume decreasing
   if(VolCurrentValue<VolPrevValue)
     {
      Comment("Volumes decreased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }
  }
//+------------------------------------------------------------------+

Unterschiede im Code:

Berechnung des aktuellen und vorherigen Volumens:

   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

Bedingungen der Strategie:

Volumenindikator steigt:

   if(VolCurrentValue>VolPrevValue)
     {
      Comment("Volumes increased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }

Volumenindikator fällt:

   if(VolCurrentValue<VolPrevValue)
     {
      Comment("Volumes decreased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }

Nachdem wir diesen Code kompiliert haben, können wir den Experten im Navigationsfenster finden:

Vol Nav2

Durch Doppelklick erscheint folgendes Fenster:

Fenster der Vol - Bewegung

Nachdem Sie neben Allow Algo Trading ein Häkchen gesetzt und OK gedrückt haben, wird er auf dem Chart gestartet:

 Vol - Bewegung gestartet

Das Folgende ist ein Beispiel für generierte Signale der Strategie Vol - Bewegung mit dem Datenfenster der aktuellen und vorherigen Daten:

Steigende Volumina:

Aktuelles Datenfenster:

 Vol - Signal einer verstärkten Bewegung

Vorheriges Datenfenster:

 Vol - Signal einer verstärkten Bewegung - vorherig

Sinkende Volumina:

Aktuelles Datenfenster:

Vol - Signal einer sinkenden Bewegung - aktuell

Vorheriges Datenfenster:

 Vol - Signal einer sinkenden Bewegung - vorherig

  • Strategie zwei: Vol - Stärke:

Es folgt der vollständige Code zum Erstellen eines Handelssystems für diese Strategie, um automatisch Signale für die Stärke des Volumenindikators zu generieren, basierend auf einem Vergleich zwischen dem aktuellen Volumen und dem vorherigen:

//+------------------------------------------------------------------+
//|                                               Vol - 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()
  {
//Create an array for Volume
   double VolArray[];

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

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,11,VolArray);

//calculating current vol && 5 previous volume values
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue1=NormalizeDouble(VolArray[1],5);
   double VolPrevValue2=NormalizeDouble(VolArray[2],5);
   double VolPrevValue3=NormalizeDouble(VolArray[3],5);
   double VolPrevValue4=NormalizeDouble(VolArray[4],5);
   double VolPrevValue5=NormalizeDouble(VolArray[5],5);


//calculating AVG of 5 previous volume values
   double VolAVGVal=((VolPrevValue1+VolPrevValue2+VolPrevValue3+VolPrevValue4+VolPrevValue5)/5);

//conditions of Volume strength based on comparing current to AVG
//strong volume
   if(VolCurrentValue>VolAVGVal)
     {
      Comment("Strong volume","\n","Current volume is : ",VolCurrentValue,"\n",
              "Volume prev 1 is : ",VolPrevValue1,"\n",
              "Volume prev 2 is : ",VolPrevValue2,"\n",
              "Volume prev 3 is : ",VolPrevValue3,"\n",
              "Volume prev 4 is : ",VolPrevValue4,"\n",
              "Volume prev 5 is : ",VolPrevValue5,"\n",
              "AVG volume is : ",VolAVGVal);
     }

//weak volume
   if(VolCurrentValue<VolAVGVal)
     {
      Comment("Weak volume","\n","Current volume is : ",VolCurrentValue,"\n",
              "Volume prev 1 is : ",VolPrevValue1,"\n",
              "Volume prev 2 is : ",VolPrevValue2,"\n",
              "Volume prev 3 is : ",VolPrevValue3,"\n",
              "Volume prev 4 is : ",VolPrevValue4,"\n",
              "Volume prev 5 is : ",VolPrevValue5,"\n",
              "AVG volume is : ",VolAVGVal);
     }
  }
//+------------------------------------------------------------------+

Unterschiede im Code:

Berechnung der aktuellen und der vorherigen fünf Werte des Volumen-Indikators:

   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue1=NormalizeDouble(VolArray[1],5);
   double VolPrevValue2=NormalizeDouble(VolArray[2],5);
   double VolPrevValue3=NormalizeDouble(VolArray[3],5);
   double VolPrevValue4=NormalizeDouble(VolArray[4],5);
   double VolPrevValue5=NormalizeDouble(VolArray[5],5);

 Berechnung des Durchschnitts der vorherigen fünf Werte des Volumenindikators:

double VolAVGVal=((VolPrevValue1+VolPrevValue2+VolPrevValue3+VolPrevValue4+VolPrevValue5)/5);

Bedingungen der Strategie:

Starkes Volumen:

   if(VolCurrentValue>VolAVGVal)
     {
      Comment("Strong volume","\n","Current volume is : ",VolCurrentValue,"\n",
              "Volume prev 1 is : ",VolPrevValue1,"\n",
              "Volume prev 2 is : ",VolPrevValue2,"\n",
              "Volume prev 3 is : ",VolPrevValue3,"\n",
              "Volume prev 4 is : ",VolPrevValue4,"\n",
              "Volume prev 5 is : ",VolPrevValue5,"\n",
              "AVG volume is : ",VolAVGVal);
     }

Schwaches Volumen:

   if(VolCurrentValue<VolAVGVal)
     {
      Comment("Weak volume","\n","Current volume is : ",VolCurrentValue,"\n",
              "Volume prev 1 is : ",VolPrevValue1,"\n",
              "Volume prev 2 is : ",VolPrevValue2,"\n",
              "Volume prev 3 is : ",VolPrevValue3,"\n",
              "Volume prev 4 is : ",VolPrevValue4,"\n",
              "Volume prev 5 is : ",VolPrevValue5,"\n",
              "AVG volume is : ",VolAVGVal);
     }

Nachdem wir diesen Code kompiliert haben, können wir den Experten im Navigationsfenster finden:

 Vol Nav3

Durch Ziehen und Ablegen der Datei auf dem Chart wird das EA-Fenster geöffnet:

 Vol - Stärke Fenster

Nach dem Drücken von "OK" wird er auf dem Chart gestartet:

Vol - Stärke gestartet

Das Folgende ist ein Beispiel für die generierten Signale basierend auf der Stärke des Volumens:

Starkes Volumen:

Vol – Stärke – starkes Signal

Schwaches Volumen:

Vol – Stärke – schwaches Signal

  • Strategie drei: Preis & Volumen - Aufwärtstrend:

Das Folgende ist der vollständige Code zum Erstellen eines Handelssystems für diese Strategie:

//+------------------------------------------------------------------+
//|                                          Price&Vol - 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()
  {
//Create arrays for price & Volume
   MqlRates PriceArray[];
   double VolArray[];

//filling price array with data
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

//sorting arrays from the current data
   ArraySetAsSeries(VolArray,true);

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating the current and previous values of highs and volume
   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//Conditions of buy signal
//Buy signal
   if(CurrentHighValue>PrevHighValue&&VolCurrentValue>VolPrevValue)
     {
      Comment("Buy Signal during uptrend",
              "\n","Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

//no signal
   if(CurrentHighValue>PrevHighValue&&VolCurrentValue<VolPrevValue)
     {
      Comment("Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }
  }
//+------------------------------------------------------------------+

Unterschiede im Code:

Um Arrays für Volumen und Preise zu erstellen, verwenden wir den Typ "double" für das Volumen-Array wie zuvor und die MqlRates für das Preis-Array, das Preis, Volumen und Spread speichert.

   MqlRates PriceArray[];
   double VolArray[];

Füllen des Preisarrays mit der CopyRates-Funktion nach dem Erstellen einer Integer-Variablen für Data:

   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

Berechnung der aktuellen und vorherigen Werte von Höhen und Volumen:

   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

Bedingungen der Strategie basierend auf Höchst- und Volumenwerten:

Kaufsignal:

   if(CurrentHighValue>PrevHighValue&&VolCurrentValue>VolPrevValue)
     {
      Comment("Buy Signal during uptrend",
              "\n","Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

Kein Signal:

   if(CurrentHighValue>PrevHighValue&&VolCurrentValue<VolPrevValue)
     {
      Comment("Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

Nachdem wir diesen Code kompiliert haben, können wir den Experten im Navigationsfenster finden:

Vol Nav4

Wenn wir diesen EA ausführen möchten, um Signale gemäß der obigen Strategie zu generieren, klicken wir doppelt auf die Datei, um sein Fenster zu öffnen:

Price_Vol - Aufwärtstrendfenster

Nachdem Sie auf OK geklickt haben, wird der EA auf dem Chart gestartet:

Price_Vol - Aufwärtstrend gestartet

Das Folgende ist ein Beispiel für generierte Signale basierend auf der Price and Vol – Aufwärtstrendstrategie mit dem Datenfenster:

Kaufsignal:

Aktuelle Daten:

Price_Vol - Kauf im Aufwärtstrend - aktuell

Vorherige Daten:

Price_Vol - Kauf im Aufwärtstrend - vorher

Kein Signal:

Aktuelle Daten:

Price_Vol - Aufwärtstrend kein Signal - aktuell

Vorherige Daten:

Price_Vol - Aufwärtstrend kein Signal - vorher

  • Strategie vier: Preis & Volumen - Abwärtstrend:

Der vollständige Code zum Erstellen eines auf dieser Strategie basierenden Handelssystems wird wie folgt aussehen:

//+------------------------------------------------------------------+
//|                                        Price&Vol - 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 arrays for price & Volume
   MqlRates PriceArray[];
   double VolArray[];

//filling price array with data
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

//sorting arrays from the current data
   ArraySetAsSeries(VolArray,true);

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating current and previous of lows and volume
   double CurrentLowValue=NormalizeDouble(PriceArray[2].low,5);
   double PrevLowValue=NormalizeDouble(PriceArray[1].low,5);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//Conditions of short signal
//short signal
   if(CurrentLowValue<PrevLowValue&&VolCurrentValue>VolPrevValue)
     {
      Comment("Short Signal during downtrend",
              "\n","Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

//no signal
   if(CurrentLowValue<PrevLowValue&&VolCurrentValue<VolPrevValue)
     {
      Comment("Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }
  }
//+------------------------------------------------------------------+

Unterschied im Code:

Bedingungen der generierten Signale basierend auf der Price & Vol - Abwärtstrendstrategie:

Verkaufssignal:

   if(CurrentLowValue<PrevLowValue&&VolCurrentValue>VolPrevValue)
     {
      Comment("Short Signal during downtrend",
              "\n","Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

 Kein Signal:

   if(CurrentLowValue<PrevLowValue&&VolCurrentValue<VolPrevValue)
     {
      Comment("Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

Nach dem Kompilieren dieses Codes befindet sich der EA im Navigator:

Vol Nav5

Nach einem Doppelklick auf die Datei erscheint das Fenster des EA:

Price_Vol - Abwärtstrend Fenster

Nachdem Sie auf OK geklickt haben, wird der EA auf dem Chart gestartet:

Price_Vol - Abwärtstrend gestartet

Das Folgende ist ein Beispiel für generierte Signale mit einem Datenfenster mit aktuellen und vorherigen Werten:

Verkaufssignal:

Aktuelle Daten:

Price&Vol - Abwärtstrend Verkaufssignal - aktuell

Vorherige Daten:

Price&Vol - Abwärtstrend Verkaufssignal l - vorher

Kein Signal:

Aktuelle Daten:

Price&Vol - Abwärtstrend kein Signal - aktuell

Vorherige Daten:

Price&Vol - Abwärtstrend kein Signal - vorher

  • Strategie fünf: MA & Vol-Strategie:

Basierend auf dieser Strategie können wir ein Handelssystem mit dem folgenden Code erstellen:

//+------------------------------------------------------------------+
//|                                              MA&Vol Strategy.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 arrays for MA & Volume
   double MAShortArray[],MALongArray[];
   double VolArray[];

//sorting arrays from the current data
   ArraySetAsSeries(MAShortArray,true);
   ArraySetAsSeries(MALongArray,true);
   ArraySetAsSeries(VolArray,true);

//defining MA & Volume
   int MAShortDef = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE);
   int MALongDef = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE);
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling arrays
   CopyBuffer(MAShortDef,0,0,3,MAShortArray);
   CopyBuffer(MALongDef,0,0,3,MALongArray);
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating MA && current volume values
   double MAShortCurrentValue=NormalizeDouble(MAShortArray[0],6);
   double MAShortPrevValue=NormalizeDouble(MAShortArray[1],6);
   double MALongCurrentValue=NormalizeDouble(MALongArray[0],6);
   double MALongPrevValue=NormalizeDouble(MALongArray[1],6);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//conditions of buy and short signals
//buy signal
   if(MAShortCurrentValue>MALongCurrentValue&&MAShortPrevValue<MALongPrevValue
      &&VolCurrentValue>VolPrevValue)
     {
      Comment("Buy signal");
     }

//short signal
   if(MAShortCurrentValue<MALongCurrentValue&&MAShortPrevValue>MALongPrevValue
      &&VolCurrentValue>VolPrevValue)
     {
      Comment("Short signal");
     }
  }
//+------------------------------------------------------------------+

Unterschied im Code:

Erstellen von Arrays für den kurzen, den langen gleitenden Durchschnitt und das Volumen:

   double MAShortArray[],MALongArray[];
   double VolArray[];

Ausrichten dieser Arrays:

   ArraySetAsSeries(MAShortArray,true);
   ArraySetAsSeries(MALongArray,true);
   ArraySetAsSeries(VolArray,true);

Definieren des kurzen MA und des langen MA mithilfe der iMA-Funktion, die das Handle des Indikators für den gleitenden Durchschnitt zurückgibt, seine Parameter sind (Symbol, Zeitrahmen, Glättungslänge, horizontale Verschiebung, Glättungstyp, der der Typ des MA ist, verwendeter Preis), und die Definition des Volumens durch die Funktion iVolumes wie zuvor erwähnt:

   int MAShortDef = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE);
   int MALongDef = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE);
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

Befüllen der Arrays

   CopyBuffer(MAShortDef,0,0,3,MAShortArray);
   CopyBuffer(MALongDef,0,0,3,MALongArray);
   CopyBuffer(VolDef,0,0,3,VolArray);

Berechnung der aktuellen Werte von kurzer MA, langer MA und Volumens zusätzlich zu den bisherigen Werten von kurzer MA, langer MA und Volumens:

   double MAShortCurrentValue=NormalizeDouble(MAShortArray[0],6);
   double MAShortPrevValue=NormalizeDouble(MAShortArray[1],6);
   double MALongCurrentValue=NormalizeDouble(MALongArray[0],6);
   double MALongPrevValue=NormalizeDouble(MALongArray[1],6);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

Bedingungen der generierten Signale der Strategie:

Kaufsignal:

   if(MAShortCurrentValue>MALongCurrentValue&&MAShortPrevValue<MALongPrevValue
      &&VolCurrentValue>VolPrevValue)
     {
      Comment("Buy signal");
     }

Verkaufssignal:

   if(MAShortCurrentValue<MALongCurrentValue&&MAShortPrevValue>MALongPrevValue
      &&VolCurrentValue>VolPrevValue)
     {
      Comment("Short signal");
     }

Nachdem wir diesen Code kompiliert haben, können wir den Experten im Navigationsfenster finden:

Vol Nav6

Durch Ziehen und Ablegen auf dem Chart wird der EA gestartet:

MA_Vol gestartet

Das Folgende ist ein Beispiel für generierte Signale, die auf dieser Strategie basieren:

Kaufsignal:

Kaufsignal MA_Vol Kaufsignal

Verkaufssignal:

 MA_Vol Verkaufssignal 


Schlussfolgerung

Ich hoffe, ich habe das Thema dieses nützlichen technischen Indikators gut behandelt und Sie haben gelernt, wie Sie den Volumenindikator angemessen verwenden können, um Ihren Handel zu verbessern. Wir haben gelernt, was der Volumenindikator ist, was er misst, wie wir ihn lesen und wie wir ihn verwenden können, und wir haben den Unterschied zwischen dem Volumen an den Devisen- und Aktienmärkten durch das Thema Volumendefinition identifiziert. Wir haben auch einige einfache Volumenstrategien gelernt:

  • Vol - Bewegung: Um uns über die Volumenbewegung zu informieren, wenn sie erhöht oder verringert wird.
  • Vol - Stärke: Um uns über die Stärke der aktuellen Volumenbewegung im Vergleich zum Volumendurchschnitt zu informieren.
  • Price and Vol - Aufwärtstrend: Um ein Kaufsignal während des Aufwärtstrends zu erhalten, basierend auf der Bewegung der Preise und des begleitenden Volumens.
  • Price and Vol - Abwärtstrend: Um ein Verkaufssignal während des Abwärtstrends zu erhalten, basierend auf der Bewegung der Preise und des begleitenden Volumens.
  • MA- und Vol-Strategie: Um Kauf- und Verkaufssignale basierend auf dem Kreuzen zwischen gleitenden Durchschnitten und begleitendem Volumen zu erhalten.

Diese genannten Strategien können basierend auf dem Grundkonzept des Indikators auch nach dem Testen und ggf. Optimieren verwendet werden. All das haben wir durch das Thema Volumenstrategie gelernt. Wir haben gelernt, wie man einen Schritt-für-Schritt-Entwurf für jede Strategie erstellt, um uns dabei zu helfen, unsere Ideen zu organisieren, um ein Handelssystem für jede erwähnte Strategie durch das Thema Volumenstrategie-Entwurf zu erstellen. Dann haben wir den interessantesten Teil dieses Artikels gelernt, nämlich wie man ein Handelssystem von MQL5 für jede Strategie erstellt, um Signale automatisch und genau zu generieren, um sie im Handelsterminal MetaTrader 5 verwenden zu können.

Es ist wichtig, noch einmal zu bestätigen, dass Sie jede Strategie testen müssen, bevor Sie sie auf Ihrem echten Konto anwenden, da sie für Sie möglicherweise nicht nützlich ist, da es nichts gibt, das für alle Menschen geeignet ist. Ich hoffe, dass Sie diesen Artikel nützlich finden und neue Ideen zum Thema des Artikels oder zu anderen verwandten Themen finden. Sie können auch überlegen, wie Sie diesen Indikator mit anderen technischen Tools kombinieren können, um aussagekräftiger zu sein, so wie wir es im Artikel getan haben, indem Sie das Volumen mit den gleitenden Durchschnitten kombinieren, da dies ein sehr aufschlussreicher Ansatz ist. Wenn Sie mehr ähnliche Artikel lesen möchten, können Sie meine anderen Artikel in der Serie darüber lesen, wie Sie ein Handelssystem auf der Grundlage der beliebtesten technischen Indikatoren entwerfen. Ich hoffe, Sie werden auch sie nützlich finden.

Übersetzt aus dem Englischen von MetaQuotes Software Corp.
Originalartikel: https://www.mql5.com/en/articles/11050

DoEasy. Steuerung (Teil 3): Erstellen gebundener Steuerelemente DoEasy. Steuerung (Teil 3): Erstellen gebundener Steuerelemente
In diesem Artikel werde ich untergeordnete Steuerelemente erstellen, die an das Basiselement gebunden sind. Die Entwicklung wird unter Verwendung der Basissteuerungsfunktionalität durchgeführt. Außerdem werde ich ein wenig am Schattenobjekt des grafischen Elements basteln, da es immer noch unter einigen Logikfehlern leidet, wenn es auf eines der Objekte angewendet wird, die einen Schatten haben können.
Lernen Sie, wie man ein Handelssystem mit dem OBV entwickelt Lernen Sie, wie man ein Handelssystem mit dem OBV entwickelt
Der neue Artikel aus unserer Serie über die Gestaltung eines Handelssystems auf der Grundlage der beliebtesten technischen Indikatoren betrachtet einen neuen technischen Indikator - den Money Flow Index (Geldflussindikator, MFI). Wir werden ihn im Detail kennenlernen und ein einfaches Handelssystem mit Hilfe von MQL5 entwickeln, um es in MetaTrader 5 auszuführen.
Einen handelnden Expert Advisor von Grund auf neu entwickeln (Teil 8): Ein konzeptioneller Sprung Einen handelnden Expert Advisor von Grund auf neu entwickeln (Teil 8): Ein konzeptioneller Sprung
Wie lassen sich neue Funktionen am einfachsten implementieren? In diesem Artikel gehen wir einen Schritt zurück und dann zwei Schritte vorwärts.
Datenwissenschaft und maschinelles Lernen (Teil 04): Vorhersage des aktuellen Börsenkrachs Datenwissenschaft und maschinelles Lernen (Teil 04): Vorhersage des aktuellen Börsenkrachs
In diesem Artikel werde ich versuchen, unser logistisches Modell zu verwenden, um den Börsencrash auf der Grundlage der Fundamentaldaten der US-Wirtschaft vorherzusagen. NETFLIX und APPLE sind die Aktien, auf die wir uns konzentrieren werden, wobei wir die früheren Börsencrashs von 2019 und 2020 nutzen werden, um zu sehen, wie unser Modell in der aktuellen Krise abschneiden wird.