Stratégie de croisement à double moyenne mobile

Auteur:ChaoZhang est là., Date: 2023-09-17 22:35:07 Je vous en prie.
Les étiquettes:

Cette stratégie génère des signaux de trading basés sur le croisement de deux moyennes mobiles avec des périodes différentes.

La logique de la stratégie

La stratégie permet aux utilisateurs de choisir le type et la durée des moyennes mobiles. Les types comprennent SMA, EMA, VWMA, etc. La longueur détermine la période des moyennes mobiles.

Deux moyennes mobiles sont calculées en fonction de la sélection de l'utilisateur. Si la ligne plus rapide traverse au-dessus de la ligne plus lente, une croix dorée est formée et un signal d'achat est généré. Si la ligne plus rapide traverse au-dessous de la ligne plus lente, une croix de mort est formée et un signal de vente est généré.

Lorsque le prix moyen à court terme est supérieur au prix moyen à long terme, il est considéré comme une tendance haussière et des positions longues doivent être prises.

Analyse des avantages

  • La logique de la stratégie est simple et claire, facile à comprendre et à mettre en œuvre.
  • Les moyennes mobiles peuvent filtrer efficacement le bruit du marché et identifier les tendances.
  • Le type et les paramètres de l'autorisation de mise sur le marché peuvent être choisis de manière flexible pour s'adapter à différents produits et délais.
  • Facile à optimiser en combinant différents indicateurs.

Analyse des risques

  • Peut générer de multiples faux signaux lorsque le marché varie.
  • Une sélection inappropriée des paramètres peut entraîner un mauvais rendement de la stratégie.
  • Les signaux sont en retard, incapables de capturer les points tournants en temps opportun.
  • Exposé à des chocs de prix soudains.

Les risques peuvent être gérés en optimisant les paramètres, en combinant d'autres indicateurs pour la génération de signaux, en mettant en œuvre un stop loss/take profit, etc.

Directions d'optimisation

  • Testez différents types et longueurs d'AM pour trouver les paramètres optimaux.
  • Ajouter d'autres indicateurs pour le filtrage des signaux, par exemple le volume, les indicateurs de volatilité.
  • Ajoutez une logique stop loss/take profit pour réduire le tirage.
  • Incorporer une évaluation des tendances pour éviter des conditions de marché inappropriées.
  • Optimiser la gestion de l'argent, comme la taille des positions, la budgétisation des risques.

Conclusion

La stratégie a une logique simple et claire de génération de signaux avec un croisement de deux MAs. Elle permet un réglage flexible des paramètres et des combinaisons avec d'autres stratégies d'optimisation, mais les risques de variation des marchés doivent être surveillés et la gestion de l'argent est cruciale.


/*backtest
start: 2023-09-09 00:00:00
end: 2023-09-13 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's MAs Tests", shorttitle = "MAs tests", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)


len = input(30, defval = 30, minval = 2, maxval = 1000, title = "MA length")
type = input(1, defval = 1, minval = 1, maxval = 7, title = "Type")
src = input(close, defval = close, title = "Source")

//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)

//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
kama = nz(kama[1]) + nsmooth * (src - nz(kama[1]))

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0

plot(ma, color = blue, linewidth = 3, transp = 0)

trend = low > ma ? 1 : high < ma ? -1 : trend[1]

longCondition = trend == 1 and trend[1] == -1
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = trend == -1 and trend[1] == 1
if (shortCondition)
    strategy.entry("Short", strategy.short)
    
    
    
    

Plus de