Strategi gabungan Ichimoku, MACD dan DMI Multi-Timeframe

Penulis:ChaoZhang, Tanggal: 2024-02-02 18:04:28
Tag:

img

Gambaran umum

Strategi ini menggabungkan Ichimoku Cloud, Moving Average Convergence Divergence (MACD) dan Directional Movement Index (DMI) di beberapa kerangka waktu untuk mengidentifikasi sinyal beli dan jual potensial.

Logika Strategi

Strategi ini mengeksekusi kondisi beli dan jual berdasarkan sinyal yang konsisten dari grafik 15 menit (M15) dan 1 jam (H1), dengan konfirmasi tambahan dari kerangka waktu 4 jam (H4).

Kondisi Beli

  • Harga di atas Ichimoku Cloud pada kerangka waktu M15, H1 dan H4
  • Garis MACD di atas garis sinyal dan keduanya di atas nol pada H1
  • DI+ di atas DI- dan ADX setidaknya 25 pada H1
  • Garis MACD di atas nol, DI+ di atas DI- dan ADX setidaknya 25 pada M15

Kondisi Jual

  • Harga di bawah Ichimoku Cloud pada kerangka waktu M15, H1 dan H4
  • Garis MACD di bawah garis sinyal dan keduanya di bawah nol pada H1
  • DI- di atas DI+ dan ADX setidaknya 25 pada H1
  • Garis MACD di bawah nol, DI- di atas DI+ dan ADX setidaknya 25 pada M15

Masuk dan Keluar

  • Posisi panjang dimasukkan ketika semua kondisi pembelian terpenuhi, menunjukkan momentum naik di seluruh kerangka waktu
  • Posisi pendek masuk ketika semua kondisi penjualan terpenuhi, menunjukkan momentum menurun di seluruh kerangka waktu
  • Posisi ditutup ketika kondisi yang berlawanan terpenuhi, menunjukkan potensi pembalikan tren atau kehilangan momentum

Keuntungan dari Strategi

  • Mempertimbangkan beberapa kerangka waktu untuk peningkatan akurasi
  • Ichimoku menilai arah tren dan kekuatan
  • Indikator MACD momentum jangka pendek dan jangka menengah
  • DMI menilai tekanan pembelian/penjualan dan aktivitas tren
  • Menggabungkan sinyal dari beberapa indikator
  • Parameter yang dapat disesuaikan untuk kondisi pembelian/penjualan
  • Secara luas berlaku untuk pasar dengan tren yang jelas

Risiko dari Strategi

  • Sinyal yang bertentangan di seluruh kerangka waktu dapat menyebabkan sinyal yang buruk
  • Ichimoku bisa menyesatkan jika digunakan dengan tidak benar
  • MACD dan DMI memiliki sifat tertinggal, mungkin melewatkan belokan
  • Kebutuhan untuk memantau beberapa indikator jangka waktu
  • Penanganan yang hati-hati dari pergerakan harga besar dari peristiwa tiba-tiba

Arah Optimalisasi

  • Mengoptimalkan kombinasi Ichimoku, MACD dan parameter DMI
  • Uji lebih banyak kerangka waktu seperti setiap hari
  • Tambahkan konfirmasi dari lebih banyak indikator seperti volatilitas, moving average dll.
  • Mengoptimalkan kondisi pembelian/penjualan dengan lebih banyak data historis
  • Optimasi parameter dinamis dengan pembelajaran mesin dll.

Kesimpulan

Strategi ini sepenuhnya memanfaatkan keuntungan dari analisis multi-frame waktu dan beberapa indikator untuk secara efektif mengidentifikasi arah dan kekuatan tren. Ini dapat disesuaikan dengan produk yang berbeda melalui penyesuaian parameter dan dioptimalkan untuk kondisi pasar tertentu. Tetapi pedagang masih harus memperhatikan keterbatasan indikator dan mengambil langkah-langkah pengendalian risiko yang sesuai. Secara keseluruhan strategi memberikan kerangka kerja yang relatif komprehensif untuk mengukur pasar.


/*backtest
start: 2024-01-25 00:00:00
end: 2024-02-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © haidinh83

//@version=5
strategy("Ichimoku, MACD, DMI Multiple time frame 21/01/2024", overlay=true)
    // Khung thời gian
timeframe1 = "5"   // M5
timeframe2 = "15"  // M15
timeframe3 = "60"  // H1
timeframe4 = "240" // H4

    // Nhập tham số ADX và DI
lengthDMI = input(14, title="DMI Length")
thresholdADX = input(20, title="ADX Threshold")

// Tính giá trị Ichimoku
ichimoku(tenkanPeriod, kijunPeriod, senkouPeriod) =>
    tenkanSen = (ta.highest(high, tenkanPeriod) + ta.lowest(low, tenkanPeriod)) / 2
    kijunSen = (ta.highest(high, kijunPeriod) + ta.lowest(low, kijunPeriod)) / 2
    senkouSpanA = (tenkanSen + kijunSen) / 2
    senkouSpanB = (ta.highest(high, senkouPeriod) + ta.lowest(low, senkouPeriod)) / 2
    [tenkanSen, kijunSen, senkouSpanA, senkouSpanB]

    // Lấy Ichimoku từng khung thời gian
[tenkanM5, kijunM5, spanAM5, spanBM5] = request.security(syminfo.tickerid, timeframe1, ichimoku(9, 26, 52))
[tenkanM15, kijunM15, spanAM15, spanBM15] = request.security(syminfo.tickerid, timeframe2, ichimoku(9, 26, 52))
[tenkanH1, kijunH1, spanAH1, spanBH1] = request.security(syminfo.tickerid, timeframe3, ichimoku(9, 26, 52))
[tenkanH4, kijunH4, spanAH4, spanBH4] = request.security(syminfo.tickerid, timeframe4, ichimoku(9, 26, 52))

    // Tính giá trị MACD và Signal Line cho từng khung thời gian
[macdM5, signalM5, _] = request.security(syminfo.tickerid, timeframe1, ta.macd(close, 12, 26, 9))
[macdM15, signalM15, _] = request.security(syminfo.tickerid, timeframe2, ta.macd(close, 12, 26, 9))
[macdH1, signalH1, _] = request.security(syminfo.tickerid, timeframe3, ta.macd(close, 12, 26, 9))
[macdH4, signalH4, _] = request.security(syminfo.tickerid, timeframe4, ta.macd(close, 12, 26, 9))

  // Tính giá trị DMI cho từng khung thời gian
calcDMI(len) =>
    up = ta.change(high)
    down = -ta.change(low)
    plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
    trur = ta.rma(ta.tr, len)
    plus = fixnan(100 * ta.rma(plusDM, len) / trur)
    minus = fixnan(100 * ta.rma(minusDM, len) / trur)
    adx = 100 * ta.rma(math.abs(plus - minus) / (plus + minus == 0 ? 1 : plus + minus), len)
    [plus, minus, adx]  // Đảm bảo mỗi phần của hàm nằm trên một dòng riêng biệt


[plusM5, minusM5, adxM5] = request.security(syminfo.tickerid, timeframe1, calcDMI(lengthDMI))
[plusM15, minusM15, adxM15] = request.security(syminfo.tickerid, timeframe2, calcDMI(lengthDMI))
[plusH1, minusH1, adxH1] = request.security(syminfo.tickerid, timeframe3, calcDMI(lengthDMI))
[plusH4, minusH4, adxH4] = request.security(syminfo.tickerid, timeframe4, calcDMI(lengthDMI))



// Điều kiện mua cho H1
buyConditionH1 = (close > spanAM15) and (close > spanAH1) and (close > spanAH4) and 
                 (macdH1 > signalH1) and (macdH1 > 0) and (signalH1 > 0) and 
                 (plusH1 > minusH1) and (adxH1 >= 25)

// Điều kiện mua cho M15
buyConditionM15 = (close > spanAM15) and (close > spanAH1) and (close > spanAH4) and 
                  (macdM15 > 0) and (plusM15 > minusM15) and (adxM15 >= 25)

// Điều kiện mua tổng hợp
buyCondition = buyConditionH1 and buyConditionM15

// Điều kiện bán cho H1
sellConditionH1 = (close < spanAM15) and (close < spanAH1) and (close < spanAH4) and 
                  (macdH1 < signalH1) and (macdH1 < 0) and (signalH1 < 0) and 
                  (minusH1 > plusH1) and (adxH1 >= 25)

// Điều kiện bán cho M15
sellConditionM15 = (close < spanAM15) and (close < spanAH1) and (close < spanAH4) and 
                   (macdM15 < 0) and (minusM15 > plusM15) and (adxM15 >= 25)

// Điều kiện bán tổng hợp
sellCondition = sellConditionH1 and sellConditionM15

// Thực hiện giao dịch nếu điều kiện bán hoặc mua được đáp ứng
if buyCondition
    strategy.entry("Buy", strategy.long)

if sellCondition
    strategy.entry("Sell", strategy.short)


    // Vẽ và tô màu giữa Senkou Span A và B cho mỗi khung thời gian
p1 = plot(spanAM15, color=color.blue, title="Span A M15")
p2 = plot(spanBM15, color=color.blue, title="Span B M15")
fill(p1, p2, color=color.new(color.blue, 90), title="M15 Cloud")

p3 = plot(spanAH1, color=color.purple, title="Span A H1")
p4 = plot(spanBH1, color=color.purple, title="Span B H1")
fill(p3, p4, color=color.new(color.purple, 90), title="H1 Cloud")

p5 = plot(spanAH4, color=color.orange, title="Span A H4")
p6 = plot(spanBH4, color=color.orange, title="Span B H4")
fill(p5, p6, color=color.new(color.orange, 90), title="H4 Cloud")

    // Tô màu nền và hiển thị cảnh báo
 
bgcolor(buyCondition ? color.new(color.green, 45) : sellCondition ? color.new(color.red, 45) : na)
alertcondition(buyCondition, title="Mua Signal", message="Điều kiện mua đã được đáp ứng")
alertcondition(sellCondition, title="Bán Signal", message="Điều kiện bán đã được đáp ứng")



Lebih banyak