Handelsideen basierend auf der Kursrichtung und der Bewegungsgeschwindigkeit

Alexander Fedosov | 29 April, 2016

Einleitung

Es ist seit langem bekannt, dass wenn ein Kurs sich bewegt, alle liquiden Märkte eine Art von zyklischer Welle zeigen, die sich zuerst nach oben und dann nach unten bewegt. Man kann dies ganz klar auf Charts mit längeren Zeitrahmen sehen. Das sinusförmige Wesen spiegelt die Tatsache wider, dass der Kurs eine gewisse Beharrlichkeit hat. Sonst wäre ein Zick-Zack am Chart zu sehen: abrupte Auf- und Abwärtsbewegungen innerhalb kurzer Zeiträume. Lassen Sie uns versuchen, Gründe für dieses Phänomen zu finden sowie überlegen, wie wir es für den Handel verwenden können.



Beginn und Beharrlichkeit der Bewegung

Jede Bewegung in unserer Welt kann durch ihre Richtung, Beschleunigung und Geschwindigkeit charakterisiert werden. Dies funktioniert auch in liquiden Märkten. Dies impliziert eine wichtige Regel, die besagt, dass eine Bewegung, die sich stark in eine Richtung bewegt, niemals unsanft enden kann. Es kann mit einem Zug verglichen werden: wenn ein Zug mit voller Geschwindigkeit bremst, kann sein Bremsweg bis zu einen Kilometer lang sein.

Wann beginnt also ein Trend? Wenn aus irgendwelchen Gründen die Mehrheit der Marktteilnehmer ihre Meinung ändert, egal ob globale Veränderungen, wichtige Faktoren, die den Markt beeinflussen oder Nachrichten der Auslöser dafür sind. Dadurch bildet sich eine kollektive Meinung und der Trend entsteht. Die Marktteilnehmer sind zunehmend davon überzeugt, dass die Bewegung noch stärker und auch weiter gehen wird. Sie hat eine Richtung, eine Beschleunigung sowie eine bestimmte Geschwindigkeit, denn die großen Spieler am Markt steigen mit großen Positionen in den Markt ein. Dies ist der Punkt, wo diejenigen, die am Anfang der Bewegung eingestiegen sind und ihr einen Impuls sowie Geschwindigkeit gegeben haben, zu profitieren beginnen. Andere Händler steigen erst später und zu weniger attraktiven Kursen in den Markt ein. Aber im Gegensatz zu den ersten Händlern, versuchen sie die Richtung der Kursbewegung auszunutzen.

Der Trend endet, wenn Änderungen auftreten. Warum aber bewegt sich der Kurs immer noch in die gleiche Richtung? Wieso ändert er nicht abrupt die Richtung? Der Grund für ein solches Verhalten ist, dass diejenigen, die den Kurs zu Beginn in die gewünschte Richtung beschleunigt und bewegt haben, mit dem Schließen ihrer Positionen beginnen und somit den Trend unterdrücken. Und diejenigen, die gerade erst "auf die Welle aufgesprungen" sind, glauben immer noch, dass sich nichts geändert hat und versuchen sogar, den Preis weiter zu bewegen. Aber dieser "Zug" stoppt nicht nur. Der Kurs beginnt sich in die entgegengesetzte Richtung zu bewegen und hier endet die Geschichte.



Handelsidee und wie man nicht vom "Zug" überrollt wird

Die Idee, die Bewegung zu nutzen und Gewinn zu erzielen basiert auf der Analyse zur aktuellen Trendtiefe, d.h. die Größe und Dauer des Trends.

Um ein anschauliches Beispiel zu bieten, verwenden wir Standard-Indikatoren: RSI (Relative Stärke Index) und AC (Beschleunigung/Verzögerung).

1. Bedingungen für den Martkeintritt

Wir werden den ersten Indikator verwenden, um zu zeigen, wie weit und tief sich der Kurs bewegt hat.

Wir werden Levels platzieren, um einen Abstand und eine Tiefe zu bestimmen:

Fig. 1 RSI oscillator levels

Abb. 1. RSI Oszillator Levels

Die Bewertungskriterien für die Tiefe der Kursbewegung:

Kaufzonen bei einer Preisbewegung:

Lassen Sie uns nun den Index für Verkaufkurse auf gleiche Weise zuordnen:

Wir können diese Bedingungen wie folgt in der MQL4 Sprache schreiben:

//--- determining buy index
   double rsi=iRSI(Symbol(),tf,period,PRICE_CLOSE,0);
   index_rsi = 0;
   if(rsi>90.0) index_rsi=4;
   else if( rsi > 80.0 ) 
   index_rsi = 3;
   else if( rsi > 70.0 ) 
   index_rsi = 2;
   else if( rsi > 60.0 ) 
   index_rsi = 1;
   else if( rsi < 10.0 ) 
   index_rsi = -4;
   else if( rsi < 20.0 ) 
   index_rsi = -3;
   else if( rsi < 30.0 ) 
   index_rsi = -2;
   else if( rsi < 40.0 ) 
   index_rsi = -1;

Wir werden den AC-Indikator von Bill Williams für den vorgesehenen Zweck verwenden, und zwar werden wir die Geschwindigkeit und die Beschleunigung der aktuellen Bewegung messen.

Fig. 2. AC indicator

Abb. 2. AC-Indikator

Bewertungskriterien für Geschwindigkeit:

Zunahme.

Abnahme.

In MQL4 sieht dies wie folgt aus:

double ac[];
   ArrayResize(ac,5);
   for(int i=0; i<5; i++)
      ac[i]=iAC(Symbol(),tf,i);

   index_ac=0;
//--- buy signal
   if(ac[0]>ac[1])
      index_ac=1;
   else if(ac[0]>ac[1] && ac[1]>ac[2])
      index_ac=2;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3])
      index_ac=3;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3] && ac[3]>ac[4])
      index_ac=4;
//--- sell signal
   else if(ac[0]<ac[1])
      index_ac=-1;
   else if(ac[0]<ac[1] && ac[1]<ac[2])
      index_ac=-2;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3])
      index_ac=-3;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3] && ac[3]<ac[4])
      index_ac=-4;

Wenn wir Indizes zur Bewegungstiefe haben und die Bewegungsgeschwindigkeit kennen, können wir einige Einstiegsbedingungen festlegen und klassifizieren.

Es gibt Optionen für den Markteinstieg:

//--- buy signal
if(index_rsi==1 && index_ac>=1) //possible buy movement
if(index_rsi==2 && index_ac>=1) //weak buy movement
if(index_rsi==3 && index_ac==1) //weak buy movement
if(index_rsi==3 && index_ac>=2) //moderate buy movement
if(index_rsi==4 && index_ac>=1) //strong buy movement

//--- sell signal  
if(index_rsi==-1 && index_ac<=-1) //possible sell movement
if(index_rsi==-2 && index_ac<=-1) //weak sell movement
if(index_rsi==-3 && index_ac==-1) //weak sell movement
if(index_rsi==-3 && index_ac<=-2) //moderate sell movement
if(index_rsi==-4 && index_ac<=-1) //strong sell movement

//--- flat 
if(index_rsi==0) 

2. Bedingungen für den Marktaustritt

Wir haben Parameter für den Einstieg festgelegt und klassifiziert. Wir werden die folgende Analogie machen, um zu erklären, wie die Marktaustrittsbedingungen gebildet wurden.

Denken Sie zum Beispiel an einen Gummiball für Kinder. Und nun lassen Sie uns überlegen, was passiert, wenn jemand diesen Ball von einer hohen Stelle in Wasser wirft. Zunächst wird er aufgrund der Erdbeschleunigung fallen und Geschwindigkeit aufnehmen. Dann schlägt er am Wasser auf. Aber er hat genug Kraft, um bis zu einer gewissen Tiefe einzutauchen und einen negativen Wert zu erreichen, während er an Geschwindigkeitkeit verliert. Anschließend wirkt sich das Prinzip des Archimedes auf ihn aus, so dass er wieder an die Oberfläche gedrückt wird.

Wir werden nun einen Drill-down für dieses Beispiel durchführen:

Die zwei Hauptziele, um Gewinn zu erzielen, sind die folgenden:

  1. Rechtzeitig einen Moment zu bestimmen, wenn der Ball schon geworfen wurde und dann zu kaufen oder verkaufen.
  2. Eine Position zu schließen, wenn der Balls ins Wasser fällt und verlangsamt wird.

Es kann schwierig sein, die Dauer und die genaue Fallstrecke zu bestimmen, da wir weder eine Person sehen, die den Ball wirft, noch das Wasser in den Finanzmärkten. Wir können nur die Geschwindigkeit und Richtung des Balls sehen.

Wir haben die oben angeführten Bewertungskriterien für die Tiefe und die Geschwindigkeit der Kursbewegung betrachtet.

Jetzt werden wir die Austrittsbedingungen definieren:

//--- possible downward reversal
if(index_rsi>2 && index_ac<0) 

Wenn der Kurs sich lange genug nach oben bewegt hat, wird seine Beschleunigung negativ (nach unten gerichtet). Dies deutet darauf hin, dass eine Trendänderung durchaus möglich ist.

//--- possible upward reversal
if(index_rsi<-2 && index_ac>0) 

Ähnlich verhält es sich beim gegebenen Beispiel: der Ball fiel lange genug, aber er fiel ins Wasser und das Wasser drückt den Ball in die engegengesetzte Richtung. Es zeigt den Moment zum Schließen der Positionen.

3. Verbesserung der Effizienz hinsichtlich Ein- und Ausstieg

Es ist bekannt, dass einige Handelsindikatoren erst annehmbare Reaktionsgeschwindigkeit für eine Trendwende erreichen, wenn wir einen größeren Zeitraum verwenden. Jedoch erscheinen auch mehr falsche Signale.

Der alternative Weg ist nicht den Berechnungszeitraum nach unten zu ändern, sondern den Kurs auf mehreren Zeitrahmen zu verfolgen.

Fig. 3. Trend on different timeframes based on RSI and AC signals

Abb. 3. Trend auf verschiedenen Zeitrahmen, basierend auf RSI und AC Signalen

Der Trend der Kursbewegung kann klar aufgrund unserer Kriterien und der RSI und AC Indikatoren in dr Abbildung gesehen werden. Lassen Sie uns einen genaueren Blick darauf werfen.

Bewegung und Geschwindigkeit bei M1: starke Bewegung, AC Index ist 4, RSI Index-Tiefe ist 2. M5 hat die gleiche Tiefe, aber die Geschwindigkeit ist gleich 1. Die gleiche Bewegung wird bei M15 ermittelt, aber sie ist weniger sichtbar als auf den kürzeren Charts. Wenn wir über den 30-Minuten und 1-Stunden-Chart sprechen, ist es beeindruckend zu sehen, dass M30 bereits ein Signal hat und H1 bereits eine Verzögerung bzw. sogar ein mögliches Signal für eine mögliche Umkehr sieht.

Dieses Beispiel gibt uns eine gewichtige Schlussfolgerung:

Wenn wir nur H1 betrachtet hätten, hätten wir eine Verkaufsorder platziert und auf eine Umkehr gewartet. Es wäre aber ein falsches Signal gewesen, das wir aber mit Hilfe der Analyse der kürzeren Zeitrahmen herausgefiltert haben.

4. Implementierung der Handelsstrategie in Form eines Expert Advisor

Expert Advisor Code:

//+------------------------------------------------------------------+
//|                                                       tester.mq4 |
//|                                                Alexander Fedosov |
//+------------------------------------------------------------------+
#property copyright "Alexander Fedosov"
#property strict
#include <trading.mqh>      //Support library for trade operations
//+------------------------------------------------------------------+
//| Parameters                                                       |
//+------------------------------------------------------------------+
input int             SL = 40;               // Stop loss
input int             TP = 70;               // Take profit
input bool            Lot_perm=true;         // Lot of balance?
input double          lt=0.01;               // Lot
input double          risk = 2;              // Risk of deposit, %
input int             slippage= 5;           // Slippage
input int             magic=2356;            // Magic number
input int             period=8;              // RSI indicator period
input ENUM_TIMEFRAMES tf=PERIOD_CURRENT;     // Working timeframe
int dg,index_rsi,index_ac;
trading tr;
//+------------------------------------------------------------------+
//| Expert Advisor initialization function                           |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- determining variables for auxiliary class of trading functions
//--- language for displaying errors, Russian of by default.
   tr.ruErr=true;
   tr.Magic=magic;
   tr.slipag=slippage;
   tr.Lot_const=Lot_perm;
   tr.Lot=lt;
   tr.Risk=risk;
//--- number of attempts.
   tr.NumTry=5;
//--- determining decimal places on the current chart
   dg=tr.Dig();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Main calculation function                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
   depth_trend();
   speed_ac();
//--- check for presence of open orders
   if(OrdersTotal()<1)
     {
      //--- check of buy conditions
      if(Buy())
         tr.OpnOrd(OP_BUY,tr.Lots(),Ask,SL*dg,TP*dg);
      //--- check of sell conditions
      if(Sell())
         tr.OpnOrd(OP_SELL,tr.Lots(),Bid,SL*dg,TP*dg);
     }
//--- are there open orders?
   if(OrdersTotal()>0)
     {
      //--- check and close sell orders which meet closing conditions.
      if(Sell_close())
         tr.ClosePosAll(OP_SELL);
      //--- check and close buy orders which meet closing conditions.
      if(Buy_close())
         tr.ClosePosAll(OP_BUY);
     }

  }
//+------------------------------------------------------------------+
//| Function for determining the trend depth                         |
//+------------------------------------------------------------------+
void depth_trend()
  {
//--- determining buy index
   double rsi=iRSI(Symbol(),tf,period,PRICE_CLOSE,0);
   index_rsi = 0;
   if(rsi>90.0) index_rsi=4;
   else if(rsi>80.0)
      index_rsi=3;
   else if(rsi>70.0)
      index_rsi=2;
   else if(rsi>60.0)
      index_rsi=1;
   else if(rsi<10.0)
      index_rsi=-4;
   else if(rsi<20.0)
      index_rsi=-3;
   else if(rsi<30.0)
      index_rsi=-2;
   else if(rsi<40.0)
      index_rsi=-1;
  }
//+------------------------------------------------------------------+
//| Function for determining the trend speed                         |
//+------------------------------------------------------------------+
void speed_ac()
  {
   double ac[];
   ArrayResize(ac,5);
   for(int i=0; i<5; i++)
      ac[i]=iAC(Symbol(),tf,i);

   index_ac=0;
//--- buy signal
   if(ac[0]>ac[1])
      index_ac=1;
   else if(ac[0]>ac[1] && ac[1]>ac[2])
      index_ac=2;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3])
      index_ac=3;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3] && ac[3]>ac[4])
      index_ac=4;
//--- sell signal
   else if(ac[0]<ac[1])
      index_ac=-1;
   else if(ac[0]<ac[1] && ac[1]<ac[2])
      index_ac=-2;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3])
      index_ac=-3;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3] && ac[3]<ac[4])
      index_ac=-4;
  }
//+------------------------------------------------------------------+
//| Function for checking buy conditions                             |
//+------------------------------------------------------------------+
bool Buy()
  {
   bool res=false;
   if((index_rsi==2 && index_ac>=1) || (index_rsi==3 && index_ac==1))
      res=true;
   return (res);
  }
//+------------------------------------------------------------------+
//| Function for checking sell conditions                            |
//+------------------------------------------------------------------+
bool Sell()
  {
   bool res=false;
   if((index_rsi==-2 && index_ac<=-1) || (index_rsi==-3 && index_ac==-1))
      res=true;
   return (res);
  }
//+------------------------------------------------------------------+
//| Function for checking buy position closing conditions            |
//+------------------------------------------------------------------+
bool Buy_close()
  {
   bool res=false;
   if(index_rsi>2 && index_ac<0)
      res=true;
   return (res);
  }
//+------------------------------------------------------------------+
//| Function for checking sell position closing conditions           |
//+------------------------------------------------------------------+
bool Sell_close()
  {
   bool res=false;
   if(index_rsi<-2 && index_ac>0)
      res=true;
   return (res);
  }

Wir haben eine kleine Optimierung mit nur zwei Parametern durchgeführt: tf (Arbeitszeitrahmen) und period (RSI-Indikator Periode).

Und wir haben folgende Ergebnisse bei M15 erhalten:


Abb. 4. Die Expert Advisor Backtesting-Ergebnisse

Achtung! Dies ist nur eine Demoversion. Wir empfehlen, diese nicht für Tests oder bei Echtgeldkonten zu verwenden.


Fazit

Das Bestimmen des Anfangs und des Endes eines Trends ist für Händler auf der ganzen Welt eine komplizierte Aufgabe, da es unmöglich ist, das Marktverhalten vorherzusagen.

Aber es ist durchaus möglich, die Ein- und Ausstiegsmomente bei einem aktuellen Trend zu bestimmen und so beträchtliche Gewinne zu lukrieren. Und die allgemeine Idee der Bestimmung und der dynamischen Verfolgung der Bewegungsgeschwindigeit kann in dieser Angelegenheit sehr hilfreich sein.

Wir wünschen Ihnen einen erfolgreichen Handel.