
RSI vs Random RSI Backtracking Trading Strategy adalah metode analisis teknis canggih yang dirancang khusus untuk mengidentifikasi titik balik penting di pasar. Strategi ini menggabungkan kekuatan indikator relatif kuat (RSI) dan indikator relatif kuat (SRSI) secara acak untuk memprediksi perubahan tren potensial dengan memantau harga dan backtracking antara indikator momentum ini. Selain itu, strategi ini juga mengintegrasikan indeks Moving Average (EMA) sebagai filter tren dan menerapkan filter jarak geser yang tepat, memastikan untuk menangkap perubahan struktur pasar yang bermakna dan bukan kebisingan pasar.
Prinsip inti dari strategi ini didasarkan pada konsep deviasi dalam analisis teknis. Deviasi terjadi ketika pergerakan harga tidak konsisten dengan pergerakan indikator teknis, biasanya menunjukkan bahwa tren saat ini mungkin akan segera berbalik. Strategi ini berfokus pada empat jenis deviasi:
Strategi ini menggunakan kondisi penyaringan yang ketat untuk memastikan kualitas sinyal yang menyimpang:
Ketika deviasi terdeteksi, strategi akan menggambar label dan garis penghubung pada grafik, sehingga pedagang dapat secara intuitif mengidentifikasi sinyal-sinyal penting tersebut. Selain itu, strategi secara otomatis menghasilkan sinyal masuk untuk melakukan plus dan minus berdasarkan pada sinyal deviasi.
Untuk mengurangi risiko ini, disarankan untuk:
RSI vs Random RSI Offset Trading Strategy adalah alat analisis teknis yang kompleks dan kuat yang mampu menangkap sinyal reversal pasar potensial dan perpanjangan tren dengan mengidentifikasi ketidaksesuaian antara harga dan indikator momentum. Strategi ini menyediakan metode komprehensif untuk mengidentifikasi peluang perdagangan probabilitas tinggi dengan mengintegrasikan deteksi offset konvensional dan tersembunyi, dan menerapkan filter yang dirancang dengan baik.
Namun, seperti semua metode analisis teknis, strategi ini juga memiliki keterbatasan dan risiko. Dengan mengimplementasikan optimasi yang disarankan, seperti menambahkan mekanisme manajemen risiko, memperbaiki konfirmasi sinyal, dan mengintegrasikan penyesuaian parameter dinamis, stabilitas dan kinerja strategi dapat ditingkatkan secara signifikan.
Pada akhirnya, strategi ini paling cocok digunakan sebagai bagian dari sistem perdagangan yang lebih luas, dikombinasikan dengan alat analisis lainnya dan prinsip-prinsip pengelolaan dana yang tepat. Untuk pedagang yang memahami analisis teknis dan struktur pasar, strategi yang menyimpang ini dapat menjadi alat yang berharga untuk menemukan pengaturan perdagangan berkualitas tinggi.
/*backtest
start: 2024-06-26 00:00:00
end: 2025-06-24 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("RSI Divergence Strategy", overlay=true)
//strategy("RSI & SRSI Divergence Strategy with EMA & Min Swing Filter + Price Chart Lines", overlay=true)
rsiLength = input.int(14, title="RSI Length")
srsiLength = input.int(14, title="Stochastic RSI Length")
kLength = input.int(3, title="%K Length")
dLength = input.int(3, title="%D Length")
emaLength = input.int(200, title="EMA Length")
lookback = input.int(40, title="Lookback Period for Divergence")
minSwingDistPercent = input.float(1.5, title="Minimum Swing Distance (%)")
minPriceMovePercent = input.float(0.5, title="Minimum Price Move from Last Swing (%)")
rsi = ta.rsi(close, rsiLength)
srsi = ta.stoch(rsi, rsi, rsi, srsiLength)
k = ta.sma(srsi, kLength)
d = ta.sma(k, dLength)
ema200 = ta.ema(close, emaLength)
// === Bullish Regular Divergence ===
var float lastLowPrice = na
var float lastLowRsi = na
var float lastLowSrsi = na
var int lastLowIndex = na
bullishDiv = false
if ta.lowestbars(low, lookback) == 0
if not na(lastLowPrice) and not na(lastLowRsi) and not na(lastLowSrsi)
swingDistLow = math.abs(low - lastLowPrice) / lastLowPrice * 100
priceMoveLow = math.abs(low - lastLowPrice) / lastLowPrice * 100
if swingDistLow >= minSwingDistPercent and priceMoveLow >= minPriceMovePercent
if (low < lastLowPrice and rsi > lastLowRsi) or (low < lastLowPrice and k > lastLowSrsi)
bullishDiv := true
lastLowPrice := low
lastLowRsi := rsi
lastLowSrsi := k
lastLowIndex := bar_index
else
lastLowPrice := low
lastLowRsi := rsi
lastLowSrsi := k
lastLowIndex := bar_index
// === Bearish Regular Divergence ===
var float lastHighPrice = na
var float lastHighRsi = na
var float lastHighSrsi = na
var int lastHighIndex = na
bearishDiv = false
if ta.highestbars(high, lookback) == 0
if not na(lastHighPrice) and not na(lastHighRsi) and not na(lastHighSrsi)
swingDistHigh = math.abs(high - lastHighPrice) / lastHighPrice * 100
priceMoveHigh = math.abs(high - lastHighPrice) / lastHighPrice * 100
if swingDistHigh >= minSwingDistPercent and priceMoveHigh >= minPriceMovePercent
if (high > lastHighPrice and rsi < lastHighRsi) or (high > lastHighPrice and k < lastHighSrsi)
bearishDiv := true
lastHighPrice := high
lastHighRsi := rsi
lastHighSrsi := k
lastHighIndex := bar_index
else
lastHighPrice := high
lastHighRsi := rsi
lastHighSrsi := k
lastHighIndex := bar_index
// === Bullish Hidden Divergence ===
bullishHiddenDiv = false
if ta.lowestbars(low, lookback) == 0
if not na(lastLowPrice) and not na(lastLowRsi) and not na(lastLowSrsi)
swingDistLowHidden = math.abs(low - lastLowPrice) / lastLowPrice * 100
priceMoveLowHidden = math.abs(low - lastLowPrice) / lastLowPrice * 100
if swingDistLowHidden >= minSwingDistPercent and priceMoveLowHidden >= minPriceMovePercent
if (low > lastLowPrice and rsi < lastLowRsi) or (low > lastLowPrice and k < lastLowSrsi)
bullishHiddenDiv := true
// === Bearish Hidden Divergence ===
bearishHiddenDiv = false
if ta.highestbars(high, lookback) == 0
if not na(lastHighPrice) and not na(lastHighRsi) and not na(lastHighSrsi)
swingDistHighHidden = math.abs(high - lastHighPrice) / lastHighPrice * 100
priceMoveHighHidden = math.abs(high - lastHighPrice) / lastHighPrice * 100
if swingDistHighHidden >= minSwingDistPercent and priceMoveHighHidden >= minPriceMovePercent
if (high < lastHighPrice and rsi > lastHighRsi) or (high < lastHighPrice and k > lastHighSrsi)
bearishHiddenDiv := true
// === PLOTS ===
plot(ema200, title="EMA 200", color=color.purple, linewidth=2)
// === STRATEGY ENTRIES ===
if bullishDiv or bullishHiddenDiv
strategy.entry("Long", strategy.long)
if bearishDiv or bearishHiddenDiv
strategy.entry("Short", strategy.short)