Stratégie de moyenne mobile dynamique à plusieurs périodes

Auteur:ChaoZhang est là., Date: 2023-10-27 16h07 et 16 min
Les étiquettes:

img

Cette stratégie sélectionne dynamiquement différents types de moyennes mobiles sur plusieurs délais pour générer des signaux de trading.

La logique de la stratégie

La stratégie permet de sélectionner parmi les moyennes mobiles SMA, EMA, TEMA, WMA et HMA, avec des durées de période personnalisables.

Plus précisément, la stratégie définit d'abord la période de backtest sur la base des paramètres d'entrée.

  • SMA moyenne mobile simple
  • Moyenne mobile exponentielle de l'EMA
  • Moyenne mobile exponentielle triple TEMA
  • Moyenne mobile pondérée WMA
  • Moyenne mobile de HMA Hull

La moyenne mobile correspondante est tracée en fonction de la sélection.

En combinant différents types de moyennes mobiles, la stratégie peut affiner les données de prix et filtrer le bruit du marché pour générer des signaux de trading plus fiables.

Les avantages

  • Combine plusieurs moyennes mobiles pour une plus grande fiabilité
  • Périodes personnalisables adaptées aux différents délais de négociation
  • La commutation dynamique des moyennes permet une optimisation flexible
  • Suivi de tendance simple et intuitif adapté aux débutants

Les risques

  • Le retard des moyennes mobiles peut manquer les points tournants de la tendance
  • Suradaptation avec des paramètres fixes, sous-performance probable dans le commerce en direct
  • Les signaux longs/courts agressifs ont une incidence sur l'efficacité de l'utilisation des capitaux

Les risques peuvent être réduits par:

  • Ajout d'autres indicateurs pour déterminer plus précisément les entrées
  • Optimisation des paramètres pour les différents régimes de marché dans le commerce réel
  • Optimisation de la taille des positions en fonction de la taille du compte et de la gestion des risques

Des possibilités d'amélioration

La stratégie peut être améliorée sous plusieurs aspects:

  1. Ajouter d' autres filtres pour des signaux plus stables

    Par exemple, des indicateurs de volume pour éviter les fausses écarts sans confirmation de volume.

  2. Optimiser la logique d'entrée et de sortie

    Définir des canaux de prix et arrêter les pertes pour réduire les pertes inutiles.

  3. Périodes de moyenne mobile dynamique

    Utiliser des périodes plus longues en cas de forte tendance et des périodes plus courtes en cas de consolidation.

  4. Améliorer la gestion de l'argent

    Ajuster la taille des positions en fonction des retraits et de la prise de bénéfices.

Conclusion

La stratégie combine diverses moyennes mobiles à travers les délais pour générer des effets de suivi de tendance relativement stables.


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

//@version=3
strategy("MA_strategy ", shorttitle="MA_strategy", overlay=true, initial_capital=100000)

qty = input(100000000, "Buy quantity")

testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testStartMin = input(0, "Backtest Start Minute")

testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,testStartMin)

testStopYear = input(2099, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false


ma1 = input( "SMA",title="Select MA", options=["SMA", "EMA","TEMA", "WMA","HMA"])


len1 = input(7, minval=1, title="Period")

s=sma(close,len1)

e=ema(close,len1)


xEMA1 = ema(close, len1)
xEMA2 = ema(xEMA1, len1)
xEMA3 = ema(xEMA2, len1)
t = 3 * xEMA1 - 3 * xEMA2 + xEMA3


f_hma(_src, _length)=>
    _return = wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))

h = f_hma(close, len1)

w = wma(close, len1)

ma = ma1 == "SMA"?s:ma1=="EMA"?e:ma1=="WMA"?w:ma1=="HMA"?h:ma1=="TEMA"?t:na

buy= close>ma
sell= close<ma

alertcondition(buy, title='buy', message='buy')
alertcondition(sell, title='sell', message='sell')

ordersize=floor(strategy.equity/close)

if testPeriod()
    strategy.entry("long",strategy.long,ordersize,when=buy)
    strategy.close("long", when = sell )


    
  









Plus de