Tendance à la suite d'une stratégie basée sur le croisement des moyennes mobiles

Auteur:ChaoZhang est là., Date: 2024-02-23 12h21h40
Les étiquettes:

img

Résumé

Cette stratégie détermine la direction de la tendance des prix en calculant deux moyennes mobiles avec des paramètres différents et en comparant leurs situations de croisement, afin de mettre en œuvre la tendance après la négociation. Lorsque la moyenne mobile rapide traverse la moyenne mobile lente d'en bas, elle est jugée comme un signal haussier. Lorsque la moyenne mobile rapide traverse la moyenne mobile lente d'en haut, elle est jugée comme un signal baissier. Cette stratégie peut atteindre le jugement des tendances de différents cycles en ajustant les paramètres.

Principe de stratégie

Cette stratégie utilise deux ensembles de moyennes mobiles avec des paramètres différents pour la comparaison. Le premier paramètre de moyenne mobile est défini par len1 et type1, et le deuxième paramètre de moyenne mobile est défini par len2 et type2.

Lorsque la moyenne mobile rapide dépasse la moyenne mobile lente pour former une croix dorée, elle est jugée comme un signal haussier.

En fonction de la direction du signal de croisement, des positions longues ou courtes seront exécutées. Lorsqu'un signal haussier est déclenché, si le paramètre needlong est vrai, une position longue sera ouverte avec la quantité default_qty_value ou percentage_of_equity. Lorsqu'un signal baissier est déclenché, si le paramètre needshort est vrai, une position courte sera ouverte avec la quantité default_qty_value ou percentage_of_equity.

Les avantages

  1. Soutenir la combinaison de 7 types différents de moyennes mobiles pour s'adapter de manière flexible aux conditions du marché
  2. Personnaliser les paramètres de deux moyennes mobiles pour juger des tendances à long terme et à moyen et court terme
  3. Règles simples et claires de jugement des signaux, faciles à comprendre et à mettre en œuvre
  4. Soutenir les positions longues et courtes, peut effectuer des transactions de suivi des tendances

Risques et solutions

  1. Les moyennes mobiles ont des propriétés de retard et peuvent manquer les points d'inversion des prix
    Solution: raccourcir de manière appropriée les cycles des moyennes mobiles ou les utiliser en combinaison avec d'autres indicateurs

  2. Ne convient pas aux marchés à forte volatilité et à inversions fréquentes
    Solution: ajouter des conditions de filtrage pour éviter de négocier sur des marchés oscillants

  3. Il y a certains risques de faux signaux
    Solution: ajouter d'autres indicateurs de filtrage pour la combinaison afin d'améliorer la fiabilité du signal

Directions d'optimisation

  1. Optimiser la combinaison de cycles de moyennes mobiles et tester l'impact des paramètres de cycle long et court sur le rendement de la stratégie
  2. Testez la performance de différents types de moyennes mobiles pour trouver l'algorithme de moyenne mobile optimale
  3. Ajouter la variable de volume de négociation ou les bandes de Bollinger pour une combinaison afin d'améliorer la qualité du signal
  4. Optimiser la stratégie de gestion des positions afin d'améliorer l'approche pourcentage_des_actifs_de_positions fixes

Résumé

Cette stratégie juge la tendance des prix en comparant les croisements de deux moyennes mobiles et en effectuant des opérations longues et courtes correspondantes pour capturer et tirer profit des tendances. L'avantage est que les règles du signal sont simples et claires, les paramètres sont réglables, l'applicabilité est forte et elle peut être optimisée et ajustée pour divers environnements de marché.


/*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)

Plus de