
Strategi mengikuti trend MACD adalah strategi perdagangan kuantitatif berdasarkan indikator MACD. Strategi ini menilai trend pasaran dengan mengenal pasti isyarat garpu emas dan garpu mati dalam indikator MACD, untuk mengesan trend harga saham.
Logik utama strategi trend-following MACD adalah:
Melalui mekanisme trend-tracking ini, strategi ini dapat menangkap perubahan trend pasaran tepat pada masanya dan menghasilkan keuntungan.
Strategi mengikuti trend MACD mempunyai kelebihan berikut:
Terdapat juga risiko yang berkaitan dengan strategi trend-following MACD:
Mengenai risiko tersebut, langkah-langkah pengoptimuman berikut boleh diambil:
Strategi untuk mengesan trend MACD boleh dioptimumkan dengan:
Mengoptimumkan parameter penunjuk MACD, mengurangkan kadar isyarat palsu. MACD yang boleh diuji dengan parameter kitaran yang berbeza.
Menambah jumlah transaksi dan lain-lain indikator penapis isyarat. Anda boleh menetapkan syarat jumlah transaksi minimum.
Tetapkan mekanisme hentian pengesanan yang dinamik. Titik hentian boleh disesuaikan dalam masa nyata mengikut kadar turun naik.
Optimumkan logik keputusan isyarat untuk membuka kedudukan. Anda boleh menetapkan syarat isyarat yang lebih ketat.
Dengan menggunakan model pembelajaran mesin untuk memfilter isyarat, model boleh dilatih untuk menilai kebolehpercayaan isyarat.
Strategi mengesan trend MACD secara keseluruhan adalah strategi kuantitatif yang lebih matang. Strategi ini menggunakan indikator MACD untuk menentukan arah trend pasaran, dengan kawalan risiko mekanisme hentian, dapat mengesan trend harga saham dengan berkesan. Tetapi indikator MACD sendiri juga mempunyai kelemahan tertentu, 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