Trend Mengikuti Strategi dengan MACD dan Saluran Donchian

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

img

Ringkasan

Strategi ini menggabungkan penunjuk Saluran Donchian dan penunjuk MACD untuk menentukan trend. Ia tergolong dalam strategi trend berikut yang tipikal. Ia pergi lama apabila harga memecahkan jalur atas dan MACD menunjukkan salib emas, dan pergi pendek apabila harga memecahkan jalur bawah dan MACD menunjukkan salib kematian.

Logika Strategi

  1. Mengira penunjuk MACD, termasuk garis pantas, garis perlahan dan histogram.

  2. Mengira jalur atas dan bawah Saluran Donchian. jalur atas adalah harga tertinggi selama N hari, jalur bawah adalah harga terendah selama N hari.

  3. Apabila harga memecahkan band atas, dan garis cepat MACD melintasi di atas garis perlahan, pergi panjang.

  4. Apabila harga memecahkan jalur bawah, dan garis cepat MACD melintasi di bawah garis perlahan, pergi pendek.

  5. Menggunakan penunjuk ATR untuk mengira stop loss untuk strategi ini, yang ditetapkan kepada nilai ATR didarabkan dengan pekali dari harga semasa.

  6. Tutup kedudukan apabila isyarat mundur muncul.

Analisis Kelebihan

Strategi ini menggabungkan penunjuk penghakiman trend dan penunjuk saluran, yang dapat menjejaki trend dengan berkesan. Penunjuk MACD menilai trend harga dan momentum. Saluran Donchian menilai arah. Stop loss ATR mengehadkan kerugian setiap perdagangan.

Kelebihan adalah:

  1. Strategi ini mudah dengan beberapa parameter, mudah dilaksanakan.

  2. Ia boleh membuka kedudukan di sepanjang trend, dan menangkap peluang trend dalam masa.

  3. ATR menghentikan kehilangan kawalan risiko.

  4. Pengurangan boleh dikawal hingga tahap tertentu.

Analisis Risiko

Terdapat juga beberapa risiko:

  1. Tetapan parameter saluran Donchian yang tidak betul boleh menyebabkan isyarat palsu.

  2. Parameter MACD yang tidak betul juga boleh menyebabkan isyarat yang tertinggal.

  3. Tetapan stop loss yang terlalu luas boleh menyebabkan kerugian diperluaskan.

  4. Peralihan pasaran yang tajam boleh membawa kepada kerugian besar.

  5. Strategi ini cenderung untuk overtrade.

Penyelesaian:

  1. Mengoptimumkan parameter, memilih stok dengan berhati-hati.

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

  3. Sesuaikan saiz kedudukan dengan betul.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Mengoptimumkan parameter MACD untuk meningkatkan kepekaan.

  2. Mengoptimumkan algoritma stop loss untuk menjadikannya lebih dekat dengan harga.

  3. Tambah mekanisme saiz kedudukan mengikut kekuatan trend.

  4. Tambah penapis untuk mengelakkan isyarat palsu.

  5. Tambah kriteria pemilihan untuk instrumen dagangan.

  6. Tambah penilaian tempoh masa perdagangan.

Ringkasan

Ringkasnya, ini adalah strategi trend berikut yang tipikal. Ia menggabungkan Saluran Donchian untuk arah trend dan MACD untuk kekuatan trend. Ia boleh mengikuti trend dengan berkesan dan mengawal risiko. Dengan mengoptimumkan parameter, stop loss, saiz kedudukan dan lain-lain, kestabilan dan keuntungan dapat ditingkatkan lagi. Strategi ini sesuai untuk pelabur yang memerlukan ketepatan tinggi dalam penghakiman trend.


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