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.
Mengira penunjuk MACD, termasuk garis pantas, garis perlahan dan histogram.
Mengira jalur atas dan bawah Saluran Donchian. jalur atas adalah harga tertinggi selama N hari, jalur bawah adalah harga terendah selama N hari.
Apabila harga memecahkan band atas, dan garis cepat MACD melintasi di atas garis perlahan, pergi panjang.
Apabila harga memecahkan jalur bawah, dan garis cepat MACD melintasi di bawah garis perlahan, pergi pendek.
Menggunakan penunjuk ATR untuk mengira stop loss untuk strategi ini, yang ditetapkan kepada nilai ATR didarabkan dengan pekali dari harga semasa.
Tutup kedudukan apabila isyarat mundur muncul.
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:
Strategi ini mudah dengan beberapa parameter, mudah dilaksanakan.
Ia boleh membuka kedudukan di sepanjang trend, dan menangkap peluang trend dalam masa.
ATR menghentikan kehilangan kawalan risiko.
Pengurangan boleh dikawal hingga tahap tertentu.
Terdapat juga beberapa risiko:
Tetapan parameter saluran Donchian yang tidak betul boleh menyebabkan isyarat palsu.
Parameter MACD yang tidak betul juga boleh menyebabkan isyarat yang tertinggal.
Tetapan stop loss yang terlalu luas boleh menyebabkan kerugian diperluaskan.
Peralihan pasaran yang tajam boleh membawa kepada kerugian besar.
Strategi ini cenderung untuk overtrade.
Penyelesaian:
Mengoptimumkan parameter, memilih stok dengan berhati-hati.
Stop loss yang ketat, stop loss yang tertinggal.
Sesuaikan saiz kedudukan dengan betul.
Strategi ini boleh dioptimumkan dalam aspek berikut:
Mengoptimumkan parameter MACD untuk meningkatkan kepekaan.
Mengoptimumkan algoritma stop loss untuk menjadikannya lebih dekat dengan harga.
Tambah mekanisme saiz kedudukan mengikut kekuatan trend.
Tambah penapis untuk mengelakkan isyarat palsu.
Tambah kriteria pemilihan untuk instrumen dagangan.
Tambah penilaian tempoh masa perdagangan.
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")