
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.
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.
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
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
Il existe un certain risque de faux signaux. Solution: ajouter d’autres indicateurs de filtrage en combinaison pour améliorer la fiabilité du signal
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.
/*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)