Stratégie quantitative de combinaison des EMA dynamiques mobiles

Auteur:ChaoZhang est là., Date: 2024-01-22 12:34:33 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie est une stratégie de combinaison de moyennes mobiles dynamiques qui fonctionne sur plusieurs délais. Elle utilise des moyennes mobiles exponentielles (EMA) de différentes longueurs pour le jugement de la tendance et les signaux d'entrée / sortie.

La logique de la stratégie

La stratégie utilise 7 EMA se déplaçant à des vitesses différentes, de la plus rapide à la plus lente: EMA à 3 périodes, EMA à 15 périodes, EMA à 19 périodes, EMA à 50 périodes, EMA à 100 périodes, EMA à 150 périodes et EMA à 200 périodes. Ces 7 EMA sont disposées dans une formation trapézoïdale.

En outre, la stratégie intègre également la rupture des prix des hauts récents et la rupture des prix des hauts historiques pour confirmer les signaux longs, et utilise la rupture des bas récents et la rupture des prix des hauts historiques pour confirmer les signaux courts.

Les règles de sortie imposent au prix de clôture de briser successivement les EMA plus rapides vers les EMA plus lentes, ce qui indique un renversement de tendance.

Analyse des avantages

  • L' utilisation de 7 EMA de vitesses différentes formant une forme trapézoïde permet d' identifier plus précisément les points de renversement de tendance
  • L'intégration de nouveaux hauts/baissés et de hauts/baissés historiques évite de faux signaux de rupture
  • Les règles strictes de double sortie permettent un stop loss rapide

Analyse des risques

  • Aucun mécanisme de stop loss ne conduit à un potentiel de pertes énorme
  • Les règles de double sortie peuvent entraîner une sortie anticipée
  • Trop d'EMA plus rapides génèrent plus de bruit et augmentent la fréquence des transactions et le coût des commissions

Les solutions:

  1. Ajouter un pourcentage fixe de stop-loss et un stop-loss de suivi
  2. Ajuster les longueurs de la EMA de sortie pour réduire la rigueur des règles de double sortie
  3. Augmenter les longueurs de la EMA pour réduire la fréquence des opérations

Directions d'optimisation

  • Ajouter des mécanismes de stop-loss tels que le stop-loss à pourcentage fixe, le stop-loss à la traîne, etc.
  • Optimiser les paramètres EMA pour trouver la meilleure combinaison
  • Ajouter d'autres indicateurs tels que MACD, ATR, KDJ etc. pour filtrer les signaux
  • Combiner avec des stratégies d'intervalle/canal pour détecter les mouvements secondaires des tendances
  • Considérez l'ajout de règles de dimensionnement de la position

Conclusion

La stratégie a une logique claire consistant à utiliser 7 EMA de vitesses différentes pour déterminer les tendances et des règles de sortie doubles pour détecter les inversions. Mais il n'existe pas de mécanisme de stop loss entraînant un risque de perte énorme, et il peut sortir prématurément. Des améliorations peuvent être apportées dans des aspects tels que l'ajout de stop loss, l'ajustement des paramètres, le filtrage des indicateurs pour en faire un système de trading solide.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Crypto MAX Trend", shorttitle="Crypto MAX", overlay = true  )
Length = input(3, minval=1)
Length2 = input(15, minval=1)
Length3 = input(19, minval=1)
//Length33 = input(25, minval=1)
Length4 = input(50, minval=1)
Length44 = input(100, minval=1)
Length5 = input(150, minval=1)
Length6 = input(171, minval=1)
Length66 = input(172, minval=1)

xPrice = input(close)

xEMA1 = ema(xPrice, Length)
xEMA2 = ema(xPrice, Length2)
xEMA3 = ema(xPrice, Length3)
//xEMA33 = ema(xPrice, Length33)
xEMA4 = ema(xPrice, Length4)
xEMA44 = ema(xPrice, Length44)
xEMA5 = ema(xPrice, Length5)
xEMA6 = ema(xPrice, Length6)
xEMA66 = ema(xPrice, Length66)

// plot(xEMA1, color=color.white)
// plot(xEMA2, color=color.red)
// plot(xEMA3, color=color.green)
// plot(xEMA4, color=color.purple)
// plot(xEMA44, color=color.gray)
// plot(xEMA5, color=color.maroon)
// plot(xEMA6, color=color.blue)
// plot(xEMA66, color=color.orange)


fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true



long = close >  xEMA1 and xEMA1 > xEMA2 and xEMA2 > xEMA3  and xEMA3 > xEMA4  and xEMA4 > xEMA44 and xEMA44 > xEMA5 and xEMA5> xEMA6  and xEMA6> xEMA66  and close > high[1] and high[1] > high[2] and close > high[3] and close > high[4] and close > high[5] and high[5] > high[6] and time_cond
short = close < xEMA1 and xEMA1 < xEMA2 and xEMA2 < xEMA3  and xEMA3 < xEMA4  and xEMA4 < xEMA44 and xEMA44 < xEMA5 and xEMA5< xEMA6 and  xEMA6< xEMA66 and close < low[1] and low[1] < low[2] and close < low[3] and close < low[4] and close< low[5] and low[5] < low[6] and time_cond

notlong = close < xEMA1
strategy.entry("long",1,when=long)
strategy.entry("short",0,when=short)


exitlong1 = xEMA1 < xEMA2 and xEMA2 < xEMA3 and xEMA3 < xEMA4
exitlong2 = crossunder(low,xEMA1) and crossunder(low,xEMA2) and crossunder(low,xEMA3) and crossunder(low,xEMA4)
exitshort1 = xEMA1 > xEMA2 and xEMA2 > xEMA3 and xEMA3 > xEMA4
exitshort2 = crossover(high,xEMA1) and crossover(high,xEMA2) and crossover(high,xEMA3) and crossover(high,xEMA4)

strategy.close("long", when = exitlong1 or exitlong2)
strategy.close("short", when= exitshort1 or exitshort2) 






 


Plus de