
Strategi ini adalah strategi perdagangan otomatis yang didasarkan pada indikator teknis MACD yang bergeser dengan dua rata-rata bergerak. Ini menggunakan sinyal lintas garis cepat dan lambat dari indikator MACD untuk menilai arah tren dan melakukan pelacakan tren.
Strategi ini pertama-tama menghitung tiga garis kurva MACD: garis cepat, garis lambat, dan garis deviasi. Garis cepat adalah rata-rata bergerak yang lebih cepat dalam periode tertentu, dan garis lambat adalah rata-rata bergerak yang lebih lama. Garis deviasi adalah perbedaan antara garis cepat dan garis lambat.
Strategi ini memanfaatkan prinsip ini untuk melakukan over pada saat Gold Fork dan berposisi pada saat Dead Fork; atau melakukan shorting pada saat Dead Fork dan berposisi pada saat Gold Fork dan melakukan trend tracking secara otomatis. Pada saat yang sama, strategi ini juga menilai nilai mutlak dari garis MACD positif-negatif, menghindari sinyal palsu, dan memastikan benar-benar menangkap titik balik tren.
Solusi untuk Mengatasi Risiko:
Strategi ini dapat dioptimalkan dalam beberapa hal:
Dalam kombinasi dengan indikator lain, seperti indikator KDJ, indikator Brin, dan lain-lain, filter sinyal palsu
Perubahan mekanisme masuk ke lapangan, seperti penambahan filter penembusan, untuk menghindari masuk yang dini atau terlambat
Pengaturan parameter yang dioptimalkan, menyesuaikan siklus jalur cepat dan lambat sesuai dengan siklus yang berbeda dan lingkungan pasar
Menambahkan strategi stop loss untuk mengendalikan kerugian tunggal
Dapat diperluas ke varietas lain, seperti valuta asing, mata uang digital, dan lain-lain
Strategi pelacakan tren MACD lintas rata-rata bergerak ganda, menggunakan indikator MACD untuk menentukan arah tren, dengan sinyal filter lintas garis cepat dan lambat, dapat secara efektif menangkap pergeseran tren, mengikuti tren secara otomatis. Keunggulan strategi adalah presisi dalam menentukan tren, parameter dapat disesuaikan secara fleksibel, dapat dioptimalkan sesuai dengan lingkungan pasar. Perlu berhati-hati untuk mengendalikan risiko dan menghindari sinyal palsu.
/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 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/
// © DeMindSET
//@version=4
strategy("MACD Trend Follow Strategy", overlay=false)
// Getting inputs
LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"])
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)
// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00
// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : 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) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)
//
Bull= macd > signal
Bear= macd < signal
ConBull=macd>0
ConBear=macd<0
//
Green= Bull and ConBull
Red= Bear and ConBear
Yellow= Bull and ConBear
Blue= Bear and ConBull
//
bcolor = Green ? color.green : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na
barcolor(color=bcolor)
// === INPUT BACKTEST RANGE ===
FromYear = input(defval = 2019, title = "From Year", minval = 1920)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"
if LSB == "Long only" and Green
strategy.entry("L",true)
if LSB == "Long only" and Red
strategy.close("L",qty_percent=100,comment="TP Long")
if LSB == "Both" and Green
strategy.entry("L",true)
if LSB == "Both" and Red
strategy.entry("S",false)
if LSB == "Short only" and Red
strategy.entry("S",false)
if LSB == "Short only" and Green
strategy.close("S",qty_percent=100,comment="TP Short")