Strategi Mengikuti Tren MACD adalah strategi perdagangan kuantitatif berdasarkan indikator MACD. Strategi ini mengidentifikasi sinyal salib emas dan salib kematian MACD untuk menentukan tren pasar dan melacak tren harga.
Logika inti dari MACD Trend Following Strategy adalah:
Melalui mekanisme trend following ini, strategi dapat menangkap perubahan tren pasar secara tepat waktu dan menghasilkan keuntungan.
MACD Trend Following Strategy memiliki keuntungan berikut:
Strategi Mengikuti Tren MACD juga memiliki risiko berikut:
Untuk mengatasi risiko di atas, langkah-langkah optimalisasi berikut dapat diadopsi:
Strategi Mengikuti Tren MACD dapat dioptimalkan dalam aspek berikut:
Mengoptimalkan parameter indikator MACD untuk mengurangi tingkat sinyal palsu.
Tambahkan indikator lain seperti volume perdagangan untuk menyaring sinyal.
Mengatur mekanisme stop loss yang dinamis. titik stop loss dapat disesuaikan secara dinamis berdasarkan volatilitas.
Mengoptimalkan logika penentuan sinyal untuk membuka posisi. kondisi pemicu yang lebih ketat dapat ditetapkan.
Menggabungkan model pembelajaran mesin untuk menyaring sinyal. Model dapat dilatih untuk menilai keandalan sinyal.
Secara umum, strategi MACD Trend Following adalah strategi kuantitatif yang relatif matang. Ini memanfaatkan indikator MACD untuk menentukan arah tren pasar, dan mengendalikan risiko dengan mekanisme stop loss, yang dapat secara efektif melacak tren harga. Tapi indikator MACD itu sendiri juga memiliki beberapa kekurangan, mudah menghasilkan sinyal palsu. Jadi ada ruang untuk pengoptimalan lebih lanjut dari strategi ini, terutama pada aspek seperti parameter indikator, mekanisme stop loss, penyaringan sinyal dll.
/*backtest start: 2023-11-10 00:00:00 end: 2023-12-10 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("MACD Cross Strategy", overlay=true) // Get MACD values [macdLine, signalLine, _] = ta.macd(close, 12, 26, 9) var float entryLongPrice = na var float entryShortPrice = na var float highestLongProfit = 0 var float highestShortProfit = 0 var float highestMACD = 0 var float lowestMACD = 0 var bool haveOpenedLong = false var bool haveOpenedShort = false var float stoploss = 0.04 // To be adjust for different investment var float minProfit = 0.05 // To be adjust for different investment if macdLine > 0 lowestMACD := 0 highestMACD := math.max(highestMACD, macdLine) haveOpenedShort := false else highestMACD := 0 lowestMACD := math.min(lowestMACD, macdLine) haveOpenedLong := false // Enter long position when MACD line crosses above the signal line if ta.crossover(macdLine, signalLine) and macdLine < highestMACD and macdLine > 0 and haveOpenedLong == false strategy.entry("Long", strategy.long) strategy.exit("Exit Long", from_entry = "Long", stop=close*(1 - stoploss)) entryLongPrice := close haveOpenedLong := true if ta.crossunder(macdLine, signalLine) and macdLine > lowestMACD and macdLine < 0 and haveOpenedShort == false strategy.entry("Short", strategy.short) strategy.exit("Exit Short", from_entry = "Short", stop=close*(1 + stoploss)) entryShortPrice := close haveOpenedShort := true // log.info("entryLongPrice:{0}", entryLongPrice) if strategy.position_size > 0 profit = close - entryLongPrice log.info("profit:{0}", profit) if profit > 0 highestLongProfit := math.max(highestLongProfit, profit) if profit / entryLongPrice > minProfit and highestLongProfit * 0.8 > profit strategy.close("Long") highestLongProfit := 0 if strategy.position_size < 0 profit = entryShortPrice - close if profit > 0 highestShortProfit := math.max(highestShortProfit, profit) log.info("highestShortProfit={0}, profit={1}", highestShortProfit, profit) if profit / entryShortPrice > minProfit and highestShortProfit * 0.8 > profit strategy.close("Short") highestShortProfit := 0