이 전략은 상대적 강도 지수 (RSI) 를 기반으로 한 트렌드 역전 거래 시스템으로, 과잉 구매 및 과잉 판매 구역을 통해 시장 전환점을 포착하는 동시에 위험 통제를 위해 ATR 기반 동적 스톱 로스를 통합하도록 설계되었습니다. 전략의 독특한 특징은 불안정한 시장에서 빈번한 거래를 효과적으로 방지하는 '무역 구역' 개념을 도입하는 것입니다. 이 전략은 특히 높은 변동성과 명확한 트렌드 특성을 가진 시장에 적합합니다.
이 전략은 다음과 같은 핵심 논리를 구현합니다.
이 전략은 혁신적인 RSI 역전 신호와 거래 금지 구역의 조합을 통해 트렌드 트레이딩의 타이밍 문제를 효과적으로 해결합니다. ATR 동적 스톱 손실의 도입은 신뢰할 수있는 위험 제어 메커니즘을 제공합니다. 전략에는 일부 잠재적 인 위험이 있지만 안정성과 수익성을 더욱 향상시키기 위해 제안된 최적화 방향을 통해 해결할 수 있습니다. 전반적으로 이것은 논리적으로 명확하고 실용적인 트렌드 역전 거래 전략입니다.
/*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