Die Dual-RSI-Breakout-Strategie ist eine algorithmische Handelsstrategie, die mit Hilfe des RSI-Indikators Preisumkehrpunkte identifiziert. Sie erzeugt Handelssignale, indem sie den RSI-Indikator mit vorgegebenen oberen und unteren Schwellenwerten vergleicht, um festzustellen, ob der Markt überkauft oder überverkauft ist.
Diese Strategie stützt sich hauptsächlich auf den RSI-Indikator, um die Marktlage zu beurteilen. Der RSI-Indikator wird auf der Grundlage der Veränderungen der Schlusskursentwicklung über einen bestimmten Zeitraum berechnet und spiegelt die Kauf- und Verkaufsdynamik der Aktie wider. Wenn der RSI über die voreingestellte obere Schwelle (Default 75) überschreitet, zeigt er an, dass die Aktie in die Überkaufzone eingetreten ist. Wenn der RSI unter die voreingestellte untere Schwelle (Default 25) fällt, zeigt er an, dass die Aktie in die Überverkaufszone eingetreten ist.
Die Urteilsregeln sind:
Seine Handelslogik ist einfach und klar, mit angemessenen Referenzparameter-Einstellungen, großem Konfigurationsraum und eignet sich zur Erfassung größerer Markttrends.
Zu den Vorteilen dieser Strategie gehören:
Im Allgemeinen eignet sich diese Strategie mit angemessenen Referenzparameter-Einstellungen, einfacher Umsetzung und der Fähigkeit, durch RSI effektiv Preisumkehrungen zu bestimmen, für die Erfassung mittelfristiger bis langfristiger Trends und ist leicht zu verstehen und als quantitative Strategie zu verwenden.
Obwohl diese Strategie relativ einfach und zuverlässig ist, können wir die möglichen Risiken nicht ignorieren:
Um Risiken zu kontrollieren, müssen wir Folgendes beachten:
Angesichts der Hauptrisiken dieser Strategie sind Umkehrfehler und Verluste in verschiedenen Märkten, können wir aus folgenden Aspekten optimieren:
Zusammenfassend ist die Dual-RSI-Breakout-Strategie eine einfache und praktische quantitative Strategie. Sie identifiziert Preisumkehrungen über den RSI, um einfaches Trendfolgen zu erreichen. Obwohl bestimmte Fehleinschätzungsrisiken bestehen, können Optimierungen wie Parameter-Tuning, Signalfilterung dazu beitragen, dies zu mildern und eine wichtige Rolle bei der Erfassung mittelfristiger bis langfristiger Trends zu spielen.
/*backtest start: 2023-12-19 00:00:00 end: 2023-12-26 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("RSI Algo", overlay=true) // Calculate start/end date and time condition DST = 1 //day light saving for usa //--- Europe London = iff(DST==0,"0000-0900","0100-1000") //--- America NewYork = iff(DST==0,"0400-1500","0500-1600") //--- Pacific Sydney = iff(DST==0,"1300-2200","1400-2300") //--- Asia Tokyo = iff(DST==0,"1500-2400","1600-0100") //-- Time In Range timeinrange(res, sess) => time(res, sess) != 0 london = timeinrange(timeframe.period, London) newyork = timeinrange(timeframe.period, NewYork) time_cond = true myPeriod = input(defval=14, type=input.integer, title="Period") myThresholdUp = input(defval=75, type=input.float, title="Upper Threshold") myThresholdDn = input(defval=25, type=input.float, title="Lower Threshold") myAlgoFlipToggle = input(defval=false, type=input.bool, title="Imverse Algorthim") myLineToggle = input(defval=true, type=input.bool, title="Show Lines") myLabelToggle = input(defval=true, type=input.bool, title="Show Labels") myRSI=rsi(close, myPeriod) buy = myAlgoFlipToggle ? falling(myRSI,1) and cross(myRSI, myThresholdDn) : rising(myRSI, 1) and cross(myRSI,myThresholdUp) //and time_cond sell = myAlgoFlipToggle ? rising(myRSI, 1) and cross(myRSI,myThresholdUp) : falling(myRSI,1) and cross(myRSI, myThresholdDn) //and time_cond myPosition = 0 myPosition := buy==1 ? 0 : sell==1 or myPosition[1]==1 ? 1 : 0 trendColor = buy ? color.red : sell ? color.green : na plot(myLineToggle ? buy and myPosition[1]==1 ? low - 0.004: sell and myPosition[1]==0 ? high + 0.004 : na : na, color=trendColor, style=plot.style_line, linewidth=4, editable=false) plotshape(myLabelToggle ? buy and myPosition[1]==1 ? low - 0.005 : na : na, style=shape.labelup, location=location.absolute, text="Buy", transp=0, textcolor = color.white, color=color.black, editable=false) plotshape(myLabelToggle ? sell and myPosition[1]==0 ? high + 0.005 : na : na, style=shape.labeldown, location=location.absolute, text="Sell", transp=0, textcolor = color.white, color=color.black, editable=false) strategy.initial_capital = 50000 //Calculate the size of the next trade balance = strategy.netprofit + strategy.initial_capital //current balance floating = strategy.openprofit //floating profit/loss risk = input(2,type=input.float,title="Risk %")/100 //risk % per trade isTwoDigit = input(false,"Is this a 2 digit pair? (JPY, XAU, XPD...") stop = input(250, title="stop loss pips") tp = input(2500, title="take profit pips") if(isTwoDigit) stop := stop/100 temp01 = balance * risk //Risk in USD temp02 = temp01/stop //Risk in lots temp03 = temp02*100000 //Convert to contracts size = 1 strategy.entry("long",1,size,when=buy and myPosition[1]==1 ) strategy.entry("short",0,size,when=sell and myPosition[1]==0) strategy.exit("exit_long","long",loss=stop, profit=tp) //Long exit (stop loss) strategy.exit("exit_short","short",loss=stop, profit=tp) //Short exit (stop loss) //strategy.close_all(when= not time_cond)