Die Rainbow Moving Average Trading Strategie basiert auf dem Rainbow Moving Average Indicator Design. Die Strategie ermittelt die Richtung des Trends durch die Erstellung eines Rainbow Moving Average Systems mit 7 Moving Averages, das mit dem RSI-Indikator kombiniert wird, um falsche Signale zu filtern und einen risikoarmen Handel zu ermöglichen.
Die Strategie ermöglicht die Erzeugung von Handelssignalen in folgenden Schritten:
Erstellung eines Regenbogen-Moving-Average-Systems. Dieses System enthält sieben Moving-Averages, wobei der erste Moving-Average-Prozess 12 ist, wobei die Quelldaten den Mittelwert des Schlusskurses darstellen. Die Perioden der übrigen sechs Moving-Averages werden in Folge mit einer Abnahme von drei Perioden, wobei die Quelldaten den Wert des vorherigen Moving-Averages darstellen.
Beurteilen Sie die Richtung des Trends. Wenn der erste Moving Average oberhalb des Regenbogen Moving Averages liegt, wird er als Aufwärtstrend definiert. Wenn er unterhalb liegt, wird er als Abwärtstrend definiert.
Erzeugen Sie ein Handelssignal. Wenn der Trend des Rainbow Moving Average Systems von oben nach unten wechselt, erzeugen Sie ein Verkaufssignal. Wenn der Trend von unten nach oben wechselt, erzeugen Sie ein Kaufsignal.
Der RSI-Filter. Der erste RSI-Indikator verlangt, dass er sich zwischen den überkauften und verkauften Bereichen befindet, um einen falschen Durchbruch zu vermeiden. Der zweite RSI verlangt, dass er sich nicht in der mittleren Region befindet, um sicherzustellen, dass der Durchbruch ausreichend ist.
Diese Strategie hat folgende Vorteile:
Die Rainbow Moving Average System kann die Richtung des Trends genau bestimmen. Mehrere Kombinationen von Moving Averages können effektiv Marktlärm filtern und Trendwechsel erkennen.
Der RSI zeigt eine Doppelfiltermechanik, die ein falsches Durchbruchsignal effektiv filtert und verhindert, dass es eingeschaltet wird. Der erste RSI stellt sicher, dass er in der normalen Zone ist, der zweite RSI stellt sicher, dass die Durchbruchskraft groß genug ist.
In Kombination mit einem Trend- und Umkehrungsindikator kann man bei einer Trendwende rechtzeitig eintreten und die Verfolgung von Niederlagen vermeiden.
Wenn Sie in der Ausgleichsphase aktiv aus dem Markt ausscheiden, vermeiden Sie die Gefahr, dass die Regionenauswahl den Markt aus dem Markt zieht.
Die Strategie bietet viel Spielraum für die Optimierung von Parametern. Sie kann für verschiedene Sorten und Perioden optimiert werden, indem Sie die Moving Average-Perioden, die Längenverhältnisse und die RSI-Parameter anpassen.
Diese Strategie birgt folgende Risiken:
Wenn eine Trendwende nicht sichtbar ist, kann ein falsches Umkehrsignal erzeugt werden, was zu Handelsverlusten führt. Die Moving-Average-Periode kann entsprechend angepasst werden, um die Umkehrsignale deutlicher zu machen.
Bei einer langen Zonalbereinigung wird häufig ein Friedenslager eröffnet, was die Transaktionskosten und den Schlupfpunktverlust erhöht. Die Filterintensität der Bereinigungsphase kann durch Optimierung der RSI-Parameter erhöht werden.
Bei langsamer Umkehrung vergrößert sich der Zeit- und Raumverlust, nachdem das Umkehrsignal ausgegeben wurde. Die Periodenabweichung des Moving Averages kann erhöht werden, so dass das Signal rechtzeitig ausgegeben wird.
Wenn die Parameter nicht zeitgerecht eingestellt werden, kann es dazu führen, dass ein Teil des korrekten Signals gefiltert wird oder ein Signal verzögert wird. Die Parameter müssen entsprechend der Eigenschaften der verschiedenen Sorten angepasst werden.
Diese Strategie kann in folgenden Bereichen optimiert werden:
Die Optimierung von Moving Average-Parametern. Sie können die Länge der Perioden, die Periodendifferenz und die Art und Weise des Moving Averages (SMA oder EMA) optimieren, um eine genauere Trendbeurteilung zu erzielen.
Optimierung der RSI-Parameter. Sie können die Länge der RSI-Zyklen, die Überkaufzone, die Überverkaufzone und die Neutralzone optimieren, um die Filterung genauer und effektiver zu machen.
Optimierung des Zeitzyklus. Verschiedene Zeitzyklen können getestet werden, um die Zeitzyklen zu wählen, die für die Strategie am besten geeignet sind, um die besten Ergebnisse zu erzielen.
Varietätsoptimierung: Die Varietätsoptimierung ermöglicht die Anpassung von Parametern oder Regeln an die Eigenschaften der verschiedenen Varietäten, um die Strategie für die jeweilige Varietät optimal zu nutzen.
Es ist möglich, eine angemessene Stop-Loss-Ebene zu setzen, um die Risiken und Gewinne eines einzelnen Handels zu kontrollieren.
Die Rainbow Moving Average Trading Strategie nutzt die Kombination von Trendbeurteilung und Signalfilterung, um die Signale an den Trendwendepunkten zu erfassen. Die Strategie hat die Eigenschaften von richtiger Urteilsgenauigkeit, Risikokontrolle und kann durch Optimierung der Parameter und Regeln zu einer sehr praktischen quantitativen Handelsstrategie werden.
/*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