Strategi Gelombang FiboBuLL Berdasarkan Breakout Bollinger Bands

Penulis:ChaoZhang, Tarikh: 2023-12-01 14:11:56
Tag:

img

Ringkasan

Strategi FiboBuLL Wave diadaptasi dari versi penapis kajian Bollinger Bands, yang boleh didapati di bawah halaman skrip saya. Strategi ini panjang apabila harga ditutup di atas jalur atas dan pendek apabila harga ditutup di bawah jalur bawah.

Bollinger Bands adalah penunjuk klasik yang menggunakan purata bergerak mudah 20 tempoh, bersama-sama dengan plot band atas dan bawah yang 2 penyimpangan standard dari band tengah. Band ini membantu memvisualisasikan turun naik harga dan trend berdasarkan di mana harga relatif terhadap band.

Strategi ini tidak mengambil kira mana-mana parameter lain seperti Volume / RSI / Fundamentals dan lain-lain, jadi pengguna mesti menggunakan budi bicara berdasarkan pengesahan dari penunjuk atau asas lain.

Ia berfungsi dengan baik apabila terdapat kesinambungan bar selepas harga ditutup di atas / di bawah band atas / bawah. Ia pasti bermanfaat untuk menggunakan strategi ini atau penapis Bollinger Bands bersama dengan penunjuk lain untuk mendapatkan gambaran awal pelanggaran / kegagalan band pada penutupan lilin semasa memerah BB atau berdasarkan turun naik.

Strategi ini boleh digunakan pada lilin Heikin Ashi untuk melihat trend tetapi lilin HA tidak disyorkan untuk entri perdagangan kerana mereka tidak mencerminkan harga sebenar aset.

Logika Strategi

Logik utama di sebalik strategi FiboBuLL Wave adalah untuk berdagang berdasarkan penembusan Bollinger Bands. Bollinger Bands terdiri daripada band tengah, band atas dan band bawah. Band tengah adalah purata bergerak mudah 21 tempoh harga penutupan; Band atas dikira dengan menambah 1 penyimpangan standard di atas band tengah, mencerminkan julat atas turun naik harga; Band bawah diperoleh dengan mengurangkan 1 penyimpangan standard di bawah band tengah, mencerminkan julat bawah pergerakan harga.

Isyarat panjang dihasilkan apabila harga penutupan melanggar band atas; Isyarat pendek dicetuskan apabila harga penutupan melanggar band bawah. Selepas mengambil kedudukan panjang atau pendek, perdagangan sedia ada akan ditutup apabila harga melanggar band bertentangan lagi.

Strategi ini menggunakan fungsi barssince untuk mengesan penembusan harga berbanding dengan band atas dan bawah. Isyarat panjang dihasilkan apabila bilangan bar sejak penembusan band atas adalah kurang daripada band bawah. Isyarat pendek dicetuskan apabila bilangan bar sejak penembusan band bawah adalah kurang daripada band atas.

Dengan menyesuaikan tempoh jalur tengah dan parameter pengganda penyimpangan piawai, kepekaan pecah Bollinger Bands boleh diubah, dengan itu menyesuaikan masa kemasukan.

Kelebihan

Strategi FiboBuLL Wave mempunyai beberapa kelebihan:

  1. Logik yang mudah berdasarkan BB breakout, mudah difahami
  2. Sensitiviti pecah boleh dikawal dengan menyesuaikan parameter
  3. Band BB memvisualisasikan turun naik harga dan trend
  4. Boleh digabungkan dengan penunjuk lain, meningkatkan ketepatan
  5. Berlaku untuk pelbagai jangka masa

Risiko

Terdapat juga beberapa risiko yang perlu diperhatikan untuk strategi FiboBuLL Wave:

  1. Rendah kepada isyarat palsu bergantung semata-mata pada BB breakout
  2. Tidak dapat menentukan momentum dan tempoh selepas pecah
  3. Tiada peraturan keluar untuk pembalikan
  4. Risiko tinggi tanpa stop loss

Pengoptimuman boleh dibuat dalam aspek berikut:

  1. Tambah penapis menggunakan penunjuk lain untuk mengelakkan isyarat palsu
  2. Mengoptimumkan parameter berdasarkan data sejarah
  3. Tetapkan stop loss untuk mengehadkan kerugian maksimum
  4. Pertimbangkan untuk menambah faktor pembalikan untuk menentukan kegigihan

Peluang Peningkatan

Arah pengoptimuman utama untuk strategi FiboBuLL Wave:

  1. Tambah penunjuk jumlah e.g. garis A / D untuk mengelakkan pecah lemah
  2. Gabungkan penunjuk overbought/oversold e.g. RSI untuk meningkatkan ketepatan
  3. Mengoptimumkan parameter seperti tempoh dan penyimpangan pengganda berdasarkan hasil backtest
  4. Tetapkan stop loss dan mengambil keuntungan untuk mengawal risiko dan mengunci keuntungan
  5. Pertimbangkan penapis trend dan pembalikan untuk menentukan ketahanan hala tuju
  6. Uji parameter optimum untuk produk dan jangka masa yang berbeza

Dengan penambahbaikan di atas, kestabilan dan keuntungan strategi FiboBuLL Wave dapat ditingkatkan dengan ketara.

Ringkasan

Strategi FiboBuLL Wave menggunakan prinsip asas Bollinger Bands dalam mengenal pasti penembusan dan pembalikan ke jalur tengah untuk mengesan turun naik harga. Dengan konsep yang mudah dan penerapan luas, ia berfungsi sebagai pendekatan yang berkesan dalam mengukur turun naik pasaran.

Walau bagaimanapun, hanya bergantung kepada penembusan cenderung untuk menjana isyarat palsu dan whipsaws. Oleh itu pengesahan menggunakan jumlah, trend, penunjuk dan lain-lain mesti dimasukkan untuk menentukan kebolehpercayaan penembusan, sambil melaksanakan stop loss / mengambil keuntungan untuk mengawal risiko, untuk memaksimumkan kegunaan strategi.

Strategi FiboBuLL Wave menyediakan rangka kerja asas untuk merancang perdagangan berdasarkan tindakan harga. Dengan pengoptimuman berterusan dan integrasi faktor tambahan, ia berpotensi menjadi alat yang kukuh dalam merumuskan keputusan perdagangan.


/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//@FiboBuLL

strategy(shorttitle='FB Wave', title='FiboBuLL Wave (A version of Bollinger Bands Breakout Strategy By Trade Chartist)', overlay=true, pyramiding=1, currency=currency.NONE, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

src = input(close, title='Source')
length = input.int(21, minval=1, title='SMA length')  // 20 for classis Bollinger Bands SMA line (basis)


mult = input.float(1., minval=0.236, maxval=2, title='Standard Deviation')  //2 for Classic Bollinger Bands //Maxval = 2 as higher the deviation, higher the risk
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)

Show = input.string('Both', options=['Longs Only', 'Shorts Only', 'Both'], title='Trade Type')
CC = input(true, 'Color Bars')

upper = basis + dev
lower = basis - dev

//Conditions for Long and Short - Extra filter condition can be used such as RSI or CCI etc.

short = src < lower  // and rsi(close,14)<40
long = src > upper  // and rsi(close,14)>60

L1 = ta.barssince(long)
S1 = ta.barssince(short)

longSignal = L1 < S1 and not (L1 < S1)[1]
shortSignal = S1 < L1 and not (S1 < L1)[1]

//Plots and Fills


////Long/Short shapes with text
// plotshape(S1<L1 and not (S1<L1)[1]?close:na, text = "sᴇʟʟ", textcolor=#ff0100, color=#ff0100, style=shape.triangledown, size=size.small, location=location.abovebar, transp=0, title = "SELL", editable = true)
// plotshape(L1<S1 and not (L1<S1)[1]?close:na, text = "ʙᴜʏ", textcolor = #008000, color=#008000, style=shape.triangleup, size=size.small, location=location.belowbar, transp=0, title = "BUY", editable = true)  

// plotshape(shortSignal?close:na, color=#ff0100, style=shape.triangledown, size=size.small, location=location.abovebar, transp=0, title = "Short Signal", editable = true)
// plotshape(longSignal?close:na, color=#008000, style=shape.triangleup, size=size.small, location=location.belowbar, transp=0, title = "Long Signal", editable = true)  


p1 = plot(upper, color=color.new(#ff0000, 75), display=display.all, title='Upper Band')
p2 = plot(lower, color=color.new(#008000, 75), display=display.all, title='Lower Band')

p = plot(basis, color=L1 < S1 ? #008000 : S1 < L1 ? #ff0000 : na, linewidth=2, editable=false, title='Basis')

fill(p, p1, color=color.new(color.teal, 85), title='Top Fill')  //fill for basis-upper
fill(p, p2, color=color.rgb(217, 161, 161), title='Bottom Fill', transp=85)  //fill for basis-lower

//Barcolor

bcol = src > upper ? color.new(#8ceb07, 0) : src < lower ? color.new(#ff0000, 0) : src > basis ? color.green : src < basis ? color.red : na

barcolor(CC ? bcol : na, editable=false, title='Color Bars')


// === INPUT BACKTEST RANGE ===
FromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=2015)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=2010)

// === FUNCTION EXAMPLE === 
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)  // backtest finish window
window() =>
    time >= start and time <= finish ? true : false

if window() and (Show == 'Longs Only' or Show == 'Both')
    strategy.entry('AL', direction=strategy.long, when=longSignal)
    strategy.close('LongAL', when=shortSignal, comment='AL KAPA')

if window() and (Show == 'Shorts Only' or Show == 'Both')
    strategy.entry('SAT', direction=strategy.short, when=shortSignal)
    strategy.close('SAT', when=longSignal, comment='SAT KAPA')




















Lebih lanjut