O recurso está a ser carregado... Carregamento...

Estratégia de ruptura da volatilidade de preços baseada em médias móveis duplas

Autora:ChaoZhang, Data: 2023-12-08 16:44:22
Tags:

img

Resumo

A ideia central desta estratégia é usar a volatilidade dos preços para julgar as tendências do mercado. Quando a volatilidade aumenta, isso significa que o mercado está formando uma nova tendência. E quando a volatilidade diminui, isso significa que a tendência atual está terminando. A estratégia calcula a mudança percentual do preço e, em seguida, filtra com médias móveis duplas para obter um indicador que reflita a volatilidade dos preços. Ele gera sinais de compra quando o indicador cruza acima de sua linha de sinal e vende sinais quando cruza abaixo.

Estratégia lógica

A estratégia calcula primeiro a variação percentual do preço:

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

Em seguida, ele filtra i com uma média móvel de 35 períodos para obter o indicador de volatilidade preliminar pmol2. Pmol2 é filtrado novamente com uma média móvel de 20 períodos para obter o indicador final pmol. Finalmente, uma média móvel de 10 períodos de pmol é usada como a linha de sinal pmols. Compre quando pmol cruza pmols e venda quando cruza abaixo.

Análise das vantagens

  • O duplo filtro MA extrai bem a volatilidade e filtra o ruído.
  • O cálculo da variação percentual amplifica os movimentos de preços, tornando as mudanças de tendência mais visíveis.
  • O modelo de lucro é claro: comprar no início da tendência, vender no final da tendência.

Análise de riscos

  • A filtragem dupla causa algum atraso.
  • O cálculo da variação percentual é sensível à amplitude dos preços.
  • Precisam de saídas oportunas nas transições de touro e urso.

Orientações de otimização

  • Otimizar os parâmetros de MA para melhorar a captura de tendências.
  • Tente diferentes métodos de cálculo da mudança de preço.
  • Adicione filtros para evitar sinais errados.

Resumo

Esta estratégia usa mudança percentual e filtragem de MA dupla para extrair a volatilidade dos preços e julgar as mudanças de tendência. Ela pertence às estratégias de indicadores técnicos relativamente maduras. A estratégia tem boa capacidade de captura de tendência, mas capacidade de reconhecimento de ponto de virada médio. Pode otimizar por meio de ajuste de parâmetros e adição de condições 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)  


Mais.