Bollinger Band, Moving Average dan Strategi Dagangan Gabungan MACD

Penulis:ChaoZhang, Tarikh: 2024-02-04 15:42:23
Tag:

img

Ringkasan Strategi

Strategi ini menggabungkan Bollinger Band, purata bergerak dan MACD, membentuk sistem perdagangan yang agak lengkap.

Nama Strategi & Rasionalisasi

Strategi ini dinamakan Triangle Anchoring Trend Tracking Strategy. Nama ini menyoroti penggunaan tiga penunjuk teknikal untuk menentukan arah trend dan titik masuk jangkar.

Logik dagangan asas adalah:

  1. Bandingkan Bollinger Mid Band, EMA dan garis sifar MACD untuk menentukan sama ada pasaran berada dalam fasa kenaikan atau penurunan.

  2. Cari peluang masuk. Selepas trend dikenal pasti, strategi memeriksa sama ada EMA melintasi BB Mid Band dan jika histogram MACD melintasi garis isyarat untuk menentukan entri.

  3. Tetapkan sasaran keuntungan dan stop loss. Setelah dimasukkan, sasaran tetap dan tahap stop loss ditetapkan.

Analisis Kelebihan

Kelebihan terbesar strategi ini adalah penggunaan trend, purata bergerak dan alat MACD secara serentak untuk membimbing keputusan. Ini membolehkan penilaian yang lebih tepat mengenai momentum pasaran dan juga membantu menangkap beberapa pembalikan.

Pertama, BB Mid Band jelas mencerminkan arah trend utama semasa. Peranan EMA adalah untuk mengesan kemajuan trend. Perbandingan dan gabungan mereka membolehkan pengenalan trend yang lebih tepat.

Kedua, BB sendiri mempunyai ciri-ciri sampul yang kuat. Kawasan di sekitar jalur tengah juga menunjukkan tahap sokongan / rintangan tertentu. Oleh itu silang EMA mempunyai nilai isyarat.

Di samping itu, MACD mengukur kenaikan dan penurunan momentum bullish / bearish. Saiz mutlaknya mewakili emosi orang ramai yang tinggi atau rendah, juga menunjukkan potensi pembalikan.

Akhirnya, sasaran keuntungan yang ditetapkan dan stop loss mengawal risiko / ganjaran dagangan individu, memastikan kestabilan keseluruhan.

Analisis Risiko

Walaupun penggunaan pelbagai alat analisis, risiko utama adalah:

  1. Parameter BB yang tidak betul gagal mencerminkan trend utama.

  2. Sistem EMA memberi isyarat panjang tetapi MACD tidak jelas menjadi positif, kekuatan penurunan mungkin berkembang.

  3. Julat sasaran keuntungan / stop loss terlalu luas, kerugian perdagangan tunggal meluas.

Penyelesaian utama ialah:

  1. Sesuaikan parameter BB untuk memastikan jalur pertengahan mencerminkan trend utama.

  2. Memperkenalkan lebih banyak penunjuk teknikal untuk menilai momentum bull/bear.

  3. Menilai perdagangan sejarah dan mengoptimumkan sasaran keuntungan / hentikan kerugian.

Arahan pengoptimuman

Strategi ini boleh ditingkatkan lagi dalam aspek berikut:

  1. Memperkenalkan lebih banyak penunjuk seperti KDJ, ATR dll untuk membantu penilaian trend dan meningkatkan ketepatan.

  2. Melaksanakan hentian yang lebih canggih seperti hentian penghantar, hentian pecah dll.

  3. Mengkaji prestasi di seluruh produk yang berbeza, menyesuaikan parameter yang sesuai dengan pelbagai keadaan pasaran.

  4. Uji dan tweak strategi berdasarkan hasil backtest dalam jangka masa dan pasaran yang berbeza.

  5. Menggabungkan pembelajaran mesin untuk pengoptimuman parameter automatik dan kemas kini strategi dinamik.

Kesimpulan

Strategi ini menggunakan BB, MA dan MACD bersama-sama. Ia mempunyai penilaian trend yang jelas, ciri sampul tertentu dan juga menangkap beberapa pembalikan. Dengan lebih banyak alat tambahan untuk menilai entri / keluar, ia dapat mencapai prestasi yang lebih boleh dipercayai. Penilaian dan peningkatan strategi ini dibenarkan dan dijangka menghasilkan alat kuantitatif yang kukuh.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined Strategy", overlay=true, shorttitle="Comb Strat", default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Precio de beneficio y Stop Loss
takeProfitTicks = 87636
stopLossTicks = 53350

// Bollinger Bands + EMA
length_bb = input(150, title="BB Length")
src_bb = input(close, title="BB Source")
mult = input(2.0, title="BB StdDev")
basis = ta.sma(src_bb, length_bb)
dev = mult * ta.stdev(src_bb, length_bb)
upper = basis + dev
lower = basis - dev

len_ema = input(34, title="EMA Length")
src_ema = input(close, title="EMA Source")
out_ema = ta.ema(src_ema, len_ema)

typeMA = input("SMA", title="Method")
smoothingLength = input(5, title="Length")

var float smoothingLine = na
if (typeMA == "SMA")
    smoothingLine := ta.sma(out_ema, smoothingLength)
else if (typeMA == "EMA")
    smoothingLine := ta.ema(out_ema, smoothingLength)

// MACD
fast_length = input(title="Fast Length", defval=9)
slow_length = input(title="Slow Length", defval=17)
src_macd = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval=1, maxval=50, defval=9)
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])

fast_ma = sma_source == "SMA" ? ta.sma(src_macd, fast_length) : ta.ema(src_macd, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src_macd, slow_length) : ta.ema(src_macd, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal

// Condiciones de compra y venta
longCondition = (out_ema > basis) and (macd > signal) and (signal > 0)
shortCondition = (out_ema < basis) and (macd < signal) and (signal < 0)

// Variables de estado
var bool longExecuted = na
var bool shortExecuted = na

// Estrategia
if (longCondition and not longExecuted)
    strategy.entry("Long", strategy.long)
    longExecuted := true
    shortExecuted := na
if (shortCondition and not shortExecuted)
    strategy.entry("Short", strategy.short)
    shortExecuted := true
    longExecuted := na

// Take Profit y Stop Loss para Compras y Ventas Cortas
strategy.exit("Take Profit/Close Long", from_entry="Long", profit=takeProfitTicks, loss=stopLossTicks)
strategy.exit("Take Profit/Close Short", from_entry="Short", profit=takeProfitTicks, loss=stopLossTicks)

// Cierre de posiciones cuando la dirección cambia
if ((out_ema < basis) and (macd < signal))
    strategy.close("Long")
    longExecuted := na
if ((out_ema > basis) and (macd > signal))
    strategy.close("Short")
    shortExecuted := na

// Plots
plot(basis, "BB Basis", color=#FF6D00)
plot(upper, "BB Upper", color=color.new(#2962FF, 0.5))
plot(lower, "BB Lower", color=color.new(#2962FF, 0.5))

plot(smoothingLine, title="Smoothing Line", color=#f37f20, linewidth=2)

hline(0, "Zero Line", color=color.new(#787B86, 50))
plot(hist, title="Histogram", style=plot.style_columns, color=(hist >= 0 ? (hist[1] < hist ? color.green : color.red) : (hist[1] < hist ? color.red : color.green)))
plot(macd, title="MACD", color=color.blue)
plot(signal, title="Signal", color=color.orange)


Lebih lanjut