RSI Trend Reversal Strategy adalah strategi perdagangan kuantitatif berdasarkan Relative Strength Index (RSI) dan Average True Range (ATR). Strategi ini secara dinamis menyesuaikan tingkat take profit dan stop loss (TP/SL) untuk beradaptasi dengan fluktuasi pasar yang cepat dan menangkap peluang pembalikan tren. Strategi ini berpusat di sekitar RSI, dikombinasikan dengan ATR untuk mengukur volatilitas, dan membangun dua band dinamis adaptif sebagai dasar untuk membuka dan menutup posisi. Strategi ini dapat digunakan secara independen atau sebagai modul take profit dan stop loss untuk strategi lain.
Inti dari RSI Trend Reversal Strategy terletak pada konstruksi band TP/SL yang dinamis. Pertama, menggunakan fungsi custom highest_custom dan lowest_custom untuk menemukan harga tertinggi dan terendah sejak crossover terakhir, membentuk dasar band. Kemudian, RSI dan ATR dihitung dengan panjang yang ditentukan oleh pengguna dan melakukan perhitungan berikut:
Di sini, pengganda adalah faktor ekspansi band yang didefinisikan pengguna. Jika harga pecah di atas band atas, itu akan panjang; jika pecah di bawah band bawah, itu akan pendek. Warna dari kedua band ini juga berubah sesuai dengan posisi harga relatif terhadap band, sehingga mudah diamati.
RSI Trend Reversal Strategy menggunakan RSI dan ATR untuk membangun band adaptif yang dapat secara dinamis menyesuaikan titik TP / SL dan segera menanggapi perubahan pasar. Strategi ini memiliki logika yang jelas, penerapan yang luas, dan dapat menjadi alat yang kuat untuk pedagang kuantitatif. Namun, dalam penggunaan praktis, perhatian masih perlu dibayar untuk pemilihan parameter dan pengendalian risiko, dan disarankan untuk menggunakannya dalam kombinasi dengan sinyal indikator lain untuk meningkatkan kinerja secara keseluruhan. Strategi ini memiliki ruang lebih lanjut untuk optimasi, seperti menambahkan filter tren dan optimasi parameter. Secara keseluruhan, RSI Trend Reversal Strategy memberikan pendekatan sederhana namun efektif untuk perdagangan kuantitatif.
/*backtest start: 2023-04-22 00:00:00 end: 2024-04-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("RSI Trend Reversal", overlay=true, max_bars_back = 4999, calc_on_every_tick = false) //INPUTS rsi_length = input.int(title = "Lenght", defval = 8) rsi_mult = input.float(title = "Multiplier", defval = 1.5, step = .05) lookback = input.int(title = "Delay to prevent idealization", defval = 1) sltp = input.float(title = "Minimum Difference", defval = 10) src = input.source(title = "Source Input", defval = close) //PARAMETERS INITILIZATION hclose = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, src) //FUNCTION INITILIZATION highest_custom(src, length) => x = src for i = 0 to length if src[i] > x x := src[i] x lowest_custom(src, length) => x = src for i = 0 to length if src[i] < x x := src[i] x rsilev(src, length, mult, sltp) => sl = (100 - sltp) / 100 tp = (100 + sltp) / 100 var bool crossup = na var bool crossdown = na var float dir = na dir_change = ta.change(dir) var float BearGuy = 0 BullGuy = ta.barssince(crossup or crossdown) if na(BullGuy) BearGuy += 1 else BearGuy := BullGuy var float upper = na var float lower = na rsilower = ta.rsi(src, length) rsiupper = math.abs(ta.rsi(src, length) - 100) atr = ta.atr(length) / src lower := highest_custom(math.max(highest_custom(highest_custom(src, BearGuy) * (1 - (atr + ((1 / (rsilower) * mult)))), BearGuy), src * sl), BearGuy) upper := lowest_custom(math.min(lowest_custom(lowest_custom(src, BearGuy) * (1 + (atr + ((1 / (rsiupper) * mult)))), BearGuy), src * tp), BearGuy) var float thresh = na if na(thresh) thresh := lower if na(dir) dir := 1 if crossdown dir := -1 if crossup dir := 1 if dir == 1 thresh := lower if dir == -1 thresh := upper crossup := ta.crossover(src, thresh) crossdown := ta.crossunder(src, thresh) thresh rsiclose = rsilev(hclose, rsi_length, rsi_mult, sltp) //PLOTTING var color col = color.lime if hclose > rsiclose col := color.lime if hclose < rsiclose col := color.red plot(rsiclose, linewidth = 2, color = col) //STRATEGY buy = ta.crossover(hclose, rsiclose) sell = ta.crossunder(hclose, rsiclose) if buy[lookback] strategy.entry("long", strategy.long) if sell[lookback] strategy.entry("Short", strategy.short)