Chiến lược kết hợp MACD và DMI mở rộng của One Cloud dựa trên nhiều khung thời gian


Ngày tạo: 2024-02-02 18:04:28 sửa đổi lần cuối: 2024-02-02 18:04:51
sao chép: 6 Số nhấp chuột: 1266
1
tập trung vào
1617
Người theo dõi

Chiến lược kết hợp MACD và DMI mở rộng của One Cloud dựa trên nhiều khung thời gian

Tổng quan

Chiến lược này sử dụng một mở rộng đám mây, các tín hiệu MACD và DMI 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ó được thiết kế để cung cấp cho các nhà giao dịch muốn xem xét thị trường từ hai chiều ngắn hạ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 thố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à xác nhận bổ sung.

Điều kiện mua hàng

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

Điều kiện bán hàng

  • Giá trên khung thời gian M15, H1 và H4 dưới một đám mây kéo dài
  • Dò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 là 25
  • Dò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

Vào và ra

  • Xây dựng vị thế nhiều đầu khi tất cả các điều kiện mua đều được đáp ứng, cho thấy sự tăng vọt xuất hiện trên khung thời gian
  • Xây dựng vị trí đầu tư trống khi tất cả các điều kiện bán được đáp ứng, cho thấy xu hướng giảm xuất hiện trên khung thời gian
  • Khi điều kiện ngược lại được đáp ứng, nó cho thấy khả năng đảo ngược hoặc mất đà

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 kéo dài để đánh giá xu hướng và cường độ
  • MACD đánh giá động lực ngắn hạn và trung hạn
  • DMI đánh giá xu hướng mua và bán
  • Kết hợp nhiều chỉ số, đánh giá tổng hợp xu hướng của thị trường
  • Điều kiện mua bán tùy chỉnh
  • Có thể áp dụng rộng rãi cho thị trường có xu hướng rõ ràng

Rủi ro chiến lược

  • Phương pháp phân tích nhiều khung thời gian có thể gây ra sự khác biệt và dẫn đến tín hiệu sai.
  • Một mở rộng đám mây có thể gây hiểu nhầm nếu sử dụng sai
  • MACD và DMI đều có sự chậm trễ và có thể bỏ lỡ một bước ngoặt
  • Cần giám sát nhiều chỉ số khung thời gian đồng thời
  • Cần thận trọng với sự thay đổi giá lớn của sự kiện bất ngờ

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

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

Tóm tắt

Chiến lược này tận dụng tối đa 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. Nó có thể được áp dụng cho các giống khác nhau thông qua điều chỉnh tham số và cũng có thể được tối ưu hóa cho các tình huống cụ thể.

Mã nguồn chiến lược
/*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")