Chiến lược kết hợp nhiều khung thời gian Ichimoku, MACD và DMI

Tác giả:ChaoZhang, Ngày: 2024-02-02 18:04:28
Tags:

img

Tổng quan

Chiến lược này kết hợp Ichimoku Cloud, Moving Average Convergence Divergence (MACD) và Directional Movement Index (DMI) trên nhiều khung thời gian để xác định các tín hiệu mua và bán tiềm năng.

Chiến lược logic

Chiến lược thực hiện các điều kiện mua và bán dựa trên các tín hiệu nhất quán từ biểu đồ 15 phút (M15) và 1 giờ (H1), với sự xác nhận bổ sung từ khung thời gian 4 giờ (H4).

Điều kiện mua

  • Giá trên Ichimoku Cloud trên khung thời gian M15, H1 và H4
  • Đường MACD trên đường tín hiệu và cả hai trên 0 trên H1
  • DI+ trên DI- và ADX ít nhất 25 trên H1
  • Đường MACD trên 0, DI+ trên DI- và ADX ít nhất 25 trên M15

Điều kiện bán

  • Giá dưới Ichimoku Cloud trên khung thời gian M15, H1 và H4
  • Đường MACD dưới đường tín hiệu và cả hai dưới 0 trên H1
  • DI- trên DI+ và ADX ít nhất 25 trên H1
  • Đường MACD dưới 0, DI- trên DI+ và ADX ít nhất 25 trên M15

Nhập và ra

  • Vị trí dài được nhập khi tất cả các điều kiện mua được đáp ứng, cho thấy động lực tăng trên các khung thời gian
  • Vị trí ngắn được nhập khi tất cả các điều kiện bán được đáp ứng, cho thấy động lực giảm qua các khung thời gian
  • Vị trí đóng khi các điều kiện đối nghịch được đáp ứng, cho thấy khả năng đảo ngược xu hướng hoặc mất động lực

Ưu điểm của Chiến lược

  • Xem xét nhiều khung thời gian để cải thiện độ chính xác
  • Ichimoku đánh giá xu hướng và sức mạnh
  • Các chỉ số MACD về động lượng ngắn hạn và trung hạn
  • DMI đánh giá áp lực mua/bán và hoạt động xu hướng
  • Kết hợp các tín hiệu từ nhiều chỉ số
  • Các tham số có thể tùy chỉnh cho các điều kiện mua/bán
  • Ứng dụng rộng rãi đối với các thị trường có xu hướng rõ ràng

Rủi ro của chiến lược

  • Các tín hiệu xung đột trong các khung thời gian có thể gây ra tín hiệu xấu
  • Ichimoku có thể gây nhầm lẫn nếu sử dụng không đúng cách.
  • MACD và DMI có bản chất chậm, có thể bỏ lỡ các lượt
  • Cần phải theo dõi nhiều chỉ số khung thời gian
  • Việc xử lý cẩn thận các biến động giá lớn từ các sự kiện đột ngột

Hướng tối ưu hóa

  • Tối ưu hóa sự kết hợp của các tham số Ichimoku, MACD và DMI
  • Kiểm tra nhiều khung thời gian hơn như hàng ngày
  • Thêm xác nhận từ nhiều chỉ số như biến động, trung bình động vv
  • Tối ưu hóa điều kiện mua/bán với nhiều dữ liệu lịch sử hơn
  • Tối ưu hóa tham số động với máy học vv

Kết luận

Chiến lược sử dụng đầy đủ lợi thế của phân tích nhiều khung thời gian và nhiều chỉ số để xác định hiệu quả hướng và sức mạnh xu hướng. Nó có thể được điều chỉnh cho các sản phẩm khác nhau thông qua điều chỉnh tham số và tối ưu hóa cho các điều kiện thị trường cụ thể. Nhưng các nhà giao dịch vẫn nên lưu ý đến các giới hạn của các chỉ số và thực hiện các biện pháp kiểm soát rủi ro thích hợp. Nhìn chung chiến lược cung cấp một khuôn khổ tương đối toàn diện để đánh giá thị trường.


/*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")



Thêm nữa