
Bei dieser Strategie handelt es sich um ein Trendumkehr-Handelssystem, das auf dem Relative-Stärke-Index (RSI) basiert. Es erfasst Marktwendepunkte durch die Festlegung von überkauften und überverkauften Bereichen und kombiniert ATR mit dynamischem Stop-Loss zur Risikokontrolle. Die Einzigartigkeit der Strategie liegt in der Einführung des Konzepts der „verbotenen Handelsspanne“, wodurch häufiges Handeln in einem volatilen Markt wirksam vermieden wird. Diese Strategie eignet sich für Marktumfelder mit höherer Volatilität, insbesondere für den Handel mit Produkten mit deutlichen Trendeigenschaften.
Die Umsetzung der Strategie basiert im Wesentlichen auf der folgenden Kernlogik:
Diese Strategie löst das Timingproblem im Trendhandel durch die innovative Kombination von RSI-Umkehrsignalen und verbotenen Handelsbereichen. Die Einführung des dynamischen ATR-Stop-Loss bietet einen zuverlässigen Risikokontrollmechanismus für die Strategie. Obwohl die Strategie immer noch einige potenzielle Risiken birgt, können die Stabilität und Rentabilität der Strategie durch die empfohlenen Optimierungsrichtungen weiter verbessert werden. Insgesamt handelt es sich hierbei um eine Trendumkehr-Handelsstrategie mit klarer Logik und ausgeprägter Praktikabilität.
/*backtest
start: 2024-12-19 00:00:00
end: 2024-12-26 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("RSI-Based Trading Strategy with No Trading Zone and ATR Stop Loss", overlay=true)
// Input parameters
rsiPeriod = input(14, title="RSI Period")
rsiOverbought = input(60, title="RSI Overbought Level")
rsiOversold = input(40, title="RSI Oversold Level")
rsiExitBuy = input(45, title="RSI Exit Buy Level")
rsiExitSell = input(55, title="RSI Exit Sell Level")
atrPeriod = input(14, title="ATR Period")
atrMultiplier = input(1.5, title="ATR Stop Loss Multiplier")
// Calculate RSI and ATR
rsi = ta.rsi(close, rsiPeriod)
atr = ta.atr(atrPeriod)
// Buy conditions
buyCondition = ta.crossover(rsi, rsiOverbought) and close > high[1]
if (buyCondition and not strategy.position_size)
stopLossLevel = close - atr * atrMultiplier
strategy.entry("Buy", strategy.long, stop=stopLossLevel)
// Exit conditions for buy
exitBuyCondition = rsi < rsiExitBuy
if (exitBuyCondition and strategy.position_size > 0)
strategy.close("Buy")
// Sell conditions
sellCondition = ta.crossunder(rsi, rsiOversold) and close < low[1]
if (sellCondition and not strategy.position_size)
stopLossLevel = close + atr * atrMultiplier
strategy.entry("Sell", strategy.short, stop=stopLossLevel)
// Exit conditions for sell
exitSellCondition = rsi > rsiExitSell
if (exitSellCondition and strategy.position_size < 0)
strategy.close("Sell")
// Plotting RSI for visualization
hline(rsiOverbought, "Overbought", color=color.red)
hline(rsiOversold, "Oversold", color=color.green)
hline(rsiExitBuy, "Exit Buy", color=color.blue)
hline(rsiExitSell, "Exit Sell", color=color.orange)
plot(rsi, title="RSI", color=color.purple)
// // No Trading Zone
// var box noTradingZone = na
// // Create a rectangle for the no trading zone
// if (rsi >= rsiExitBuy and rsi <= rsiExitSell)
// // If the no trading zone box does not exist, create it
// if (na(noTradingZone))
// noTradingZone := box.new(bar_index, high, bar_index + 1, low, bgcolor=color.new(color.gray, 90), border_color=color.new(color.gray, 90))
// else
// // Update the existing box to cover the current candle
// box.set_left(noTradingZone, bar_index)
// box.set_right(noTradingZone, bar_index + 1)
// box.set_top(noTradingZone, high)
// box.set_bottom(noTradingZone, low)
// else
// // If the RSI is outside the no trading zone, delete the box
// if (not na(noTradingZone))
// box.delete(noTradingZone)
// noTradingZone := na