Strategi ini adalah strategi perdagangan otomatis berdasarkan crossover rata-rata bergerak ganda dari indikator teknis MACD. Ini memanfaatkan crossover garis sinyal MACD untuk menentukan arah tren untuk mengikuti tren.
Strategi ini memanfaatkan logika ini untuk pergi panjang pada salib emas dan posisi dekat pada salib kematian; atau pergi pendek pada salib kematian dan posisi dekat pada salib emas untuk secara otomatis mengikuti tren. Sementara itu, strategi juga menilai apakah garis MACD absolut positif atau negatif untuk menghindari sinyal palsu dan memastikan benar-benar menangkap titik pembalikan tren.
Pengurangan Risiko:
Strategi dapat ditingkatkan dari aspek berikut:
Menggabungkan indikator lain seperti KDJ, Bollinger Bands dll untuk mengkonfirmasi sinyal dan menyaring sinyal palsu
Memperbaiki mekanisme masuk, misalnya menambahkan filter breakout untuk menghindari entri dini atau terlambat
Mengoptimalkan pengaturan parameter, menyesuaikan periode baris cepat dan lambat berdasarkan kerangka waktu dan rezim pasar yang berbeda
Tambahkan stop loss untuk mengendalikan kerugian perdagangan tunggal
Ekspansi ke produk lain seperti forex, mata uang kripto dll
/*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")