Diese Strategie ist ein quantitatives Handelssystem, das auf RSI-Überverkaufssignalen und dynamischem ATR-Stop-Loss basiert. Mit Hilfe von täglichen Zeitrahmendaten kombiniert es RSI-Überverkaufssignalen mit einem 200-tägigen gleitenden Durchschnittstrendfilter, um Rebound-Möglichkeiten in überverkauften Marktbedingungen zu erfassen. Die Strategie verwendet sowohl dynamische ATR-Stop-Loss- als auch statische Prozentsatz-Stop-Loss-Mechanismen, zusammen mit dreifachen Gewinnzielen, die durch stufenweise Positionsreduktion umgesetzt werden.
Die Kernlogik umfasst folgende Schlüsselelemente:
Trendabhängigkeit: Die Strategie kann häufige Stopps in unterschiedlichen Märkten auslösen. Vorschlag: Fügen Sie Oszillatorfilter hinzu, um falsche Signale zu reduzieren.
Bei einem großen Stop-Loss kann ein festes Stop-Loss von 25% zu großen Verlusten bei einem einzigen Handel führen. Vorschlag: Anpassen des Stop-Loss-Prozentsatzes anhand der persönlichen Risikotoleranz.
Abzugsrisiko: Die abgestufte Gewinnnahme kann bei starken Trends zu früh Positionen reduzieren. Vorschlag: Überlegen Sie dynamische Gewinnziele oder behalten Sie einen Teil für den Trend.
Diese Strategie baut ein komplettes Handelssystem auf, indem sie RSI-Überverkaufssignale mit gleitender Durchschnittstrendfilterung kombiniert, ergänzt durch dynamische ATR-Stop-Loss- und dreifache Gewinnziele. Seine Stärken liegen in der flexiblen Risikokontrolle und dem rationalen Gewinnmanagement, obwohl eine Optimierung auf der Grundlage von Marktbedingungen und persönlicher Risikopräferenz erforderlich ist. Durch die kontinuierliche Verbesserung des Signalsystems, des Stop-Loss-Mechanismus und der Gewinnstrategie zeigt das System Potenzial für eine bessere Leistung im Live-Handel.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-27 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA/4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/ // © wielkieef //@version=5 strategy("Simple RSI stock Strategy [1D] ", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=75, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.03) // Rsi oversoldLevel = input(30, title="Oversold Level") overboughtLevel = input(70, title="Overbought Level") rsi = ta.rsi(close, 5) rsi_overbought = rsi > overboughtLevel rsi_oversold = rsi < oversoldLevel // Sma 200 lenghtSMA = input(200, title = "SMA lenght") sma200 = ta.sma(close, lenghtSMA) // ATR stop-loss atrLength = input.int(20, title="ATR Length") atrMultiplier = input.float(1.5, title="ATR Multiplier") atrValue = ta.atr(atrLength) var float long_stop_level = na var float short_stop_level = na var float tp1_level = na var float tp2_level = na var float tp3_level = na // Strategy entry long = (rsi_oversold ) and close > sma200 // Take Profit levels tp_1 = input.float(5.0, "TP 1", minval=0.1, step=0.1) tp_2 = input.float(10.0, "TP 2", minval=0.2, step=0.1) tp_3 = input.float(15.0, "TP 3", minval=0.3, step=0.1) if long strategy.entry('Long', strategy.long) long_stop_level := close - atrMultiplier * atrValue tp1_level := strategy.position_avg_price * (1 + tp_1 / 100) tp2_level := strategy.position_avg_price * (1 + tp_2 / 100) tp3_level := strategy.position_avg_price * (1 + tp_3 / 100) // basic SL - this code is from author RafaelZioni, modified by wielkieef sl = input.float(25.0, 'Basic Stop Loss %', step=0.1) per(procent) => strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) // ATR SL if (strategy.position_size > 0 and (close <= long_stop_level)) strategy.close("Long") tp1_level := na tp2_level := na tp3_level := na plot(long_stop_level, color=color.orange, linewidth=2, title="Long Stop Loss") // TP levels if (strategy.position_size > 0) if (not na(tp1_level) and close >= tp1_level) tp1_level := na if (not na(tp2_level) and close >= tp2_level) tp2_level := na if (not na(tp3_level) and close >= tp3_level) tp3_level := na plot(strategy.position_size > 0 and not na(tp1_level) ? tp1_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 1") plot(strategy.position_size > 0 and not na(tp2_level) ? tp2_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 2") plot(strategy.position_size > 0 and not na(tp3_level) ? tp3_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 3") // Strategy exit points for Take Profits strategy.exit('TP 1', from_entry="Long", qty_percent=33, profit=per(tp_1), loss=per(sl)) strategy.exit('TP 2', from_entry="Long", qty_percent=66, profit=per(tp_2), loss=per(sl)) strategy.exit('TP 3', from_entry="Long", qty_percent=100, profit=per(tp_3), loss=per(sl)) // by wielkieef