Stratégie de croisement des moyennes mobiles

Auteur:ChaoZhang est là., Date: 2023-11-22 16:38:26
Les étiquettes:

img

Résumé

La stratégie de croisement des moyennes mobiles est une stratégie de trading quantitative simple mais efficace basée sur des moyennes mobiles. Elle utilise le croisement d'une ligne moyenne mobile rapide et d'une ligne moyenne mobile lente pour générer des signaux d'achat et de vente.

La logique de la stratégie

La logique de base de cette stratégie consiste à utiliser des moyennes mobiles pour juger des tendances du marché. Les moyennes mobiles ont elles-mêmes la fonction de filtrer le bruit aléatoire du marché. La moyenne mobile rapide peut répondre plus rapidement aux changements de prix et refléter les dernières tendances, tandis que la moyenne mobile lente répond plus lentement aux derniers changements de prix et représente les tendances à moyen et long terme.

Plus précisément, cette stratégie définit d'abord la moyenne mobile rapide sig1 et la moyenne mobile lente sig2. Ensuite, les points d'achat et de vente sont déterminés en fonction des relations croisées entre sig1 et sig2. Lorsque sig1 traverse sig2 depuis le bas, une condition longue longCondition est générée. Lorsque sig1 traverse sig2 depuis le haut, une condition courte shortCondition est générée.

Analyse des avantages

Les avantages de cette stratégie sont importants:

  1. La logique est simple, facile à comprendre et à mettre en œuvre
  2. Adaptation flexible des paramètres, peut être optimisée dans différentes conditions de marché
  3. Peut être combiné avec d'autres indicateurs pour filtrer les signaux et améliorer la stabilité
  4. Bon rendement, par exemple le combo EMA15-EMA30 peut atteindre un taux de gain de 83% sur les données quotidiennes EURCHF

Analyse des risques

Cette stratégie comporte également certains risques:

  1. Effets sévères de la scie, la configuration du stop loss est cruciale.
  2. Faibles performances sur les marchés de l'intervalle et latéraux
  3. Requiert des tests approfondis et un réglage des paramètres pour s'adapter à différents produits et délais

Mesures d'optimisation:

  1. Ajouter d'autres indicateurs pour le jugement pour éviter les échecs
  2. Ajuster les types et les paramètres d'autorisation de mise sur le marché pour les différents produits
  3. Optimiser les taux de stop loss et de profit pour contrôler les risques

Conclusion

En général, la stratégie de croisement de moyenne mobile est une stratégie quantitative avec une logique simple, une forte praticité et une stabilité.


/*backtest
start: 2023-11-14 00:00:00
end: 2023-11-16 04:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Simple yet effective MA cross strategy.
// You'll have to tune the parameters to get an optimal win ratio.
// If JPY or XAU or any other currency with pips defined as the 
// second decimal digit are involved, do not forget to set the respective flag on.
//
// Created by vitelot/yanez/Vts, who's the same fellow with different user names
// December 2018 -- Merry Xmas
//
strategy("MA cross strategy Vts", overlay=true, initial_capital=1000, currency="EUR", pyramiding=0)

yr  = input(2016, title="Starting year to analyse")
src = input(close, title="Source")
maType = input( defval="EMA", title="MA Type", options=["SMA","EMA","HMA","McG","WMA"])
//
isJPY = input(false, title="Is JPY or XAU involved?") // JPY and Gold have the pips defined as the 2 decimal digit

maPar1 = input(26, minval=1, title="MA fast period")
maPar2 = input(51, minval=2, title="MA slow period")

atrPar = input(14,minval=1, title="ATR period")
atrMulSL = input(1.5, title="SL ATR multiplicator")
atrMulTP = input(1.0, title="TP ATR multiplicator")

hma(sig, n) => // Hull moving average definition
    wma( 2*wma(sig,round(n/2))-wma(sig,n), round(sqrt(n)))

mcg(sig,length) => // Mc Ginley MA definition
    mg = 0.0
    mg := na(mg[1]) ? ema(sig, length) : mg[1] + (sig - mg[1]) / (length * pow(sig/mg[1], 4))

ma(t,sig,len) =>
    if t =="SMA"
        sma(sig,len)
    else
        if t == "EMA"
            ema(sig,len)
        else
            if t == "HMA"
                hma(sig,len)
            else
                if t == "McG" // Mc Ginley
                    mcg(sig,len)
                else
                    wma(sig,len)
                    
        
sig1 = ma(maType, src, maPar1)
sig2 = ma(maType, src, maPar2)

tickFactor = isJPY? 1e3: 1e5
sl = atrMulSL*atr(atrPar)*tickFactor
tp = atrMulTP*atr(atrPar)*tickFactor

plot(sig1, color=aqua, title="MA1", linewidth=2)
plot(sig2, color=orange, title="MA2", linewidth=2)

longCondition = crossunder(sig2, sig1) and year>=yr // change the >= to == if you like exact years not a range
if (longCondition)
    strategy.entry("Long", strategy.long, qty=1) // exit trade when SL and TP are hit
    strategy.exit("Exit Long", "Long", loss=sl, profit=tp)
if (crossunder(sig1, sig2)) // or when the short condition is met
    strategy.close("Long")

shortCondition = crossover(sig2,sig1) and year>=yr // change the >= to == if you like exact years not a range
if (shortCondition)
    strategy.entry("Short", strategy.short, qty=1)
    strategy.exit("Exit Short", "Short", loss=sl, profit=tp)
if (crossover(sig1,sig2))
    strategy.close("Short")


Plus de