Tren MACD Mengikuti Strategi

Penulis:ChaoZhang, Tanggal: 2023-12-11 14:57:00
Tag:

img

Gambaran umum

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 Strategi

Logika inti dari MACD Trend Following Strategy adalah:

  1. Menghitung garis MACD dan garis sinyal.
  2. Ketika garis MACD melintasi di atas 0 dari bawah ke atas, catat titik tertinggi kemudian, dan tunggu sinyal silang kematian.
  3. Ketika garis MACD melintasi di bawah 0 dari atas ke bawah, catat titik terendah kemudian, dan tunggu sinyal golden cross.
  4. Ketika golden cross terjadi, catat harga penutupan saat ini sebagai titik masuk panjang, atur titik stop loss, buka posisi panjang.
  5. Ketika terjadi death cross, catat harga penutupan saat ini sebagai titik masuk pendek, atur titik stop loss, buka posisi pendek.
  6. Ketika memegang posisi panjang, jika rasio keuntungan mencapai target yang telah ditetapkan atau penarikan mencapai titik stop loss, tutup posisi untuk mewujudkan keuntungan.
  7. Ketika memegang posisi pendek, jika rasio keuntungan mencapai target yang telah ditetapkan atau penarikan mencapai titik stop loss, tutup posisi untuk mewujudkan keuntungan.

Melalui mekanisme trend following ini, strategi dapat menangkap perubahan tren pasar secara tepat waktu dan menghasilkan keuntungan.

Analisis Keuntungan

MACD Trend Following Strategy memiliki keuntungan berikut:

  1. Sumber sinyal strategi adalah tunggal dan jelas, dihasilkan langsung oleh indikator MACD, menghindari gangguan sinyal.
  2. Menggunakan karakteristik golden cross dan death cross dari indikator MACD untuk menentukan arah tren pasar, dengan penilaian yang akurat.
  3. Pelacakan tepat waktu dari perubahan tren, dengan kemampuan pelacakan keuntungan yang kuat.
  4. Kontrol risiko yang tepat, dengan mekanisme stop loss.

Analisis Risiko

Strategi Mengikuti Tren MACD juga memiliki risiko berikut:

  1. Indikator MACD cenderung menghasilkan sinyal palsu, yang dapat menyebabkan kerugian dalam operasi jangka pendek.
  2. Pengaturan stop loss point yang tidak benar dapat memperluas single loss.
  3. Sulit untuk menyeimbangkan antara rasio pelacakan keuntungan dan titik stop loss, dengan risiko pelacakan yang berlebihan yang menyebabkan kerugian.

Untuk mengatasi risiko di atas, langkah-langkah optimalisasi berikut dapat diadopsi:

  1. Gabungkan dengan indikator lain untuk menyaring sinyal palsu.
  2. Sesuaikan titik stop loss secara dinamis.
  3. Mengoptimalkan parameter rasio pelacakan keuntungan dan titik stop loss.

Arahan Optimasi

Strategi Mengikuti Tren MACD dapat dioptimalkan dalam aspek berikut:

  1. Mengoptimalkan parameter indikator MACD untuk mengurangi tingkat sinyal palsu.

  2. Tambahkan indikator lain seperti volume perdagangan untuk menyaring sinyal.

  3. Mengatur mekanisme stop loss yang dinamis. titik stop loss dapat disesuaikan secara dinamis berdasarkan volatilitas.

  4. Mengoptimalkan logika penentuan sinyal untuk membuka posisi. kondisi pemicu yang lebih ketat dapat ditetapkan.

  5. Menggabungkan model pembelajaran mesin untuk menyaring sinyal. Model dapat dilatih untuk menilai keandalan sinyal.

Kesimpulan

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

Lebih banyak