Stratégie de suivi de tendance de croisement de pente de moyenne mobile


Date de création: 2023-10-17 17:02:30 Dernière modification: 2023-10-17 17:02:30
Copier: 0 Nombre de clics: 848
1
Suivre
1617
Abonnés

Stratégie de suivi de tendance de croisement de pente de moyenne mobile

Aperçu

La stratégie utilise le croisement de la pente de deux moyennes mobiles indicielles de différentes longueurs (EMA) pour générer un signal de suivi de tendance. La combinaison de ces deux paramètres fonctionne bien en utilisant par défaut les longueurs EMA de 130 et 400.

Faire plus lorsque la courbe rapide traverse la courbe lente et que le prix est supérieur à 200 cycles; faire moins lorsque la courbe rapide traverse la courbe lente et que le prix est inférieur à 200 cycles.

La pente de l’inclinaison est inverse à la pente de la croix.

La stratégie fonctionne mieux avec le Bitcoin et les altcoins à forte liquidité et forte valeur marchande, mais elle fonctionne aussi bien avec les actifs plus volatiles, en particulier lorsque ces actifs sont souvent tendance.

La meilleure période est de 4 heures.

Il est également équipé d’un filtre de volatilité optionnel, qui permet d’ouvrir des positions uniquement lorsque la différence entre les deux pentes est supérieure à une certaine limite, afin d’éviter que le bruit des fluctuations horizontales des prix ne soit supérieur au signal.

Le résultat est incroyable, profitez-en !

Principe de stratégie

Le cœur de la stratégie est la comparaison de la courbe entre les moyennes mobiles des EMA de deux longueurs différentes.

On calcule d’abord les EMA de longueur 130 et 400, puis l’inclinaison de chacune d’elles, puis on obtient la courbe d’inclinaison après lissage de l’EMA de longueur 3 des inclinations respectives.

Un signal d’achat est généré lorsque la ligne rapide traverse l’inclinaison EMA sur l’inclinaison EMA lente; un signal de vente est généré lorsque la ligne rapide traverse l’inclinaison EMA lente sous l’inclinaison EMA lente.

Pour filtrer les oscillations, il est possible de choisir une EMA de 200 cycles comme filtre de tendance, en prenant en compte les signaux plus élevés uniquement lorsque le prix est supérieur à cette EMA et les signaux négatifs en prenant en compte les signaux plus bas.

En outre, il est possible de choisir un filtre de fluctuation qui ne génère un signal que lorsque la différence entre les deux pentes est supérieure à la valeur de seuil prédéfinie, afin de filtrer les situations où les pentes se croisent mais où la fluctuation est insuffisante.

Lorsque la pente est inversée, les positions sont liquidées et les pertes cessent.

Analyse des avantages

  1. Le croisement de la pente est utilisé pour générer des signaux permettant de suivre efficacement les tendances.

  2. Adaptation de la palette de paramètres du cycle EMA pour s’adapter à différents environnements de marché

  3. Les filtres de tendance évitent d’être induits en erreur par les chocs

  4. Le filtre de fréquence d’oscillation peut filtrer les faux signaux

  5. Les règles sont simples, claires et faciles à comprendre

  6. Utilisable sur plusieurs périodes

Analyse des risques

  1. Les événements d’ouverture et de fermeture peuvent se produire fréquemment en cas de forte secousse.

  2. Les paramètres de l’EMA cyclique inappropriés peuvent manquer le tournant de la tendance

  3. Les combinaisons de paramètres doivent être adaptées aux changements de l’environnement du marché.

  4. Comme dans le système MA, les pertes peuvent être inversées à la fin d’une tendance majeure

Direction d’optimisation

  1. Essayez différents paramètres de combinaison de cycles EMA pour trouver le meilleur paramètre

  2. Paramètres de sélection en fonction des caractéristiques des différentes monnaies et de l’environnement du marché

  3. Les stratégies de contrôle des risques de stop loss peuvent être envisagées.

  4. Les paramètres cycliques de l’EMA peuvent être ajustés dynamiquement

  5. Essayez différents paramètres de marge de fluctuation

  6. Test sur différentes périodes

Résumer

L’idée générale de la stratégie est claire et compréhensible. Elle utilise la croix de la courbe EMA pour générer des signaux permettant de suivre efficacement la tendance. La combinaison de filtres de tendance et de filtres de taux d’oscillation réduit le bruit des transactions.

Code source de la stratégie
/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// strategy(title="Slopes",initial_capital=1000, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.06, slippage = 2, default_qty_value=30, overlay=false)

//definizione input

start = timestamp(input(2018, "start year"), input(1, "start month"), input(1, "start day"), 00, 00)
end = timestamp(input(2020, "end year"), input(1, "end month"), input(1, "end day"), 00, 00)

average = input (title="Source MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])

len1=input(130,title="Fast MA Length")
len2=input(400,title="Slow MA Length")

smoothingavg = input (title="Smoothing MAs Type", type=input.string, defval="EMA",options=["EMA","SMA"])
smoothingavglen = input (3,title="Smoothing MAs Length")

trendfilter=input(true,title="Trend Filter")
trendfilterperiod=input(200,title="Trend Filter MA Period")
trendfiltertype=input (title="Trend Filter MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])

volatilityfilter=input(false,title="Volatility Filter")
volatilitydelta=input(0.0003,step=0.0001,title="Delta Slopes EMA")

//variabili

m1 = if average == "EMA" 
    ema(close,len1)
else
    sma(close,len1)

m2=if average == "EMA" 
    ema(close,len2)
else
    sma(close,len2)

slp1=(m1-m1[1])/m1
slp2=(m2-m2[1])/m2

e1=if smoothingavg == "EMA" 
    ema(slp1,smoothingavglen)
else
    sma(slp1,smoothingavglen)

e2=if smoothingavg == "EMA" 
    ema(slp2,smoothingavglen)
else
    sma(slp2,smoothingavglen)

plot(e1,color=color.yellow)
plot(e2,color=color.red)
//plot (abs(e1-e2),color=color.white)
//plot (ema(e1-e2,9),color=color.yellow)

//variabili accessorie e condizioni

TrendConditionL=if trendfiltertype =="EMA"
    close>ema(close,trendfilterperiod)
else
    close>sma(close,trendfilterperiod)
    
TrendConditionS=if trendfiltertype =="EMA"
    close<ema(close,trendfilterperiod)
else
    close<sma(close,trendfilterperiod)
    
VolatilityCondition = abs(e1-e2) > volatilitydelta

ConditionEntryL= if trendfilter == true
    if volatilityfilter == true
        e1>e2 and TrendConditionL and VolatilityCondition
    else
        e1>e2 and TrendConditionL
else
    if volatilityfilter == true
        e1>e2 and VolatilityCondition
    else 
        e1>e2

ConditionEntryS= if trendfilter == true
    if volatilityfilter == true
        e1<e2 and TrendConditionS and VolatilityCondition
    else 
        e1<e2 and TrendConditionS
else
    if volatilityfilter == true
        e1<e2 and VolatilityCondition
    else
        e1<e2

ConditionExitL=crossunder(e1,e2)
ConditionExitS=crossover(e1,e2)

if true
    if ConditionExitS
        if strategy.position_size < 0
            strategy.close("SLPShort")

if true
    if ConditionExitL
        if strategy.position_size > 0
            strategy.close("SLPLong")

if true
    if ConditionEntryL
        strategy.entry ("SLPLong",long=true)
        
if true
    if ConditionEntryS 
        strategy.entry("SLPShort",long=false)