BB Peratusan Indeks Trend Memudar Strategi

Penulis:ChaoZhang, Tarikh: 2023-12-06 14:43:39
Tag:

img

Ringkasan

Strategi ini adalah berdasarkan indeks peratusan BB digabungkan dengan penunjuk RSI dan MFI. Ia membuat keputusan panjang dan pendek dengan mengesan pecah harga Bollinger Bands rel atas dan bawah, bersama-sama dengan isyarat oversold / overbought RSI dan isyarat oversold / overbought MFI.

Logika Strategi

  1. Mengira Peratusan Bollinger Band (BB%). BB% mewakili penyimpangan standard harga berbanding dengan Bollinger band tengah, yang menilai arah pasaran melalui saluran Bollinger.
  2. Menggabungkan penunjuk RSI dan MFI untuk menentukan keadaan overbought dan oversold. RSI membandingkan keuntungan purata dan kerugian purata dalam tempoh masa untuk menentukan tahap overbought dan oversold. MFI membandingkan jumlah dan jumlah turun untuk menentukan tahap overbought dan oversold.
  3. Apabila harga menembusi Bollinger lower rail ke atas, pergi panjang; apabila harga menembusi Bollinger upper rail ke bawah, pergi pendek. Pada masa yang sama, gunakan isyarat oversold / overbought dari indikator RSI dan MFI untuk penapisan.

Kelebihan

  1. Perdagangan trend memudar mengelakkan trend pasaran dan mengurangkan turun naik pulangan.
  2. Gabungan beberapa penunjuk menapis isyarat dan meningkatkan ketepatan keputusan.
  3. Tetapan parameter fleksibel untuk menyesuaikan ciri-ciri risiko dan pulangan strategi.
  4. Berlaku untuk instrumen yang sangat tidak menentu seperti komoditi, forex, cryptocurrency, dll.

Risiko dan Penyelesaian

  1. Terdapat kemungkinan besar isyarat palsu dari penembusan Bollinger, yang memerlukan gabungan beberapa penunjuk untuk penapisan.
  2. Penghakiman isyarat pecah memerlukan kriteria yang santai untuk mengelakkan kehilangan peluang yang baik.
  3. Sesuaikan tetapan parameter untuk mengawal risiko, seperti saiz kedudukan, menaikkan garis stop loss, dll.

Arahan pengoptimuman

  1. Menggabungkan mekanisme stop loss berasaskan turun naik seperti penunjuk ATR.
  2. Memperkenalkan model pembelajaran mesin untuk membantu menilai kualiti isyarat pecah.
  3. Mengoptimumkan mekanisme pemilihan instrumen untuk menyesuaikan secara dinamik instrumen yang mengambil bahagian.
  4. Sertakan lebih banyak faktor seperti penunjuk sentimen, berita, dan lain-lain untuk meningkatkan kerangka keputusan.

Kesimpulan

Strategi ini terutamanya digunakan untuk instrumen bukan trend volatiliti tinggi. Ia melaksanakan perdagangan trend memudar melalui kombinasi saluran Bollinger dan penunjuk. Ciri risiko-pengembalian boleh dikawal dengan menyesuaikan parameter. Penambahbaikan lanjut boleh dibuat dengan memperkenalkan lebih banyak penunjuk dan model tambahan untuk mengoptimumkan kualiti keputusan, dengan itu mencapai prestasi strategi yang lebih baik.


/*backtest
start: 2023-11-05 00:00:00
end: 2023-12-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "BB%/MFI/RSI", shorttitle = "BB%/MFI/RSI", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From Day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To Day")

source = hlc3
length = input(14, minval=1), mult = input(2.0, minval=0.001, maxval=50), bblength = input(50, minval=1, title="BB Period")
DrawRSI_f=input(true, title="Draw RSI?", type=bool)
DrawMFI_f=input(false, title="Draw MFI?", type=bool)
HighlightBreaches=input(true, title="Highlight Oversold/Overbought?", type=bool)

DrawMFI = (not DrawMFI_f) and (not DrawRSI_f) ? true : DrawMFI_f
DrawRSI = (DrawMFI_f and DrawRSI_f) ? false : DrawRSI_f
// RSI
rsi_s = DrawRSI ? rsi(source, length) : na
plot(DrawRSI ? rsi_s : na, color=maroon, linewidth=2)

// MFI
upper_s = DrawMFI ? sum(volume * (change(source) <= 0 ? 0 : source), length) : na
lower_s = DrawMFI ? sum(volume * (change(source) >= 0 ? 0 : source), length) : na
mf = DrawMFI ? rsi(upper_s, lower_s) : na
plot(DrawMFI ? mf : na, color=green, linewidth=2)

// Draw BB on indices
bb_s = DrawRSI ? rsi_s : DrawMFI ? mf : na
basis = sma(bb_s, length)
dev = mult * stdev(bb_s, bblength)
upper = basis + dev
lower = basis - dev
plot(basis, color=red)
p1 = plot(upper, color=blue)
p2 = plot(lower, color=blue)
fill(p1,p2, blue)

b_color = (bb_s > upper) ? red : (bb_s < lower) ? lime : na
bgcolor(HighlightBreaches ? b_color : na, transp = 0)

//Signals
up = bb_s < lower and close < open
dn = bb_s > upper and close > open
size = strategy.position_size
lp = size > 0 and close > open
sp = size < 0 and close < open
exit = (up == false and dn == false) and (lp or sp)

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Lebih lanjut