
Strategi ini menggabungkan penunjuk saluran penyebaran dan penunjuk MACD untuk menilai trend, dan merupakan strategi pengesanan trend yang tipikal. Apabila harga menembusi trek dan penunjuk MACD muncul di garisan emas, lakukan lebih banyak, dan apabila harga jatuh dari trek dan penunjuk MACD muncul di garisan mati, gunakan penunjuk ATR untuk mengira stop loss.
Hitung MACD, termasuk garis laju, garis perlahan dan histogram.
Hitung saluran penyebaran ke atas ke bawah. Di atas adalah harga tertinggi dalam N hari, di bawah adalah harga terendah dalam N hari.
Apabila harga menembusi ke atas dan MACD Fast Line menembusi ke atas, lakukan lebih banyak.
Apabila harga jatuh ke bawah dan MACD Fast Line turun ke bawah dan menembusi Slow Line, buat kosong.
Menggunakan indikator ATR untuk mengira kedudukan henti strategi ini, yang ditetapkan sebagai nilai jarak harga ke kedudukan henti ATR kalikan dengan faktor .
Apabila harga menunjukkan isyarat untuk berbalik, anda perlu menebus kedudukan semasa.
Strategi ini menggabungkan indikator trend dan indikator saluran untuk mengesan trend secara berkesan. Indeks MACD dapat menentukan trend dan kekuatan harga, dan indikator saluran penyebaran menentukan arah.
Kelebihan:
Parameter strategi mudah dan mudah dilaksanakan.
Ia juga boleh digunakan untuk menjimatkan wang dan menjimatkan masa.
Hentikan kerosakan ATR untuk mengawal risiko.
Pengunduran diri boleh dikawal.
Strategi ini mempunyai beberapa risiko:
Seting parameter saluran penyebaran yang tidak betul boleh menyebabkan isyarat palsu.
Setting parameter MACD yang tidak betul juga boleh menyebabkan Viticulture Administration System memberi isyarat kelewatan.
Tetapan stop loss yang terlalu tinggi boleh menyebabkan kerugian meningkat.
Ia boleh menyebabkan kerugian jika keadaan berubah secara drastik.
Strategi ini boleh menyebabkan perdagangan berlebihan.
Penyelesaian:
Parameter pengoptimuman, pilih saham dengan berhati-hati.
Penangguhan ketat, pengesanan yang dikesan.
Pengurusan kedudukan disesuaikan dengan betul.
Strategi ini boleh dioptimumkan dengan:
Mengoptimumkan parameter MACD dan meningkatkan kepekaan penunjuk.
Pengoptimuman algoritma Hentikan Kerosakan untuk membuat Hentikan Kerosakan lebih dekat dengan harga.
Menambah mekanisme pengurusan kedudukan, menyesuaikan kedudukan mengikut kekuatan dan kelemahan trend.
Menambah syarat penapisan untuk mengelakkan isyarat palsu.
Menambah kriteria pilihan untuk varieti dagangan.
Menambah penghakiman mengenai tempoh transaksi.
Strategi ini secara keseluruhannya adalah strategi pengesanan trend yang tipikal. Ia menggabungkan arah trend penghakiman indikator saluran penyebaran dan kekuatan trend penghakiman indikator MACD.
/*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")