Stratégie de croisement des moyennes mobiles rapides et lentes

Auteur:ChaoZhang est là., Date: 2024-02-27 16h06h30
Les étiquettes:

img

Résumé

La stratégie de croisement des moyennes mobiles rapides et lentes est une stratégie simple basée sur des moyennes mobiles. Elle utilise deux moyennes mobiles, une rapide et une lente. Lorsque la moyenne mobile rapide franchit le niveau supérieur de la moyenne mobile lente depuis le bas, elle devient longue, ce qui indique que les prix peuvent augmenter. Lorsque la moyenne mobile rapide franchit le niveau inférieur de la moyenne mobile lente depuis le haut, elle quitte sa position, ce qui indique que les prix peuvent baisser. Cela peut servir d'indicateur pour prédire l'action future des prix.

Principaux

La stratégie utilise deux moyennes mobiles, une rapide et une lente. Plus précisément, les longueurs par défaut sont de 25 périodes pour la moyenne mobile rapide et 62 périodes pour la moyenne mobile lente. La stratégie permet la sélection de différents types de moyennes mobiles, y compris SMA, EMA, WMA, RMA et VWMA.

Lorsque la moyenne mobile rapide dépasse la moyenne mobile lente depuis le bas, cela indique que les prix à court terme ont commencé à briser les prix à long terme, ce qui est un signal de croix dorée typique, indiquant que les prix peuvent entrer dans une tendance haussière. La stratégie est longue à ce stade. Lorsque la moyenne mobile rapide dépasse la moyenne mobile lente d'en haut, cela indique que les prix à court terme ont commencé à décomposer les prix à long terme, ce qui est un signal de croix de mort, indiquant que les prix peuvent entrer dans une tendance baissière. La stratégie sort de sa position à ce stade.

En utilisant le croisement des moyennes mobiles rapides et lentes pour déterminer la tendance et la direction des prix, et en prenant les positions longues ou fermées correspondantes, les bénéfices peuvent être réalisés.

Analyse des avantages

La stratégie présente les avantages suivants:

  1. L'idée est simple et facile à comprendre et à mettre en œuvre
  2. Paramètres flexibles, avec des périodes et des types de moyennes mobiles personnalisables
  3. Indicateur fiable, précis pour déterminer les tendances des prix en utilisant la moyenne mobile croisée
  4. Automatisation réalisée, réduction de l'influence des facteurs psychologiques sans jugement manuel
  5. Applicable à plusieurs produits, peut être largement utilisé pour les indices, le forex, les crypto-monnaies, etc.
  6. Facile à optimiser, les paramètres peuvent être ajustés pour trouver de meilleures configurations
  7. Une forte extensibilité, pouvant être combinée à d'autres indicateurs ou stratégies

En résumé, avec le croisement de la moyenne mobile rapide et lente comme signal de trading principal, la stratégie a une forte capacité à juger des tendances futures des prix.

Analyse des risques

La stratégie comporte également des risques potentiels:

  1. Les signaux croisés peuvent donner de faux signaux, les prix ayant des corrections à court terme plutôt que des renversements de tendance à long terme
  2. Une sélection inappropriée des longueurs moyennes mobiles courtes et longues peut entraîner une négociation trop fréquente ou des opportunités manquées
  3. Les signaux croisés peuvent ne pas être significatifs lors de fortes fluctuations de prix
  4. Les coûts de négociation élevés peuvent nuire aux bénéfices si les signaux croisés déclenchent une négociation trop fréquente
  5. La forte extensibilité présente également des risques d'optimisation excessive

Pour contrôler et atténuer ces risques, les méthodes suivantes peuvent être adoptées:

  1. Utiliser d'autres indicateurs pour filtrer les signaux et éviter les faux signaux, par exemple les indicateurs de divergence prix-volume
  2. Ajuster les paramètres de la moyenne mobile pour trouver des combinaisons optimales et réduire les erreurs de négociation
  3. Arrêter temporairement la stratégie en cas de fortes fluctuations du marché
  4. Relâcher la plage d'arrêt des pertes de manière appropriée pour réduire les pertes inutiles
  5. Effectuer des tests de robustesse sur plusieurs produits afin d'évaluer les risques et de prévenir une optimisation excessive

Directions d'optimisation

Les principales orientations pour optimiser la stratégie sont les suivantes:

  1. Sélection des périodes pour les moyennes mobiles rapides et lentes: les paramètres par défaut peuvent ne pas être optimaux, différentes périodes peuvent être testées pour trouver la meilleure configuration

  2. Sélection des types de moyennes mobiles: plusieurs types sont fournis et peuvent être testés pour déterminer lequel fonctionne le mieux pour des produits spécifiques

  3. Combinaison avec d'autres indicateurs ou stratégies: peut essayer de combiner avec des indicateurs de volatilité, des indicateurs de volume-prix ou des stratégies de suivi des tendances pour améliorer les performances

  4. Optimisation adaptative des paramètres: permettre aux périodes de moyennes mobiles de s'ajuster automatiquement en fonction de la volatilité et de la liquidité du marché afin d'améliorer la stabilité

  5. Aide au modèle d'IA: utiliser des algorithmes d'apprentissage automatique pour analyser de grandes quantités de données et rechercher automatiquement des règles de trading optimales

Grâce à ces méthodes d'optimisation, on peut s'attendre à une amélioration supplémentaire de la rentabilité et de la stabilité de la stratégie.

Résumé

En résumé, la stratégie de croisement des moyennes mobiles rapides et lentes est une stratégie très pratique de suivi des tendances. Elle capture les schémas de changement de prix à travers différents délais, en utilisant le croisement des moyennes mobiles rapides de la moyenne mobiles lente pour déterminer la tendance et la direction probables des prix futurs. L'idée de stratégie est simple et claire, facile à comprendre et à mettre en œuvre, offre des paramètres personnalisables flexibles, et a également une grande fiabilité, un degré d'automatisation, une large applicabilité et une forte extensibilité. Bien sûr, il existe des risques de faux signaux, nécessitant une combinaison avec d'autres indicateurs pour obtenir un effet maximal. Avec des tests et une optimisation continus, la stratégie a le potentiel d'obtenir des profits stables décents dans le trading en direct.


/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Author @divonn1994

initial_balance = 100
strategy(title='Fast v Slow Moving Averages Strategy', shorttitle = 'Fast v Slow', overlay=true, pyramiding=0, default_qty_value=100, default_qty_type=strategy.percent_of_equity, precision=7, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent, initial_capital=initial_balance)

//Input for number of bars for moving average, Switch to choose moving average type, Display Options and Time Frame of trading----------------------------------------------------------------

fastBars = input.int(25, "Fast moving average length", minval=1)
slowBars = input.int(62, "Slow moving average length", minval=1)
strategy = input.string("EMA", "MA type", options = ["EMA", "VWMA", "SMA", "RMA", "WMA"])

redOn = input.string("On", "Red Background Color On/Off", options = ["On", "Off"], group='Display')
greenOn = input.string("On", "Green Background Color On/Off", options = ["On", "Off"], group='Display')
maOn = input.string("On", "Moving Average Plot On/Off", options = ["On", "Off"], group='Display')

startMonth = input.int(title='Start Month 1-12 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=12, group='Beginning of Strategy')
startDate = input.int(title='Start Date 1-31 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=31, group='Beginning of Strategy')
startYear = input.int(title='Start Year 2000-2100 (set any start time to 0 for furthest date)', defval=2011, minval=2000, maxval=2100, group='Beginning of Strategy')

endMonth = input.int(title='End Month 1-12 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=12, group='End of Strategy')
endDate = input.int(title='End Date 1-31 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=31, group='End of Strategy')
endYear = input.int(title='End Year 2000-2100 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=2100, group='End of Strategy')

//Strategy Calculations-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

inDateRange = true

maMomentum = switch strategy
    "EMA" => (ta.ema(close, fastBars) >= ta.ema(close, slowBars)) ? 1 : -1
    "SMA" => (ta.sma(close, fastBars) >= ta.sma(close, slowBars)) ? 1 : -1
    "RMA" => (ta.rma(close, fastBars) >= ta.rma(close, slowBars)) ? 1 : -1
    "WMA" => (ta.wma(close, fastBars) >= ta.wma(close, slowBars)) ? 1 : -1
    "VWMA" => (ta.vwma(close, fastBars) >= ta.vwma(close, slowBars)) ? 1 : -1
    =>
        runtime.error("No matching MA type found.")
        float(na)

fastMA = switch strategy
    "EMA" => ta.ema(close, fastBars)
    "SMA" => ta.sma(close, fastBars)
    "RMA" => ta.rma(close, fastBars)
    "WMA" => ta.wma(close, fastBars)
    "VWMA" => ta.vwma(close, fastBars)
    =>
        runtime.error("No matching MA type found.")
        float(na)
        
slowMA = switch strategy
    "EMA" => ta.ema(close, slowBars)
    "SMA" => ta.sma(close, slowBars)
    "RMA" => ta.rma(close, slowBars)
    "WMA" => ta.wma(close, slowBars)
    "VWMA" => ta.vwma(close, slowBars)
    =>
        runtime.error("No matching MA type found.")
        float(na)

//Enter or Exit Positions--------------------------------------------------------------------------------------------------------------------------------------------------------------------

if ta.crossover(maMomentum, 0)
    if inDateRange
        strategy.entry('long', strategy.long, comment='long')
if ta.crossunder(maMomentum, 0)
    if inDateRange
        strategy.close('long')

//Plot Strategy Behavior---------------------------------------------------------------------------------------------------------------------------------------------------------------------

plot(series = maOn == "On" ? fastMA : na, title = "Fast Moving Average", color = color.new(color.white,0), linewidth=2, offset=1)
plot(series = maOn == "On" ? slowMA : na, title = "Slow Moving Average", color = color.new(color.purple,0), linewidth=3, offset=1)
bgcolor(color = inDateRange and (greenOn == "On") and maMomentum > 0 ? color.new(color.green,75) : inDateRange and (redOn == "On") and maMomentum <= 0 ? color.new(color.red,75) : na, offset=1)

Plus de