Cette stratégie est un système de négociation d'inversion de tendance basé sur l'indice de force relative (RSI), conçu pour capturer les points tournants du marché à travers les zones de surachat et de survente tout en incorporant un stop loss dynamique basé sur ATR pour le contrôle des risques.
La stratégie met en œuvre la logique de base suivante:
Cette stratégie aborde efficacement les problèmes de timing dans le trading de tendance grâce à la combinaison innovante de signaux d'inversion de RSI et d'une zone de non-échange. L'introduction de l'ATR stop loss dynamique fournit des mécanismes de contrôle des risques fiables. Bien que la stratégie comporte certains risques potentiels, ils peuvent être abordés grâce aux directions d'optimisation suggérées pour améliorer davantage la stabilité et la rentabilité.
/*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