Stratégie de négociation à double moyenne mobile

Auteur:ChaoZhang est là., Date: 2023-12-04 16h39:13
Les étiquettes:

img

Résumé

En calculant deux groupes de moyennes mobiles avec des paramètres différents et en jugeant la tendance des prix en fonction de leurs changements de direction, des signaux de trading peuvent être générés en définissant le paramètre de sensibilité pour les changements de direction.

Principaux

L'indicateur de base de cette stratégie est la moyenne mobile double. La stratégie permet de sélectionner le type (SMA, EMA, etc.), la longueur et la source de prix (prix de clôture, prix typique, etc.) de la moyenne mobile. Après avoir calculé deux groupes de moyennes mobiles, leurs directions sont déterminées en définissant le paramètre de réaction. Un signal d'achat est généré lorsque la ligne rapide traverse au-dessus de la ligne lente, et un signal de vente est généré lorsqu'elle traverse en dessous. Le paramètre de réaction est utilisé pour ajuster la sensibilité pour identifier les points tournants.

En outre, la stratégie définit également les conditions pour déterminer le changement de direction et la hausse/chute continue afin d'éviter de générer de mauvais signaux.

Analyse des avantages

La stratégie double movavg combine des lignes rapides et lentes avec différents paramètres, ce qui peut filtrer efficacement le bruit sur le marché et identifier les tendances les plus fortes.

Le paramètre de réaction permet à la stratégie d'être flexible et adaptable à différents cycles et variétés.

Analyse des risques

Le plus grand risque de cette stratégie est de manquer le tournant et de perdre de l'argent ou de prendre une position inverse. Cela concerne le paramètre de réaction. Si la réaction est trop petite, de mauvais signaux sont susceptibles de se produire. Si la réaction est trop grande, elle peut manquer de meilleurs points d'entrée.

Un autre risque est l'incapacité de contrôler efficacement les pertes. Lorsque les prix fluctuent violemment, il ne peut pas arrêter rapidement les pertes, ce qui entraîne des pertes accrues. Cela nécessite l'utilisation de stratégies de stop-loss pour contrôler les risques.

Directions d'optimisation

Les principales directions d'optimisation de cette stratégie se concentrent sur la sélection des paramètres de réaction, des types et des longueurs des moyennes mobiles.

En outre, la confirmation des signaux de trading avec d'autres indicateurs auxiliaires tels que RSI et KD est également une idée d'optimisation.

Résumé

Dans l'ensemble, cette stratégie est relativement simple et pratique. En filtrant avec des moyennes mobiles doubles et en générant des signaux de trading, elle peut identifier efficacement les renversements de tendance et est une stratégie typique de suivi de tendance.


/*backtest
start: 2023-11-03 00:00:00
end: 2023-12-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle="MA_color strategy", title="Moving Average Color", overlay=true)

// === INPUTS

ma_type   = input(defval="HullMA", title="MA Type: ", options=["SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "ZEMA", "TMA", "SSMA"])
ma_len    = input(defval=32, title="MA Lenght", minval=1)
ma_src    = input(close, title="MA Source")
reaction  = input(defval=2, title="MA Reaction", minval=1)

// SuperSmoother filter
// © 2013  John F. Ehlers
variant_supersmoother(src,len) =>
    a1 = exp(-1.414*3.14159 / len)
    b1 = 2*a1*cos(1.414*3.14159 / len)
    c2 = b1
    c3 = (-a1)*a1
    c1 = 1 - c2 - c3
    v9 = 0.0
    v9 := c1*(src + nz(src[1])) / 2 + c2*nz(v9[1]) + c3*nz(v9[2])
    v9
    
variant_smoothed(src,len) =>
    v5 = 0.0
    v5 := na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len
    v5

variant_zerolagema(src,len) =>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    v10 = ema1+(ema1-ema2)
    v10
    
variant_doubleema(src,len) =>
    v2 = ema(src, len)
    v6 = 2 * v2 - ema(v2, len)
    v6

variant_tripleema(src,len) =>
    v2 = ema(src, len)
    v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)              
    v7
    
variant(type, src, len) =>
    type=="EMA"     ? ema(src,len) : 
      type=="WMA"   ? wma(src,len): 
      type=="VWMA"  ? vwma(src,len) : 
      type=="SMMA"  ? variant_smoothed(src,len) : 
      type=="DEMA"  ? variant_doubleema(src,len): 
      type=="TEMA"  ? variant_tripleema(src,len): 
      type=="HullMA"? wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) :
      type=="SSMA"  ? variant_supersmoother(src,len) : 
      type=="ZEMA"  ? variant_zerolagema(src,len) : 
      type=="TMA"   ? sma(sma(src,len),len) : sma(src,len)


// === Moving Average
ma_series = variant(ma_type,ma_src,ma_len)

direction = 0
direction := rising(ma_series,reaction) ? 1 : falling(ma_series,reaction) ? -1 : nz(direction[1])
change_direction= change(direction,1)
change_direction1= change(direction,1)

pcol = direction>0 ? lime : direction<0 ? red : na
plot(ma_series, color=pcol,style=line,join=true,linewidth=3,transp=10,title="MA PLOT")

/////// Alerts ///////

alertcondition(change_direction,title="Change Direction MA",message="Change Direction MA")


longCondition = direction>0
shortCondition = direction<0
if (longCondition)
    strategy.entry("BUY", strategy.long)
if (shortCondition)
    strategy.entry("SELL", strategy.short)



Plus de