Vergleichende Analyse von 10 Handelsstrategien für Seitwärtsbewegungen

20 August 2018, 08:45
Alexander Fedosov
0
283

Inhaltsverzeichnis

Einführung

Trendfolgende Strategien sind vor allem für Anfänger sehr beliebt und einfach zu handhaben. Allerdings sind die aktuellen Märkte dynamischer geworden, während die Trendbewegungen weniger ausgeprägt sind (sowohl hinsichtlich der Reichweite als auch der Dauer). Indem wir die Möglichkeit des Handels in flachen oder seitwärts gerichteten Märkten nicht nutzen, verlieren wir potenzielle Gewinne. Trendfolgende Handelsregeln sind einfach: Erkennen Sie die Anzeichen eines Trends und versuchen Sie, daraus Kapital zu schlagen. Der Handel in Seitwärtsbewegungen unterscheidet sich stark davon. Während der Seitwärtsbewegung bewegt sich der Kurs in einer kleinen Spanne und kann für längere Zeit unverändert bleiben. Es gibt keine gerichtete Bewegung im Markt, und die Liquidität ist gering.

Formulieren der Aufgabe einer Handelsstrategie für Seitwärtsbewegungen

Im vorherigen Artikel, definierte ich drei Aufgaben, um eine Trendstrategie zu erstellen. Die Aufgaben, für eine Strategie in den Seitwärtsbewegungen sind sehr ähnlich.

Abb. 1. Beispiel einer Seitwärtsbewegung.

Aufgabe 1. Identifizieren der Seitwärtsbewegung.

Es gibt keine allgemeine und erschöpfende Definition einer Seitwärtsbewegung (eigentlich gibt es auch keine richtige Beschreibung eines Trends). Allerdings kann es gewisse Anzeichen dafür geben, wenn sich der Markt aktuell in einer Seitwärtsbewegung befindet. Diese Bewegung wird auch als Seitwärtsbewegung bezeichnet, da es keine klare vertikale Bewegung entweder nach oben oder nach unten gibt. Der Preis bewegt sich innerhalb einer Spanne und nähert sich in Wellen seinen unteren und oberen Grenzen. Ein weiteres Zeichen für eine Seitwärtsbewegung kann ein geringes Handelsvolumen am Markt oder ein geringes Interesse der Marktteilnehmer sein. Dies zeigt sich sowohl an einer schwachen Preisveränderung als auch am geringen Tickvolumen.

Aufgabe 2. Die Ziele offener Positionen.

Der Kanalhandel wird häufig mit einem Seitwärtshandel in Verbindung gebracht. Dies ist die wichtigste Methode, um die Seitwärtsbewegung zur Gewinnerzielung zu nutzen. Mit virtuellen Grenzen wird ein Seitwärtskanal festgelegt. Darüber hinaus basiert die Handelsstrategie auf den Beziehungen zwischen dem Preis und den Kanalgrenzen. Meistens impliziert die Strategie Kaufen oder Verkaufen, wenn der Preis von der Kanalgrenze abprallt (Abb. 2).

Abb. 2. Handeln, wenn der Preis von den Kanalgrenzen abprallt.

Beim Verkauf im oberen Teil des Kanals gehen wir davon aus, dass sich der Preis in Richtung der unteren Grenze bewegt. Das wird uns als Take-Profit dienen. Stop-Loss kann als ein bestimmter Zahlenwert in Points oder entsprechend der Kanalgrenze eingestellt werden. Eine umgekehrte Strategie wird für das Kaufen verwendet: Kaufen an der unteren Kanalgrenze und Setzen des Take-Profits nahe der oberen Grenze.

Handelsstrategien in Seitwärtsbewegungen

Ich habe die oben genannten Prinzipien bei der Auswahl von Handelsstrategien in Seitwärtsbewegungen verwendet.

  • Der Handel wird innerhalb des Kanals durchgeführt. Daher müssen wir Werkzeuge wählen, die uns helfen, einen Kanal zu bauen und die virtuellen Grenzen der Seitwärtsbewegung zu bestimmen.
  • Zusätzlich zur Definition des Kanals benötigen wir noch mindestens ein weiteres Tool, um zu bestätigen, dass der Preis nach dem Rückprall von der Kanalgrenze in die richtige Richtung geht. Der Zweck eines solchen Filters ist es, falsche Eröffnungssignale zu vermeiden.

Strategie #1. Der Indikator Envelopes mit einem Filter auf Basis des MFI

 Die Kanalgrenzen werden anhand des Indikators Envelopes bestimmt. Der Indikator MFI dient zusätzlich zur Filterung der Signale.

Indikator Parameter Beschreibung
Verwendeter Indikator Envelopes
Verwendeter Indikator MFI
Zeitrahmen H1
Kaufbedingungen Der Preis erreicht die untere Kanalgrenze, und MFI befindet sich in der überkauften Zone (unter 20).
Verkaufsbedingungen Der Preis erreicht die obere Kanalgrenze, und MFI befindet sich in der überkauften Zone (über 80).
Ausstiegsbedingungen   Der Preis erreicht die gegenüberliegende Kanalgrenze

Fig. 3 Eröffnungsbedingungen nach Strategie #1.

Abb. 3. Eröffnungsbedingungen für den Seitwärtshandel der Strategie #1

Der Code des Expert Advisors, der nach dieser Strategie handelt, ist anschließend aufgeführt:

void OnTick()
  {
//--- Prüfung auf bereits geöffnete Positionen des EAs
   if(!Trade.IsOpenedByMagic(Inp_MagicNum))
     {
      //--- Datenabfrage für die Berechnung
      if(!GetIndValue())
         return;
      //--- Eröffnen einer Position wegen eines Kaufsignals
      if(BuySignal())
         Trade.BuyPositionOpen(Symbol(),Inp_Lot,close[0]-Inp_StopLoss*_Point,tp,Inp_MagicNum,Inp_EaComment);

      //--- Eröffnen einer Position wegen eines Verkaufssignals
      if(SellSignal())
         Trade.SellPositionOpen(Symbol(),Inp_Lot,close[0]+Inp_StopLoss*_Point,tp,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Kaufbedingungen                                                  |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   if(mfi[0]<20 && env_low[0]>close[0])
     {
      tp=env_high[0];
      return true;
     }
   else
      return false;
  }
//+------------------------------------------------------------------+
//| Verkaufsbedingungen                                              |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   if(mfi[0]>80 && env_high[0]<close[0])
     {
      tp=env_low[0];
      return true;
     }
   else
      return false;
  }
//+------------------------------------------------------------------+
//| Abfrage der aktuellen Indikatorwerte                             |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,mfi)<=0  ||
          CopyBuffer(InpInd_Handle2,1,0,2,env_low)<=0 || 
          CopyBuffer(InpInd_Handle2,0,0,2,env_high)<=0 || 
          CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0
          )?false:true;
  }
//+------------------------------------------------------------------+

Take-Profit wird automatisch gemäß den eingestellten Bedingungen gesetzt, während Stop-Loss je nach Zeitrahmen manuell gesetzt wird.

Strategie #2. Die Bollinger Bänder und zwei gleitende Durchschnitte

Die Kanalgrenzen werden über Bollinger Bänder bestimmt, und die Signale werden anhand der relativen Position der langsamen und schnellen MAs gefiltert.

Indikator Parameter Beschreibung
Verwendeter Indikator Bollinger Bänder
Verwendeter Indikator Gleitender Durchschnitt
Zeitrahmen H1
Kaufbedingungen Der Preis erreicht die untere Kanalgrenze, und der schnelle MA liegt über dem langsamen.
Verkaufsbedingungen Der Preis erreicht die obere Kanalgrenze, und der schnelle MA liegt unter dem langsamen.
Ausstiegsbedingungen   Der Preis erreicht die gegenüberliegende Kanalgrenze

Fig. 4 zeigt die Eröffnungsbedingungen. Die standardmäßige Periodenlänge der beiden SMA sind klein: 4 und 8. Die Periodenlänge und das Glättungsverfahren können angepasst werden, damit kann die Sensitivität des Filter der Bollinger Bänder für die Signale verändert werden.

Fig. 4. Eröffnungsbedingungen für den Seitwärtshandel der Strategie #2

Bis auf die Eröffnungsbedingungen ist Strategie #2 sehr ähnlich zu Strategie #1. 

void OnTick()
  {
//--- Prüfung auf bereits geöffnete Positionen des EAs
   if(!Trade.IsOpenedByMagic(Inp_MagicNum))
     {
      //--- Datenabfrage für die Berechnung
      if(!GetIndValue())
         return;
      //--- Eröffnen einer Position wegen eines Kaufsignals
      if(BuySignal())
         Trade.BuyPositionOpen(Symbol(),Inp_Lot,close[0]-Inp_StopLoss*_Point,tp,Inp_MagicNum,Inp_EaComment);

      //--- Eröffnen einer Position wegen eines Verkaufssignals
      if(SellSignal())
         Trade.SellPositionOpen(Symbol(),Inp_Lot,close[0]+Inp_StopLoss*_Point,tp,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Kaufbedingungen                                                  |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   if(ma_slow[0]>ma_fast[0] && bb_low[0]>close[0])
     {
      tp=bb_up[0];
      return true;
     }
   else
      return false;
  }
//+------------------------------------------------------------------+
//| Verkaufsbedingungen                                              |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   if(ma_slow[0]<ma_fast[0] && bb_up[0]<close[0])
     {
      tp=bb_low[0];
      return true;
     }
   else
      return false;
  }
//+------------------------------------------------------------------+
//| Abfrage der aktuellen Indikatorwerte                             |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,1,0,2,bb_up)<=0  ||
          CopyBuffer(InpInd_Handle1,2,0,2,bb_low)<=0 || 
          CopyBuffer(InpInd_Handle2,0,0,2,ma_slow)<=0 ||
          CopyBuffer(InpInd_Handle3,0,0,2,ma_fast)<=0 ||
          CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0
          )?false:true;
  }
//+------------------------------------------------------------------+

Strategie #3. WSO & WRO Kanal und Ehlers' fraktale Dimension

Die Hauptsignalindikator ist WSO & WRO Channel, ein Kanal, der auf zwei Oszillatoren basiert: WSO (Widner Support Oszillator) und WRO (Widner Resistance Oszillator). Die Idee des Indikators basiert auf dem Artikel "Automated Support and Resistance" von Mel Widner. Um die Signale zu filtern, verwenden wir den Indikator Fraktale Dimension, der im Artikel "Fractal Dimension as a Market Mode Sensor" von John F. Ehlers und Ric Way beschrieben wurde. 

Indikator Parameter Beschreibung
Verwendeter Indikator WSO & WRO Channel
Verwendeter Indikator Ehlers' Fractal Dimension
Zeitrahmen Jeder
Kaufbedingungen Der Preis erreicht die untere Kanalgrenze, und Fractal Dimension liegt unter dem Schwellenwert.
Verkaufsbedingungen Der Preis erreicht die obere Kanalgrenze, und Fractal Dimension liegt über dem Schwellenwert.
Ausstiegsbedingungen   Der Preis erreicht die gegenüberliegende Kanalgrenze

Fig. 4 zeigt die Eröffnungsbedingungen. Ähnlich wie bei früheren Strategien werden Handelsoperationen durchgeführt, wenn der Preis von den Kanalgrenzen abprallt. Der Filter hilft, die Einstiegspunkte zu finden, wenn der Markt keinen Trend aufweist.


Abb. 5. Eröffnungsbedingungen für den Seitwärtshandel der Strategie #3

Der Code des Expert Advisors, der nach dieser Strategie handelt, ist anschließend aufgeführt:

void OnTick()
  {
//--- Prüfung auf bereits geöffnete Positionen des EAs
   if(!Trade.IsOpenedByMagic(Inp_MagicNum))
     {
      //--- Datenabfrage für die Berechnung
      if(!GetIndValue())
         return;
      //--- Eröffnen einer Position wegen eines Kaufsignals
      if(BuySignal())
         Trade.BuyPositionOpen(Symbol(),Inp_Lot,close[0]-Inp_StopLoss*_Point,tp,Inp_MagicNum,Inp_EaComment);

      //--- Eröffnen einer Position wegen eines Verkaufssignals
      if(SellSignal())
         Trade.SellPositionOpen(Symbol(),Inp_Lot,close[0]+Inp_StopLoss*_Point,tp,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Kaufbedingungen                                                  |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   if(wwc_low[0]>close[0] && fdi[0]<Inp_FdiThreshold)
     {
      tp=wwc_up[0];
      return true;
     }
   else
      return false;
  }
//+------------------------------------------------------------------+
//| Verkaufsbedingungen                                              |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   if(wwc_up[0]<close[0] && fdi[0]<Inp_FdiThreshold)
     {
      tp=wwc_low[0];
      return true;
     }
   else
      return false;
  }
//+------------------------------------------------------------------+
//| Abfrage der aktuellen Indikatorwerte                             |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,3,0,2,wwc_up)<=0  ||
          CopyBuffer(InpInd_Handle1,2,0,2,wwc_low)<=0 || 
          CopyBuffer(InpInd_Handle2,0,0,2,fdi)<=0 || 
          CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0
          )?false:true;
  }
//+------------------------------------------------------------------+

Strategie #4. Der Indikator Percentage Crossover Channel und dem Filter TrendRange

In diesem Fall wird der Kanal beim Ausbrechen aus den Levels um einen bestimmten Prozentsatz aufgebaut. Wir brauchen einen Indikator für den Aufbau des Kanals, die Suche nach Punkten, an denen der Preis von den Kanalgrenzen abprallt und einen Signalfilter. Wir verwenden den Indikator TrendRange, der sowohl einen Trend als auch die Seitwärtsbewegung anzeigt. Die Situationen werden zur Filterung von Signalen verwendet.

Indikator Parameter Beschreibung
Verwendeter Indikator Percentage Crossover Channel
Verwendeter Indikator Trend Range
Zeitrahmen Jeder
Kaufbedingungen Der Preis erreicht die untere Kanalgrenze, und das Histogramm von Trend Range ist grau.
Verkaufsbedingungen Der Preis erreicht die obere Kanalgrenze, und das Histogramm von Trend Range ist grau.
Ausstiegsbedingungen   Der Preis erreicht die gegenüberliegende Kanalgrenze

Die Eröffnungsbedingungen zeigt Fig. 6. Der Indikator Percentage Crossover hat eine Reihe von Besonderheiten. Der Parameter Prozent ist der Grenzabstand, nach dessen Überschreitung eine neue Ebenenkonstruktion beginnt, und der Parameter ist zeitabhängig. Ein kleinerer Prozentsatz sollte auf niedrigere Zeiträume eingestellt werden. Zum Beispiel ist der empfohlene Wert für den stündlichen Zeitraum 20 - 30. Höhere Werte führen zu einer zu hohen Selektivität des Indikators.

Abb. 6. Eröffnungsbedingungen für den Seitwärtshandel der Strategie #4

Der Code der Strategie ist anschließen aufgelistet:

void OnTick()
  {
//--- Prüfung auf bereits geöffnete Positionen des EAs
   if(!Trade.IsOpenedByMagic(Inp_MagicNum))
     {
      //--- Datenabfrage für die Berechnung
      if(!GetIndValue())
         return;
      //--- Eröffnen einer Position wegen eines Kaufsignals
      if(BuySignal())
         Trade.BuyPositionOpen(Symbol(),Inp_Lot,close[0]-Inp_StopLoss*_Point,tp,Inp_MagicNum,Inp_EaComment);

      //--- Eröffnen einer Position wegen eines Verkaufssignals
      if(SellSignal())
         Trade.SellPositionOpen(Symbol(),Inp_Lot,close[0]+Inp_StopLoss*_Point,tp,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Kaufbedingungen                                                  |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   if(pcc_low[0]>close[0] && tr_flat[0]>tr_range[0])
     {
      tp=pcc_up[0];
      return true;
     }
   else
      return false;
  }
//+------------------------------------------------------------------+
//| Verkaufsbedingungen                                              |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   if(pcc_up[0]<close[0] && tr_flat[0]>tr_range[0])
     {
      tp=pcc_low[0];
      return true;
     }
   else
      return false;
  }
//+------------------------------------------------------------------+
//| Abfrage der aktuellen Indikatorwerte                             |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,pcc_up)<=0  ||
          CopyBuffer(InpInd_Handle1,2,0,2,pcc_low)<=0 || 
          CopyBuffer(InpInd_Handle2,1,0,2,tr_flat)<=0 ||
          CopyBuffer(InpInd_Handle2,2,0,2,tr_range)<=0 ||
          CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0
          )?false:true;
  }
//+------------------------------------------------------------------+

Strategie #5. Der Indikator Price Channel mit dem Filter RBVI

Der Indikator Price Channel bildet den Kanal, dessen obere und untere Grenze durch den höchsten und den niedrigsten Preis einer Zeitspanne bestimmt wird. Falsche Signale werden vom RBVI herausgefiltert, der auch das Vorhandensein einer Seitwärtsbewegung des Marktes festlegt. 

Indikator Parameter Beschreibung
Verwendeter Indikator Price Channel
Verwendeter Indikator RBVI
Zeitrahmen Jeder
Kaufbedingungen Der Preis erreicht die untere Kanalgrenze, und der RBVI liegt unter dem Schwellenwert.
Verkaufsbedingungen Der Preis erreicht die obere Kanalgrenze, und der RBVI liegt über dem Schwellenwert.
Ausstiegsbedingungen   Der Preis erreicht die gegenüberliegende Kanalgrenze

Die Eröffnungsbedingungen zeigt Fig. 7. Der Schwellenwert für den RBVI ist 40. Der Wert kann in den Parametern des Expert Advisors verändert werden.

Abb. 7. Eröffnungsbedingungen für den Seitwärtshandel der Strategie #5

Hier ist der Code dieser Strategie:

void OnTick()
  {
//--- Prüfung auf bereits geöffnete Positionen des EAs
   if(!Trade.IsOpenedByMagic(Inp_MagicNum))
     {
      //--- Datenabfrage für die Berechnung
      if(!GetIndValue())
         return;

      //--- Eröffnen einer Position wegen eines Kaufsignals
      if(BuySignal())
         Trade.BuyPositionOpen(Symbol(),Inp_Lot,close[0]-Inp_StopLoss*_Point,tp,Inp_MagicNum,Inp_EaComment);

      //--- Eröffnen einer Position wegen eines Verkaufssignals
      if(SellSignal())
         Trade.SellPositionOpen(Symbol(),Inp_Lot,close[0]+Inp_StopLoss*_Point,tp,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Kaufbedingungen                                                  |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   if(pc_low[0]>close[0] && rbvi[0]<=Inp_level)
     {
      tp=pc_up[0];
      return true;
     }
   else
      return false;
  }
//+------------------------------------------------------------------+
//| Verkaufsbedingungen                                              |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   if(pc_up[0]<close[0] && rbvi[0]<=Inp_level)
     {
      tp=pc_low[0];
      return true;
     }
   else
      return false;
  }
//+------------------------------------------------------------------+
//| Abfrage der aktuellen Indikatorwerte                             |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,pc_up)<=0  ||
          CopyBuffer(InpInd_Handle1,1,0,2,pc_low)<=0 || 
          CopyBuffer(InpInd_Handle2,0,0,2,rbvi)<=0 ||
          CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0
          )?false:true;
  }
//+------------------------------------------------------------------+

Strategie #6. Der Indikator Williams Percent Range und dem ADX als Filter

Williams' Percent Range, der den überkauften/überkauften Zustand bestimmt, wird für die Suche nach Einstiegspunkten verwendet. Da es unser Ziel ist, in einer Seitwärtsbewegung zu handeln oder, wenn der Kurs in eine bestimmte Spanne zurückkehren soll, verwenden wir den Trendindikator ADX, um das Fehlen eines Trends zu erkennen. 

Indikator Parameter Beschreibung
Verwendeter Indikator Williams Percent Range
Verwendeter Indikator ADX
Zeitrahmen Jeder
Kaufbedingungen Der Indikator WPR liegt im überverkauften Bereich (unter -80) und der ADX unter dem Schwellenwert.
Verkaufsbedingungen Der Indikator WPR liegt im überkauften Bereich (über -20) und der ADX unter dem Schwellenwert.
Ausstiegsbedingungen   Take-Profit/Stop-Loss

Wie man in Fig. 8 sieht ist der Schwellenwert des ADX für die Seitwärtsbewegung 30. Der Wert kann im Code des Expert Advisors angepasst werden.

Abb. 8. Eröffnungsbedingungen für den Seitwärtshandel der Strategie #6

Die Umsetzung der Strategie ist im Folgenden aufgelistet. Hier setzt die Variable Inp_FlatLevel den oben genannten ADX-Schwellwert.

void OnTick()
  {
//--- Prüfung auf bereits geöffnete Positionen des EAs
   if(!Trade.IsOpenedByMagic(Inp_MagicNum))
     {
      //--- Datenabfrage für die Berechnung
      if(!GetIndValue())
         return;

      //--- Eröffnen einer Position wegen eines Kaufsignals
      if(BuySignal())
         Trade.BuyPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);

      //--- Eröffnen einer Position wegen eines Verkaufssignals
      if(SellSignal())
         Trade.SellPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Kaufbedingungen                                                  |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   return(wpr[0]<-80 && adx[0]<Inp_FlatLevel)?true:false;
  }
//+------------------------------------------------------------------+
//| Verkaufsbedingungen                                              |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   return(wpr[0]>=-20 && adx[0]<Inp_FlatLevel)?true:false;
  }
//+------------------------------------------------------------------+
//| Abfrage der aktuellen Indikatorwerte                             |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,wpr)<=0  ||
          CopyBuffer(InpInd_Handle2,0,0,2,adx)<=0)?false:true;
  }
//+------------------------------------------------------------------+

Strategie #7. Ein veränderter Keltnerkanal mit dem Filter Magic Trend

Preise, die von Keltnerkanal abprallen werden mit dem Indikator Magic Trend erfasst, der auch die Seitwärtsbewegung festlegt.

Indikator Parameter Beschreibung
Verwendeter Indikator Modifizierter Keltnerkanal
Verwendeter Indikator Magic Trend
Zeitrahmen Jeder
Kaufbedingungen Der Preis erreicht die untere Kanalgrenze, und die Linie vom Magic Trend ist grau.
Verkaufsbedingungen Der Preis erreicht die obere Kanalgrenze, und die Linie vom Magic Trend ist grau.
Ausstiegsbedingungen   Der Preis erreicht die gegenüberliegende Kanalgrenze

Diese Handelsstrategie ist in Abb. 9 dargestellt. Der Wert des Magic Trend wird während einer Seitwärtsbewegung nicht verändert, d.h. er wird als graue horizontale Linie dargestellt. Daher überprüfen wir zusätzlich zum Erreichen der Kanalgrenze den Zustand von Magic Trend, der für einige Zeit in einem flachen Zustand sein sollte. Diese Prüfung wird als Vergleich der Werte des aktuellen mit dem vorherigen Balken durchgeführt - sie sollten gleich sein.

Abb. 9. Eröffnungsbedingungen für den Seitwärtshandel der Strategie #7.

Der Code enthält die Funktionen zur Prüfung der Kauf/Verkaufsbedingung:

void OnTick()
  {
//--- Prüfung auf bereits geöffnete Positionen des EAs
   if(!Trade.IsOpenedByMagic(Inp_MagicNum))
     {
      //--- Datenabfrage für die Berechnung
      if(!GetIndValue())
         return;

      //--- Eröffnen einer Position wegen eines Kaufsignals
      if(BuySignal())
         Trade.BuyPositionOpen(Symbol(),Inp_Lot,close[0]-Inp_StopLoss*_Point,tp,Inp_MagicNum,Inp_EaComment);

      //--- Eröffnen einer Position wegen eines Verkaufssignals
      if(SellSignal())
         Trade.SellPositionOpen(Symbol(),Inp_Lot,close[0]+Inp_StopLoss*_Point,tp,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Kaufbedingungen                                                  |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   if(kc_low[0]>close[0] && mt[0]==mt[1])
     {
      tp=kc_up[0];
      return true;
     }
   else
      return false;
  }
//+------------------------------------------------------------------+
//| Verkaufsbedingungen                                              |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   if(kc_up[0]<close[0] && mt[0]==mt[1])
     {
      tp=kc_low[0];
      return true;
     }
   else
      return false;
  }
//+------------------------------------------------------------------+
//| Abfrage der aktuellen Indikatorwerte                             |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,kc_up)<=0  ||
          CopyBuffer(InpInd_Handle1,2,0,2,kc_low)<=0 || 
          CopyBuffer(InpInd_Handle2,0,0,2,mt)<=0 || 
          CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0
          )?false:true;
  }
//+------------------------------------------------------------------+

Strategie #8. Der Donchian Kanal mit der Bestätigung durch Trinity Impulse

In diesem Fall versuchen wir, die Momente einzufangen, in denen der Preis von den Grenzen des Donchian-Kanals abprallt, während sich der Indikator Trinity-Impulse im Zustand der Seitwärtsbewegung befindet.  

Indikator Parameter Beschreibung
Verwendeter Indikator Donchian Channel
Verwendeter Indikator Trinity Impulse
Zeitrahmen Niedrigerer Zeitrahmen
Kaufbedingungen Der Preis erreicht die untere Kanalgrenze, und der Wert des Trinity Impulse ist 0.
Verkaufsbedingungen Der Preis erreicht die obere Kanalgrenze, und der Wert des Trinity Impulse ist 0.
Ausstiegsbedingungen   Der Preis erreicht die gegenüberliegende Kanalgrenze

Die Eröffnungsbedingungen zeigt Fig. 10. Die Strategie wird nicht für den Einsatz mit höheren Zeitrahmen empfohlen, da der Filter Trinity-Impuls das Verhalten einer Stichsäge zeigt, während der die Darstellung der Seitwärtsbewegung verzögert ist. Ihre Breite ist sehr gering, und das macht die Strategie zu selektiv. Optimal wären die Zeitrahmen von 5 bis 30 Minuten.

Abb. 10. Eröffnungsbedingungen für den Seitwärtshandel der Strategie #8.

Die Umsetzung des Expert Advisor auf Basis die oben erwähnten Strategie:

void OnTick()
  {
//--- Prüfung auf bereits geöffnete Positionen des EAs
   if(!Trade.IsOpenedByMagic(Inp_MagicNum))
     {
      //--- Datenabfrage für die Berechnung
      if(!GetIndValue())
         return;
         
      //--- Eröffnen einer Position wegen eines Kaufsignals
      if(BuySignal())
         Trade.BuyPositionOpen(Symbol(),Inp_Lot,close[0]-Inp_StopLoss*_Point,tp,Inp_MagicNum,Inp_EaComment);

      //--- Eröffnen einer Position wegen eines Verkaufssignals
      if(SellSignal())
         Trade.SellPositionOpen(Symbol(),Inp_Lot,close[0]+Inp_StopLoss*_Point,tp,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Kaufbedingungen                                                  |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   if(dc_low[0]>close[0] && ti[0]==0)
     {
      tp=dc_up[0];
      return true;
     }
   else
      return false;
  }
//+------------------------------------------------------------------+
//| Verkaufsbedingungen                                              |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   if(dc_up[0]<close[0] && ti[0]==0)
     {
      tp=dc_low[0];
      return true;
     }
   else
      return false;
  }
//+------------------------------------------------------------------+
//| Abfrage der aktuellen Indikatorwerte                             |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,dc_up)<=0  ||
          CopyBuffer(InpInd_Handle1,1,0,2,dc_low)<=0 || 
          CopyBuffer(InpInd_Handle2,0,0,2,ti)<=0 || 
          CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0
          )?false:true;
  }
//+------------------------------------------------------------------+

Strategie #9. Der Indikator ATR Channel und einem Filter auf Basis des CCI

Der ATR Channel basiert auf dem Abstand des ATR vom gleitenden Durchschnitt. CCI Color Levels ist ein CCI-Indikator, der als Histogramm von Schwellenwerten angezeigt wird, die eine Preisbewegung anzeigen. Wir verwenden diesen Indikator, um die Seitwärtsbewegung des Kanals zu filtern (wenn CCI zwischen den Schwellenwerten liegt).

Indikator Parameter Beschreibung
Verwendeter Indikator ATR Channel
Verwendeter Indikator CCI Farbebenen
Zeitrahmen Jeder
Kaufbedingungen Der Preis erreicht die untere Kanalgrenze, und der Wert des CCI Color Levels liegt innerhalb der beiden Schwellenwerte.
Verkaufsbedingungen Der Preis erreicht die obere Kanalgrenze, und der Wert des CCI Color Levels liegt innerhalb der beiden Schwellenwerte.
Ausstiegsbedingungen   Der Preis erreicht die gegenüberliegende Kanalgrenze

Fig. 11 zeigt die Eröffnungsbedingungen. In einigen Fällen kann der Preis den Kanal verlassen, aber der CCI-basierte Filter im angegebenen Bereich zeigt, dass der Preis in den Kanal zurückkehren und den eingestellten Take-Profit erreichen kann.


Fig. 11. Eröffnungsbedingungen für den Seitwärtshandel der Strategie #9.

Der Code des Expert Advisors, der nach dieser Strategie handelt, ist anschließend aufgeführt:

void OnTick()
  {
//--- Prüfung auf bereits geöffnete Positionen des EAs
   if(!Trade.IsOpenedByMagic(Inp_MagicNum))
     {
      //--- Datenabfrage für die Berechnung
      if(!GetIndValue())
         return;

      //--- Eröffnen einer Position wegen eines Kaufsignals
      if(BuySignal())
         Trade.BuyPositionOpen(Symbol(),Inp_Lot,close[0]-Inp_StopLoss*_Point,tp,Inp_MagicNum,Inp_EaComment);

      //--- Eröffnen einer Position wegen eines Verkaufssignals
      if(SellSignal())
         Trade.SellPositionOpen(Symbol(),Inp_Lot,close[0]+Inp_StopLoss*_Point,tp,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Kaufbedingungen                                                  |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   if(atr_low[0]>close[0] && cci[0]<Inp_CCI_LevelUP && cci[0]>Inp_CCI_LevelDOWN)
     {
      tp=atr_up[0];
      return true;
     }
   else
      return false;
  }
//+------------------------------------------------------------------+
//| Verkaufsbedingungen                                              |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   if(atr_up[0]<close[0] && cci[0]<Inp_CCI_LevelUP && cci[0]>Inp_CCI_LevelDOWN)
     {
      tp=atr_low[0];
      return true;
     }
   else
      return false;
  }
//+------------------------------------------------------------------+
//| Abfrage der aktuellen Indikatorwerte                             |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,1,0,2,atr_up)<=0  ||
          CopyBuffer(InpInd_Handle1,2,0,2,atr_low)<=0 || 
          CopyBuffer(InpInd_Handle2,2,0,2,cci)<=0 || 
          CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0
          )?false:true;
  }
//+------------------------------------------------------------------+

Strategie #10. Das RSI-Histogramm und dem Indikator Flat als Filter

Der RSI in Form eines Histogramms bietet eine bessere Visualisierung, da die wichtigsten Markteintrittssignale in den überkauften/überverkauften Zonen generiert werden. Flat wird verwendet, um falsche Signale herauszufiltern. 

Indikator Parameter Beschreibung
Verwendeter Indikator RSI_Histogram
Verwendeter Indikator Flat
Zeitrahmen Jeder
Kaufbedingungen Der RSI liegt im überverkauften Bereich (unter dem Schwellenwert) und Flat im flachen Bereich.
Verkaufsbedingungen Der RSI liegt im überkauften Bereich (unter dem Schwellenwert) und Flat im flachen Bereich.
Ausstiegsbedingungen   Take-Profit/Stop-Loss

Die Eröffnungsbedingungen zeigt Fig. 12. Der RSI als Histogramm ist die geeignetere Darstellung, um die die überkauft/überverkauften Bereiche und die Seitwärtszone des Flat zu erkennen.

Fig. 12. Eröffnungsbedingungen für den Seitwärtshandel der Strategie #10.

Die Umsetzung des Expert Advisor auf Basis die oben erwähnten Strategie ist anschließend aufgeführt:

void OnTick()
  {
//--- Prüfung auf bereits geöffnete Positionen des EAs
   if(!Trade.IsOpenedByMagic(Inp_MagicNum))
     {
      //--- Datenabfrage für die Berechnung
      if(!GetIndValue())
         return;

      //--- Eröffnen einer Position wegen eines Kaufsignals
      if(BuySignal())
         Trade.BuyPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);

      //--- Eröffnen einer Position wegen eines Verkaufssignals
      if(SellSignal())
         Trade.SellPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Kaufbedingungen                                                  |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   return(rsi[0]<Inp_LowLevel && fl[0]<Inp_FLowLevel)?true:false;
  }
//+------------------------------------------------------------------+
//| Verkaufsbedingungen                                              |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   return(rsi[0]>Inp_HighLevel && fl[0]<Inp_FLowLevel)?true:false;
  }
//+------------------------------------------------------------------+
//| Abfrage der aktuellen Indikatorwerte                             |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,rsi)<=0  ||
          CopyBuffer(InpInd_Handle2,0,0,2,fl)<=0)?false:true;
  }
//+------------------------------------------------------------------+

Tests

Nun, da wir 10 Handelsstrategien für die Seitwärtsbewegung definiert und in den Code implementiert haben, wählen wir die gemeinsamen Testbedingungen aus.

  • Testintervall: Letztes Jahr.
  • Währungspaar EURUSD.
  • Handelsmodus: Keine Verzögerung (Dies sind keine hochfrequenten Handelsstrategien, daher wäre der Effekt von Verzögerungen sehr gering). 
  • Testen: M1 OHLC (Pre-Testing mit echten Ticks zeigt fast die gleichen Ergebnisse).
  • Erste Einzahlung: 1000 USD.
  • Leverage: 1:500.
  • Server: MetaQuotes-Demo.
  • Kurse: 5 Dezimalstellen.

Strategie #1 Test (Der Indikator Envelopes mit einem Filter auf Basis des MFI)

Voreinstellung:

input int                  Inp_StopLoss=500;                            //Stop-Loss(points)

//--- Indikatorparameter des MFI
input ENUM_APPLIED_VOLUME  Inp_applied_volume=VOLUME_TICK;              // MFI Volumenstyp
input int                  Inp_MFI_period=10;                           // MFI Periodenlänge
//--- Indikatorparameter von Envelopes
input int                  Inp_ma_period=10;                            // Envelopes MA Periodenlänge
input ENUM_MA_METHOD       Inp_ma_method=MODE_SMA;                      // Envelopes Glättungstyp
input double               Inp_deviation=0.1;                           // Abweichung der Grenzen vom MA von Envelopes

Test-Ergebnisse:

Abb. 13. Flat Strategie #1. Testergebnisse.

Strategie #2 Test (Die Bollinger Bänder und zwei gleitende Durchschnitte)

Voreinstellung:

input int                  Inp_StopLoss=450;                            //Stop-Loss(points)

//--- Parameter der Bollinger Bänder
input int                  Inp_BBPeriod=14;                             // BB Periodenlänge
input double               Inp_deviation=2.0;                           // Abweichung
//--- Parameter des langsamen MAs
input int                  Inp_ma_period1=12;                           //Periodenlänge des langsamen MAs
input ENUM_MA_METHOD       Inp_ma_method1=MODE_SMMA;                    // Glättungsverfahren des langsamen MAs
//--- Parameter des schnellen MAs
input int                  Inp_ma_period2=2;                            //Periodenlänge des schnellen MAs
input ENUM_MA_METHOD       Inp_ma_method2=MODE_LWMA;                    //Glättungsverfahren des langsamen MAs

Test-Ergebnisse:

Abb. 14. Flat Strategie #2. Testergebnisse.

Strategie #3 Test (WSO & WRO Kanal mit einem Filter auf Basis von Ehlers Fractal Dimension)

Voreinstellung:

input int                  Inp_StopLoss=500;                            //Stop-Loss(points)

//--- Parameter von WSO & WRO Channel
input int                  Inp_WsoWroPeriod=16;                         // Periodenlänge von Wso & Wro Channel
//--- Parameter von Ehlers' Fractal Dimension
input int                  Inp_FdiPeriod    =  18;                      // Periodenlänge vom Fractal dimension
input double               Inp_FdiThreshold =  1.4;                     //Schwellenwert vom Fractal dimension
input ENUM_APPLIED_PRICE   Inp_Price        = PRICE_CLOSE;              // Verwendeter Preistyp

Test-Ergebnisse:

Abb. 15. Flat Strategie #3. Testergebnisse.

Strategie #4 Test (Der Indikator Percentage Crossover Channel mit dem Filter TrendRange)

Voreinstellung:

input int                  Inp_StopLoss=500;                            //Stop-Loss(points)

//--- Parameter vom Percentage_Crossover_Channel
input double               Inp_Percent=26.0;                            // Prozentsatz des Mindestabstandes
input ENUM_APPLIED_PRICE   Inp_Price=PRICE_CLOSE;                       // Preistyp
//--- Indikatorparameter vom Trend Range
input uint                 Inp_PeriodTR    =  14;                       //Periodenlänge des Trend Range
input ENUM_MA_METHOD       Inp_Method      =  MODE_EMA;                 //Glättungsverfahren
input double               Inp_Deviation   =  1.0;                      //Abweichung

Test-Ergebnisse:

Abb. 16. Flat Strategie #4. Testergebnisse.

Strategie #5 Test (Der Indikator Price Channel mit dem Filter RBVI)

Voreinstellung:

input int                  Inp_StopLoss=450;                            //Stop-Loss(points)

//--- Indikatorparameter vom Price Channel
input int                  Inp_ChannelPeriod=12;                        //Periodenlänge
//--- Indikatorparameter vom RBVI
input int                  Inp_RBVIPeriod=5;                            // Periodenlänge des RBVI
input ENUM_APPLIED_VOLUME  Inp_VolumeType=VOLUME_TICK;                  // Volumenstyp
input double               Inp_level=40;                                //Level der Seitwärtsbewegung

Test-Ergebnisse:

Abb. 17. Flat Strategie #5. Testergebnisse.

Strategie #6 Test (Der Indikator Williams Percent Range und dem ADX als Filter)

Voreinstellung:

input int                  Inp_StopLoss=50;                             //Stop-Loss(points)
input int                  Inp_TakeProfit=50;                           //Take-Profit(points)

//--- Indikatorparameter vom WPR
input int                  Inp_WPRPeriod=10;                            //Periodenlänge des WPR
//--- Indikatorparameter vom ADX
input int                  Inp_ADXPeriod=14;                            // Periodenlänge des ADX
input int                  Inp_FlatLevel=40;                            //Schwellenwert des ADX für die Seitwärtsbewegung

Test-Ergebnisse:

Abb. 18. Flat Strategie #6. Testergebnisse.

Strategie #7 Test (Der veränderte Keltnerkanal mit dem Filter Magic Trend)

Voreinstellung:

input int                     Inp_SmoothCenter      =  11;              // Periodenlänge zur Glättung der Mittellinie
input int                     Inp_SmoothDeviation   =  12;              // Periodenlängezur Glättung der Abweichung
input double                  Inp_F                 =  1.0;             // Faktor für die Abweichung
input ENUM_APPLIED_PRICE      Inp_AppliedPrice      =  PRICE_CLOSE;     // Preistyp für die Mittellinie:
input ENUM_MA_METHOD          Inp_MethodSmoothing   =  MODE_SMA;        // Glättungsverfahren der Mittellinie
input ENUM_METHOD_VARIATION   Inp_MethodVariation   =  METHOD_HL;       // Variationsmethode
//--- Indikatorparameter für Magic Trend
input uint                    Inp_PeriodCCI   =  60;                    // CCI Periodenlänge
input uint                    Inp_PeriodATR   =  5;                     // ATR Periodenlänge

Test-Ergebnisse:

Abb. 19. Flat Strategie #7. Testergebnisse.

Strategie #8 Test (Der Donchian Kanal mit der Bestätigung durch Trinity Impulse)

Voreinstellung:

input int                  Inp_StopLoss=500;                            //Stop-Loss(points)

//--- Parameter vom Donchian channel
input int                  Inp_ChannelPeriod=12;                        //Donchian Periodenlänge
//--- Indikatorparameter vom Trinity Impulse
input int                  Inp_Period= 5;                               // Periodenlänge des Indikator
input int                  Inp_Level= 34;                               // Glättungslevel
input ENUM_MA_METHOD       Inp_Type=MODE_LWMA;                          // Glättungsverfahren
input ENUM_APPLIED_PRICE   Inp_Price=PRICE_WEIGHTED;                    // Preistyp
input ENUM_APPLIED_VOLUME  Inp_Volume=VOLUME_TICK;                      // Volumenstyp

Test-Ergebnisse:

Abb. 20. Flat Strategie #8. Testergebnisse.

Strategie #9 Test (Der Indikator ATR Channel und einem Filter auf Basis des CCI Color Levels)

Voreinstellung:

//--- Parameter vom ATR Channel
input ENUM_MA_METHOD       Inp_MA_Method=MODE_SMA;                      //MA Glättungsverfahren
input uint                 Inp_MA_Period=10;                            //MA Periodenlänge
input uint                 Inp_ATR_Period=12;                           //ATR Periodenlänge
input double               Inp_Factor=1.5;                              //Faktor für die Abweichung
input ENUM_APPLIED_PRICE   Inp_IPC=PRICE_LOW;                           // Preistyp
input int                  Inp_Shift=0;                                 //Horizontaler Versatz in Bars
//--- Parameter vom CCI Color Levels
input int                  Inp_CCI_ma_period = 14;                      // Glättungslänge 
input double               Inp_CCI_LevelUP   = 90;                      // Aufwärts-Level
input double               Inp_CCI_LevelDOWN =-90;                      // Abwärts-Level

Test-Ergebnisse:

Abb. 21. Flat Strategie #9. Testergebnisse.

Strategie #10 Test (Das RSI-Histogramm und dem Indikator Flat als Filter)

Voreinstellung:

//--- Parameter vom RSI Histogram
input uint                 Inp_RSIPeriod=12;                            // Periodenlänge des Indikator
input ENUM_APPLIED_PRICE   Inp_RSIPrice=PRICE_CLOSE;                    // Preistyp
input uint                 Inp_HighLevel=60;                            // Überkauftlevel
input uint                 Inp_LowLevel=40;                             // Überverkauftlevel
input int                  Inp_Shift=0;                                 // Horizontaler Versatz des Indikators in Bars
//--- Indikatorparameter für Flat
input uint                 Inp_Smooth=10;                               // Glättunglänge
input ENUM_MA_METHOD       Inp_ma_method=MODE_SMA;                      // Glättungstyp
input ENUM_APPLIED_PRICE   Inp_applied_price=PRICE_CLOSE;               // Preistyp
input uint                 Inp_HLRef=100;
input int                  Inp_FShift=0;                                // Horizontaler Versatz des Indikators in Bars
input uint                 Inp_ExtraHighLevel=70;                       // Maximum des Trend-Levels
input uint                 Inp_FHighLevel=50;                           // Starker Trend-Level
input uint                 Inp_FLowLevel=30;                            // Schwacher Trend-Level

Test-Ergebnisse:

Abb. 22. Seitwärtsstrategie #10. Testergebnisse.

Ergebnisse

Die Erprobung und Optimierung der analysierten Strategien für den Seitwärtshandel hat zu folgenden Ergebnissen geführt.

  • Die meisten Strategien basieren auf dem Handel innerhalb eines Kanals und beinhalten Signalfilterung, so dass ihr Hauptschwachpunkt ein kurzfristiger Kanalausbruch ist.
  • Tests mit sehr niedrigen und sehr hohen Zeitrahmen führen zu Verlusten aufgrund zu vielen oder zu wenigen Positionen.
  • Es wurden keine signifikanten Gewinnunterschiede bei der Optimierung für das gleiche Währungspaar und den gleichen Zeitraum erzielt. Fast alle Strategien zeigten ähnliche Ergebnisse.

So können wir die wichtigste Schlussfolgerung ziehen: Obwohl wir verschiedene Kanalbautechniken und Filter gewählt haben, sind die Vor- und Nachteile aller Strategien vergleichbar. 

Schlussfolgerung

Im Folgenden finden Sie eine Übersichtstabelle mit den Namen der Expert Advisor, die in diesem Artikel entwickelt und verwendet wurden, sowie Hilfsklassen und eine Liste von Indikatoren, die in den oben genannten Strategien verwendet werden. Das unten angehängte Archiv enthält alle beschriebenen Dateien in Ordnern. Für den ordnungsgemäßen Betrieb müssen Sie lediglich den Ordner MQL5 in den Terminalverzeichnis speichern.

Die Programme dieses Artikels:

#
 Name
Typ
Beschreibung
1
Strategy_1.mq5
Expert Advisor
 Strategie #1. Der Indikator Envelopes mit einem Filter auf Basis des MFI
2
Strategy_2.mql5
Expert Advisor
 Strategie #2. Die Bollinger Bänder und zwei gleitende Durchschnitte
3
Strategy_3.mq5
Expert Advisor  Strategie #3. WSO & WRO Kanal mit einem Filter auf Basis von Ehlers Fractal Dimension
4
Strategy_4.mq5
Expert Advisor
 Strategie #4. Der Indikator Percentage Crossover Channel und dem Filter TrendRange 
5
Strategy_5.mq5 Expert Advisor  Strategie #5. Der Indikator Price Channel mit dem Filter RBVI
6
Strategy_6.mq5
Expert Advisor
 Strategie #6. Der Indikator Williams Percent Range und dem ADX als Filter
7 Strategy_7.mq5 
Expert Advisor
 Strategie #7. Ein veränderter Keltnerkanal mit dem Filter Magic Trend
 8 Strategy_8.mq5 Expert Advisor  Strategie #8. Der Donchian Kanal mit der Bestätigung durch Trinity Impulse
 9 Strategy_9.mq5 Expert Advisor  Strategie #9. Der Indikator ATR Channel und einem Filter auf Basis des CCI
 10 Strategy_10.mq5 Expert Advisor  Strategie #10. Das RSI-Histogramm und dem Indikator Flat als Filter 
 11 Trade.mqh Bibliothek  Eine Klasse mit den Handelsfunktionen
 13 wwc.mq5 Indikator  Verwendet in Strategie #3
 14 fdi.mq5 Indikator  Verwendet in Strategie #3
 15 pcc.mq5 Indikator  Verwendet in Strategie #4
 16 trend_range.mq5  Indikator  Verwendet in Strategie #4
 17 price_channel.mq5 Indikator  Verwendet in Strategie #5
 18 rbvi.mq5 Indikator  Verwendet in Strategie #5
 19 customizable _keltner.mq5 Indikator  Verwendet in Strategie #7
 20 magic_trend.mq5 Indikator  Verwendet in Strategie #7
 21 donchian_channel.mq5 Indikator  Verwendet in Strategie #8
 22 trinity_impulse.mq5 Indikator  Verwendet in Strategie #8
 23 atr_channel.mq5 Indikator   Verwendet in Strategie #9
 24 cci_color_levels.mq5 Indikator  Verwendet in Strategie #9
 25 rsi_histogram.mq5 Indikator  Verwendet in Strategie #10
 26 flat.mq5 Indikator  Verwendet in Strategie #10

Übersetzt aus dem Russischen von MetaQuotes Software Corp.
Originalartikel: https://www.mql5.com/ru/articles/4534

Beigefügte Dateien |
10Flat.zip (60.96 KB)
Wie man Trades des ausgewählten Signals im Chart analysiert Wie man Trades des ausgewählten Signals im Chart analysiert

Der Signale-Service entwickelt sich mit Riesenschritten. Wenn man eigenes Geld einem Signalanbieter anvertraut, möchte man das Verlustrisiko minimieren. Wie kommt man in diesem Wald von Handelssignalen zurecht? Wie findet man ein profitables Signal? In diesem Artikel wird vorgeschlagen, ein Tool für die visuelle Analyse der Handelshistorie von Signalen auf dem Chart eines Finanzinstruments zu erstellen.

Mit der Monte-Carlo-Methode Handelsstrategien optimieren Mit der Monte-Carlo-Methode Handelsstrategien optimieren

Bevor wir einen Roboter auf einem Handelskonto starten, testen und optimieren wir ihn in der Regel anhand der Kurshistorie. Es stellt sich jedoch die berechtigte Frage: Wie können uns die Ergebnisse der Vergangenheit in Zukunft helfen? Der Artikel beschreibt die Anwendung der Monte-Carlo-Methode, um benutzerdefinierte Kriterien für die Optimierung der Handelsstrategie zu erstellen. Zusätzlich werden die EA-Stabilitätskriterien berücksichtigt.

Die Visualisierung von Optimierungsergebnissen nach dem ausgewählten Kriterium Die Visualisierung von Optimierungsergebnissen nach dem ausgewählten Kriterium

Im Artikel wird die MQL-Anwendung für die Arbeit mit Optimierungsergebnissen weiter entwickelt. Diesmal wird ein Beispiel gezeigt, wenn die Tabelle der besten Ergebnisse bereits nach der Optimierung der Parameter gebildet werden kann, indem man ein anderes Kriterium über das grafische Interface angibt.

So formulieren Sie das Pflichtenheft eines Auftrages für einen Handelsroboter So formulieren Sie das Pflichtenheft eines Auftrages für einen Handelsroboter

Handeln Sie nach Ihrer eigenen Strategie? Wenn Sie Ihre Handelsregeln formalisieren und als Algorithmus für ein Programm beschreiben können, wäre es doch besser, Ihren Handel einem automatisierten Expert Advisor anzuvertrauen. Ein Roboter braucht weder Schlaf noch Nahrung und ist keinen menschlichen Schwächen unterworfen. In diesem Artikel zeigen wir Ihnen, wie Sie, um einen Handelsroboter im Freelance-Service in Auftrag zu geben, das sogenannte Pflichtenheft erstellen.