La idea central de esta estrategia es usar la volatilidad de precios para juzgar las tendencias del mercado. Cuando la volatilidad aumenta, significa que el mercado está formando una nueva tendencia. Y cuando la volatilidad disminuye, significa que la tendencia actual está terminando. La estrategia calcula el cambio porcentual del precio y luego lo filtra con promedios móviles dobles para obtener un indicador que refleje la volatilidad de precios. Genera señales de compra cuando el indicador cruza por encima de su línea de señal, y vende señales cuando cruza por debajo.
La estrategia calcula primero el cambio porcentual del precio:
i=(src/nz(src[1], src))*100
Luego se filtra i con un promedio móvil de 35 períodos para obtener el indicador preliminar de volatilidad pmol2. Pmol2 se filtra nuevamente con un promedio móvil de 20 períodos para obtener el indicador final pmol. Finalmente, se utiliza un promedio móvil de 10 períodos de pmol como la línea de señal pmols. Compre cuando pmol cruza sobre pmols y venda cuando cruza por debajo.
Esta estrategia utiliza el cambio porcentual y el doble filtrado de MA para extraer la volatilidad de los precios y juzgar los cambios de tendencia. Pertenece a las estrategias de indicadores técnicos relativamente maduras. La estrategia tiene una buena capacidad de captura de tendencias pero una capacidad de reconocimiento de puntos de inflexión medianos. Puede optimizar a través del ajuste de parámetros y la adición de condiciones auxiliares.
/*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)