Tren Mengikuti Strategi dengan MACD dan Donchian Channel

Penulis:ChaoZhang, Tanggal: 2023-11-15 11:37:37
Tag:

img

Gambaran umum

Strategi ini menggabungkan indikator saluran Donchian dan indikator MACD untuk menentukan tren. Ini termasuk dalam strategi trend berikut yang khas. Ini pergi panjang ketika harga melanggar band atas dan MACD menunjukkan salib emas, dan pergi pendek ketika harga melanggar band bawah dan MACD menunjukkan salib kematian. Indikator ATR digunakan untuk menghitung stop loss.

Logika Strategi

  1. Menghitung indikator MACD, termasuk garis cepat, garis lambat dan histogram.

  2. Menghitung band atas dan bawah Saluran Donchian. band atas adalah harga tertinggi selama N hari, band bawah adalah harga terendah selama N hari.

  3. Ketika harga melanggar band atas, dan garis cepat MACD melintasi di atas garis lambat, pergi panjang.

  4. Ketika harga melanggar band bawah, dan garis cepat MACD melintasi di bawah garis lambat, pergi pendek.

  5. Menggunakan indikator ATR untuk menghitung stop loss untuk strategi ini, yang ditetapkan menjadi nilai ATR dikalikan dengan koefisien dari harga saat ini.

  6. Tutup posisi saat sinyal mundur muncul.

Analisis Keuntungan

Strategi ini menggabungkan indikator penilaian tren dan indikator saluran, yang dapat secara efektif melacak tren. Indikator MACD menilai tren harga dan momentum. Saluran Donchian menilai arah. Stop loss ATR membatasi kerugian per perdagangan.

Manfaatnya adalah:

  1. Strategi ini sederhana dengan beberapa parameter, mudah diterapkan.

  2. Hal ini dapat membuka posisi sepanjang tren, dan menangkap peluang tren dalam waktu.

  3. ATR stop loss mengendalikan risiko.

  4. Penarikan dapat dikendalikan sampai batas tertentu.

Analisis Risiko

Ada juga beberapa risiko:

  1. Pengaturan parameter yang tidak benar dari saluran Donchian dapat menyebabkan sinyal palsu.

  2. Parameter MACD yang tidak tepat juga dapat menyebabkan sinyal tertinggal.

  3. Pengaturan stop loss yang terlalu luas dapat menyebabkan kerugian diperluas.

  4. Kebalikan pasar yang tajam dapat menyebabkan kerugian besar.

  5. Strategi ini cenderung overtrade.

Solusi:

  1. Optimalkan parameter, pilih saham dengan hati-hati.

  2. Stop loss yang ketat, stop loss yang tertinggal.

  3. Sesuaikan ukuran posisi dengan benar.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Mengoptimalkan parameter MACD untuk meningkatkan sensitivitas.

  2. Mengoptimalkan algoritma stop loss untuk membuatnya lebih dekat dengan harga.

  3. Tambahkan mekanisme ukuran posisi sesuai dengan kekuatan tren.

  4. Tambahkan filter untuk menghindari sinyal palsu.

  5. Tambahkan kriteria seleksi untuk instrumen perdagangan.

  6. Tambahkan penilaian periode waktu perdagangan.

Ringkasan

Secara singkat, ini adalah strategi trend following yang khas. Ini menggabungkan Donchian Channel untuk arah tren dan MACD untuk kekuatan tren. Ini dapat mengikuti tren secara efektif dan mengendalikan risiko. Dengan mengoptimalkan parameter, stop loss, ukuran posisi dll, stabilitas dan profitabilitas dapat ditingkatkan lebih lanjut. Strategi ini cocok untuk investor yang membutuhkan akurasi tinggi dalam penilaian tren.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Robrecht99

//@version=5
strategy("Trend Following with Donchian Channels and MACD", overlay=false, margin_long=100, margin_short=100, pyramiding=3)

// MACD //
fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
src = 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"])

col_macd = input(#2962FF, "MACD Line  ", group="Color Settings", inline="MACD")
col_signal = input(#FF6D00, "Signal Line  ", group="Color Settings", inline="Signal")
col_grow_above = input(#26A69A, "Above   Grow", group="Histogram", inline="Above")
col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above")
col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below")
col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below")

fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)))
plot(macd, title="MACD", color=col_macd)
plot(signal, title="Signal", color=col_signal)

// Donchian Channels //

Length1 = input.int(title="Length Upper Channel", defval=50, minval=1, group="Donchian Channels Inputs")
Length2 = input.int(title="Length Lower Channel", defval=50, minval=1, group="Donchian Channels Inputs")
h1 = ta.highest(high[1], Length1)
l1 = ta.lowest(low[1], Length2)
fillColor = input.color(color.new(color.purple, 95), title = "Fill Color", group = "Donchian Channels Inputs")
upperColor = input.color(color.new(color.orange, 0), title = " Color Upper Channel", group = "Donchian Channels Inputs", inline = "upper")
lowerColor = input.color(color.new(color.orange, 0), title = " Color Lower Channel", group = "Donchian Channels Inputs", inline = "lower")
u = plot(h1, "Upper", color=upperColor)
l = plot(l1, "Lower", color=upperColor)
fill(u, l, color=fillColor)

//ATR and Position Size //
strategy.initial_capital = 50000
length = input.int(title="ATR Period", defval=14, minval=1, group="ATR Inputs")
risk = input(title="Risk Per Trade", defval=0.01, group="ATR Inputs")
multiplier = input(title="ATR Multiplier", defval=2, group="ATR Inputs")
atr = ta.atr(length)
amount = (risk * strategy.initial_capital / (multiplier * atr))

// Buy and Sell Conditions //

entrycondition1 = ta.crossover(macd, signal)
entrycondition2 = macd > signal
entrycondition3 = macd and signal > hist
sellcondition1 = ta.crossover(signal, macd)
sellcondition2 = signal > macd
sellcondition3 = macd and signal < hist

// Buy and Sell Signals //

if (close > h1 and entrycondition2 and entrycondition3)
    strategy.entry("long", strategy.long, qty=amount)
    stoploss = close - atr * 4
    strategy.exit("exit sl", stop=stoploss, trail_offset=stoploss)
if (sellcondition1 and sellcondition2 and sellcondition3)
    strategy.close(id="long")

if (close < l1 and sellcondition2 and sellcondition3)
    strategy.entry("short", strategy.short, qty=amount)
    stoploss = close + atr * 4
    strategy.exit("exit sl", stop=stoploss, trail_offset=stoploss)
if (entrycondition1 and entrycondition2 and entrycondition3)
    strategy.close(id="short")

Lebih banyak