Strategi Dagangan Trend Berdasarkan Indikator MACD

Penulis:ChaoZhang, Tarikh: 2024-02-02 11:32:48
Tag:

img

Ringkasan

Inti strategi ini adalah berdasarkan penunjuk yang dibangunkan dalam artikel Trading the Trend yang diterbitkan oleh Andrew Abraham dalam majalah TASC edisi September 1998.

Logika Strategi

Strategi ini mula-mula mengira purata bergerak bertingkat 21 hari dari julat sebenar purata (ATR) sebagai julat turun naik asas. Kemudian ia mengira harga tertinggi dan terendah selama 21 hari yang lalu. Dengan membandingkan harga penutupan semasa dengan had atas dan bawah julat asas, ia menilai sama ada harga keluar dari saluran untuk menentukan arah trend.

Secara khusus, had saluran atas ditakrifkan sebagai harga tertinggi dalam 21 hari kebelakangan dikurangkan 3 kali ATR asas, dan had saluran bawah adalah harga terendah dalam 21 hari kebelakangan ditambah 3 kali ATR asas. Apabila harga penutupan lebih tinggi daripada had atas, ia menandakan trend menaik. Apabila harga penutupan lebih rendah daripada had bawah, ia menandakan trend penurunan.

Semasa menentukan arah trend, strategi ini juga memperkenalkan penunjuk MACD untuk penapisan. Ia hanya menghasilkan isyarat beli apabila histogram MACD positif untuk mengelakkan peluang membeli yang hilang.

Kelebihan

Strategi ini menggabungkan penentuan trend dan penapisan penunjuk, yang dapat dengan berkesan mengenal pasti arah trend pasaran jangka menengah dan panjang tanpa disesatkan oleh turun naik jangka pendek.

  1. Menggunakan saluran harga untuk menentukan trend dan mengenal pasti arah jangka panjang dengan tepat
  2. Julat turun naik asas dinamik disesuaikan dengan perubahan pasaran
  3. Penapisan MACD menyediakan sokongan keputusan tambahan untuk mengelakkan kehilangan titik beli
  4. Parameter yang boleh dikonfigurasikan menawarkan fleksibiliti dalam menyesuaikan gaya strategi

Risiko

Strategi ini juga mempunyai beberapa risiko, terutamanya dalam aspek berikut:

  1. Risiko saluran harga terputus
  2. Risiko kesilapan isyarat MACD
  3. Tetapan parameter yang tidak mencukupi boleh menyebabkan ketidakstabilan strategi

Risiko ini boleh dikurangkan dengan mengoptimumkan parameter, ukuran kedudukan yang ketat, dan stop loss yang tepat pada masanya.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek utama berikut:

  1. Uji kombinasi parameter yang berbeza untuk mencari optimum

Uji gabungan yang berbeza dari Panjang atau Pengganda untuk mencari kombinasi parameter yang menghasilkan pulangan tertinggi berdasarkan backtest.

  1. Tambah penapisan dengan penunjuk lain

Ujian yang menggabungkan RSI, KDJ dan penunjuk lain untuk menapis isyarat dan meningkatkan keuntungan.

  1. Sesuaikan parameter secara dinamik

Sesuaikan parameter secara dinamik berdasarkan keadaan pasaran, seperti meluaskan julat saluran yang sesuai apabila trend kuat, atau mengetatkan julat apabila pasaran lebih terikat julat.

Ringkasan

Ringkasnya, ini adalah strategi trend berikut yang kuat secara keseluruhan. Dengan menggabungkan penentuan trend saluran harga dan penapisan MACD, ia dapat dengan berkesan mengenal pasti trend jangka menengah dan panjang dan menjana pulangan yang stabil. Dengan pengoptimuman parameter, pengurusan risiko, dan penyesuaian yang sesuai, strategi ini boleh menjadi sebahagian daripada sistem perdagangan.


/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
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/
// © melihtuna

//@version=1
strategy("Trend Trader Strategy with MACD", overlay=true)

// === Trend Trader Strategy ===
Length = input(21),
Multiplier = input(3, minval=1)
MacdControl = input(true, title="Control 'MACD Histogram is positive?' when Buy condition")
avgTR      = wma(atr(1), Length)
highestC   = highest(Length)
lowestC    = lowest(Length)
hiLimit = highestC[1]-(avgTR[1] * Multiplier)
loLimit = lowestC[1]+(avgTR[1] * Multiplier)
ret = iff(close > hiLimit and close > loLimit, hiLimit,
        iff(close < loLimit and close < hiLimit, loLimit, nz(ret[1], 0)))
pos =	iff(close > ret, 1,
	    iff(close < ret, -1, nz(pos[1], 0))) 
barcolor(pos == -1 ? red: pos == 1 ? green : blue )
plot(ret, color= blue , title="Trend Trader Strategy with MACD")

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2020, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true

// === MACD ===
[macdLine, signalLine, histLine] = macd(close, 12, 26, 9)
macdCond= MacdControl ? histLine[0] > 0 ? true : false : true

strategy.entry("BUY", strategy.long, when = window() and pos == 1 and macdCond)
strategy.entry("SELL", strategy.short, when = window() and pos == -1)




Lebih lanjut