Die Rainbow Moving Average Handelsstrategie basiert auf dem Indikator Rainbow Moving Average. Diese Strategie identifiziert die Trendrichtung durch ein Regenbogen-Geschwindigkeitsdurchschnittssystem mit 7 gleitenden Durchschnitten und filtert falsche Signale mit dem RSI-Indikator aus, um einen niedrigen Risikobereich zu erreichen.
Die Strategie erzeugt Handelssignale in folgenden Schritten:
Es enthält 7 gleitende Durchschnitte. Der erste gleitende Durchschnitt hat eine Periode von 12 und nimmt den Schlusskurs als Quelldaten. Die anderen 6 gleitenden Durchschnitte haben progressiv abnehmende Perioden von 3, mit dem vorherigen gleitenden Durchschnitt als Quelle.
Wenn der erste gleitende Durchschnitt oberhalb des Regenbogens liegt, definieren Sie ihn als Aufwärtstrend. Wenn er unten liegt, definieren Sie ihn als Abwärtstrend. Wenn er in der Mitte liegt, definieren Sie ihn als Konsolidierung.
Genereren Sie Signale. Wenn sich der Trend von Aufwärtstrend zu Abwärtstrend ändert, wird ein Verkaufssignal generiert. Wenn sich der Trend von Abwärtstrend zu Aufwärtstrend ändert, wird ein Kaufsignal generiert. Wenn sich der Trend von Konsolidierung zu Aufwärtstrend oder Abwärtstrend ändert, schließen Sie die bestehende Position.
Der erste RSI sollte zwischen Überkauf- und Überverkaufszone liegen, um einen falschen Ausbruch zu vermeiden. Der zweite RSI sollte außerhalb der mittleren Zone liegen, um eine starke Dynamik zu gewährleisten.
Zu den Vorteilen dieser Strategie gehören:
Das Regenbogen gleitende Durchschnittssystem identifiziert die Trendrichtung genau. Mehrere gleitende Durchschnittswerte kombinieren sich, um Marktlärm und Spot-Trendumkehr zu filtern.
Der erste RSI sorgt dafür, dass er in der Normalzone ist, während der zweite RSI eine ausreichend starke Dynamik garantiert.
Die Kombination von Trend- und Umkehrindikatoren ermöglicht einen rechtzeitigen Eintritt bei einer Umkehrung des Trends und vermeidet gleichzeitig die Verfolgung der Dynamik.
Durch das Schließen aktiver Positionen während der Konsolidierung wird das Risiko von Bandbreitenmärkten vermieden.
Die Strategie bietet einen großen Raum für die Optimierung von Parametern, die für verschiedene Produkte und Zeitrahmen abgestimmt werden können, um bessere Ergebnisse zu erzielen.
Die wichtigsten Risiken dieser Strategie sind:
Eine unklare Trendumkehr kann falsche Signale erzeugen und Verluste verursachen.
Häufige Öffnungen und Schließungen während der langen Konsolidierung erhöhen die Kosten und den Rutsch.
Eine verzögerte Umkehrung vergrößert die Verluste nach dem ersten Signal.
Bei falschen Parameter-Einstellungen können korrekte Signale ausgefiltert oder eine Signalverzögerung verursacht werden.
Die Strategie kann in folgenden Aspekten optimiert werden:
Optimierung des gleitenden Durchschnittsparameters, einschließlich Periodenlänge, Periodenverhältnis, MA-Typ usw., um die Trendbeurteilung genauer zu machen.
Optimierung der RSI-Parameter, einschließlich Periode, Überkauf/Überverkauf, neutraler Zone usw., um die Filtration präziser zu machen.
Zeitplanoptimierung, um den optimalen Zeitplan zu finden.
Produktoptimierung, um Parameter und Regeln so anzupassen, dass sie am besten zu verschiedenen Produkten passen.
Hinzufügen von Stop-Loss und Take-Profit zur Kontrolle von Risiko und Gewinngröße.
Die Rainbow Moving Average-Handelsstrategie kombiniert Trendbestimmung und Signalfilterung, um Umkehrsignale effektiv zu erfassen. Mit genauem Urteilsvermögen und kontrollierbaren Risiken kann diese Strategie nach Parameter-Tuning und Logikverfeinerung sehr praktisch werden. Insgesamt lohnt sie sich eine gründliche Forschung und Anwendung.
/*backtest start: 2023-08-28 00:00:00 end: 2023-09-27 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //╔════════════════════════════════════════════════════════════════════════════╗ //║Rainbow Backtesting base on "Rainbow Moving Average" Strategy as below: ║ //║1.Rainbow Moving Average setup ║ //║- Source: source of 1st MA ║ //║- Type: SMA/EMA ║ //║- Period: period of 1st MA ║ //║- Displacement: period of 2nd MA to 7th MA with source is previous MA ║ //║2.Trend Define ║ //║- Up Trend: Main MA moving at the top of Rainbow ║ //║- Down Trend: Main MA moving at the bottom of Rainbow ║ //║- Sideway: Main MA moving between the top and the bottom of Rainbow ║ //║3.Signal ║ //║- Buy Signal: When Rainbow change to Up Trend. ║ //║- Sell Signal: When Rainbow change to Down Trend. ║ //║- Exit: When Rainbow change to Sideway. ║ //║4.RSI Filter ║ //║- "Enable": Only signals have 1st RSI moving between Overbought and Oversold║ //║and 2nd RSI moving outside Middle Channel are accepted. ║ //║- The filter may help trader avoid bull trap, bear trap and choppy market. ║ //╚════════════════════════════════════════════════════════════════════════════╝ //@version=4 strategy("Rainbow Strategy Backtesting",overlay=false) //++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++ Rainbow Moving Average +++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++ rainbow_tt="=== Rainbow Moving Average ===" ma1_source=input(hlc3,title="Source",type=input.source, inline="set1", group=rainbow_tt) rb_type=input("SMA",title="Type",options=["SMA","EMA"], inline="set1", group=rainbow_tt) ma1_len=input(12,title="Period", inline="set2", group=rainbow_tt) dis_len=input(3,title="Displacement", inline="set2", group=rainbow_tt,minval=2) trend_tt="=== Trend Color ===" up_col=input(color.new(color.blue,0),title="Up",inline="Color",group=trend_tt) dn_col=input(color.new(color.red,0),title="Down",inline="Color",group=trend_tt) sw_col=input(color.new(color.yellow,0),title="No",inline="Color",group=trend_tt) //1st ma1=rb_type=="SMA"?sma(ma1_source,ma1_len):ema(ma1_source,ma1_len) //2nd ma2=rb_type=="SMA"?sma(ma1,dis_len):ema(ma1,dis_len) //3rd ma3=rb_type=="SMA"?sma(ma2,dis_len):ema(ma2,dis_len) //4 ma4=rb_type=="SMA"?sma(ma3,dis_len):ema(ma3,dis_len) //5 ma5=rb_type=="SMA"?sma(ma4,dis_len):ema(ma4,dis_len) //6 ma6=rb_type=="SMA"?sma(ma5,dis_len):ema(ma5,dis_len) //7 ma7=rb_type=="SMA"?sma(ma6,dis_len):ema(ma6,dis_len) //MinMax rb_max=max(ma1,ma2,ma3,ma4,ma5,ma6,ma7) rb_min=min(ma1,ma2,ma3,ma4,ma5,ma6,ma7) dir_col= ma1==rb_max?up_col: ma1==rb_min?dn_col: sw_col dir_style=shape.circle plotshape(dir_col[1]==dir_col?0:na,title="Trend",style=dir_style,color=dir_col,location=location.absolute) //++++++++++++++++++++++++++++++++++++++ //+++++++++++++ RSI Filter +++++++++++++ //++++++++++++++++++++++++++++++++++++++ rsi_tt="=== RSI Filter ===" rsi_filter=input("Enable",title="Filter",options=["Enable","Disable"],inline="set",group=rsi_tt) over_tt="Over Filter" rsi_len_1=input(12,title="Period",inline="set",group=over_tt) rsi_ovb=input(65,title="Overbought",inline="set",group=over_tt) rsi_ovs=input(35,title="Oversold",inline="set",group=over_tt) rsi_1=rsi(close,rsi_len_1) mid_tt="Middle Filter" rsi_len_2=input(9,title="Period",inline="set",group=mid_tt) rsi_mid_top=input(56,title="Upper",inline="set",group=mid_tt) rsi_mid_bot=input(44,title="Lower",inline="set",group=mid_tt) rsi_2=rsi(close,rsi_len_2) //Status var rsi_status="None" if (rsi_1>rsi_ovs and rsi_1<rsi_ovb) and (rsi_2[1]<rsi_mid_bot or rsi_2[1]>rsi_mid_top) rsi_status:="Normal" else rsi_status:="None" //Signal BuySignal= rsi_filter=="Disable"? dir_col[1]!=up_col and dir_col[0]==up_col : dir_col[1]!=up_col and dir_col[0]==up_col and rsi_status=="Normal" SellSignal= rsi_filter=="Disable"? dir_col[1]!=dn_col and dir_col[0]==dn_col : dir_col[1]!=dn_col and dir_col[0]==dn_col and rsi_status=="Normal" exit= (dir_col[1]!=sw_col and dir_col[0]==sw_col) buycol = BuySignal? up_col: na sellcol = SellSignal? dn_col: na exitcol = exit? sw_col: na buy_style=shape.arrowup sell_style=shape.arrowdown exit_style=shape.square plotshape(BuySignal?0:na,title="Buy",text="Buy",style=buy_style,color=buycol,location=location.absolute) plotshape(SellSignal?0:na,title="Sell",text="Sell",style=sell_style,color=sellcol,location=location.absolute) plotshape(exit?0:na,title="Exit",text="Exit",style=exit_style,color=exitcol,location=location.absolute) filter= rsi_filter=="Enable"? dir_col[1]!=dir_col and BuySignal==false and SellSignal==false and exit==false: na filter_style=shape.xcross filtercol= filter? dir_col:na plotshape(filter?0:na,title="Filter",text="Filter",style=filter_style,color=filtercol,location=location.absolute) //+++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++ Backtesting ++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++ strategy.entry("Long", strategy.long, when=BuySignal) strategy.close("Long", when=exit or filter) strategy.entry("Short", strategy.short, when=SellSignal) strategy.close("Short", when=exit or filter) //EOF