Estratégia de tendência da EMA para a volatilidade com atraso zero

Autora:ChaoZhang, Data: 2024-01-15 12:00:25
Tags:

img

Resumo

Esta é uma estratégia de ruptura simples que usa a diferença entre dois diferentes EMAs de atraso zero para rastrear o impulso ascendente ou descendente de um instrumento.

Estratégia lógica

A estratégia utiliza dois indicadores EMA especialmente calculados para obter a diferença de volatilidade, conforme mostrado nas seguintes fórmulas:

hJumper = math.max(src,ta.ema(src,lx))
lJumper = math.min(src,ta.ema(src,lx))  
dif = (hJumper / lJumper) - 1

A diferença responde instantaneamente a mudanças bruscas de preço sem atraso.

Quando o dif cruza acima da banda superior de Bollinger, o sinal de entrada é acionado. Quando o dif cruza abaixo da banda média de Bollinger, o sinal de saída é acionado. A direção da EMA base determina longo ou curto.

Análise das vantagens

A maior vantagem desta estratégia é a sua resposta rápida aos sinais de ruptura sem atraso. Isto é conseguido usando dois EMAs de atraso zero especialmente calculados. Isso permite que a estratégia capture instantaneamente eventos de ruptura de preços e entre cedo nas tendências emergentes.

Outra vantagem é a simplicidade desta estratégia. Tem apenas um parâmetro lx. Menos parâmetros facilitam a otimização e reduzem o risco de sobreajuste.

Análise de riscos

O principal risco desta estratégia é a possível falha de ruptura dos sinais. Falhas consecutivas podem ocorrer durante períodos variáveis. Para mitigar esse risco, podemos aumentar o múltiplo da Banda de Bollinger para tornar os sinais mais estáveis.

Outro risco são os pequenos ganhos/perdas frequentes durante os mercados agitados, que podem ser atenuados ajustando os mecanismos de saída, por exemplo, definindo níveis de preço stop loss ou take profit.

Orientações de otimização

Abaixo estão algumas direcções em que esta estratégia pode ser otimizada:

  1. Adicionar indicadores de filtro para validar os sinais de entrada e reduzir os falsos sinais.

  2. Incorporar stop loss e take profit para gerenciar melhor os negócios.

  3. Procure a confirmação do volume de negociação para evitar falhas sem compromisso de volume.

  4. Adotar bandas de Bollinger adaptativas para ajustar os parâmetros com base na volatilidade do mercado.

  5. Otimizar os parâmetros de forma dinâmica com base no aprendizado de máquina.

Conclusão

Em resumo, esta estratégia de ruptura da EMA de volatilidade de atraso zero capta o impulso do preço rapidamente usando EMAs especialmente calculadas sem atraso.


/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © wbburgin

//@version=5
strategy("Zero-lag Volatility-Breakout EMA Trend Strategy",overlay=false)

tt1 = "If selected, the strategy will not close long or short positions until the opposite signal is received. This"+
 " exposes you to more risk but potentially could generate larger returns."

src = input.source(close,"Source")
lx = input.int(200,"EMA Difference Length")
bbmult = input.float(2.0,"Standard Deviation Multiple")
useBinaryStrategy = input.bool(true,"Use Binary Strategy",tooltip = tt1)

hJumper = math.max(src,ta.ema(src,lx))
lJumper = math.min(src,ta.ema(src,lx))

dif = (hJumper / lJumper) - 1

[bbm,bbu,bbl] = ta.bb(dif,lx,bbmult)

plot(dif,color=color.white,title="Zero lag EMA Difference")
plot(bbu,color=color.lime,title="Bollinger Top")
plot(bbl,color=color.red,title="Bollinger Bottom")
plot(bbm,color=color.yellow,title="Bollinger Middle")

sigEnter = ta.crossover(dif,bbu)
sigExit = ta.crossunder(dif,bbm)
emaBase = ta.ema(src,lx)
enterLong = sigEnter and emaBase > emaBase[1]
enterShort = sigEnter and emaBase < emaBase[1]

plotshape(enterLong,style=shape.labelup,location=location.bottom,color=color.green,size=size.tiny)
plotshape(enterShort,style=shape.labeldown,location=location.top,color=color.red,size=size.tiny)

if enterLong
    strategy.entry("Long",strategy.long)
if enterShort
    strategy.entry("Short",strategy.short)
if not useBinaryStrategy and sigExit
    strategy.close("Long")
    strategy.close("Short")

Mais.