Stratégie du ruban de moyenne mobile

Auteur:ChaoZhang est là., Date: 2023-12-18 à 12h29
Les étiquettes:

img

Résumé

La stratégie du ruban de moyenne mobile est une stratégie de suivi de tendance basée sur plusieurs moyennes mobiles. Elle surveille simultanément les moyennes mobiles rapides et lentes et génère des signaux de trading lorsque les prix franchissent le ruban de moyenne mobile.

La logique de la stratégie

La stratégie utilise 5 moyennes mobiles rapides (5-, 8-, 13-, 20 et 30 jours) et 4 moyennes mobiles lentes (45, 70-, 105 et 150 jours). Les lignes rapides forment un ruban de moyenne mobile interne et les lignes lentes forment un ruban de moyenne mobile externe. Un signal d'achat est généré lorsque les prix dépassent le ruban interne, et un signal de vente est généré lorsque les prix dépassent le ruban intérieur. Pour filtrer les fausses ruptures, il faut que les prix traversent le ruban interne pendant 3 bougies consécutives, et la plupart des moyennes mobiles rapides traversent également de manière synchrone avant de générer des signaux de trading.

En outre, la stratégie évalue également les tendances à long terme. Elle ne considère que la génération de signaux d'achat lorsque les prix sont supérieurs à la moyenne mobile de 200 jours. Au contraire, elle ne considère que la génération de signaux de vente lorsque les prix dépassent la moyenne mobile de 200 jours. En déterminant les tendances à long terme, elle évite d'être piégé lors des consolidations.

Analyse des avantages

La stratégie présente les avantages suivants:

  1. La combinaison de rubans de moyenne mobile interne et externe avec des lignes rapides et lentes fonctionne bien pour identifier les tendances à moyen et long terme.

  2. Le mécanisme de rupture consécutive peut filtrer efficacement les fausses ruptures.

  3. L'utilisation de la ligne de 200 jours pour déterminer permet d'ouvrir des positions uniquement lorsque les tendances commencent à s'inverser.

  4. Les moyennes mobiles elles-mêmes ont une capacité de suivi de tendance, tandis que la combinaison d'indicateurs de surachat/survente pour définir des points de stop-loss assure un bon contrôle des risques.

Analyse des risques

Les principaux risques de cette stratégie sont les suivants:

  1. Lorsque de fausses évasions se produisent, la stratégie ne peut pas éviter complètement les pertes.

  2. Risque de perte lors de tendances variables Lorsque le marché varie pendant de longues périodes, les points de stop-loss peuvent être fréquemment atteints, ce qui entraîne des pertes plus importantes.

  3. Risque d'optimisation des paramètres: des paramètres de moyenne mobile incorrects peuvent également entraîner des erreurs dans les signaux de trading, entraînant des pertes plus importantes.

Les solutions correspondantes sont:

  1. Élargir les points de stop-loss de manière appropriée pour donner aux prix suffisamment d'espace pour se déplacer ou adopter une méthode de stop-loss de trailing pour permettre à la ligne de stop-loss de suivre les prix.

  2. Ajouter des indicateurs de jugement de tendance pour éviter d'établir des positions sans direction pendant les consolidations, comme le filtrage avec le DMI, le MACD et d'autres indicateurs.

  3. Utilisez des méthodes de backtesting historique et d'optimisation de paramètres pour sélectionner les meilleures combinaisons de paramètres.

Directions d'optimisation

La stratégie peut être optimisée dans les aspects suivants:

  1. Optimiser les paramètres de moyenne mobile pour sélectionner les meilleurs nombres de cycle. Exécuter des backtests de moyennes mobiles avec différents nombres de cycle pour trouver la combinaison optimale de paramètres.

  2. Ajoutez des indicateurs de jugement de tendance pour le filtrage. tels que RSI pour les surachats / survente, Bollinger Bands pour les ruptures de canal, etc. Évitez d'établir des positions aveuglément lorsque les tendances ne sont pas claires.

  3. Optimiser dynamiquement les paramètres des moyennes mobiles en fonction de l'évolution des conditions et de la volatilité du marché, afin qu'ils s'adaptent mieux à l'état actuel du marché.

  4. Combiner des modèles d'apprentissage automatique pour juger des probabilités de tendance. Établir des modèles de probabilité pour évaluer les chances d'une rupture réussie, aidant le système de décision à juger le moment d'entrée idéal.

  5. Optimiser les stratégies de stop loss pour un meilleur suivi des prix.

Résumé

La stratégie de bande de moyenne mobile est l'une des stratégies les plus courantes de suivi des tendances. Elle combine des lignes rapides et lentes pour juger des tendances à moyen et long terme, et définit des mécanismes de rupture consécutifs pour décider des entrées.


//@version=4
strategy(title="Moving Average Ribbon", shorttitle="MA Ribbon", overlay=true)
src = input(close, type=input.source, title="Source")
matype = input(title="Input one in lowercase: sma, ema, wma, trima, zlema, dema, tema, or hma", type=input.string, defval="trima")
// possible values: sma, ema, wma, trima, zlema, dema, tema, hma (hull ma)



trima(_src, _len) =>
    sma(sma(_src, _len), _len)
hma(_src, _len) =>
    wma(2 * wma(_src, _len / 2) - wma(_src, _len), round(sqrt(_len)))
dema(_src, _len) =>
    2 * ema(_src, _len) - ema(ema(_src, _len), _len)
tema(_src, _len) =>
    3 * ema(_src, _len) - 3 * ema(ema(_src, _len), _len) + 
       ema(ema(ema(_src, _len), _len), _len)
zlema(_src, _len) =>
    ema(_src, _len) + ema(_src, _len) - ema(ema(_src, _len), _len)

ma(_src, _len) =>
    hma__1 = hma(_src, _len)
    ema_1 = ema(_src, _len)
    sma_1 = sma(_src, _len)
    wma_1 = wma(_src, _len)
    trima__1 = trima(_src, _len)
    zlema__1 = zlema(_src, _len)
    dema__1 = dema(_src, _len)
    tema__1 = tema(_src, _len)
    matype == "hma" ? hma__1 : matype == "ema" ? ema_1 : matype == "sma" ? sma_1 : 
       matype == "wma" ? wma_1 : matype == "trima" ? trima__1 : 
       matype == "zlema" ? zlema__1 : matype == "dema" ? dema__1 : tema__1

ma05 = ma(src, 5)
ma08 = ma(src, 8)
ma13 = ma(src, 13)
ma20 = ma(src, 20)
ma30 = ma(src, 30)
ma45 = ma(src, 45)
ma70 = ma(src, 70)
ma105 = ma(src, 105)
ma150 = ma(src, 150)
ma200 = ma(src, 200)




maColor(ma, maRef) =>
    if change(ma) <= 0 and ma05 < maRef
        color.new(color.red, 20)
    else
        if change(ma) >= 0 and ma05 > maRef
            color.new(color.navy, 20)
        else
            if change(ma) < 0 and ma05 > maRef
                color.new(color.red, 20)
            else
                if change(ma) >= 0 and ma05 < maRef
                    color.new(color.navy, 20)
                else
                    color.gray


aboveConfirmed(x,maRef)=>
    above=true
    for i=1 to x
        if close[i]<maRef[i] and not (close[i]>ma200[i]*1.01) and not (ma05[i]>ma105[i]*1.015)
            above:=false
    above


aboveMost(x,len)=>
    above=0
    boolean=false
    if close[len]>ma05[len]
        above:=above+1
    if close[len]>ma08[len]
        above:=above+1
    if close[len]>ma13[len]
        above:=above+1
    if close[len]>ma20[len]
        above:=above+1
    if close[len]>ma30[len]
        above:=above+1
    if close[len]>ma45[len]
        above:=above+1
    if close[len]>ma70[len]
        above:=above+1
    if close[len]>ma105[len]
        above:=above+1
    if close[len]>ma150[len]
        above:=above+1
    if close[len]>ma200[len]
        above:=above+1
    if(above>=x)
        boolean:=true
    boolean
    
belowMost(x,len)=>
    above=0
    boolean=false
    if close[len]<ma05[len]
        above:=above+1
    if close[len]<ma08[len]
        above:=above+1
    if close[len]<ma13[len]
        above:=above+1
    if close[len]<ma20[len]
        above:=above+1
    if close[len]<ma30[len]
        above:=above+1
    if close[len]<ma45[len]
        above:=above+1
    if close[len]<ma70[len]
        above:=above+1
    if close[len]<ma105[len]
        above:=above+1
    if close[len]<ma150[len]
        above:=above+1
    if close[len]<ma200[len]
        above:=above+1
    if(above>=x)
        boolean:=true
    boolean
        
        
belowConfirmed(x,maRef)=>
    below=true
    for i=1 to x
        if close[i]>maRef[i] and not (close[i]<maRef[i]*0.99) and not (ma05[i]<ma105[i]*0.985)
            below:=false
    below
            
            
//plotshape(aboveConfirmed(5,ma150),color=color.navy,location=location.abovebar,style=shape.triangleup,size=size.large,title="above",text="above")
            
plot(ma05, color=maColor(ma05, ma150), style=plot.style_line, title="MMA05", linewidth=2)
plot(ma08, color=maColor(ma08, ma150), style=plot.style_line, title="MMA08", linewidth=1)
plot(ma13, color=maColor(ma13, ma150), style=plot.style_line, title="MMA13", linewidth=1)
plot(ma20, color=maColor(ma20, ma150), style=plot.style_line, title="MMA20", linewidth=1)
plot(ma30, color=maColor(ma30, ma150), style=plot.style_line, title="MMA30", linewidth=1)
plot(ma45, color=maColor(ma45, ma200), style=plot.style_line, title="MMA45", linewidth=1)
plot(ma70, color=maColor(ma70, ma200), style=plot.style_line, title="MMA70", linewidth=2)
plot(ma105, color=maColor(ma105, ma200), style=plot.style_line, title="MMA105", linewidth=2)
plot(ma150, color=maColor(ma150, ma200), style=plot.style_line, title="MMA150", linewidth=3)
plot(ma200, color=maColor(ma200, ma200), style=plot.style_line, title="MM200", linewidth=3)


closeLong=belowMost(6,1) and belowMost(6,2) and belowMost(6,3)
closeShort=aboveMost(6,1) and aboveMost(6,2) and aboveMost(6,3)

isAbove=aboveConfirmed(5,ma200)
strategy.entry("short", false, when=belowConfirmed(3,ma200) and belowMost(8,1) and belowMost(8,2) and belowMost(8,3))
strategy.entry("long", true, when=aboveConfirmed(3,ma200) and aboveMost(8,1) and aboveMost(8,2) and aboveMost(8,3))




strategy.close("long",when=closeLong)
strategy.close("short",when=closeShort)



Plus de