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 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.
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)