Estrategia de ruptura de la volatilidad de precios basada en medias móviles dobles

El autor:¿ Qué pasa?, Fecha: 2023-12-08 16:44:22
Las etiquetas:

img

Resumen general

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.

Estrategia lógica

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.

Análisis de ventajas

  • El doble filtro MA extrae bien la volatilidad y filtra el ruido.
  • El cálculo del cambio porcentual amplifica los movimientos de precios, haciendo que los cambios de tendencia sean más visibles.
  • El modelo de ganancia es claro: comprar al comienzo de la tendencia, vender al final de la tendencia.

Análisis de riesgos

  • El doble filtrado causa un poco de retraso.
  • El cálculo del cambio porcentual es sensible a la amplitud de los precios.
  • Necesitan salidas oportunas en las transiciones de toros y osos.

Direcciones de optimización

  • Optimizar los parámetros de MA para mejorar la captura de tendencias.
  • Prueba diferentes métodos de cálculo de cambio de precio.
  • Añadir filtros para evitar señales erróneas.

Resumen de las actividades

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)  


Más.