
Strategi ini adalah sistem perdagangan pembalikan tren berdasarkan indeks kekuatan relatif (RSI). Strategi ini menangkap titik balik pasar dengan menetapkan rentang jenuh beli dan jenuh jual, dan menggabungkan stop loss dinamis ATR untuk pengendalian risiko. Keunikan strategi ini terletak pada pengenalan konsep “rentang perdagangan terlarang”, yang secara efektif menghindari perdagangan yang sering terjadi di pasar yang bergejolak. Strategi ini cocok untuk lingkungan pasar dengan volatilitas yang lebih besar, terutama untuk memperdagangkan produk dengan karakteristik tren yang jelas.
Strategi ini terutama didasarkan pada logika inti berikut:
Strategi ini memecahkan masalah waktu dalam perdagangan tren melalui kombinasi inovatif sinyal pembalikan RSI dan rentang perdagangan terlarang. Pengenalan stop loss dinamis ATR menyediakan mekanisme pengendalian risiko yang andal untuk strategi tersebut. Meskipun strategi tersebut masih memiliki beberapa risiko potensial, stabilitas dan profitabilitas strategi dapat lebih ditingkatkan melalui arahan pengoptimalan yang direkomendasikan. Secara keseluruhan, ini adalah strategi perdagangan pembalikan tren dengan logika yang jelas dan kepraktisan yang kuat.
/*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