
Vergleichende Analyse von 10 Handelsstrategien für Seitwärtsbewegungen
Inhaltsverzeichnis
- Einführung
- Formulieren der Aufgabe einer Handelsstrategie für Seitwärtsbewegungen
- Handelsstrategien in Seitwärtsbewegungen
- Strategie #1. Der Indikator Envelopes mit einem Filter auf Basis des MFI
- Strategie #2. Die Bollinger Bänder und zwei gleitende Durchschnitte
- Strategie #3. WSO & WRO Kanal mit einem Filter auf Basis von Ehlers Fractal Dimension
- Strategie #4. Der Indikator Percentage Crossover Channel und dem Filter TrendRange
- Strategie #5. Der Indikator Price Channel mit dem Filter RBVI
- Strategie #6. Der Indikator Williams Percent Range und dem ADX als Filter
- Strategie #7. Ein veränderter Keltnerkanal mit dem Filter Magic Trend
- Strategie #8. Der Donchian Kanal mit der Bestätigung durch Trinity Impulse
- Strategie #9. Der Indikator ATR Channel und einem Filter auf Basis des CCI
- Strategie #10. Das RSI-Histogramm und dem Indikator Flat als Filter
- Tests
- Ergebnisse
- Schlussfolgerung
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 Ltd.
Originalartikel: https://www.mql5.com/ru/articles/4534





- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.