Doppel schnelle RSI-Breakthrough-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-11-07 16:56:39
Tags:

img

Übersicht

Diese Strategie verwendet mehrere RSI-Indikatoren, um Preisdurchbrüche umzusetzen, um genauere Ein- und Ausstiegssignale zu generieren.

Strategie Logik

Die Strategie legt zwei Gruppen von RSI-Parametern fest, eine mit einer Periode von 7 und einer Grenze von 25, die andere mit einer Periode von 14 und einer Grenze von 25. Wenn der Preis entweder durch die RSI-Grenze bricht, werden Long- oder Short-Orders ausgeführt.

Die Strategie berechnet zunächst die Werte der beiden RSI-Indikatoren und beurteilt dann, ob der Preis die obere oder untere Grenze des RSI durchbricht. Wenn er die obere Grenze durchbricht, wird ein langes Signal generiert. Wenn er die untere Grenze durchbricht, wird ein kurzes Signal generiert.

Wenn der aktuelle RSI innerhalb des Normalbereichs liegt, wird ein Exit-Signal erzeugt, wenn der RSI normal wird und die Hälfte des gleitenden Durchschnitts durchbricht.

Die Strategie verwendet auch das Martingale-System. Die Ordergröße verdoppelt sich nach jedem Verlust.

Analyse der Vorteile

  • Die Verwendung von zwei RSI-Indikatoren kann Durchbruchssignale besser beurteilen und falsche Signale vermeiden.

  • Außerdem vermeidet die Überprüfung des Durchbruchs des Körpers falsche Trades während der Konsolidierung.

  • Martingale hilft, Verluste schnell nach Verlusten zu stoppen.

  • Anpassbare RSI-Parameter optimieren die Einstiegsmöglichkeiten.

  • Handelssitzungen können begrenzt werden, um Auswirkungen großer Ereignisse zu vermeiden.

Risikoanalyse

  • Dual RSI kann einen falschen Durchbruch nicht vollständig vermeiden.

  • Martingale erhöht die Position nach Verlusten, riskiert eine Explosion.

  • Die Handelskosten werden nicht berücksichtigt.

  • Zu viele optimierbare Parameter erfordern viele Tests, um die beste Kombination zu finden.

Kann Stop-Loss einstellen, um Verluste zu begrenzen; RSI-Parameter optimieren; Kosten berücksichtigen; Durchbruchskriterien lockern.

Optimierungsrichtlinien

  • Hinzufügen von Stop Loss, um den maximalen Verlust zu begrenzen.

  • RSI-Parameter optimieren, um falsche Signale zu reduzieren.

  • Die Auswirkungen auf die Handelskosten sollten berücksichtigt werden, um Überhandelungen zu vermeiden.

  • Entspannen Sie die Durchbruchskriterien für mehr Möglichkeiten.

  • Fügen Sie mehr Filter hinzu, um nicht eingeschlossen zu werden.

Zusammenfassung

Diese Strategie nutzt den doppelten RSI, um den Preisdurchbruch zu bestimmen, fügt einen Körperdurchbruchfilter hinzu, um Whipsaws zu vermeiden. Sie verwendet auch Martingale, um Verluste schnell zu reduzieren. Die Strategie kann durch Optimierung von Parametern und Hinzufügen von Filtern für genauere Signale verbessert werden. Das Risikomanagement ist wichtig, um Verluste zu begrenzen. Insgesamt bietet diese Strategie ein relativ stabiles Durchbruchssystem, das für einen hocheffizienten Handel geeignet ist.


/*backtest
start: 2023-10-30 00:00:00
end: 2023-11-06 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Fast RSI Strategy v2.0", shorttitle = "Fast RSI str 2.0", overlay = true)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usersi1 = input(true, defval = true, title = "Use RSI #1")
rsiperiod1 = input(7, defval = 7, minval = 2, maxval = 50, title = "#1 RSI Period")
rsilimit1 = input(25, defval = 25, minval = 1, maxval = 100, title = "#1 RSI limit")
usersi2 = input(true, defval = true, title = "Use RSI #2")
rsiperiod2 = input(14, defval = 14, minval = 2, maxval = 50, title = "#2 RSI Period")
rsilimit2 = input(25, defval = 25, minval = 1, maxval = 100, title = "#2 RSI limit")
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")

//RSI #1
uprsi1 = rma(max(change(close), 0), rsiperiod1)
dnrsi1 = rma(-min(change(close), 0), rsiperiod1)
rsi1 = dnrsi1 == 0 ? 100 : uprsi1 == 0 ? 0 : 100 - (100 / (1 + uprsi1 / dnrsi1))
uplimit1 = 100 - rsilimit1
dnlimit1 = rsilimit1

//RSI #2
uprsi2 = rma(max(change(close), 0), rsiperiod2)
dnrsi2 = rma(-min(change(close), 0), rsiperiod2)
rsi2 = dnrsi2 == 0 ? 100 : uprsi2 == 0 ? 0 : 100 - (100 / (1 + uprsi2 / dnrsi2))
uplimit2 = 100 - rsilimit2
dnlimit2 = rsilimit2

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up1 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and rsi1 < dnlimit1 and body > abody / 5 and usersi1
dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and rsi1 > uplimit1 and body > abody / 5 and usersi1
up2 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and rsi2 < dnlimit2 and body > abody / 5 and usersi2
dn2 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and rsi2 > uplimit2 and body > abody / 5 and usersi2
norma = rsi1 > dnlimit1 and rsi1 < uplimit1 and rsi2 > dnlimit2 and rsi2 < uplimit2
exit = (((strategy.position_size > 0 and bar == 1 and norma) or (strategy.position_size < 0 and bar == -1 and norma)) and body > abody / 2)

//Arrows
col = exit ? black : up1 or dn1 ? blue : up2 or dn2 ? red : na
needup = up1 or up2
needdn = dn1 or dn2
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
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1 or up2
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn1 or dn2
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if  exit
    strategy.close_all()

Mehr