Chiến lược tổng hợp MACD và DMI dựa trên khung thời gian đa đám mây mở rộng

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

基于多时间框架的一云延伸MACD和DMI组合策略

Thông tin chi tiết

Chiến lược này sử dụng các tín hiệu trên nhiều khung thời gian để xác định các cơ hội mua và bán tiềm năng. Nó nhằm mục đích cung cấp một tài liệu tham khảo cho các nhà giao dịch muốn xem xét thị trường từ hai chiều ngắn và trung hạn.

Nguyên tắc chiến lược

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

Điều kiện mua

  • Giá trên khung thời gian M15, H1 và H4 cao hơn một đám mây
  • Các đường MACD trên biểu đồ H1 cao hơn đường tín hiệu và cả hai đường đều cao hơn 0.
  • Đường DI + trên biểu đồ H1 cao hơn đường DI, ADX ít nhất 25
  • Đường MACD trên biểu đồ M15 cao hơn đường DI + hơn đường DI, ADX cũng ít nhất là 25

Điều kiện bán

  • Giá trên khung thời gian M15, H1 và H4 thấp hơn một đám mây
  • Đường MACD trên biểu đồ H1 thấp hơn đường tín hiệu và cả hai đường đều thấp hơn 0.
  • Đường DI trên biểu đồ H1 cao hơn đường DI +, ADX ít nhất 25
  • Đường MACD trên biểu đồ M15 thấp hơn 0, đường DI cao hơn đường DI +, ADX cũng ít nhất là 25

Nhập và ra

  • Khi tất cả các điều kiện mua được đáp ứng, tạo ra nhiều vị trí đầu tiên, cho thấy sự gia tăng trên khung thời gian
  • Khi tất cả các điều kiện bán được đáp ứng, đặt vị trí trống, cho thấy sự gia tăng giảm trên khung thời gian
  • Tăng giá khi các điều kiện ngược lại được đáp ứng, cho thấy khả năng đảo ngược hoặc mất động lực

Lợi thế chiến lược

  • Xem xét nhiều khung thời gian để tăng độ chính xác của quyết định
  • Một đám mây mở rộng để xác định hướng và sức mạnh của xu hướng
  • MACD xác định động lực ngắn và trung hạn
  • DMI đánh giá sức mua bán và xu hướng hoạt động
  • Một số chỉ số được kết hợp để đánh giá thị trường đang đi đâu.
  • Điều kiện mua bán tùy chỉnh tùy chỉnh
  • Ứng dụng rộng rãi cho các thị trường có xu hướng rõ ràng

Rủi ro chiến lược

  • Sự phân biệt về khung thời gian có thể dẫn đến tín hiệu sai
  • Một đám mây mở rộng có thể gây hiểu lầm nếu sử dụng không đúng cách
  • Cả MACD và DMI đều bị tụt lại và có thể bỏ lỡ điểm chuyển đổi
  • Cần theo dõi nhiều chỉ số khung thời gian cùng một lúc
  • Những thay đổi lớn về giá cả do sự đột ngột gây ra cần phải được xử lý một cách thận trọng

Chiến lược tối ưu hóa hướng

  • Tối ưu hóa sự mở rộng đám mây, MACD và DMI
  • Kiểm tra sự kết hợp của nhiều khung thời gian hơn, chẳng hạn như đường tròn.
  • Thêm xác nhận các chỉ số khác, chẳng hạn như tỷ lệ biến động, đường trung bình chuyển động, v.v.
  • Xem thêm dữ liệu lịch sử để tối ưu hóa điều kiện mua bán
  • Kết hợp các phương pháp như học máy với các tham số tối ưu hóa động

Tóm lại

Chiến lược này tận dụng các 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à cường độ của xu hướng. Thông qua các điều chỉnh tham số, nó có thể được áp dụng cho các giống khác nhau hoặc được tối ưu hóa cho các ngành cụ thể. Tuy nhiên, thương nhân vẫn cần lưu ý đến những hạn chế của chỉ số và áp dụng các biện pháp kiểm soát rủi ro thích hợp, tổng thể, chiến lược này 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")



Nhiều hơn nữa