Stratégie de négociation des moyennes mobiles sur plusieurs délais

Auteur:ChaoZhang est là., Date: 21 septembre 2023 à 20h45
Les étiquettes:

Résumé

Cette stratégie utilise des croisements moyens mobiles entre différents délais pour générer des signaux de trading. Elle permet d'observer des MAs sur des délais plus longs sur le graphique actuel pour détecter des tendances plus importantes.

La logique de la stratégie

La stratégie utilise deux moyennes mobiles calculées sur des délais distincts.

Par exemple, sur le graphique de 15 minutes, il utilise 20MA et 50MA:

  • 20 MA est calculé sur les barres de courant de 15 min
  • 50 MA est calculé en barres quotidiennes

Lorsque 15min 20MA dépasse 50MA par jour, il va long.

Il est ainsi possible d'observer des tendances sur des périodes plus longues sur la période en cours.

Les points de croisement peuvent être marqués pour des signaux commerciaux clairs.

Les avantages

  • Analysez les délais, découvrez des tendances plus larges
  • Des lignes TF plus élevées plus stables, évitant les faux signaux
  • Les lignes inférieures de TF sont plus sensibles, la tendance à la capture change rapidement
  • Combinaisons de périodes d'AM personnalisables
  • Signaux clairement marqués sur le graphique

Les risques

  • Augmentation de la complexité avec plusieurs délais
  • Des faux signaux de TF inférieurs sont encore possibles
  • En général, le retard avec les systèmes d'AM, peut manquer les meilleures entrées
  • Filtrage limité avec système pur d'AM
  • La régulation de la période nécessaire pour les différents produits

Les risques peuvent être réduits par:

  • Maintien de l'AMT à des niveaux élevés pendant une période plus longue pour une direction de tendance solide
  • Ajout d'autres indicateurs pour un filtrage ultérieur du signal
  • Optimisation des périodes d'AM pour les meilleures combinaisons
  • Relaxer les règles d'entrée comme ajouter des motifs de chandeliers

Directions de renforcement

La stratégie peut être améliorée par:

  1. Tester plus de combinaisons de périodes de MA pour optimisation

  2. Ajout de confirmation secondaire lorsque le croisement se produit

    Par exemple, vérifier le momentum MACD

  3. Optimisation des arrêts pour éviter une sortie prématurée

    Considérez les preuves Post123 pour décider des sorties

  4. Différents filtres pour la TF courte et longue

    Plus stricte pour la TF courte, plus détendue pour la TF longue

  5. Considérez différents ensembles de paramètres pour différentes sessions

    Les conditions du marché varient d'une session à l'autre

Résumé

Cette stratégie observe des croisements entre les MAs de plusieurs délais pour déterminer la direction de la tendance et découvrir des tendances plus importantes. Cela filtre les bruits à court terme et se concentre sur les mouvements de prix plus importants. Cependant, des défis tels que le réglage des délais et les signaux en retard existent. Des améliorations peuvent être apportées par le biais d'un backtesting rigoureux et d'une optimisation pour des paramètres robustes, en ajoutant des filtres pour la confirmation, une validation en direct pour des améliorations continues en fonction des commentaires du marché.


/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 7d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

//Run script on a long interval gives better result for e.g. 1 Day
//Plots The Majority of Moving Averages
//Defaults to Current Chart Time Frame --- But Can Be Changed to Higher Or Lower Time Frames
//2nd MA Capability with Show Crosses Feature
//study(title="CM_Ultimate_MA_MTF", shorttitle="CM_Ultimate_MA_MTF", overlay=true)
strategy("Stratergy CM_Ultimate_MA_MTF", shorttitle = "Stratergy CM_Ultimate_MA_MTF", overlay = true) 
//,default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//inputs
src = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above",  defval="D")
len = input(20, title="Moving Average Length - LookBack Period")
atype = input(1,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA")
cc = input(true,title="Change Color Based On Direction?")
smoothe = input(2, minval=1, maxval=10, title="Color Smoothing - 1 = No Smoothing")
doma2 = input(false, title="Optional 2nd Moving Average")
len2 = input(50, title="Moving Average Length - Optional 2nd MA")
atype2 = input(1,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA")
cc2 = input(true,title="Change Color Based On Direction 2nd MA?")
warn = input(false, title="***You Can Turn On The Show Dots Parameter Below Without Plotting 2nd MA to See Crosses***")
warn2 = input(false, title="***If Using Cross Feature W/O Plotting 2ndMA - Make Sure 2ndMA Parameters are Set Correctly***")
sd = input(false, title="Show Dots on Cross of Both MA's")


res = useCurrentRes ? timeframe.period : resCustom
//hull ma definition
hullma = wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len)))
//TEMA definition
ema1 = ema(src, len)
ema2 = ema(ema1, len)
ema3 = ema(ema2, len)
tema = 3 * (ema1 - ema2) + ema3

avg = atype == 1 ? sma(src,len) : atype == 2 ? ema(src,len) : atype == 3 ? wma(src,len) : atype == 4 ? hullma : atype == 5 ? vwma(src, len) : atype == 6 ? rma(src,len) : tema
//2nd Ma - hull ma definition
hullma2 = wma(2*wma(src, len2/2)-wma(src, len2), round(sqrt(len2)))
//2nd MA TEMA definition
sema1 = ema(src, len2)
sema2 = ema(sema1, len2)
sema3 = ema(sema2, len2)
stema = 3 * (sema1 - sema2) + sema3

avg2 = atype2 == 1 ? sma(src,len2) : atype2 == 2 ? ema(src,len2) : atype2 == 3 ? wma(src,len2) : atype2 == 4 ? hullma2 : atype2 == 5 ? vwma(src, len2) : atype2 == 6 ? rma(src,len2) : tema

out = avg 
out_two = avg2

out1 = security(syminfo.tickerid, res, out)
out2 = security(syminfo.tickerid, res, out_two)

ma_up = out1 >= out1[smoothe]
ma_down = out1 < out1[smoothe]

col = cc ? ma_up ? lime : ma_down ? red : aqua : aqua
col2 = cc2 ? ma_up ? lime : ma_down ? red : aqua : aqua

circleYPosition = out2
chk=col==red?1:0

if (not na(chk))
    if (chk[1]==1 and chk==0)
        strategy.entry("RsiLE", strategy.long, comment="RsiLE")
    else
        strategy.exit("RsiLE")

    if (chk[1]==0 and chk==1)
        strategy.entry("RsiSE", strategy.short, comment="RsiLE")
    else
        strategy.exit("RsiSE")
        
plot(out1, title="Multi-Timeframe Moving Avg", style=line, linewidth=4, color = col)
plot(doma2 and out2 ? out2 : na, title="2nd Multi-TimeFrame Moving Average", style=circles, linewidth=4, color=col2)
plot(sd and cross(out1, out2) ? circleYPosition : na,style=cross, linewidth=5, color=yellow)



Plus de