Bollinger Band, Moving Average dan Strategi Trading Kombinasi MACD

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

img

Tinjauan Strategi

Strategi ini menggabungkan Bollinger Band, moving average dan MACD, membentuk sistem perdagangan yang relatif lengkap.

Nama Strategi & Alasan

Strategi ini disebut Triangle Anchoring Trend Tracking Strategy. Nama ini menyoroti penggunaan tiga indikator teknis untuk menentukan arah tren dan titik masuk jangkar.

Logika dasar perdagangan adalah:

  1. Bandingkan Bollinger Mid Band, EMA dan garis nol MACD untuk menentukan apakah pasar berada dalam fase uptrend atau downtrend.

  2. Setelah tren diidentifikasi, strategi memeriksa apakah EMA melintasi BB Mid Band dan apakah histogram MACD melintasi garis sinyal untuk menentukan entri.

  3. Tentukan target keuntungan dan stop loss. Setelah dimasukkan, target tetap dan stop loss tingkat yang ditetapkan sebelumnya.

Analisis Keuntungan

Keuntungan terbesar dari strategi ini adalah penggunaan bersamaan dari tren, rata-rata bergerak dan alat MACD untuk memandu keputusan.

Pertama, BB Mid Band dengan jelas mencerminkan arah tren utama saat ini.

Kedua, BB sendiri memiliki karakteristik amplop yang kuat. Daerah di sekitar pita tengah juga menunjukkan tingkat dukungan / resistensi tertentu. Oleh karena itu silang EMA memiliki nilai sinyal.

Selain itu, MACD mengukur kenaikan dan penurunan momentum bullish / bearish. Ukuran mutlaknya mewakili emosi orang banyak yang tinggi atau rendah, juga mengisyaratkan potensi pembalikan.

Akhirnya, target keuntungan yang ditetapkan sebelumnya dan stop loss mengendalikan risiko/pembayaran dari perdagangan individu, memastikan stabilitas keseluruhan.

Analisis Risiko

Meskipun penggunaan berbagai alat analisis, risiko utama adalah:

  1. Parameter BB yang tidak tepat tidak mencerminkan tren utama.

  2. Sistem EMA sinyal panjang tapi MACD tidak jelas berubah positif, kekuatan bearish dapat berkembang.

  3. Jangkauan target keuntungan/stop loss terlalu luas, kerugian perdagangan tunggal meluas.

Solusi utama adalah:

  1. Sesuaikan parameter BB untuk memastikan band tengah secara efektif mencerminkan tren utama.

  2. Memperkenalkan lebih banyak indikator teknis untuk menilai momentum bull/bear.

  3. Mengevaluasi perdagangan historis dan mengoptimalkan target keuntungan / stop loss.

Arahan Optimasi

Strategi ini dapat ditingkatkan lagi dalam hal berikut:

  1. Memperkenalkan lebih banyak indikator seperti KDJ, ATR dll untuk membantu penilaian tren dan meningkatkan akurasi.

  2. Mengimplementasikan lebih canggih berhenti seperti trailing stop, breakout stop dll

  3. Mengevaluasi kinerja di berbagai produk. fine tune parameter untuk memenuhi berbagai kondisi pasar.

  4. Uji dan tweak strategi berdasarkan hasil backtest selama jangka waktu dan pasar yang berbeda.

  5. Mengintegrasikan pembelajaran mesin untuk optimasi parameter otomatis dan pembaruan strategi dinamis.

Kesimpulan

Strategi ini memanfaatkan BB, MA dan MACD bersama-sama. Ini memiliki penilaian tren yang jelas, karakteristik amplop tertentu dan juga menangkap beberapa pembalikan. Dengan lebih banyak alat bantu untuk menilai entri / keluar, ini dapat mencapai kinerja yang lebih dapat diandalkan. Evaluasi lebih lanjut dan peningkatan strategi ini dijamin dan diharapkan menghasilkan alat kuantitatif yang kuat.


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