Stratégie combinée de plusieurs délais Ichimoku, MACD et DMI

Auteur:ChaoZhang est là., Date: 2024-02-02 18h04 et 28h
Les étiquettes:

img

Résumé

Cette stratégie combine le Cloud Ichimoku, la Divergence de convergence moyenne mobile (MACD) et l'indice de mouvement directionnel (DMI) sur plusieurs délais pour identifier les signaux d'achat et de vente potentiels.

La logique de la stratégie

La stratégie exécute des conditions d'achat et de vente basées sur des signaux cohérents provenant des graphiques de 15 minutes (M15) et d'une heure (H1), avec une confirmation supplémentaire provenant du calendrier de 4 heures (H4).

Conditions d' achat

  • Prix au-dessus de Ichimoku Cloud sur les délais M15, H1 et H4
  • Ligne MACD au-dessus de la ligne de signal et à la fois au-dessus de zéro sur H1
  • DI+ au-dessus de DI- et ADX au moins 25 sur H1
  • Ligne MACD supérieure à zéro, DI+ supérieure à DI- et ADX au moins 25 sur M15

Conditions de vente

  • Prix inférieur à Ichimoku Cloud sur les délais M15, H1 et H4
  • Ligne MACD inférieure à la ligne de signal et les deux inférieures à zéro sur H1
  • DI- supérieur à DI+ et ADX d'au moins 25 sur H1
  • Ligne MACD inférieure à zéro, DI- supérieure à DI+ et ADX d'au moins 25 sur M15

Entrée et sortie

  • Position longue entrée lorsque toutes les conditions d'achat ont été remplies, ce qui suggère une dynamique haussière à travers les délais
  • Position courte entrée lorsque toutes les conditions de vente ont été remplies, ce qui suggère une dynamique à la baisse dans les délais
  • Position fermée lorsque des conditions opposées sont remplies, indiquant un potentiel renversement de tendance ou une perte de dynamique

Les avantages de la stratégie

  • Considère plusieurs délais pour une meilleure précision
  • Ichimoku juge la direction et la force de la tendance
  • Indicateurs MACD de dynamique à court et à moyen terme
  • DMI évalue la pression d'achat/de vente et l'activité de tendance
  • Combine les signaux de plusieurs indicateurs
  • Paramètres personnalisables pour les conditions d'achat/de vente
  • Largement applicable aux marchés présentant des tendances claires

Risques liés à la stratégie

  • Des signaux contradictoires à travers les délais peuvent causer de mauvais signaux
  • Ichimoku peut être trompeur si on l' utilise mal.
  • Le MACD et le DMI ont un caractère retardé, peuvent manquer des virages
  • Besoin de surveiller plusieurs indicateurs de temps
  • Gestion prudente des mouvements de prix massifs résultant d'événements soudains

Direction de l'optimisation

  • Optimiser la combinaison des paramètres Ichimoku, MACD et DMI
  • Testez plus de délais comme tous les jours
  • Ajoutez la confirmation de plus d'indicateurs tels que la volatilité, les moyennes mobiles, etc.
  • Optimiser les conditions d'achat/de vente avec plus de données historiques
  • Optimisation dynamique des paramètres avec apprentissage automatique, etc.

Conclusion

La stratégie utilise pleinement l'avantage de l'analyse multi-temporelle et de multiples indicateurs pour identifier efficacement la direction et la force de la tendance. Elle peut être adaptée à différents produits grâce au réglage des paramètres et optimisée pour des conditions de marché spécifiques. Mais les traders doivent toujours être conscients des limitations des indicateurs et prendre les mesures de contrôle des risques appropriées.


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



Plus de