
La idea central de esta estrategia es utilizar la tasa de fluctuación de los precios para juzgar la tendencia del mercado, cuando la tasa de fluctuación aumenta, indica que el mercado está formando una nueva tendencia; cuando la tasa de fluctuación disminuye, indica que la tendencia actual está terminando. La estrategia calcula el cambio porcentual en el precio y luego lo filtra de manera uniforme para obtener un indicador que refleje la tasa de fluctuación de los precios.
La estrategia comienza por calcular el porcentaje de cambio en el precio:
i=(src/nz(src[1], src))*100
Luego, se filtra una línea media de longitud 35 para obtener el indicador de fluctuación de precios primario pmol2 ❚. Luego, se filtra una segunda onda a pmol2 a través de una línea media de longitud 20 para obtener el indicador de fluctuación de precios final pmol ❚. Finalmente, se obtiene la línea de señal de pmol a través de una línea media de longitud 10pmols ❚. Cuando ppmol pasa por pmols, genera una señal de compra; cuando ppmol pasa por pmols, genera una señal de venta ❚
La dirección de la optimización:
Esta estrategia es una estrategia más madura de la clase de indicadores técnicos para determinar los cambios en la tendencia del mercado mediante el cálculo de la variación porcentual y la filtración de doble línea uniforme. La estrategia tiene una gran capacidad para capturar tendencias, pero generalmente tiene la capacidad de identificar puntos de conversión.
/*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)