Diese Strategie handelt RSI-Extreme mit dem schnellen RSI-Indikator und filtert Einträge basierend auf der Kerzenkörpergröße, um Whipsaws zu vermeiden.
Strategie Logik:
Berechnen Sie den schnellen RSI und setzen Sie Überkauf/Überverkaufsschwellenwerte.
Berechnen Sie die EMA der Kerzenkörpergröße für die Körperfilterung.
Gehen Sie lang, wenn der RSI über die überkaufte Linie und den Körper über die Hälfte der EMA geht.
Ausgang, wenn der RSI wieder unter die ursprüngliche Schwelle und über die EMA geht.
Min/max kann eine zusätzliche Signalüberprüfung ermöglichen.
Vorteile:
Schnelle RSI beschleunigt die Signalgenerierung und vermeidet Verzögerungen.
Körpergrößenfilter reduzieren unbedeutendes Kerzenlärm.
Min/max verbessert die Signalqualität.
Risiken:
Das Körperfiltern übersieht möglicherweise einige gültige Signale.
Whipsaws sind für RSI in verschiedenen Märkten noch möglich.
Strenges Risikomanagement für Umkehrgeschäfte erforderlich.
Zusammenfassend lässt sich sagen, dass diese Strategie eine Kombination aus schnellerem RSI und Körpergrößenfilterung für eine schnellere, aber robustere Überkauf-/Überverkaufserkennung ermöglicht.
/*backtest start: 2023-01-01 00:00:00 end: 2023-09-11 00:00:00 period: 2d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(title = "Noro's Fast RSI Strategy v1.3", shorttitle = "Fast RSI str 1.3", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") rsiperiod = input(7, defval = 7, minval = 2, maxval = 50, title = "RSI Period") limit = input(30, defval = 30, minval = 1, maxval = 100, title = "RSI limit") rsisrc = input(close, defval = close, title = "RSI Price") rb = input(1, defval = 1, minval = 1, maxval = 5, title = "RSI Bars") usemm = input(false, defval = false, title = "Use Min/Max") showarr = input(false, defval = false, title = "Show Arrows") fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Fast RSI fastup = rma(max(change(rsisrc), 0), rsiperiod) fastdown = rma(-min(change(rsisrc), 0), rsiperiod) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Limits bar = close > open ? 1 : close < open ? -1 : 0 uplimit = 100 - limit dnlimit = limit //RSI Bars ur = fastrsi > uplimit dr = fastrsi < dnlimit uprsi = rb == 1 and ur ? 1 : rb == 2 and ur and ur[1] ? 1 : rb == 3 and ur and ur[1] and ur[2] ? 1 : rb == 4 and ur and ur[1] and ur[2] and ur[3] ? 1 : rb == 5 and ur and ur[1] and ur[2] and ur[3] and ur[4] ? 1 : 0 dnrsi = rb == 1 and dr ? 1 : rb == 2 and dr and dr[1] ? 1 : rb == 3 and dr and dr[1] and dr[2] ? 1 : rb == 4 and dr and dr[1] and dr[2] and dr[3] ? 1 : rb == 5 and dr and dr[1] and dr[2] and dr[3] and dr[4] ? 1 : 0 //Body body = abs(close - open) emabody = ema(body, 30) //MinMax min = min(close, open) max = max(close, open) //Signals up1 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and dnrsi and body > emabody / 4 dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and uprsi and body > emabody / 4 up2 = min < min[1] and bar == -1 and bar[1] == -1 and usemm dn2 = max > max[1] and bar == 1 and bar[1] == 1 and usemm exit = ((strategy.position_size > 0 and fastrsi > dnlimit and bar == 1) or (strategy.position_size < 0 and fastrsi < uplimit and bar == -1)) and body > emabody / 2 //Arrows col = exit ? black : up1 or dn1 ? blue : up2 or dn2 ? red : na needup = up1 or (up2 and usemm) needdn = dn1 or (dn2 and usemm) needexitup = exit and strategy.position_size < 0 needexitdn = exit and strategy.position_size > 0 plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0) plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0) //Trading if up1 or up2 strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))) if dn1 or dn2 strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))) if time > timestamp(toyear, tomonth, today, 00, 00) or exit strategy.close_all()