Regenbogen gleitender Durchschnittshandelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-09-28 11:01:59
Tags:

Übersicht

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.

Strategie Logik

Die Strategie erzeugt Handelssignale in folgenden Schritten:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Das Regenbogen gleitende Durchschnittssystem identifiziert die Trendrichtung genau. Mehrere gleitende Durchschnittswerte kombinieren sich, um Marktlärm und Spot-Trendumkehr zu filtern.

  2. Der erste RSI sorgt dafür, dass er in der Normalzone ist, während der zweite RSI eine ausreichend starke Dynamik garantiert.

  3. Die Kombination von Trend- und Umkehrindikatoren ermöglicht einen rechtzeitigen Eintritt bei einer Umkehrung des Trends und vermeidet gleichzeitig die Verfolgung der Dynamik.

  4. Durch das Schließen aktiver Positionen während der Konsolidierung wird das Risiko von Bandbreitenmärkten vermieden.

  5. 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.

Risiken

Die wichtigsten Risiken dieser Strategie sind:

  1. Eine unklare Trendumkehr kann falsche Signale erzeugen und Verluste verursachen.

  2. Häufige Öffnungen und Schließungen während der langen Konsolidierung erhöhen die Kosten und den Rutsch.

  3. Eine verzögerte Umkehrung vergrößert die Verluste nach dem ersten Signal.

  4. Bei falschen Parameter-Einstellungen können korrekte Signale ausgefiltert oder eine Signalverzögerung verursacht werden.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Optimierung des gleitenden Durchschnittsparameters, einschließlich Periodenlänge, Periodenverhältnis, MA-Typ usw., um die Trendbeurteilung genauer zu machen.

  2. Optimierung der RSI-Parameter, einschließlich Periode, Überkauf/Überverkauf, neutraler Zone usw., um die Filtration präziser zu machen.

  3. Zeitplanoptimierung, um den optimalen Zeitplan zu finden.

  4. Produktoptimierung, um Parameter und Regeln so anzupassen, dass sie am besten zu verschiedenen Produkten passen.

  5. Hinzufügen von Stop-Loss und Take-Profit zur Kontrolle von Risiko und Gewinngröße.

Schlussfolgerung

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

Mehr