Stratégie de rupture à triple EMA

Auteur:ChaoZhang est là., Date: le 28 décembre 2023
Les étiquettes:

img

Résumé

La stratégie Triple EMA Crossover Breakout utilise des indicateurs de moyenne mobile exponentielle triple (EMA) pour déterminer la direction de la tendance du marché et entrer aux points de rupture de tendance.

La logique de la stratégie

La stratégie repose principalement sur les principes suivants:

  1. Utiliser trois EMA avec des périodes différentes (200 jours, 50 jours, 20 jours) pour déterminer les principales tendances du marché à moyen et court terme.

  2. Lorsque l'EMA à court terme (20 jours) dépasse l'EMA à moyen terme (50 jours), un signal d'achat est généré.

  3. Combinez les modèles de bougies pour vérifier la fiabilité du signal. Seulement lorsque le prix de clôture de la deuxième bougie est supérieur (inférieur) au prix élevé (faible) de la bougie précédente, la rupture est considérée comme fiable.

  4. Définissez des niveaux de stop loss et de profit pour limiter les risques au-delà des fluctuations raisonnables des prix.

Analyse des avantages

  1. L'utilisation de plusieurs EMA améliore la précision du jugement de tendance.

  2. Filtrer les faux signaux avec des modèles de chandeliers évite les risques commerciaux inutiles.

  3. Stop loss et take profit contrôlent efficacement les pertes d'une seule transaction.

Analyse des risques

  1. Dans les marchés à tendance variable, les EMA peuvent générer des signaux faux excessifs et échouer à déterminer la direction du marché.

  2. Le système d'indicateur unique a une capacité limitée dans des situations de marché complexes.

  3. Elle ne tient pas compte des coûts commerciaux qui pourraient entraîner une rentabilité réduite sur les marchés à redevances élevées.

Optimisation

  1. Introduire d'autres indicateurs tels que le MACD et le KDJ pour former un système combiné et améliorer la précision des jugements.

  2. Optimiser les paramètres par le backtesting pour des symboles et des délais spécifiques afin de mieux adapter la stratégie.

  3. Augmenter le volume des transactions pour éviter les faux signaux à faible volume.

Conclusion

La Triple EMA Crossover Breakout Strategy possède une logique claire et facile à comprendre pour déterminer les tendances du marché et trouver le moment d'entrée en utilisant les croisements EMA. Mais elle présente également certaines limitations dans le traitement de situations de marché complexes. Il est recommandé de combiner avec d'autres indicateurs et d'optimiser les paramètres pour s'adapter à des environnements de trading plus divers.


/*backtest
start: 2022-12-21 00:00:00
end: 2023-12-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("GHG RETRACEMENT MODE 1", overlay=true)

entryLevel1 = input(0.5, "ENTRY LEVEL 1")
entryLevel2 = input(0.25, "ENTRY LEVEL 2")
entryLevel3 = input(0.0, "ENTRY LEVEL 3")

stopLevel = input(-0.35, "STOP LEVEL")
tpLevel = input(0.88, "TP LEVEL")
dontUseEma = input(false, "Don't Use EMA")


get_level(level, level100, level0) =>
    level * (level100 - level0) + level0

buySignal = close[2] < open[2] and close[1] > open[1] and close[0] > open[0] and high[0] > open[2] and high[1] < high[2]
sellSignal = close[2] > open[2] and close[1] < open[1] and close[0] < open[0] and low[0] < open[2] and low[1] > low[2]

if buySignal and (close[0] > ta.ema(close, 200) or dontUseEma)
    l = label.new(bar_index, na)
    entryPrice1 = get_level(entryLevel1, high[0], low[2])
    entryPrice2 = get_level(entryLevel2, high[0], low[2])
    entryPrice3 = get_level(entryLevel3, high[0], low[2])
    
    exitPrice = get_level(tpLevel, high[0], low[2])
    stopPrice = get_level(stopLevel, high[0], low[2])
    
    strategy.order("BUY 1", strategy.long, comment="BUY 1", limit=entryPrice1)
    strategy.exit("exit", "BUY 1", limit=high[0], stop=stopPrice)
    strategy.order("BUY 2", strategy.long, comment="BUY 2", limit=entryPrice2)
    strategy.exit("exit", "BUY 2", limit=high[0], stop=stopPrice)

    label.set_text(l, "Buy => " + str.tostring(close[2]) + "\nSL=> " + str.tostring(stopPrice) + "\nTP => " + str.tostring(exitPrice) )
    label.set_color(l, color.green)
    label.set_yloc(l, yloc.belowbar)
    label.set_style(l, label.style_label_up)
    
if sellSignal and (close[0] < ta.ema(close, 200) or dontUseEma)
    a = label.new(bar_index, na)
    entryPrice1 = get_level(entryLevel1, low[0], high[2])
    entryPrice2 = get_level(entryLevel2, low[0], high[2])
    entryPrice3 = get_level(entryLevel3, low[0], high[2])
    
    exitPrice = get_level(tpLevel, low[0], high[2])
    stopPrice = get_level(stopLevel,low[0], high[2])
    
    strategy.order("SELL 1", strategy.short, comment="SELL 1", limit=entryPrice1)
    strategy.exit("exit", "SELL 1", limit=low[0], stop=stopPrice) 
    strategy.order("SELL 2", strategy.short, comment="SELL 2", limit=entryPrice2)
    strategy.exit("exit", "SELL 2", limit=low[0], stop=stopPrice) 

    label.set_text(a,"Sell => " + str.tostring(close[2]) + "\nSL=> " + str.tostring(stopPrice) + "\nTP => " + str.tostring(exitPrice) )
    label.set_color(a, color.red)
    label.set_yloc(a, yloc.abovebar)
    label.set_style(a, label.style_label_down)
   


Plus de