
Strategi RSI overbought oversold zone momentum breakout quantification adalah sistem perdagangan yang didasarkan pada indeks relatif kuat (RSI) yang berfokus pada menangkap perubahan dinamika pasar dan harga breakout. Inti dari strategi ini adalah untuk mengidentifikasi zona overbought oversold dengan indikator RSI yang disesuaikan, menggabungkan filter EMA dan SMA untuk meningkatkan kualitas sinyal, dan menerapkan jendela waktu yang ketat dan pembatasan perdagangan harian untuk mengendalikan risiko.
Prinsip inti dari strategi ini adalah untuk menangkap RSI dari zona netral ke zona overbought atau oversold, yang biasanya mengindikasikan pergeseran tren harga potensial.
Penghitungan RSI yang disesuaikan: Mengurangi nilai RSI 14 siklus standar 50, membuat indikator berfluktuasi antara 50 dan + 50, garis nol menjadi titik acuan netral.
Tetapkan ambang batas dinamis: Mengatur nilai pusat dan kisaran fluktuasi yang berbeda sesuai dengan tren pasar, dan secara otomatis menyesuaikan sinyal untuk memicu nilai terendah dalam lingkungan bull dan bear.
Logika Generasi Sinyal:
Manajemen transaksiStrategi: hanya dijalankan dalam waktu perdagangan yang ditentukan (default 9:30 to 16:00 EST) dan dapat diatur untuk jumlah maksimum transaksi per hari (default 5 kali).
Pengendalian Risiko: Menggunakan stop-loss yang ditetapkan berdasarkan satuan fluktuasi terkecil (default 50 Ticks) dan stop-loss yang dapat dipilih (default 30 Ticks).
Adaptasi terhadap kondisi pasar: Dengan membagi pasar bullish dan bearish melalui SMA 200, secara dinamis menyesuaikan titik pusat penurunan RSI, sehingga strategi dapat beradaptasi dengan lingkungan pasar yang berbeda.
Mekanisme multi-filterKombinasi dengan EMA Dynamic Filter dan SMA200 Trend Filter, secara signifikan meningkatkan kualitas sinyal dan mengurangi false breaks.
Manajemen waktu yang ketatSetup jendela waktu perdagangan, hindari periode pembukaan dan penutupan dengan volatilitas pasar yang tinggi, dan fokus pada periode pasar dengan likuiditas terbaik.
Pengendalian paparan risikoUntuk mencegah over-trading dan risiko overnight, ada pembatasan perdagangan harian dan mekanisme penutupan otomatis.
Sistem umpan balik visual: Memberikan status pasar dan pemantauan kinerja yang intuitif melalui kolom harga berkod warna dan panel perdagangan visual.
Konfigurasi parameter yang fleksibel: Semua parameter kunci dapat disesuaikan dengan opsi input, sehingga strategi dapat disesuaikan dengan varietas perdagangan dan periode waktu yang berbeda.
Risiko Penembusan Palsu:RSI terobosan dapat menyebabkan sinyal palsu, terutama di pasar horizontal menyusun. . Solusi adalah dengan menambahkan kondisi konfirmasi, seperti kombinasi dengan harga bentuk atau volume transaksi konfirmasi.
Risiko over-optimisasi: Pengaturan parameter ganda dapat menyebabkan over-fitting data historis. Disarankan untuk melakukan retesting dalam kondisi pasar yang berbeda untuk menemukan kombinasi parameter yang kuat.
Ketergantungan lingkungan pasarStrategi ini mungkin lebih baik dalam pasar tren yang kuat daripada pasar yang bergolak. Sebelum digunakan, evaluasi kondisi pasar saat ini, menyesuaikan parameter atau menghentikan perdagangan jika diperlukan.
Pembatasan stop loss tetapStop loss yang didasarkan pada Ticks mungkin tidak cocok untuk semua kondisi pasar. Pertimbangkan untuk menggunakan stop loss yang didasarkan pada volatilitas, seperti ATR.
Pembatasan jendela waktu: Jendela waktu perdagangan yang ketat mungkin akan kehilangan peluang perdagangan berkualitas di luar jam. Anda dapat mempertimbangkan untuk mengatur jendela perdagangan yang berbeda untuk pasar yang berbeda.
Optimalisasi Dynamic ThresholdStrategi saat ini menggunakan rentang fluktuasi tetap (±2) dan dapat dipertimbangkan untuk menyesuaikan rentang ini secara dinamis berdasarkan volatilitas pasar (misalnya ATR) untuk menyesuaikan dengan kondisi pasar yang berbeda.
Filter fluktuasiMenambahkan kondisi penyaringan volatilitas berdasarkan ATR dan menghindari perdagangan ketika volatilitas terlalu rendah, yang membantu mengurangi sinyal palsu di pasar horizontal.
Konfirmasi multi-periode: Konfirmasi sinyal RSI yang mengintegrasikan beberapa periode waktu, hanya menghasilkan sinyal perdagangan ketika arah RSI beberapa periode waktu sesuai, meningkatkan kualitas sinyal.
Mekanisme Konfirmasi VolumeTermasuk kondisi volume transaksi, yang mengharuskan harga untuk terobosan bersamaan dengan peningkatan volume transaksi, untuk meningkatkan keandalan sinyal.
Mekanisme penguncian keuntungan: Mengimplementasikan Stop Loss Trailing Dinamis, secara otomatis menyesuaikan posisi stop loss saat harga bergerak ke arah yang menguntungkan, mengunci sebagian keuntungan.
Pengoptimalan masuk: Meningkatkan kondisi struktur pasar (seperti titik dukungan / resistensi), masuk hanya saat harga kunci terobosan, meningkatkan tingkat kemenangan.
Parameter adaptasi: Implementasi mekanisme untuk secara otomatis menyesuaikan panjang RSI dan siklus EMA berdasarkan kondisi pasar, membuat strategi lebih adaptif.
Strategi kuantitatif RSI overbought/oversold adalah sistem perdagangan yang terstruktur dengan baik, yang menggabungkan RSI overbought/oversold, penyaringan tren, dan manajemen risiko yang ketat, memberikan para pedagang alat yang efektif untuk menangkap perubahan dinamika pasar. Strategi ini unik dalam mekanisme penyesuaian penurunan nilai dinamis yang dapat secara otomatis menyesuaikan standar sinyal berdasarkan tren pasar secara keseluruhan.
Strategi ini memiliki banyak mekanisme penyaringan dan aturan perdagangan yang ketat yang secara efektif mengurangi sinyal palsu, sementara konfigurasi parameter yang fleksibel memungkinkan untuk beradaptasi dengan varietas perdagangan dan kondisi pasar yang berbeda. Namun, pengguna harus menyadari keterbatasan yang melekat pada strategi RSI breakout, terutama dalam kinerja di pasar horizontal.
Strategi ini dapat ditingkatkan lebih lanjut dengan arah optimasi yang disarankan, seperti penyesuaian nilai ambang dinamis, konfirmasi siklus waktu multi dan penyaringan volatilitas. Secara keseluruhan, ini adalah kerangka strategi yang menyeimbangkan kualitas sinyal dan pengendalian risiko yang cocok untuk digunakan oleh pedagang jangka pendek dan menengah dalam operasi sehari.
/*backtest
start: 2025-04-21 00:00:00
end: 2025-04-28 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy('RSI SR OB Breakouts Strategy PRO (coffeshopcrypto)', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=15, max_bars_back=200, max_boxes_count=200, precision=2)
// === Inputs ===
show_hide_boxes = input.bool(true, 'Show Ranges')
show_hide_orderblocks = input.bool(true, 'Show Orderblocks')
use_breakout_colors = input.bool(true, title="Use Breakout Bar Colors")
rsi_len = input.int(14, title="RSI Length", minval=4, group="Risk Management")
// --- Risk Management ---
takeProfitPoints = input.int(50, title="Take Profit (Ticks)", group="Risk Management")
useStopLossMode = input.bool(false, title="Use Stop Loss Instead of Only TP?", group="Risk Management")
stopLossPoints = input.int(30, title="Stop Loss (Ticks)", group="Risk Management")
// --- Time Preferences ---
startTradeHour = input.int(9, title="Trading Start Hour (EST)", minval=0, maxval=23, group="Time Preferences")
startTradeMinute = input.int(30, title="Trading Start Minute (EST)", minval=0, maxval=59, group="Time Preferences")
endTradeHour = input.int(16, title="Trading End Hour (EST)", minval=0, maxval=23, group="Time Preferences")
endTradeMinute = input.int(0, title="Trading End Minute (EST)", minval=0, maxval=59, group="Time Preferences")
// --- Trade Limit Preferences ---
useTradeLimit = input.bool(true, title="Enable Daily Trade Limit?", group="Trade Limit")
maxTradesPerDay = input.int(5, title="Max Trades Per Day", minval=1, group="Trade Limit")
// --- EMA Adjustable ---
ema_filter_enabled = input.bool(true, "Use EMA Filter?")
ema_length = input.int(50, "EMA Length", minval=2)
ema_dynamic = ta.ema(close, ema_length)
// --- SMA150 Trend Filter ---
sma200 = ta.sma(close, 150)
useBullishSettings = close > sma200
// --- Trading Panel Toggle ---
showPanel = input.bool(true, "Show Session Trading Panel?", group="Display Settings")
// === Trade Time Check (EST Time) ===
tradeAllowed = (hour > startTradeHour or (hour == startTradeHour and minute >= startTradeMinute)) and
(hour < endTradeHour or (hour == endTradeHour and minute <= endTradeMinute))
// === Trade Limit Check ===
var int tradeCount = 0
newDay = ta.change(dayofmonth) != 0
if newDay
tradeCount := 0
canTrade = tradeAllowed and (not useTradeLimit or tradeCount < maxTradesPerDay)
// === Calculate RSI and thresholds ===
rsi_up = ta.rma(math.max(ta.change(close), 0), rsi_len)
rsi_down = ta.rma(-math.min(ta.change(close), 0), rsi_len)
_rsi = rsi_down == 0 ? 100 : rsi_up == 0 ? 0 : 100 - 100 / (1 + rsi_up / rsi_down)
adjustedRSI = _rsi - 50
bullish_center = 5
bearish_center = -5
spread = 2
auto_rsi_center = useBullishSettings ? bullish_center : bearish_center
momentum_upper_threshold = auto_rsi_center + spread
momentum_lower_threshold = auto_rsi_center - spread
pricebarColor = adjustedRSI > momentum_upper_threshold ? color.rgb(37, 155, 41) : adjustedRSI < momentum_lower_threshold ? color.rgb(223, 48, 48) : color.gray
// === Signal Conditions ===
longCondition = adjustedRSI > momentum_upper_threshold and (not ema_filter_enabled or close > ema_dynamic)
shortCondition = adjustedRSI < momentum_lower_threshold and (not ema_filter_enabled or close < ema_dynamic)
// === Fresh Triggers Only ===
var bool longTrigger = false
var bool shortTrigger = false
longTrigger := longCondition and not longCondition[1]
shortTrigger := shortCondition and not shortCondition[1]
// === Trade Management with Reversals ===
var int winsToday = 0
var int lossesToday = 0
if (canTrade)
if (longTrigger)
if (strategy.position_size < 0)
strategy.close("Short", comment="Reverse to Long")
if (strategy.position_size <= 0)
strategy.entry("Long", strategy.long)
tradeCount += 1
if (shortTrigger)
if (strategy.position_size > 0)
strategy.close("Long", comment="Reverse to Short")
if (strategy.position_size >= 0)
strategy.entry("Short", strategy.short)
tradeCount += 1
// === Attach Exits After Entry ===
if (strategy.position_size > 0)
longTakeProfit = strategy.position_avg_price + (takeProfitPoints * syminfo.mintick)
longStopLoss = strategy.position_avg_price - (stopLossPoints * syminfo.mintick)
if useStopLossMode
strategy.exit("Long Exit", from_entry="Long", limit=longTakeProfit, stop=longStopLoss)
else
strategy.exit("Long TP Only", from_entry="Long", limit=longTakeProfit)
if (strategy.position_size < 0)
shortTakeProfit = strategy.position_avg_price - (takeProfitPoints * syminfo.mintick)
shortStopLoss = strategy.position_avg_price + (stopLossPoints * syminfo.mintick)
if useStopLossMode
strategy.exit("Short Exit", from_entry="Short", limit=shortTakeProfit, stop=shortStopLoss)
else
strategy.exit("Short TP Only", from_entry="Short", limit=shortTakeProfit)
// === Track wins/losses ===
if (strategy.closedtrades > 0)
if (strategy.closedtrades.profit(strategy.closedtrades - 1) > 0)
winsToday += 1
else
lossesToday += 1
// === Auto Close all trades if time window ended ===
if (not tradeAllowed)
strategy.close_all(comment="Session End Auto Close")
// === Plotting ===
plot(adjustedRSI, title="Adjusted RSI", color=color.rgb(255, 235, 59))
plot(ema_dynamic, title="Dynamic EMA", color=color.blue)
plot(sma200, title="SMA 200", color=color.gray)
hline(0, color=color.white)
barcolor(use_breakout_colors ? pricebarColor : na)
// === Trading Panel ===
if showPanel
label.new(x=bar_index, y=high, text="Wins: " + str.tostring(winsToday) + " | Losses: " + str.tostring(lossesToday), color=color.black, style=label.style_label_left, size=size.small)