Stratégie de suivi des tendances basée sur les croisements de moyennes mobiles


Date de création: 2024-02-23 12:21:40 Dernière modification: 2024-02-23 12:21:40
Copier: 4 Nombre de clics: 619
1
Suivre
1617
Abonnés

Stratégie de suivi des tendances basée sur les croisements de moyennes mobiles

Aperçu

Cette stratégie permet de suivre la tendance des prix en calculant des moyennes mobiles de deux paramètres différents et en les comparant pour déterminer la direction de la tendance. Elle est considérée comme un signal positif lorsque la moyenne mobile rapide franchit la moyenne mobile lente par le bas et comme un signal négatif lorsque la moyenne mobile rapide franchit la moyenne mobile lente par le haut.

Principe de stratégie

La présente stratégie compare des moyennes mobiles avec deux ensembles de paramètres différents, le premier paramètre de la moyenne mobile étant défini par len1 et type1, et le second par len2 et type2. Les deux moyennes mobiles sont définies respectivement par len1 et len2 pour la longueur des périodes de la moyenne mobile et par type1 et type2 pour le type d’algorithme de la moyenne mobile.

Quand la moyenne mobile rapide brise la moyenne mobile lente par le bas pour former une fourche dorée, elle est considérée comme un signal positif. Quand la moyenne mobile rapide brise la moyenne mobile lente par le haut pour former une fourche morte, elle est considérée comme un signal négatif.

Lorsqu’un signal haussier est déclenché, si le paramètre needlong est vrai, le plus est effectué en fonction du nombre ou du pourcentage de la valeur de la position de défaut qty_of_equity. Lorsqu’un signal baissier est déclenché, le plus est effectué en fonction du nombre ou du pourcentage de la valeur de la position de défaut qty_of_equity si le paramètre needshort est vrai.

Avantages stratégiques

  1. Prise en charge de la combinaison de 7 types de moyennes mobiles, permettant une adaptation flexible aux conditions du marché
  2. Paramètres de deux moyennes mobiles personnalisables permettant de juger des tendances à long terme et à moyen terme
  3. Les règles de jugement des signaux stratégiques sont simples, claires et faciles à comprendre.
  4. Prise en charge des opérations de plus et de moins, permettant le suivi des tendances

Risques et solutions

  1. Les moyennes mobiles sont en retard et risquent de manquer le point de basculement Solution: raccourcissement approprié des cycles de la moyenne mobile, ou utilisation en combinaison avec d’autres indicateurs

  2. Ne convient pas aux marchés à forte volatilité et à fréquentes revers La solution: augmenter les conditions de filtrage pour éviter les transactions dans des conditions de choc

  3. Il existe un certain risque de faux signaux. Solution: ajouter d’autres indicateurs de filtrage en combinaison pour améliorer la fiabilité du signal

Direction d’optimisation

  1. Optimisation de la combinaison cyclique des moyennes mobiles, en testant séparément l’influence des paramètres à longue et à courte période sur la rentabilité de la stratégie
  2. Tester la performance de différents types de moyennes mobiles pour trouver le meilleur algorithme de moyenne mobile
  3. Ajout d’indicateurs tels que le volume de transactions VARIABLE ou le canal de Bryn pour une combinaison améliorant la qualité du signal
  4. Optimiser les stratégies de gestion des positions et améliorer la façon dont les positions fixes sont gérées

Résumer

Cette stratégie permet de déterminer la tendance des prix en comparant les croisements de deux moyennes mobiles et en effectuant les opérations de hausse et de baisse correspondantes, afin de profiter de la capture et du suivi des tendances. L’avantage de la stratégie est que les règles du signal sont simples et claires, que les paramètres sont réglables, qu’elles sont très applicables et qu’elles peuvent être ajustées de manière optimale à une variété d’environnements de marché. Il est nécessaire de prêter attention à la prévention du retard des moyennes mobiles et du risque de tendances choquantes.

Code source de la stratégie
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

needlong = input(true, "long")
needshort = input(true, "short")

len2 = input(15, defval = 15, minval = 2, maxval = 1000, title = "Fast MA length")
type2 = input(1, defval = 1, minval = 1, maxval = 7, title = "Fast MA Type")
src2 = input(close, defval = close, title = "Fast MA Source")

len1 = input(30, defval = 30, minval = 2, maxval = 1000, title = "Slow MA length")
type1 = input(1, defval = 1, minval = 1, maxval = 7, title = "Slow MA Type")
src1 = input(close, defval = close, title = "Slow MA Source")

col = input(false, defval = false, title = "Color of bar")

o = input(false, title = "1 SMA, 2 EMA, 3 VWMA, 4 DEMA, 5 TEMA, 6 KAMA, 7 Price Channel") 

//DEMA 1
dema1 = 2 * ema(src1, len1) - ema(ema(close, len1), len1)

//TEMA 1
xEMA1 = ema(src1, len1)
xEMA2 = ema(xEMA1, len1)
xEMA3 = ema(xEMA2, len1)
tema1 = 3 * xEMA1 - 3 * xEMA2 + xEMA3

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

//PriceChannel 1
lasthigh1 = highest(src1, len1)
lastlow1 = lowest(src1, len1)
center1 = (lasthigh1 + lastlow1) / 2

//DEMA 2
dema2 = 2 * ema(src2, len2) - ema(ema(close, len2), len2)

//TEMA 2
xEMA12 = ema(src2, len2)
xEMA22 = ema(xEMA12, len2)
xEMA32 = ema(xEMA22, len2)
tema2 = 3 * xEMA12 - 3 * xEMA22 + xEMA32

//KAMA 2
xvnoise2 = abs(src2 - src2[1])
nfastend2 = 0.20
nslowend2 = 0.05
nsignal2 = abs(src2 - src2[len2])
nnoise2 = sum(xvnoise2, len2)
nefratio2 = iff(nnoise2 != 0, nsignal2 / nnoise2, 0)
nsmooth2 = pow(nefratio2 * (nfastend2 - nslowend2) + nslowend2, 2) 
kama2 = nz(kama2[1]) + nsmooth2 * (src2 - nz(kama2[1]))

//PriceChannel 2
lasthigh2 = highest(src2, len2)
lastlow2 = lowest(src2, len2)
center2 = (lasthigh2 + lastlow2) / 2

//MAs
ma1 = type1 == 1 ? sma(src1, len1) : type1 == 2 ? ema(src1, len1) : type1 == 3 ? vwma(src1, len1) : type1 == 4 ? dema1 : type1 == 5 ? tema1 : type1 == 6 ? kama1 : type1 == 7 ? center1 : 0
ma2 = type2 == 1 ? sma(src2, len2) : type2 == 2 ? ema(src2, len2) : type2 == 3 ? vwma(src2, len2) : type2 == 4 ? dema2 : type2 == 5 ? tema2 : type2 == 6 ? kama2 : type2 == 7 ? center2 : 0
plot(ma1, color = blue, linewidth = 3, transp = 0)
plot(ma2, color = red, linewidth = 3, transp = 0)

//Signals
trend = ma2 > ma1 ? 1 : ma2 < ma1 ? -1 : trend[1]
up = trend == 1 and ((close < open and close[1] < open[1]) or col == false)
dn = trend == -1 and ((close > open and close[1] > open[1]) or col == false)

if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)