Stratégie de suivi de la tendance des moyennes mobiles doubles

Auteur:ChaoZhang est là., Date: 2024-01-24 11h28 et 57 min
Les étiquettes:

img

Résumé

La stratégie de suivi de tendance des moyennes mobiles doubles est une stratégie qui utilise une combinaison de moyennes mobiles rapides et lentes pour déterminer la tendance du marché et génère des signaux de trading lorsque la direction de la tendance change.

La logique de la stratégie

La stratégie de suivi de tendance de la moyenne mobile double utilise deux moyennes mobiles - une moyenne mobile rapide (5 périodes) et une moyenne mobile lente (21 périodes). La moyenne mobile rapide est utilisée pour générer des signaux de trading tandis que la moyenne mobile lente est utilisée pour déterminer la direction de la tendance du marché.

La stratégie utilise également un indicateur de canal de prix pour aider à déterminer la tendance. Le canal de prix est déterminé par les moyennes mobiles des prix les plus élevés et les plus bas. Lorsque les prix traversent le canal, cela indique un renversement de tendance. Cette stratégie utilise deux canaux de prix avec des périodes de 21 et 5 respectivement, correspondant aux périodes MA.

Lors de la détermination des signaux d'achat et de vente, la stratégie exige que des bougies rouges/vertes consécutives apparaissent (réglables par l'utilisateur) comme condition de filtre supplémentaire.

En résumé, la logique pour déterminer la tendance de cette stratégie est la suivante:

  1. Utiliser le canal de prix pour déterminer la direction de la tendance sur une période plus longue
  2. Utiliser une MA rapide pour déterminer la tendance à court terme et générer des signaux de trading
  3. Combinez un filtre de bougie supplémentaire pour éviter de mauvais signaux lors des consolidations

En évaluant la tendance à travers les délais, le bruit du marché peut être filtré efficacement et la direction de la tendance confirmée.

Analyse des avantages

La stratégie de suivi de la tendance des doubles moyennes mobiles présente les avantages suivants:

  1. Le double système d'AM permet d'identifier efficacement les tendances et de déterminer la direction principale de la tendance
  2. Le MA rapide génère des signaux de trading pour capturer en temps opportun les renversements de tendance
  3. Le canal de prix détermine la tendance sur une période plus longue afin d'éviter d'être induit en erreur par le bruit du marché à court terme
  4. Les filtres à bougies rouge/vert réduisent la probabilité de signaux erronés lors des consolidations
  5. Les paramètres réglables permettent une optimisation pour différents marchés afin d'améliorer la robustesse
  6. Des stratégies de stop loss peuvent être ajoutées pour contrôler efficacement le risque par transaction

En conclusion, cette stratégie présente une stabilité globale relativement bonne et présente de bons résultats sur des marchés où la tendance est forte.

Analyse des risques

La stratégie de suivi de la tendance des moyennes mobiles doubles comporte également certains risques, principalement:

  1. Lors d'une consolidation prolongée, il est susceptible de générer des signaux erronés et de subir de petites pertes consécutives
  2. Des paramètres incorrects peuvent retarder les signaux de trading et manquer les meilleures opportunités d'entrée.
  3. Le risque par transaction est difficile à contrôler sans stop loss efficace

Les mesures correspondantes visant à réduire les risques comprennent:

  1. Ajuster les paramètres du filtre à bougies rouge/vert pour réduire la fréquence des transactions sur les marchés en consolidation
  2. Optimiser les paramètres de MA rapides pour assurer la génération rapide de signaux de négociation
  3. Ajouter un stop loss en mouvement ou en pourcentage à un contrôle strict par perte de transaction

Directions d'optimisation

La stratégie peut être encore optimisée, principalement dans les domaines suivants:

  1. Incorporer des indicateurs de volatilité tels que ATR pour ajuster automatiquement le stop loss
  2. Utiliser l'apprentissage automatique pour optimiser automatiquement les paramètres
  3. Ajoutez des modules de réseau neuronal pour déterminer la direction de la tendance
  4. Construire des systèmes d'ensemble combinant plusieurs indicateurs et filtres

Ces orientations d'optimisation peuvent encore améliorer la stabilité, l'adaptabilité et le niveau d'intelligence de la stratégie.

Conclusion

En conclusion, la stratégie de suivi de tendance des moyennes mobiles doubles est une stratégie de suivi de tendance relativement robuste. Elle combine les moyennes mobiles et les canaux de prix pour déterminer la direction et la force de la tendance, générant des signaux de trading avec le MA rapide. Les filtres de bougies supplémentaires aident également à éviter les mauvais signaux. Les paramètres réglables permettent l'adaptation à différents environnements de marché.


/*backtest
start: 2023-12-24 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs Strategy v1.8", shorttitle = "Trend MAs str 1.8", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, "long")
needshort = input(true, "short")
needstops = input(false, "stops")
stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %")
useohlc4 = input(false, defval = false, title = "Use OHLC4")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
slowlen = input(21, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
needbg = input(false, defval = false, title = "Need trend Background?")
needarr = input(false, defval = false, title = "Need entry arrows?")

src = useohlc4 == true ? ohlc4 : close
fastsma = ema(src, 5)

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

//PriceChannel 2
lasthigh2 = highest(src, fastlen)
lastlow2 = lowest(src, fastlen)
center2 = (lasthigh2 + lastlow2) / 2

//Trend
//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
//trend = low > ma and low[1] > ma[1] and low[2] > ma[2] ? 1 : high < ma and high[1] < ma[1] ? -1 : trend[1]

trend1 = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend1[1]
trend2 = low > center2 and low[1] > center2[1] ? 1 : high < center2 and high[1] < center2[1] ? -1 : trend1[1]
trend = trend1 == 1 and trend2 == 1 ? 1 : trend2 == -1 and trend2 == -1 ? -1 : trend[1]

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0

//Signals
up = trend == 1 and (low < center2 or usefastsma == false) and (redbars == 1) ? 1 : 0
dn = trend == -1 and (high > center2 or usefastsma == false) and (greenbars == 1) ? 1 : 0

//Lines
colorfastsma = usefastsma == true ? red : na
plot(fastsma, color = colorfastsma, title = "Fast MA")
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")
plot(center2, color = red, linewidth = 3, transp = 0, title = "PriceChannel 2")

//Arrows
plotarrow(up == 1 and needarr == true ? 1 : 0, colorup = black, colordown = black, transp = 0)
plotarrow(dn == 1 and needarr == true ? -1 : 0, colorup = black, colordown = black, transp = 0)

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 90)

//Alerts
alertcondition(up == 1, title='buy', message='Uptrend')
alertcondition(dn == 1, title='sell', message='Downtrend')

//Trading
stoplong = up == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]

longCondition = up == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
    strategy.exit("Stop Long", "Long", stop = stoplong)

shortCondition = dn == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    strategy.exit("Stop Short", "Short", stop = stopshort)

Plus de