
Strategi ini menggunakan indikator RSI untuk menilai pasar overbought dan oversold, dan menggabungkan Bollinger Bands ke bawah untuk menilai kisaran pergerakan harga. Selain itu, berdasarkan pada titik tinggi rendah yang menghasilkan resistensi dukungan dinamis, operasi beli dan jual dilakukan ketika harga mendekati resistensi dukungan. Pengguna dapat mengatur sendiri kondisi penyaringan tren, seperti garis rata-rata bergerak sederhana untuk menilai harga dan arah tren. Strategi ini menggunakan berbagai indikator teknis secara komprehensif, penilaian yang kuat, dapat menangkap peluang pasar yang efektif.
Strategi ini terdiri dari tiga bagian, yaitu RSI, Bollinger Bands, dan Resistance to Dynamic Support.
RSI sebagian digunakan untuk menilai overbought oversold. RSI di bawah 30 adalah zona oversold, saat ini akan dikirimkan sinyal beli. RSI di atas 70 adalah zona oversold, saat ini akan dikirimkan sinyal jual.
Blinking adalah naik dan turunnya harga berdasarkan rata-rata harga dan standar deviasi yang digunakan untuk menentukan apakah harga keluar dari zona gesekan normal. Harga dijual saat mendekati naik dan dibeli saat mendekati turun.
Bagian dari resistensi dukungan menggunakan metode perhitungan dinamis, dengan harga terendah tertinggi dalam periode tertentu (atau harga tutup) sebagai basis, membatasi kisaran dalam persentase tertentu, dan mencatat titik perubahan sejarah harga sebagai titik resistensi dukungan kunci. Ketika harga naik ke titik resistensi kunci, sinyal jual dikirim; Ketika harga turun ke titik dukungan kunci, sinyal beli dikirim.
Secara keseluruhan, strategi ini akan melakukan operasi beli-belah hanya jika RSI memenuhi tiga kondisi sekaligus: overbought dan oversold, harga keluar dari normal, dan mendekati resistensi dukungan dinamis.
Indikator fundamental dikombinasikan dengan indikator teknis. RSI menilai fundamental overbought dan oversold, sementara Brin band digunakan untuk menentukan bentuk teknis harga.
Perhitungan Resistensi Dukungan Dinamis, lebih dekat dengan Resistensi Dukungan Nyata dari pergerakan harga.
Pengguna dapat menambahkan filter tren, bekerja dengan RSI dan pita Brin, meningkatkan penilaian secara signifikan, dan dapat menyaring sebagian besar sinyal noise.
Parameter RSI yang tidak tepat dapat menyebabkan kesalahan penilaian. RSI yang terlalu pendek akan meningkatkan kebisingan; RSI overbought overbought yang tidak tepat dapat menyebabkan kesalahan.
Parameter Brin band seperti panjang, StdDev faktor yang tidak tepat juga dapat mempengaruhi akurasi penilaian.
Resistensi Dukungan Dinamis yang terlambat karena terhitung di atas atau di bawah titik tertinggi dan terendah dalam sejarah. Pengguna harus mengoptimalkan parameter Resistensi Dukungan secara tepat agar level Resistensi Dukungan lebih dekat dengan harga saat ini.
Strategi ini lebih rumit, kombinasi multi-indikator dapat menyebabkan gangguan satu sama lain. Pengguna harus menguji parameter indikator, mengurangi konflik indikator. Selain itu, persyaratan kombinasi dapat disederhanakan sesuai, mengurangi kemungkinan kesalahan penilaian.
Uji pengaturan parameter RSI, optimalkan panjang RSI, dan over-buy over-sell.
Uji pengaturan parameter pita Brin, optimalkan panjang pita Brin, StdDev kali ganda.
Optimalkan parameter resistensi dukungan dinamis untuk membuat level resistensi dukungan lebih dekat dengan harga. Anda dapat mencoba periode yang lebih pendek, lebih sedikit setelan tinggi dan rendah historis, dan sebagainya.
Menambahkan atau menguji indikator tambahan lainnya, seperti KDJ, MACD, dan lain-lain dalam kombinasi dengan RSI untuk meningkatkan akurasi penilaian.
Uji parameter filter tren, mengoptimalkan panjang filter, meningkatkan waktu penyimpanan, mengurangi operasi reversal yang tidak perlu.
Strategi ini menggabungkan beberapa indikator seperti RSI, Brinband, dan Resistance Support, memanfaatkan keunggulan masing-masing indikator, saling verifikasi, dan penilaian yang kuat. Selain itu, filter tren dapat ditambahkan untuk mengurangi kebisingan lebih lanjut. Pengaturan parameter strategi ini fleksibel, dan pengguna dapat menyesuaikan kombinasi parameter sesuai dengan kebutuhan mereka.
/*backtest
start: 2023-01-17 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("RSI + BB + S/R Strategy with Trend Filter", shorttitle="RSI + BB + S/R + Trend Filter", overlay=true)
// RSI Settings
rsi_length = input.int(14, title="RSI Length")
overbought = input.int(70, title="Overbought Level")
oversold = input.int(30, title="Oversold Level")
// Bollinger Bands Settings
bb_length = input.int(20, title="BB Length")
bb_deviation = input.float(2.0, title="BB Deviation")
// Dynamic Support/Resistance Settings
pivot_period = input.int(10, title="Pivot Period")
pivot_source = input.string("High/Low", title="Pivot Source", options=["High/Low", "Close/Open"])
max_pivots = input.int(20, title="Maximum Number of Pivot", minval=5, maxval=100)
channel_width = input.int(10, title="Maximum Channel Width %", minval=1)
max_sr_levels = input.int(5, title="Maximum Number of S/R Levels", minval=1, maxval=10)
min_strength = input.int(2, title="Minimum Strength", minval=1, maxval=10)
// Trend Filter Settings
use_trend_filter = input.bool(false, title="Use Trend Filter")
trend_filter_length = input.int(50, title="Trend Filter Length")
// Calculate RSI and Bollinger Bands
rsi = ta.rsi(close, rsi_length)
basis = ta.sma(close, bb_length)
deviation = ta.stdev(close, bb_length)
upper_band = basis + bb_deviation * deviation
lower_band = basis - bb_deviation * deviation
// Plot Bollinger Bands on the chart
plot(upper_band, color=color.blue, title="Upper Bollinger Band")
plot(lower_band, color=color.red, title="Lower Bollinger Band")
// Dynamic Support/Resistance Calculation
float src1 = pivot_source == "High/Low" ? high : math.max(close, open)
float src2 = pivot_source == "High/Low" ? low : math.min(close, open)
float ph = ta.pivothigh(src1, pivot_period, pivot_period)
float pl = ta.pivotlow(src2, pivot_period, pivot_period)
// Calculate maximum S/R channel zone width
prdhighest = ta.highest(300)
prdlowest = ta.lowest(300)
cwidth = (prdhighest - prdlowest) * channel_width / 100
var pivotvals = array.new_float(0)
if ph or pl
array.unshift(pivotvals, ph ? ph : pl)
if array.size(pivotvals) > max_pivots
array.pop(pivotvals)
get_sr_vals(ind) =>
float lo = array.get(pivotvals, ind)
float hi = lo
int numpp = 0
for y = 0 to array.size(pivotvals) - 1 by 1
float cpp = array.get(pivotvals, y)
float wdth = cpp <= lo ? hi - cpp : cpp - lo
if wdth <= cwidth
if cpp <= hi
lo := math.min(lo, cpp)
else
hi := math.max(hi, cpp)
numpp += 1
[hi, lo, numpp]
var sr_up_level = array.new_float(0)
var sr_dn_level = array.new_float(0)
sr_strength = array.new_float(0)
find_loc(strength) =>
ret = array.size(sr_strength)
for i = ret > 0 ? array.size(sr_strength) - 1 : na to 0 by 1
if strength <= array.get(sr_strength, i)
break
ret := i
ret
check_sr(hi, lo, strength) =>
ret = true
for i = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) - 1 : na by 1
if array.get(sr_up_level, i) >= lo and array.get(sr_up_level, i) <= hi or array.get(sr_dn_level, i) >= lo and array.get(sr_dn_level, i) <= hi
if strength >= array.get(sr_strength, i)
array.remove(sr_strength, i)
array.remove(sr_up_level, i)
array.remove(sr_dn_level, i)
else
ret := false
break
ret
if ph or pl
array.clear(sr_up_level)
array.clear(sr_dn_level)
array.clear(sr_strength)
for x = 0 to array.size(pivotvals) - 1 by 1
[hi, lo, strength] = get_sr_vals(x)
if check_sr(hi, lo, strength)
loc = find_loc(strength)
if loc < max_sr_levels and strength >= min_strength
array.insert(sr_strength, loc, strength)
array.insert(sr_up_level, loc, hi)
array.insert(sr_dn_level, loc, lo)
if array.size(sr_strength) > max_sr_levels
array.pop(sr_strength)
array.pop(sr_up_level)
array.pop(sr_dn_level)
// Calculate the Trend Filter
trend_filter = use_trend_filter ? ta.sma(close, trend_filter_length) : close
// Buy Condition (RSI + Proximity to Support + Trend Filter)
buy_condition = ta.crossover(rsi, oversold) and close <= ta.highest(high, max_sr_levels) and close >= ta.lowest(low, max_sr_levels) and (not use_trend_filter or close > trend_filter)
// Sell Condition (RSI + Proximity to Resistance + Trend Filter)
sell_condition = ta.crossunder(rsi, overbought) and close >= ta.lowest(low, max_sr_levels) and close <= ta.highest(high, max_sr_levels) and (not use_trend_filter or close < trend_filter)
// Strategy Orders
strategy.entry("Buy", strategy.long, when = buy_condition)
strategy.entry("Sell", strategy.short, when = sell_condition)