Strategi Mengikuti Trend MACD adalah strategi perdagangan kuantitatif berdasarkan penunjuk MACD. Strategi ini mengenal pasti isyarat salib emas dan salib kematian MACD untuk menentukan trend pasaran dan menjejaki trend harga.
Logik teras Strategi Mengikuti Trend MACD adalah:
Melalui mekanisme trend berikut ini, strategi boleh menangkap perubahan trend pasaran tepat pada masanya dan membuat keuntungan.
Strategi Mengikuti Trend MACD mempunyai kelebihan berikut:
Strategi Mengikuti Trend MACD juga mempunyai risiko berikut:
Untuk menangani risiko di atas, langkah-langkah pengoptimuman berikut boleh diambil:
Strategi Mengikuti Trend MACD boleh dioptimumkan dalam aspek berikut:
Mengoptimumkan parameter penunjuk MACD untuk mengurangkan kadar isyarat palsu.
Tambah penunjuk lain seperti jumlah dagangan untuk menapis isyarat. Syarat jumlah dagangan minimum boleh ditetapkan.
Tetapkan mekanisme stop loss yang dinamik. Titik stop loss boleh diselaraskan secara dinamik berdasarkan turun naik.
Mengoptimumkan logik penentuan isyarat untuk membuka kedudukan.
Menggabungkan model pembelajaran mesin untuk menapis isyarat. Model boleh dilatih untuk menilai kebolehpercayaan isyarat.
Secara amnya, Strategi Mengikuti Trend MACD adalah strategi kuantitatif yang agak matang. Ia menggunakan penunjuk MACD untuk menentukan arah trend pasaran, dan mengawal risiko dengan mekanisme stop loss, yang dapat dengan berkesan mengesan trend harga. Tetapi penunjuk MACD itu sendiri juga mempunyai beberapa kelemahan, mudah menghasilkan isyarat palsu.
/*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