Sumber dimuat naik... memuat...

Analisis Strategi Fibonacci Bollinger Bands yang Sesuai

Penulis:ChaoZhang, Tarikh: 2025-01-06 16:41:48
Tag:ATRBBSMAFIB

img

Ringkasan

Strategi ini adalah sistem perdagangan inovatif yang menggabungkan urutan Fibonacci dan Bollinger Bands. Ia menggantikan pengganda penyimpangan standard Bollinger Bands tradisional dengan nisbah Fibonacci (1.618, 2.618, 4.236), mewujudkan sistem penilaian turun naik harga yang unik. Strategi ini merangkumi ciri pengurusan perdagangan yang komprehensif, termasuk tetapan stop-loss / take-profit dan penapis tingkap masa perdagangan, menjadikannya sangat praktikal dan fleksibel.

Prinsip Strategi

Logik terasnya adalah berdasarkan interaksi harga dengan Fibonacci Bollinger Bands. Ia mula-mula mengira Purata Bergerak Sederhana (SMA) sebagai band tengah, kemudian menggunakan ATR dikalikan dengan nisbah Fibonacci yang berbeza untuk membentuk band atas dan bawah. Isyarat dagangan dihasilkan apabila harga pecah melalui band Fibonacci yang dipilih oleh pengguna. Khususnya, isyarat panjang dicetuskan apabila harga rendah di bawah dan harga tinggi di atas rentang beli sasaran; isyarat pendek dicetuskan apabila harga rendah di bawah dan harga tinggi di atas rentang jual sasaran.

Kelebihan Strategi

  1. Kebolehsesuaian yang kuat: Sesuaikan lebar jalur secara dinamik melalui ATR, menyesuaikan diri dengan lebih baik dengan keadaan pasaran yang berbeza
  2. Fleksibiliti yang tinggi: Pengguna boleh memilih pelbagai pita Fibonacci sebagai isyarat perdagangan berdasarkan gaya perdagangan mereka
  3. Pengurusan Risiko Komprehensif: Fungsi mengambil keuntungan / berhenti kerugian dan penapisan masa yang terbina dalam mengawal risiko dengan berkesan
  4. Visual Intuitiveness: Tahap ketelusan yang berbeza kawasan jalur membantu peniaga memahami struktur pasaran
  5. Logik Pengiraan yang jelas: Menggunakan kombinasi penunjuk teknikal klasik, mudah difahami dan dikekalkan

Risiko Strategi

  1. Risiko pecah palsu: Harga boleh segera kembali selepas pecah, menjana isyarat palsu
  2. Sensitiviti Parameter: Pilihan nisbah Fibonacci yang berbeza mempengaruhi prestasi strategi dengan ketara
  3. Kebergantungan Masa: Apabila tetingkap dagangan diaktifkan, mungkin terlepas peluang dagangan penting
  4. Kebergantungan persekitaran pasaran: Boleh menghasilkan isyarat yang berlebihan di pasaran yang berbeza

Arahan Pengoptimuman Strategi

  1. Mekanisme Pengesahan Isyarat: Cadangkan penambahan jumlah atau petunjuk momentum untuk pengesahan pecah
  2. Pengoptimuman Parameter Dinamik: Sesuaikan nisbah Fibonacci secara automatik berdasarkan turun naik pasaran
  3. Penapisan persekitaran pasaran: Tambah fungsi pengenalan trend, gunakan parameter yang berbeza dalam keadaan pasaran yang berbeza
  4. Sistem Berat Isyarat: Menetapkan analisis pelbagai jangka masa untuk meningkatkan kebolehpercayaan isyarat
  5. Pengoptimuman Pengurusan Posisi: Sesuaikan saiz kedudukan secara dinamik berdasarkan turun naik pasaran dan kekuatan isyarat

Ringkasan

Strategi ini secara inovatif menggabungkan alat analisis teknikal klasik dengan mengoptimumkan Bollinger Bands tradisional dengan urutan Fibonacci. Kelebihan utamanya terletak pada daya adaptasi dan fleksibiliti, tetapi perhatian mesti diberikan kepada pemilihan parameter dan keserasian persekitaran pasaran. Strategi ini mempunyai potensi peningkatan yang signifikan melalui penambahan penanda pengesahan tambahan dan mengoptimumkan mekanisme penjanaan isyarat.


/*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))


Berkaitan

Lebih lanjut