Stratégie quantitative de croisement de moyenne mobile SMA à tendance à long terme

SMA EMA
Date de création: 2025-01-06 17:01:08 Dernière modification: 2025-01-06 17:01:08
Copier: 3 Nombre de clics: 432
1
Suivre
1617
Abonnés

Stratégie quantitative de croisement de moyenne mobile SMA à tendance à long terme

Aperçu

La stratégie est un système de trading quantitatif basé sur des signaux de croisement de moyennes mobiles simples (SMA) sur plusieurs périodes. Il se négocie principalement en identifiant des opportunités de repli à court terme dans le cadre d’une tendance haussière à long terme. La stratégie utilise des indicateurs SMA avec cinq périodes de 5 jours, 10 jours, 20 jours, 60 jours et 120 jours pour juger les tendances du marché et les opportunités de trading à travers la relation de position et les signaux de croisement des moyennes mobiles.

Principe de stratégie

La logique fondamentale de la stratégie comprend les éléments clés suivants :

  1. La tendance à long terme peut être jugée par la relation de position relative entre la moyenne mobile SMA20 et la moyenne mobile SMA60. Lorsque la moyenne mobile SMA20 est supérieure à la moyenne mobile SMA60, cela confirme que le marché est dans une tendance à la hausse.
  2. Dans le but de confirmer la tendance haussière à long terme, un signal d’achat est déclenché lorsque le SMA5 à court terme rebondit de dessous le SMA20 vers le dessus. Cela suggère que le marché rebondit après un repli à court terme dans une tendance haussière.
  3. Lorsque le SMA20 croise le SMA5, un signal de fermeture est déclenché. Cela indique que la dynamique haussière à court terme s’est affaiblie et pourrait entrer dans une période d’ajustement.
  4. La stratégie comprend également une fonction de filtre temporel, qui peut limiter la plage temporelle du backtest et augmenter la flexibilité de la stratégie.

Avantages stratégiques

  1. La logique de la stratégie est claire et simple, facile à comprendre et à mettre en œuvre, et n’implique pas de processus de calcul complexes.
  2. En utilisant plusieurs moyennes mobiles sur plusieurs périodes de manière coordonnée, nous pouvons filtrer efficacement le bruit du marché et améliorer la fiabilité des signaux de trading.
  3. La stratégie se concentre sur les opportunités de repli dans les marchés en tendance, ce qui est conforme au concept de base du « trading de tendance ».
  4. L’utilisation du SMA au lieu de l’EMA réduit la sensibilité aux variations de prix et réduit les faux signaux.
  5. La logique d’entrée et de sortie est claire, ce qui facilite l’exécution et le contrôle des risques.

Risque stratégique

  1. Le système de moyenne mobile présente des décalages, ce qui peut conduire à des délais d’entrée et de sortie sous-optimaux.
  2. Dans un marché volatil, les croisements fréquents des moyennes mobiles peuvent générer trop de faux signaux.
  3. La stratégie ne dispose pas d’un mécanisme de filtrage de la volatilité et peut être confrontée à des risques de baisse plus importants pendant les périodes de forte volatilité.
  4. Sans tenir compte de la coopération d’autres indicateurs techniques tels que le volume des transactions, la fiabilité du signal doit être améliorée.
  5. Les paramètres de moyenne mobile fixes peuvent ne pas convenir à tous les environnements de marché.

Orientation de l’optimisation de la stratégie

  1. Introduisez l’indicateur ATR pour filtrer la volatilité et évitez de trader lorsque la volatilité est trop élevée.
  2. Ajoutez un mécanisme de confirmation de volume pour améliorer la fiabilité des signaux de trading.
  3. Développer un mécanisme de cycle de moyenne mobile adaptatif pour permettre à la stratégie de mieux s’adapter aux différents environnements de marché.
  4. Ajoutez un filtre de force de tendance, tel que l’indicateur ADX, pour garantir le trading dans des tendances fortes.
  5. Améliorer le mécanisme de stop-loss, par exemple en ajoutant un stop suiveur, pour mieux contrôler les risques.

Résumer

Cette stratégie utilise des moyennes mobiles SMA sur plusieurs périodes pour créer un système de trading qui se concentre sur la capture d’opportunités de repli dans les tendances haussières à long terme. La conception de la stratégie est concise et pratique, avec une bonne compréhensibilité et une bonne facilité de mise en œuvre. En introduisant des mesures d’optimisation telles que le filtrage de la volatilité et la confirmation du volume, la robustesse et la fiabilité de la stratégie devraient être encore améliorées.

Code source de la stratégie
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Long-Term Growing Stock Strategy", overlay=true)
// Date Range
// STEP 1. Create inputs that configure the backtest's date range
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2014"),title="Start Date", group="Backtest Time Period",tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " +"zone of the chart or of your computer.")
backtestEndDate = input(timestamp("31 Dec 2024"), title="End Date", group="Backtest Time Period")
// STEP 2. See if current bar falls inside the date range
inTradeWindow = true


// Calculate EMAs
// ema20 = ta.ema(close, ema20_length)
// ema60 = ta.ema(close, ema60_length)
// ema120 = ta.ema(close, ema120_length)
sma5 = ta.sma(close, 5)
sma10 = ta.sma(close, 10)
sma20 = ta.sma(close, 20)
sma60 = ta.sma(close, 60)
sma120 = ta.sma(close, 120)

// Long-term growth condition: EMA 20 > EMA 60 > EMA 120
longTermGrowth = sma20 > sma60
//  and ema60 > ema120

// Entry condition: Stock closes below EMA 20 and then rises back above EMA 10

// entryCondition = ta.crossover(close, ema20) or (close[1] < ema20[1] and close > ema20)
entryCondition =  sma5[1] <= sma20[1] and sma5 > sma20
// ta.crossover(sma5, sma20)

// Exit condition: EMA 20 drops below EMA 60
// exitCondition = ema5 < ema60 or (year == 2024 and month == 12 and dayofmonth == 30)
exitCondition = ta.crossover(sma20, sma5)

// Execute trades
if entryCondition and inTradeWindow
    strategy.entry("Long Entry", strategy.long)

if exitCondition and inTradeWindow
    strategy.close("Long Entry")
// plotchar(true, char="sma5: " + str.tostring(sma5))
// plotchar(true, char="sma5: " + sma20)
// label.new(x=bar_index, y=high + 10, text="SMA 5: " + str.tostring(sma5), color=color.blue, style=label.style_label_down, textcolor=color.white, size=size.small)
// label.new(x=bar_index, y=low, text="SMA 20: " + str.tostring(sma20), color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)


// x = time + (time - time[1]) * offset_x

//     var label lab = na
//     label.delete(lab)
//     lab := label.new(x=x, y=0, text=txt, xloc=xloc.bar_time, yloc=yloc.belowbar, color=color.red, textcolor=color.black, size=size.normal, style=label.style_label_up)
//     label.set_x(lab, x)



// Plot EMAs for visualization
// plot(ema20, color=color.red, title="EMA 20")
// plot(ema60, color=color.green, title="EMA 60")
// plot(ema120, color=color.blue, title="EMA 120")