Analisis Strategi Adaptive Bollinger Band Berdasarkan Urutan Fibonacci

ATR BB SMA FIB
Tanggal Pembuatan: 2025-01-06 16:41:48 Akhirnya memodifikasi: 2025-01-06 16:41:48
menyalin: 2 Jumlah klik: 434
1
fokus pada
1617
Pengikut

Analisis Strategi Adaptive Bollinger Band Berdasarkan Urutan Fibonacci

Ringkasan

Strategi ini adalah sistem perdagangan inovatif yang menggabungkan urutan Fibonacci dan Bollinger Bands. Ini membentuk sistem penilaian rentang fluktuasi harga yang unik dengan mengganti kelipatan deviasi standar Bollinger Bands tradisional dengan rasio Fibonacci (1,618, 2,618, 4,236). Strategi ini mencakup fungsi manajemen transaksi lengkap, termasuk pengaturan stop-profit dan stop-loss serta penyaringan jendela waktu transaksi, menjadikannya sangat praktis dan fleksibel.

Prinsip Strategi

Logika inti strategi ini didasarkan pada interaksi antara harga dan Fibonacci Bollinger Bands. Pertama, hitung rata-rata pergerakan sederhana (SMA) harga sebagai jalur tengah, lalu gunakan ATR dikalikan dengan berbagai rasio Fibonacci untuk membentuk jalur atas dan bawah. Ketika harga menembus pita Fibonacci yang dipilih pengguna, sistem akan menghasilkan sinyal perdagangan. Secara spesifik, sinyal long dipicu ketika harga terendah lebih rendah dari target band beli dan harga tertinggi lebih tinggi dari band tersebut; sinyal short dipicu ketika harga terendah lebih rendah dari target band jual dan harga tertinggi lebih tinggi dari band tersebut. dari pada band.

Keunggulan Strategis

  1. Kemampuan beradaptasi yang kuat: Sesuaikan bandwidth secara dinamis melalui ATR untuk membuat strategi lebih baik beradaptasi dengan lingkungan pasar yang berbeda
  2. Fleksibilitas tinggi: Pengguna dapat memilih pita Fibonacci yang berbeda sebagai sinyal perdagangan sesuai dengan gaya perdagangan mereka
  3. Manajemen risiko yang sempurna: fungsi stop-profit, stop-loss, dan penyaringan waktu bawaan untuk mengendalikan risiko secara efektif
  4. Intuisi Visual: Berbagai pita transparansi ditampilkan untuk membantu pedagang memahami struktur pasar
  5. Logika perhitungan yang jelas: Menggunakan kombinasi indikator teknis klasik, mudah dipahami dan dipelihara

Risiko Strategis

  1. Risiko breakout palsu: Harga mungkin turun kembali segera setelah breakout, menghasilkan sinyal palsu
  2. Sensitivitas parameter: Pilihan rasio Fibonacci yang berbeda dapat memengaruhi kinerja strategi secara signifikan
  3. Ketergantungan waktu: Jika Anda mengaktifkan jendela waktu perdagangan, Anda mungkin kehilangan peluang perdagangan penting
  4. Ketergantungan lingkungan pasar: dapat menghasilkan terlalu banyak sinyal perdagangan di pasar yang bergejolak

Arah optimasi strategi

  1. Mekanisme konfirmasi sinyal: Disarankan untuk menambahkan indikator volume atau momentum sebagai konfirmasi terobosan
  2. Optimasi parameter dinamis: Rasio Fibonacci dapat disesuaikan secara otomatis berdasarkan volatilitas pasar
  3. Penyaringan lingkungan pasar: Tambahkan fungsi penilaian tren dan gunakan parameter yang berbeda di lingkungan pasar yang berbeda
  4. Sistem pembobotan sinyal: Tetapkan analisis beberapa kerangka waktu untuk meningkatkan keandalan sinyal
  5. Optimalisasi manajemen posisi: menyesuaikan ukuran posisi secara dinamis berdasarkan volatilitas pasar dan kekuatan sinyal

Meringkaskan

Ini adalah strategi yang secara inovatif menggabungkan alat analisis teknis klasik dan mengoptimalkan strategi Bollinger Band tradisional melalui urutan Fibonacci. Keunggulan utamanya terletak pada kemampuan beradaptasi dan fleksibilitasnya, tetapi saat menggunakannya, perhatian harus diberikan pada kesesuaian antara pemilihan parameter dan lingkungan pasar. Masih banyak ruang untuk perbaikan dalam strategi ini dengan menambahkan indikator konfirmasi tambahan dan mengoptimalkan mekanisme pembangkitan sinyal.

Kode Sumber Strategi
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// © sapphire_edge 

// # ========================================================================= #
// #                  
// #        _____                   __    _              ______    __         
// #      / ___/____ _____  ____  / /_  (_)_______     / ____/___/ /___ ____ 
// #      \__ \/ __ `/ __ \/ __ \/ __ \/ / ___/ _ \   / __/ / __  / __ `/ _ \
// #     ___/ / /_/ / /_/ / /_/ / / / / / /  /  __/  / /___/ /_/ / /_/ /  __/
// #    /____/\__,_/ .___/ .___/_/ /_/_/_/   \___/  /_____/\__,_/\__, /\___/ 
// #              /_/   /_/                                     /____/       
// #                                      
// # ========================================================================= #

strategy(shorttitle="⟡Sapphire⟡ FiboBands Strategy", title="[Sapphire] Fibonacci Bollinger Bands Strategy", initial_capital= 50000, currency= currency.USD,default_qty_value = 1,commission_type= strategy.commission.cash_per_contract,overlay= true )

// # ========================================================================= #
// #                       // Settings Menu //
// # ========================================================================= #

// --------------------    Main Settings    -------------------- //
groupFiboBands = "FiboBands"
length = input.int(20, minval = 1, title = 'Length', group=groupFiboBands)
src = input(close, title = 'Source', group=groupFiboBands)
offset = input.int(0, 'Offset', minval = -500, maxval = 500, group=groupFiboBands)

fibo1 = input(defval = 1.618, title = 'Fibonacci Ratio 1', group=groupFiboBands)
fibo2 = input(defval = 2.618, title = 'Fibonacci Ratio 2', group=groupFiboBands)
fibo3 = input(defval = 4.236, title = 'Fibonacci Ratio 3', group=groupFiboBands)

fiboBuy = input.string(options = ['Fibo 1', 'Fibo 2', 'Fibo 3'], defval = 'Fibo 1', title = 'Fibonacci Buy', group=groupFiboBands)
fiboSell = input.string(options = ['Fibo 1', 'Fibo 2', 'Fibo 3'], defval = 'Fibo 1', title = 'Fibonacci Sell', group=groupFiboBands)

showSignals = input.bool(true, title="Show Signals", group=groupFiboBands)
signalOffset = input.int(5, title="Signal Vertical Offset", group=groupFiboBands)

// --------------------    Trade Management Inputs    -------------------- //
groupTradeManagement = "Trade Management"
useProfitPerc    = input.bool(false, title="Enable Profit Target", group=groupTradeManagement)
takeProfitPerc  = input.float(1.0, title="Take Profit (%)", step=0.1, group=groupTradeManagement)
useStopLossPerc    = input.bool(false, title="Enable Stop Loss", group=groupTradeManagement)
stopLossPerc    = input.float(1.0, title="Stop Loss (%)", step=0.1, group=groupTradeManagement)

// --------------------    Time Filter Inputs    -------------------- //
groupTimeOfDayFilter = "Time of Day Filter"
useTimeFilter1  = input.bool(false, title="Enable Time Filter 1", group=groupTimeOfDayFilter)
startHour1      = input.int(0, title="Start Hour (24-hour format)", minval=0, maxval=23, group=groupTimeOfDayFilter)
startMinute1    = input.int(0, title="Start Minute", minval=0, maxval=59, group=groupTimeOfDayFilter)
endHour1        = input.int(23, title="End Hour (24-hour format)", minval=0, maxval=23, group=groupTimeOfDayFilter)
endMinute1      = input.int(45, title="End Minute", minval=0, maxval=59, group=groupTimeOfDayFilter)
closeAtEndTimeWindow = input.bool(false, title="Close Trades at End of Time Window", group=groupTimeOfDayFilter)

// --------------------    Trading Window    -------------------- //
isWithinTradingWindow(startHour, startMinute, endHour, endMinute) =>
    nyTime            = timestamp("America/New_York", year, month, dayofmonth, hour, minute)
    nyHour            = hour(nyTime)
    nyMinute          = minute(nyTime)
    timeInMinutes     = nyHour * 60 + nyMinute
    startInMinutes    = startHour * 60 + startMinute
    endInMinutes      = endHour * 60 + endMinute
    timeInMinutes    >= startInMinutes and timeInMinutes <= endInMinutes

timeCondition =  (useTimeFilter1 ? isWithinTradingWindow(startHour1, startMinute1, endHour1, endMinute1) : true)

// Check if the current bar is the last one within the specified time window
isEndOfTimeWindow() =>
    nyTime            = timestamp("America/New_York", year, month, dayofmonth, hour, minute)
    nyHour            = hour(nyTime)
    nyMinute          = minute(nyTime)
    timeInMinutes     = nyHour * 60 + nyMinute
    endInMinutes      = endHour1 * 60 + endMinute1
    timeInMinutes == endInMinutes

// Logic to close trades if the time window ends
if timeCondition and closeAtEndTimeWindow and isEndOfTimeWindow()
    strategy.close_all(comment="Closing trades at end of time window")

// # ========================================================================= #
// #                       // Calculations //
// # ========================================================================= #

sma = ta.sma(src, length)
atr = ta.atr(length)

ratio1 = atr * fibo1
ratio2 = atr * fibo2
ratio3 = atr * fibo3

upper3 = sma + ratio3
upper2 = sma + ratio2
upper1 = sma + ratio1

lower1 = sma - ratio1
lower2 = sma - ratio2
lower3 = sma - ratio3

// # ========================================================================= #
// #                       // Signal Logic //
// # ========================================================================= #

// --------------------    Entry Logic    -------------------- //
targetBuy = fiboBuy == 'Fibo 1' ? upper1 : fiboBuy == 'Fibo 2' ? upper2 : upper3
buy = low < targetBuy and high > targetBuy

// --------------------    User-Defined Exit Logic    -------------------- //
targetSell = fiboSell == 'Fibo 1' ? lower1 : fiboSell == 'Fibo 2' ? lower2 : lower3
sell = low < targetSell and high > targetSell

// # ========================================================================= #
// #                       // Strategy Management //
// # ========================================================================= #

// --------------------    Trade Execution Flags    -------------------- //
var bool buyExecuted = false
var bool sellExecuted = false

float labelOffset = ta.atr(14) * signalOffset

// --------------------    Buy Logic    -------------------- //
if buy and timeCondition 
    if useProfitPerc or useStopLossPerc
        strategy.entry("Buy", strategy.long, stop=(useStopLossPerc ? close * (1 - stopLossPerc / 100) : na), limit=(useProfitPerc ? close * (1 + takeProfitPerc / 100) : na))
    else
        strategy.entry("Buy", strategy.long)

    if showSignals and not buyExecuted
        buyExecuted := true  
        sellExecuted := false  
        label.new(bar_index, high - labelOffset, "◭", style=label.style_label_up, color = color.rgb(119, 0, 255, 20), textcolor=color.white)

// --------------------    Sell Logic    -------------------- //
if sell and timeCondition
    if useProfitPerc or useStopLossPerc
        strategy.entry("Sell", strategy.short, stop=(useStopLossPerc ? close * (1 + stopLossPerc / 100) : na), limit=(useProfitPerc ? close * (1 - takeProfitPerc / 100) : na))
    else
        strategy.entry("Sell", strategy.short)

    if showSignals and not sellExecuted
        sellExecuted := true 
        buyExecuted := false  
        label.new(bar_index, low + labelOffset, "⧩", style=label.style_label_down, color = color.rgb(255, 85, 0, 20), textcolor=color.white)



// # ========================================================================= #
// #                         // Plots and Charts //
// # ========================================================================= #

plot(sma, style = plot.style_line, title = 'Basis', color = color.new(color.orange, 0), linewidth = 2, offset = offset)

upp3 = plot(upper3, title = 'Upper 3', color = color.new(color.teal, 90), offset = offset)
upp2 = plot(upper2, title = 'Upper 2', color = color.new(color.teal, 60), offset = offset)
upp1 = plot(upper1, title = 'Upper 1', color = color.new(color.teal, 30), offset = offset)

low1 = plot(lower1, title = 'Lower 1', color = color.new(color.teal, 30), offset = offset)
low2 = plot(lower2, title = 'Lower 2', color = color.new(color.teal, 60), offset = offset)
low3 = plot(lower3, title = 'Lower 3', color = color.new(color.teal, 90), offset = offset)

fill(upp3, low3, title = 'Background', color = color.new(color.teal, 95))