Les ressources ont été chargées... Je charge...

Stratégie de rupture de la volatilité des prix basée sur des moyennes mobiles doubles

Auteur:ChaoZhang est là., Date: 2023-12-08 16:44:22 Je suis désolé
Les étiquettes:

img

Résumé

L'idée de base de cette stratégie est d'utiliser la volatilité des prix pour juger des tendances du marché. Lorsque la volatilité augmente, cela signifie que le marché forme une nouvelle tendance. Et lorsque la volatilité diminue, cela signifie que la tendance actuelle prend fin. La stratégie calcule le changement en pourcentage du prix et la filtre ensuite avec des moyennes mobiles doubles pour obtenir un indicateur reflétant la volatilité des prix. Elle génère des signaux d'achat lorsque l'indicateur traverse au-dessus de sa ligne de signal et vend des signaux lorsqu'il traverse en dessous.

La logique de la stratégie

La stratégie calcule d'abord la variation en pourcentage du prix:

i=(src/nz(src[1], src))*100

Ensuite, il filtre i avec une moyenne mobile de 35 périodes pour obtenir l'indicateur de volatilité préliminaire pmol2. Pmol2 est à nouveau filtré avec une moyenne mobile de 20 périodes pour obtenir l'indicateur final pmol. Enfin, une moyenne mobile de 10 périodes de pmol est utilisée comme ligne de signal pmols. Acheter lorsque pmol traverse les pmols et vendre lorsqu'il traverse en dessous.

Analyse des avantages

  • Le double filtre MA extrait bien la volatilité et filtre le bruit.
  • Le calcul du changement en pourcentage amplifie les mouvements de prix, rendant les changements de tendance plus visibles.
  • Le modèle de profit est clair: acheter au début de la tendance, vendre à la fin de la tendance.

Analyse des risques

  • Le double filtrage provoque un certain retard.
  • Le calcul de la variation en pourcentage est sensible à l'amplitude des prix.
  • Il faut sortir en temps opportun des transitions taureau-ours.

Directions d'optimisation

  • Optimiser les paramètres MA pour améliorer la capture des tendances.
  • Essayez différentes méthodes de calcul du changement de prix.
  • Ajoutez des filtres pour éviter de faux signaux.

Résumé

Cette stratégie utilise un changement de pourcentage et un double filtre MA pour extraire la volatilité des prix et juger des changements de tendance. Elle appartient aux stratégies d'indicateur technique relativement matures.


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

//@version=2
strategy("Strategy for DPMO", overlay=true)

src=input(close, title="Source")
length1=input(35, title="First Smoothing")
length2=input(20, title="Second Smoothing")
siglength=input(10, title="Signal Smoothing")
ebc=input(false, title="Enable Bar Colors")

upSign = '↑' // indicates the indicator shows uptrend
downSign = '↓' // incicates the indicator showing downtrend
exitSign ='x' //indicates the indicator uptrend/downtrend ending

calc_csf(src, length) => 
	sm = 2.0/length
	csf=(src - nz(csf[1])) * sm + nz(csf[1])
	csf
i=(src/nz(src[1], src))*100
pmol2=calc_csf(i-100, length1)
pmol=calc_csf( 10 * pmol2, length2)
pmols=ema(pmol, siglength)
d=pmol-pmols
hc=d>0?d>d[1]?lime:green:d<d[1]?red:orange

buyDPMO = hc==lime and hc[1]!=lime
closeBuyDPMO = hc==green and hc[1]!=green
sellDPMO = hc==red and hc[1]!=red
closeSellDPMO = hc==orange and hc[1]!=orange

plotshape(buyDPMO, color=lime, style=shape.labelup, textcolor=#000000, text="DPMO", location=location.belowbar, transp=0)
plotshape(closeBuyDPMO, color=green, style=shape.labelup, textcolor=#ffffff,  text="X", location=location.belowbar, transp=0)
plotshape(sellDPMO, color=red, style=shape.labeldown, textcolor=#000000, text="DPMO", location=location.abovebar, transp=0)
plotshape(closeSellDPMO, color=orange, style=shape.labeldown, textcolor=#ffffff,  text="X", location=location.abovebar, transp=0)
barcolor(ebc?hc:na)


strategy.entry("Long", strategy.long, when=buyDPMO)
strategy.close("Long", when=closeBuyDPMO or sellDPMO)   
strategy.entry("Short", strategy.short, when=sellDPMO)
strategy.close("Short", when=closeSellDPMO or buyDPMO)  


Plus de