
Inti strategi ini adalah berdasarkan pada indikator yang dibangunkan oleh Andrew Abraham dalam artikel yang diterbitkan dalam jurnal Trend Trending Trending TASC pada bulan September 1998. Indikator ini menggunakan julat pergerakan sebenar rata-rata dan saluran harga untuk menentukan arah trend pasaran, dan digabungkan dengan indikator MACD untuk penapisan isyarat perdagangan yang bertujuan untuk menangkap trend garis tengah.
Strategi ini mula-mula mengira purata bergerak bertimbangan purata 21 hari untuk rentang pergerakan sebenar ((ATR) sebagai rentang pergerakan asas. Kemudian mengira harga tertinggi dan terendah selama 21 hari yang lalu untuk membandingkan harga penutupan K-line semasa dengan batas atas dan bawah rentang pergerakan asas untuk menentukan sama ada harga telah menembusi saluran dan dengan itu menentukan arah trend.
Khususnya, definisi saluran atas adalah harga tertinggi 21 hari terakhir dikurangkan 3 kali ATR asas, saluran bawah adalah harga minimum 21 hari terakhir ditambah 3 kali ATR asas. Apabila harga penutupan lebih tinggi daripada saluran atas, ia dianggap sebagai trend bullish; apabila harga penutupan lebih rendah daripada saluran bawah, ia dianggap sebagai trend bullish.
Dalam menentukan arah trend, strategi ini juga memperkenalkan penapisan pada penunjuk MACD. Ia hanya menghasilkan isyarat beli apabila garis tiang MACD adalah betul, untuk mengelakkan kehilangan titik beli.
Strategi ini menggabungkan penilaian trend dan penapisan penunjuk, yang dapat menentukan arah trend garis panjang di pasaran dengan berkesan, dan mengelakkan tertipu oleh turun naik jangka pendek di pasaran. Kelebihan khusus adalah sebagai berikut:
Strategi ini juga mempunyai risiko, terutama dalam aspek berikut:
Dalam kes ini, risiko boleh dikurangkan dengan menetapkan parameter yang dioptimumkan, saiz kedudukan yang ketat, dan menghentikan kerugian tepat pada masanya.
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Kombinasi parameter Length atau Multiplier yang berbeza boleh diuji untuk mencari kombinasi parameter yang menghasilkan pulangan terbaik berdasarkan data pengukuran semula.
Ia boleh diuji dengan RSI, KDJ dan lain-lain untuk menapis isyarat dan melihat apakah ia dapat meningkatkan kadar pulangan.
Parameter boleh disesuaikan secara dinamik mengikut keadaan pasaran, seperti meluaskan julat saluran yang sesuai apabila trend jelas, dan mengetatkan julat saluran yang sesuai semasa gegaran.
Strategi ini secara keseluruhannya merupakan strategi pengesanan trend yang agak mantap. Ia menggabungkan pendekatan saluran harga untuk menentukan arah trend dan penapis isyarat penunjuk MACD, yang dapat menentukan trend garis panjang di pasaran dengan berkesan dan menghasilkan keuntungan yang stabil. Dengan pengoptimuman parameter, pengurusan risiko dan pengubahsuaian yang sesuai, strategi ini dapat menjadi komponen penting dalam sistem perdagangan kuantitatif.
/*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)