Les ressources ont été chargées... Je charge...

Stratégie des signaux de tendance de superposition

Auteur:ChaoZhang est là., Date: 2024-02-18 à 10 h 22
Les étiquettes:

img

Résumé

Cette stratégie génère des signaux de négociation en calculant les indices de mouvement directionnel (DMI) DI+ et DI- ainsi que l'indice directionnel moyen (ADX) et l'indice de mouvement exponentiel (EMA). Elle déclenche un signal long lorsque DI+ dépasse DI- et ADX est supérieur à 20. Un signal court est déclenché lorsque DI- dépasse DI+ et ADX est supérieur à 25.

La logique de la stratégie

  1. Calculer le DI+, le DI-, l'ADX

    • Utiliser ta.dmi() pour calculer le DI+, le DI-, le ADX
    • DI+/DI- mesure le mouvement directionnel des prix
    • L'ADX mesure la force du mouvement des prix
  2. Calculer la moyenne mobile exponentielle

    • Utilisez la fonction my_ema() personnalisée pour calculer l'EMA
    • L'EMA aplanit les données sur les prix
  3. Générer des signaux de trading

    • Signaux longs: DI+ se croise au-dessus de DI- et ADX > 20 et se rapproche de > EMA
      • Indique une tendance à la hausse et une volatilité accrue
    • Signal court: DI- se croise sous DI+ et ADX > 25 et se rapproche < EMA
      • Indique une tendance à la baisse et une forte volatilité
  4. Définir le stop-loss

    • L'exposé de risque est le montant de la déduction de la déduction de la déduction.
      • Indique un renversement de tendance
    • L'exposition au risque de défaillance de l'établissement est calculée sur la base de l'exposition au risque.
      • Indique un renversement de tendance

En résumé, cette stratégie combine des indicateurs de dynamique et d'analyse de tendance pour négocier lorsque des tendances de prix fortes émergent, avec des arrêts de pertes pour limiter les pertes.

Analyse des avantages

  1. Le double DI évite les faux signaux.
    • Un seul DI peut donner de faux signaux, un double DI assure la tendance
  2. Le seuil ADX nécessite une volatilité accrue
    • Ne négocie que des mouvements à forte volatilité, évitant les variations
  3. L'EMA complète le DI
    • L'EMA identifie les tendances à moyen et à long terme
  4. Stop-loss strict
    • Réduit rapidement les pertes

Analyse des risques

  1. Résultats des opérations de reporting
    • Les fluctuations volatiles peuvent entraîner des arrêts fréquents
  2. Dépendance des paramètres
    • Il faut trouver les paramètres DI et ADX optimaux
  3. Faible fréquence des échanges
    • Des règles strictes réduisent le commerce

On peut optimiser en augmentant le stop loss, en ajustant les paramètres, en ajoutant des filtres pour augmenter la fréquence.

Des possibilités d'optimisation

  1. Optimisation des paramètres
    • Optimiser les paramètres DI et ADX
  2. Ajouter des filtres
    • Le volume, la divergence, etc.
  3. Élargir le stop-loss
    • Arrêtez-vous lentement pour réduire la fréquence

Conclusion

Cette stratégie combine des indicateurs d'analyse de l'élan et de la tendance pour négocier des tendances fortes, avec des arrêts stricts pour contrôler le risque.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 4h
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/
// © Tamil_FNO_Trader

//@version=5
strategy("Overlay Signals by TFOT", overlay=true)

// Calculate DMI
len = input.int(14, minval=1, title="DI Length")
lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
[diplus, diminus, adx] = ta.dmi(len, lensig)

// Get EMA
emalen = input.int(26, minval=1, title = "EMA Length")
emasrc = input.source(close, title = "EMA Source")

my_ema(src, length) =>
    alpha = 2 / (length + 1)
    sum = 0.0
    sum := na(sum[1]) ? src : alpha * src + (1 - alpha) * nz(sum[1])
EMA2 = my_ema(emasrc, emalen)

// Variables
var bool buycondition1 = false
var bool sellcondition1 = false

var int firstbuybar = na
var int firstsellbar = na

var int buyexitbar = na
var int sellexitbar = na

var bool buyexit1 = false
var bool sellexit1 = false

// Buy & Sell Conditions
buycondition1 := (ta.crossover(diplus, diminus)) and (adx > 20) and (close > EMA2) and na(firstbuybar)
sellcondition1 := (ta.crossover(diminus, diplus)) and (adx > 25) and (close < EMA2) and na(firstsellbar)

buyexit1 := ta.crossover(diminus, diplus) and (adx > 30) and na(buyexitbar)
sellexit1 := ta.crossover(diplus, diminus) and (adx > 30) and na(sellexitbar)

if buycondition1
    if(na(firstbuybar))
        firstbuybar := bar_index
        buyexitbar := na
        firstsellbar := na
        strategy.entry("Buy", strategy.long)

if sellcondition1
    if(na(firstsellbar))
        firstsellbar := bar_index
        sellexitbar := na
        firstbuybar := na
        strategy.entry("Sell", strategy.short)

if buyexit1 and not na(firstbuybar)
    if(na(buyexitbar))
        buyexitbar := bar_index
        firstbuybar := na
        firstsellbar := na
        strategy.close("Buy")

if sellexit1 and not na(firstsellbar)
    if(na(sellexitbar))
        sellexitbar := bar_index
        firstsellbar := na
        firstbuybar := na
        strategy.close("Sell")

// Plot signals on chart
hl = input.bool(defval = true, title = "Signal Labels")

plotshape(hl and buycondition1 and bar_index == firstbuybar ? true : na, "Buy", style = shape.labelup, location = location.belowbar, color = color.green, text = "Buy", textcolor = color.white, size = size.tiny)
plotshape(hl and sellcondition1 and bar_index == firstsellbar ? true : na, "Sell", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell", textcolor = color.white, size = size.tiny)

plotshape(hl and buyexit1 and bar_index == buyexitbar ? true : na, "Buy Exit", style = shape.labelup, location = location.belowbar, color = color.red, text = "Buy X", textcolor = color.white, size = size.tiny)
plotshape(hl and sellexit1 and bar_index == sellexitbar ? true : na, "Sell Exit", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell X", textcolor = color.white, size = size.tiny)



Plus de