Estratégia de fuga de zigzag

Autora:ChaoZhang, Data: 2023-10-20 16:37:28
Tags:

img

Resumo

Esta estratégia utiliza o indicador Zigzag para desenhar linhas de suporte e resistência e toma posições longas ou curtas quando o preço atravessa as linhas de suporte ou resistência.

Estratégia lógica

A estratégia usa primeiro o indicador Zigzag para desenhar linhas de Zigzag sob certos parâmetros. Linhas de suporte verdes são desenhadas quando o indicador Zigzag desce. Linhas de resistência vermelhas são desenhadas quando o Zigzag sobe. Posições longas são tomadas quando o preço quebra acima da linha verde. Posições curtas são tomadas quando o preço quebra abaixo da linha vermelha.

Especificamente, a lógica central é:

  1. Use o ema para suavizar o preço de fechamento com médias móveis exponenciais triplas, obtendo a curva suavizada _hls.

  2. Julgue se a curva suavizada está subindo. Se subindo e a barra anterior não estava subindo, ela é considerada um fundo. Pegue o preço mais baixo desta barra. Se caindo e a barra anterior estava subindo, ela é considerada um topo. Pegue o preço mais alto desta barra. Caso contrário, NaN.

  3. Repita este processo para obter a linha zigzag zigzag.

  4. Quando o zig-zag subir, registe o ponto de pico atual.

  5. Desenhe a linha verde de suporte para cima quando o ponto sobe, a linha vermelha de resistência para baixo quando o ponto cai.

  6. Tomar posição longa quando o preço ultrapassa a linha verde.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. Identificar os principais níveis de suporte/resistência usando o indicador Zigzag.

  2. O zigzag filtra algum ruído do mercado, gerando sinais comerciais mais claros.

  3. Entrar em posições através de breakout, que pode capturar as reversões de tendência em tempo útil.

  4. Uma forma simples e eficaz de desenhar linhas de apoio/resistência.

  5. Lógica clara e grande espaço de otimização de parâmetros.

  6. Flexibilidade na escolha de produtos e prazos.

Análise de riscos

Riscos desta estratégia:

  1. Parâmetros Zigzag inadequados podem perder oportunidades comerciais.

  2. Os preços podem testar novamente o suporte/resistência após a quebra.

  3. Os sinais de ruptura podem ser enganosos, precisam de validação com tendências e padrões.

  4. Os trâmites laterais prolongados podem gerar transacções ineficazes excessivas.

  5. Considere os custos de transação e evite trocas excessivamente frequentes.

Soluções:

  1. Otimize os parâmetros do zigzag para encontrar a melhor combinação.

  2. Configure um stop loss oportuno após a ruptura para limitar as perdas.

  3. Adicionar filtros como indicadores de tendência para melhorar a precisão.

  4. Identifique os laterais e evite negociar durante estes períodos.

  5. Relaxa a faixa de ruptura para reduzir as transacções ineficazes.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Otimize os parâmetros do Zigzag por backtesting para encontrar o ideal.

  2. Considere a possibilidade de testar novamente o suporte/resistência após a quebra.

  3. Adicionar filtros como MA para filtrar sinais de baixa probabilidade.

  4. Incorporar indicadores de volume para confirmar sinais de ruptura.

  5. Implementar a metodologia dupla de Lachenbruch (longa e curta) para filtrar sinais incorretos e lucro.

  6. Usar machine learning para otimizar dinamicamente parâmetros.

  7. Introduzir uma estratégia de stop loss para limitar os riscos.

Conclusão

Em resumo, esta é uma estratégia de breakout de oscilação simples e prática. Ela atrai suporte / resistência usando Zigzag e breakouts de negociações. A estratégia é adaptável, mas com alguns riscos. A otimização de parâmetros, filtros de sinal e controle de risco pode melhorá-la. Tais estratégias de breakout se adequam a traders ativos que podem entender o ritmo do mercado.


/*backtest
start: 2022-10-13 00:00:00
end: 2023-10-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
// strategy(title = "Noro's ZZ-2 Strategy", shorttitle = "Noro's ZZ-2 Strategy", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
length = input(4, title = "ZigZag length")
Extreme = input(4, title = "ZigZag extreme")
src = input(close, title = "Source")
showzz = input(false, defval = false, title = "Show ZigZag")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//ZigZag
f_zz(_length, _detection)=>
    _hls = ema(ema(ema(src, _length), round(_length*0.66)), round(_length*0.33))
    _isRising = _hls >= _hls[1]
    _zigzag = _isRising and not _isRising[1] ? lowest(_detection) :  not _isRising and _isRising[1] ? highest(_detection) : na
zigzag = f_zz(length, Extreme)
zzcol = showzz ? black : na
plot(zigzag, color = zzcol, linewidth = 2)

//Levels
dot = 0.0
dot := zigzag > 0 ? zigzag : dot[1]
uplevel = 0.0
uplevel := dot > dot[1] ? zigzag : uplevel[1]
dnlevel = 0.0
dnlevel := dot < dot[1] ? zigzag : dnlevel[1]
upcol = na
upcol := dot > dot[1] ? na : lime
plot(uplevel, color = upcol, linewidth = 2)
dncol = na
dncol := dot < dot[1] ? na : red
plot(dnlevel, color = dncol, linewidth = 2)

//Trading
lot = 0.0
lot := strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]
if dot > 0
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel)


Mais.