Tendência ZigZag Seguindo a Estratégia

Autora:ChaoZhang, Data: 2024-01-08 10:13:24
Tags:

img

Resumo

Este artigo apresenta uma estratégia de negociação chamada ZigZag Trend Following Strategy. Esta estratégia identifica tendências de preços usando o indicador ZigZag e abre posições quando as tendências se revertem para seguir a tendência. No script da Estratégia Pine, o indicador ZigZag é usado para confirmar novos altos e baixos de preços. Quando os preços atravessam a linha do indicador ZigZag, ele serve como sinal de negociação. O sinal de compra é quando o preço de fechamento está acima da linha do indicador ZigZag para ir longo; O sinal de venda é quando o preço de fechamento está abaixo da linha do indicador ZigZag para ir curto. Isso pode rastrear efetivamente as tendências de preços de médio a longo prazo.

Princípio da estratégia

O núcleo desta estratégia é usar o indicador ZigZag para localizar pontos extremos dos preços e exibir tendências de preços.

  1. Calcule a média móvel exponencial EMA dos preços de fechamento, incluindo três linhas médias móveis: linha rápida, linha média e linha lenta.

  2. Julgue se os preços estão em uma tendência de alta, ou seja, se a linha média atual é superior à linha média da linha K anterior.

  3. Se estiver atualmente em uma tendência ascendente, encontrar o preço mais baixo contado desde o início da onda anterior de pontos baixos dentro do ciclo detectado como o valor de ZigZag.

  4. Se estiver atualmente em tendência descendente, encontrar o preço mais alto contado desde o início da onda anterior de pontos altos dentro do ciclo detectado como o valor de ZigZag.

  5. Assim, o indicador ZigZag que reflete os pontos extremos de flutuações de preços é formado.

Com base nisso, usamos a linha ZigZag como referência para julgar a tendência do preço. Ou seja, quando o preço sobe e quebra a linha do indicador ZigZag, vamos longos; quando o preço cai e quebra a linha do indicador ZigZag, vamos curtos.

Análise das vantagens

As vantagens de utilizar o indicador ZigZag para determinar as tendências de preços e acompanhar os extremos de preços enquanto se estabelecem posições são:

  1. Pode filtrar eficazmente o ruído do mercado e captar as principais tendências.

  2. Os sinais de negociação estabelecidos nas rupturas de novos máximos e mínimos podem lucrar de forma eficiente.

  3. As linhas ZigZag são relativamente suaves, o que pode reduzir os sinais falsos.

  4. Fácil de otimizar estratégias ajustando parâmetros ZigZag.

Análise de riscos

Os principais riscos desta estratégia são:

  1. A corrida a longo prazo pode ficar presa devido a violentas flutuações no mercado.

  2. Os indicadores ZigZag são sensíveis aos parâmetros. Configurações incorretas podem perder oportunidades de negociação ou gerar sinais falsos. Os parâmetros precisam ser testados e otimizados adequadamente.

  3. As estratégias de rastreamento de tendências dependem mais dos mercados em tendência.

Em resposta aos riscos acima, podemos definir mecanismos de stop loss para controlar perdas individuais; ao mesmo tempo, ajustar o tamanho da posição em vez de procurar uma posição completa; finalmente, combinar diferentes tipos de carteira de estratégia.

Direcção de otimização

Podemos optimizar ainda mais esta estratégia nos seguintes aspectos:

  1. Adicione um mecanismo de stop loss, por exemplo, configure um stop loss móvel ou um stop loss para amplitude de retração do preço.

  2. Combinar com outros indicadores para filtro de posição, por exemplo, melhorar os indicadores de impulso para garantir um impulso suficiente ou os indicadores de volume de negociação para garantir altos volumes de negociação.

  3. Adotar diferentes configurações de parâmetros de acordo com os diferentes ambientes de mercado (como mercados de alta e baixa).

  4. Teste diferentes parâmetros da linha EMA para encontrar a melhor combinação de parâmetros.

Conclusão

Esta estratégia usa o indicador ZigZag para determinar tendências de preços e estabelece posições de rastreamento perto de pontos extremos. Sua vantagem é seguir a tendência de forma eficiente para lucro. Também tem o risco de ser preso. Podemos definir stop loss, otimizar parâmetros e carteira de estratégia comercial para controlar riscos. Esta estratégia é mais adequada para negociação de tendências de médio a longo prazo. Se controlada e combinada adequadamente, pode obter retornos estáveis.


/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-07 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "Noro's ZigTrend Strategy v1.0", shorttitle = "ZigTrend 1.0", 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)
ExtremeDetection = input(4)
src = input(close)
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, ExtremeDetection)
plot(zigzag, color=black, linewidth=2)

//Signals
up = close > zigzag
dn = close < zigzag

//Trading
lot = 0.0
lot := strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]
if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)


Mais.