
Strategi ini mengidentifikasi titik masuk dengan probabilitas tinggi dengan menggabungkan sinyal RSI, konfirmasi volume transaksi, dan pengenalan bentuk K yang akurat, sambil menyaring sinyal lemah. Strategi ini menerapkan sistem penyaringan bertingkat, yang membutuhkan beberapa kondisi yang harus dipenuhi untuk masuk ke perdagangan, dengan meminta konversi RSI, volume transaksi yang signifikan, dan bentuk K yang kuat. Sistem ini bertujuan untuk menangkap hanya pengaturan perdagangan yang paling andal.
Inti dari strategi ini adalah kombinasi kuat dari mekanisme multiple confirmation. RSI mengidentifikasi potensi konversi momentum tetapi dapat menghasilkan sinyal palsu di pasar yang bergoyang, konfirmasi volume transaksi memastikan bahwa perdagangan dilakukan hanya ketika ada cukup minat pasar, K-line format meminta untuk menyaring konversi lemah dengan meminta tindakan harga yang kuat.
Logika inti dari strategi ini didasarkan pada sinergi dari tiga indikator teknis utama. Pertama adalah mekanisme deteksi dinamika RSI, strategi menggunakan 14 siklus RSI, dengan 70 sebagai tingkat overbought, dan 30 sebagai tingkat oversold. Untuk entri multihead, sistem mendeteksi RSI dari bawah 30 ke atas melewati 30, yang menunjukkan perubahan dari status oversold ke posisi bullish. Untuk entri kosong, sistem mengidentifikasi RSI dari atas 70 ke bawah melewati 70, yang menunjukkan perubahan dari status overbought ke posisi bearish.
Komponen kunci kedua adalah sistem konfirmasi volume transaksi. Strategi tersebut mengharuskan volume transaksi pada K-line saat ini harus melebihi 14 periode volume transaksi SMPM, yang memastikan bahwa transaksi hanya dilakukan dengan keterlibatan pasar yang cukup, sehingga memfilter terobosan palsu dalam lingkungan likuiditas rendah. Filter ketiga adalah analisis bentuk K-line, yang mengharuskan K-line bullish atau bearish yang kuat, di mana bagian entitas harus menempati setidaknya 50% dari total K-line, yang memastikan bahwa tindakan harga memiliki karakteristik yang menentukan dan menghindari sinyal lemah dalam kondisi pasar yang tidak pasti.
Strategi ini juga menyediakan filter supertrend yang dapat dipilih, ketika diaktifkan, masuk multihead harus selaras dengan arah naik dari supertrend, dan masuk head harus selaras dengan arah turun. Sistem stop loss ATR dinamis menyesuaikan tingkat perlindungan sesuai dengan fluktuasi pasar saat ini, menggunakan multiplikator 3.5 kali ATR untuk menghitung stop loss dan target profit, atau menawarkan opsi stop loss tetap 0,5%, dengan rasio risiko-pengembalian yang disetel menjadi 1,5: 1.
Multiple Filtering RSI Dynamic Confirmation Trading Strategy memiliki beberapa keunggulan yang signifikan. Pertama adalah kemampuan pemfilteran sinyal yang kuat, yang secara signifikan mengurangi probabilitas sinyal palsu dengan mengharuskan RSI Dynamic Conversion, Transit Confirmation, dan Strong K-Line Formation.
Kedua, strategi memiliki kemampuan adaptasi dan fleksibilitas yang luar biasa. Sistem stop loss ATR dinamis dapat secara otomatis menyesuaikan tingkat perlindungan sesuai dengan fluktuasi pasar, memberikan stop loss yang lebih longgar pada periode fluktuasi tinggi, dan perlindungan yang ketat pada periode fluktuasi rendah.
Keuntungan ketiga yang penting adalah sistem manajemen risiko yang komprehensif. Strategi ini menawarkan dua cara untuk keluar, stop loss dinamis berbasis ATR dan stop loss persentase tetap, sehingga pedagang dapat memilih metode yang sesuai sesuai dengan preferensi risiko mereka. Pengaturan rasio risiko / pengembalian risiko 1.5: 1 memastikan titik keseimbangan untung-rugi yang baik, bahkan jika rasio kemenangan sedikit lebih rendah. Strategi ini juga mendukung konfigurasi perdagangan multi-arah, termasuk multi-head, kosong-head atau perdagangan dua arah.
Meskipun strategi ini memiliki mekanisme pemfilteran ganda, masih ada beberapa risiko potensial yang perlu diperhatikan. Risiko utama adalah kemungkinan kehilangan peluang perdagangan di pasar tren yang kuat. Karena strategi ini bergantung pada sinyal overbought dan oversold RSI, dalam tren yang kuat yang terus naik atau turun, RSI dapat bertahan di level ekstrim untuk waktu yang lama, sehingga strategi tidak dapat menghasilkan sinyal masuk, sehingga kehilangan peluang tren yang penting.
Risiko penting kedua adalah sering berdagang di pasar yang bergoyang. Meskipun filter ganda mengurangi sinyal palsu, pasar mungkin masih menghasilkan beberapa sinyal terobosan yang tampaknya efektif tetapi akhirnya gagal pada tahap penyusunan horizontal. Ini dapat menyebabkan akumulasi kerugian kecil berturut-turut. Strategi mitigasi termasuk menambahkan filter status pasar tambahan, seperti indikator volatilitas atau indikator kekuatan tren, untuk menghentikan perdagangan di lingkungan tren rendah.
Risiko ketiga melibatkan parameter optimasi overfit. Strategi terdiri dari beberapa parameter yang dapat disesuaikan, termasuk panjang RSI, siklus ATR, rasio pengembalian risiko, dan lain-lain. Terlalu banyak mengoptimalkan parameter ini untuk menyesuaikan dengan data historis dapat menyebabkan kinerja yang buruk di masa depan.
Strategi ini memiliki beberapa arah optimasi penting. Pertama adalah meningkatkan kemampuan untuk mengidentifikasi kondisi pasar, dan dapat mengintegrasikan indikator klasifikasi pasar tambahan seperti rasio rentang rata-rata nyata, indeks volatilitas, atau indikator intensitas tren untuk lebih mengidentifikasi lingkungan pasar yang berbeda. Dalam lingkungan dengan volatilitas tinggi, strategi dapat menyesuaikan RSI threshold atau menambahkan kondisi konfirmasi tambahan.
Arah pengoptimalan kedua adalah dengan menerapkan analisis multi-frame waktu. Strategi saat ini beroperasi pada satu frame waktu, dan pengakuan tren pada frame waktu yang lebih tinggi dapat meningkatkan kualitas sinyal secara signifikan. Misalnya, ketika strategi dijalankan pada grafik 5 menit, Anda dapat meminta arah tren pada grafik 15 menit atau 1 jam untuk sejajar.
Optimasi kunci ketiga adalah penerapan sistem manajemen posisi dinamis. Strategi saat ini menggunakan rasio risiko-pengembalian yang tetap, tetapi dapat menyesuaikan ukuran posisi dan target berdasarkan volatilitas pasar, kekuatan sinyal, atau kinerja historis yang dinamis. Meningkatkan posisi ketika sinyal kepastian tinggi, mengurangi posisi ketika ketidakpastian tinggi, penyesuaian dinamis ini akan memaksimalkan efisiensi modal.
Keempat arah optimasi adalah mengintegrasikan komponen pembelajaran mesin. Model pelatihan data historis dapat digunakan untuk mengidentifikasi kombinasi kondisi masuk yang optimal, atau untuk memprediksi probabilitas keberhasilan sinyal. Metode ini dapat secara dinamis menyesuaikan parameter strategi berdasarkan kondisi pasar saat ini, bukan bergantung pada pengaturan statis.
Strategi perdagangan konfirmasi dinamis RSI multi-filter mewakili metode perdagangan kuantitatif yang matang, yang menciptakan sistem perdagangan yang kuat dengan kombinasi cerdas dari indikator teknis, analisis volume, dan manajemen risiko. Keunggulan inti dari strategi ini adalah mekanisme penyaringan multi-lapisan yang secara efektif mengurangi sinyal palsu sambil tetap sensitif terhadap peluang pasar yang sebenarnya.
Strategi ini menunjukkan kinerja yang baik, dengan win rate 58.49%, gain factor 1.472, dan withdrawal maksimum hanya 3.01% yang membuktikan efektivitasnya sebagai keuntungan yang disesuaikan dengan risiko. Namun, pedagang harus menyadari bahwa ada risiko yang melekat pada strategi apa pun, terutama di pasar cryptocurrency yang berubah dengan cepat.
Strategi ini memiliki potensi besar untuk meningkatkan kinerja lebih lanjut melalui arah optimasi yang disarankan, terutama analisis multi-frame waktu dan penyesuaian parameter dinamis. Pada akhirnya, strategi ini memberikan dasar yang kuat bagi pedagang yang mencari metode sistematis untuk memasuki perdagangan cryptocurrency, tetapi harus selalu dikombinasikan dengan manajemen risiko yang tepat dan pembelajaran berkelanjutan.
/*backtest
start: 2024-05-21 00:00:00
end: 2025-05-20 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © nioboi
// Best settings already at default.
// Use at BTCUSDT 5m chart
// strategy properties: start with 100 usdt capital, set order size to be 20 usdt
// for indicator use (buy sell signals only), rightclick on chart and disable "Trades On Chart"
//@version=6
strategy("Volume FIltered RSI Buy/Sell Strategy", overlay=true, process_orders_on_close=true, commission_value=0.055, initial_capital=100, currency=currency.USDT, pyramiding=1)
// =========================================
// Input Groups
// =========================================
string rsi_group = "RSI"
string atr_sl_finder_group = "ATR SL Finder"
string trade_execution_group = "Strategy Execution"
string supertrend_group = "Supertrend Filter"
string range_filter_group = "Range Detector Filter"
// =========================================
// RSI Calculation
// =========================================
rsi_ob = input.int(70, "Overbought Level", group=rsi_group)
rsi_os = input.int(30, "Oversold Level", group=rsi_group)
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group=rsi_group)
rsiSourceInput = input.source(close, "Source", group=rsi_group)
change = ta.change(rsiSourceInput)
up = ta.rma(math.max(change, 0), rsiLengthInput)
down = ta.rma(-math.min(change, 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsi_can_long = rsi[1] < rsi_os and rsi >= rsi_os
rsi_can_short = rsi[1] > rsi_ob and rsi <= rsi_ob
// =========================================
// Candle Body Conditions
// =========================================
isBullCandle = close > open and (math.abs(close - open) > (high - low) * 0.5)
isBearCandle = close < open and (math.abs(close - open) > (high - low) * 0.5)
// =========================================
// Volume Filter
// =========================================
has_volume = volume >= ta.sma(volume, 14)
// Initial can_long and can_short
can_long = rsi_can_long and isBullCandle and has_volume
can_short = rsi_can_short and isBearCandle and has_volume
// =========================================
// Supertrend Filter
// =========================================
useSupertrendFilter = input.bool(false, "Use Supertrend Filter", group=supertrend_group)
st_tf = input.timeframe("", "Supertrend Timeframe", group=supertrend_group)
atrPeriod = input.int(10, "ATR Length", minval=1, group=supertrend_group)
factor = input.float(3.0, "Factor", minval=0.01, step=0.01, group=supertrend_group)
[supertrendVal, directionVal] = request.security(syminfo.tickerid, st_tf, ta.supertrend(factor, atrPeriod))
if useSupertrendFilter
can_long := can_long and directionVal < 0 and close > supertrendVal
can_short := can_short and directionVal > 0 and close < supertrendVal
// =========================================
// ATR SL Finder © Veryfid
// =========================================
atrlength = input.int(title='Length', defval=14, minval=1, group=atr_sl_finder_group)
smoothing = input.string(title='Smoothing', defval='RMA', options=['RMA','SMA','EMA','WMA'], group=atr_sl_finder_group)
m = input(3.5, 'Multiplier', group=atr_sl_finder_group)
src1 = high
src2 = low
ma_function(source, length) =>
if smoothing == 'RMA'
ta.rma(source, length)
else
if smoothing == 'SMA'
ta.sma(source, length)
else
if smoothing == 'EMA'
ta.ema(source, length)
else
ta.wma(source, length)
x = ma_function(ta.tr(true), atrlength) * m + src1 // SHORT SL
x2 = src2 - ma_function(ta.tr(true), atrlength) * m // LONG SL
p1 = plot(x, title="ATR Short Stop Loss", color=#ffffff18)
p2 = plot(x2, title="ATR Long Stop Loss", color=#ffffff18)
// =========================================
// Strategy Execution
// =========================================
tradeDirection = input.string("Both", "Trade Direction", ["Long Only","Short Only","Both"], group=trade_execution_group)
risk_reward_ratio = input.float(1.5, "Risk Reward Ratio", group=trade_execution_group)
exit_strategy = input.string("Fixed Percent", "Exit Strategy", ["ATR","Fixed Percent"], group=trade_execution_group)
SLPercent = input.float(0.5, "Stoploss Percent (%)", group=trade_execution_group)
enterLong = can_long and (tradeDirection == "Long Only" or tradeDirection == "Both")
enterShort = can_short and (tradeDirection == "Short Only" or tradeDirection == "Both")
var bool plotMarkers_long = false
var float sl_long = na
var float tp2_long = na
var float entryPrice_long = na
var bool plotMarkers_short = false
var float sl_short = na
var float tp2_short = na
var float entryPrice_short = na
if exit_strategy == "ATR"
// Long Entries
if enterLong and strategy.position_size == 0
entryPrice_long := close
sl_long := x2
risk = entryPrice_long - sl_long
tp2_long := entryPrice_long + (risk_reward_ratio * risk)
strategy.entry("Long", strategy.long)
strategy.exit("Exit Long", "Long", limit=tp2_long, stop=sl_long)
// Short Entries
if enterShort and strategy.position_size == 0
entryPrice_short := close
sl_short := x
risk = sl_short - entryPrice_short
tp2_short := entryPrice_short - (risk_reward_ratio * risk)
strategy.entry("Short", strategy.short)
strategy.exit("Exit Short", "Short", limit=tp2_short, stop=sl_short)
if exit_strategy == "Fixed Percent"
// Long Entries
if enterLong and strategy.position_size == 0
entryPrice_long := close
sl_long := close * (1 - SLPercent / 100)
risk = entryPrice_long - sl_long
tp2_long := entryPrice_long + (risk_reward_ratio * risk)
strategy.entry("Long", strategy.long)
strategy.exit("Exit Long", "Long", limit=tp2_long, stop=sl_long)
// Short Entries
if enterShort and strategy.position_size == 0
entryPrice_short := close
sl_short := close * (1 + SLPercent / 100)
risk = sl_short - entryPrice_short
tp2_short := entryPrice_short - (risk_reward_ratio * risk)
strategy.entry("Short", strategy.short)
strategy.exit("Exit Short", "Short", limit=tp2_short, stop=sl_short)
// Entry Visual Flags
if strategy.position_size == 0
plotMarkers_long := false
plotMarkers_short := false
if strategy.position_size > 0
plotMarkers_long := true
plotMarkers_short := false
else if strategy.position_size < 0
plotMarkers_long := false
plotMarkers_short := true
// SL and TP Lines
longEntryMarker = plot(plotMarkers_long ? entryPrice_long : na, "Entry Marker L", color=na)
longSLMarker = plot(plotMarkers_long ? sl_long : na, "SL Marker L", color=#ff000050, linewidth=1, style=plot.style_linebr)
longTP2Marker = plot(plotMarkers_long ? tp2_long : na, "TP2 Marker L", color=#1100ff50, linewidth=1, style=plot.style_linebr)
plotshape(enterLong and strategy.position_size == 0, "BUY", shape.triangleup, location.belowbar, color.green, text="BUY", size=size.small, textcolor=color.green)
plotshape(enterShort and strategy.position_size == 0, "SELL", shape.triangledown, location.abovebar, color.red, text="SELL", size=size.small, textcolor=color.red)
shortEntryMarker = plot(plotMarkers_short ? entryPrice_short : na, "Entry Marker S", color=na)
shortSLMarker = plot(plotMarkers_short ? sl_short : na, "SL Marker S", color=#ff000050, linewidth=1, style=plot.style_linebr)
shortTP2Marker = plot(plotMarkers_short ? tp2_short : na, "TP2 Marker S", color=#1100ff50, linewidth=1, style=plot.style_linebr)
// SL and TP Fills
fill(plot1=longEntryMarker, plot2=longSLMarker, title="Long SL BG Fill", color=#b2283320)
fill(plot1=longEntryMarker, plot2=longTP2Marker, title="Long TP BG Fill", color=#08998120)
fill(plot1=shortEntryMarker, plot2=shortSLMarker, title="Short SL BG Fill", color=#b2283320)
fill(plot1=shortEntryMarker, plot2=shortTP2Marker, title="Short TP BG Fill", color=#08998120)
// Supertrend Plots (Only show if using supertrend filter)
upTrend = plot(useSupertrendFilter ? (directionVal < 0 ? supertrendVal : na) : na, "Up Trend", color=color.new(color.green,0), style=plot.style_linebr)
downTrend = plot(useSupertrendFilter ? (directionVal < 0 ? na : supertrendVal) : na, "Down Trend", color=color.new(color.red,0), style=plot.style_linebr)
bodyMiddle = plot(useSupertrendFilter ? (barstate.isfirst ? na : (open + close) / 2) : na, "Body Middle", display=display.none)
fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)