Chiến lược này là một hệ thống giao dịch đảo ngược xu hướng dựa trên chỉ số sức mạnh tương đối (RSI), được thiết kế để nắm bắt các điểm chuyển đổi thị trường thông qua các khu vực mua quá mức và bán quá mức trong khi kết hợp stop loss động dựa trên ATR để kiểm soát rủi ro.
Chiến lược thực hiện logic cốt lõi sau:
Chiến lược này giải quyết hiệu quả các vấn đề về thời gian trong giao dịch xu hướng thông qua sự kết hợp sáng tạo của các tín hiệu đảo ngược RSI và một khu vực không giao dịch. Việc giới thiệu ATR stop loss động cung cấp các cơ chế kiểm soát rủi ro đáng tin cậy. Mặc dù chiến lược có một số rủi ro tiềm năng, chúng có thể được giải quyết thông qua các hướng tối ưu hóa được đề xuất để tăng thêm sự ổn định và lợi nhuận. Nhìn chung, đây là một chiến lược giao dịch đảo ngược xu hướng rõ ràng và thực 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