Estratégia de acompanhamento de tendências baseada em ZigZag


Data de criação: 2023-10-30 14:51:08 última modificação: 2023-10-30 14:51:08
cópia: 1 Cliques: 956
1
focar em
1702
Seguidores

Estratégia de acompanhamento de tendências baseada em ZigZag

Visão geral

A estratégia usa o indicador ZigZag para determinar a direção da tendência e, após a confirmação da tendência, faz o acompanhamento da tendência.

Princípio da estratégia

A estratégia é baseada em um indicador ZigZag que filtra o ruído do mercado e determina a direção das principais flutuações de preços. O ZigZag emite um sinal de negociação quando os preços atingem novos altos ou baixos.

Concretamente, a estratégia primeiro calcula o valor de ZigZag, quando o preço cria um alto mais alto, ZigZag para o preço do alto; quando o preço cria um baixo mais baixo, ZigZag para o preço do baixo. Assim, o ZigZag pode refletir claramente a direção principal da oscilação do preço.

A estratégia determina a direção da tendência com base no valor do ZigZag. Quando o ZigZag sobe, indica que está em uma tendência de alta; Quando o ZigZag desce, indica que está em uma tendência de baixa. A estratégia abre uma posição quando o ZigZag se reverte para acompanhar a direção da tendência.

Especificamente, a estratégia é abrir uma ordem excedente quando a rotação de ZigZag forma uma nova alta e abrir uma ordem vazia quando a rotação de ZigZag forma uma nova baixa. A condição de posição livre é a rotação de ZigZag novamente. Isso permite uma estratégia de negociação automática baseada na tendência de ZigZag.

Análise de vantagens estratégicas

  • O indicador ZigZag é usado para avaliar as tendências, filtrando o ruído do mercado e determinando a direção das principais tendências.
  • O ponto de viragem do ZigZag é preciso e pode ser um bom momento de entrada.
  • Implementa uma estratégia de rastreamento de tendências completa, sem a necessidade de outros indicadores ou modelos complexos.
  • A lógica da estratégia é simples e clara, fácil de entender e modificar.
  • A frequência de negociação de estratégias de controle livre pode ser ajustada por parâmetros.

Análise de Riscos

  • O ZigZag não é sensível à transição de linha curta para a linha média, podendo perder a reversão mais rápida.
  • A estratégia de acompanhamento de tendências não permite lidar com os prejuízos causados pela reversão de tendências.
  • Não é possível limitar o tamanho da perda individual, existindo um risco maior de perda individual.
  • A estratégia baseia-se apenas num indicador, podendo haver um risco de sobre-ajuste.

O risco pode ser reduzido através das seguintes medidas:

  • Combinação de outros indicadores para avaliar o risco de reversão de tendência.
  • A redução apropriada do tempo de detenção e o fim dos prejuízos.
  • A adição de um módulo de gestão de fundos para limitar o tamanho de uma única perda.
  • Aumentar os modelos de aprendizagem de máquina e aumentar a robustez das estratégias.

Direção de otimização

A estratégia pode ser melhorada em vários aspectos:

  1. Aumentar a estratégia de stop loss para controlar o risco de perdas individuais. Pode-se definir um stop loss móvel ou um stop loss pendente.

  2. Adição de mecanismo de julgamento de reversão de tendência. Indicadores como MACD, média móvel e outros podem ser incluídos para fechar posições quando a tendência é julgada.

  3. Adicionar o módulo de reentrada. Quando a tendência continua, pode-se aumentar a posição apropriada para obter mais lucro.

  4. Adicionar modelos de aprendizagem de máquina. Pode treinar modelos de aprendizagem profunda, como o LSTM, auxiliando o ZigZag a determinar a direção das tendências.

  5. Mecanismos de otimização de gestão de fundos. O tamanho da posição pode ser otimizado de acordo com a retirada ou a teoria da correlação.

  6. Os parâmetros de otimização global são definidos. Os parâmetros de otimização podem ser verificados com o histórico e com a referência a livros especializados, como o comprimento do ciclo de ZigZag.

Resumir

A estratégia usa o indicador ZigZag para determinar a direção da tendência e implementa uma estratégia de negociação baseada na tendência. A lógica da estratégia é simples, clara e fácil de implementar. Mas também há problemas de dependência de um único indicador, risco de reversão da tendência. Podemos fazer otimização multidimensional em termos de stop loss, indicadores auxiliares, módulos de reentrada, aprendizado de máquina, etc., para tornar a estratégia mais robusta e racional.

Código-fonte da estratégia
/*backtest
start: 2022-10-23 00:00:00
end: 2023-04-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's ZZ Strategy v1.0", shorttitle = "ZZ str 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(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
tf = input('W', title='Timeframe for ZigZag')
showzz = input(false, defval = false, title = "Show ZigZag")
showbg = input(false, defval = false, title = "Show Background")
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
zigzag() =>
    _isUp = close >= open
    _isDown = close <= open
    _direction = _isUp[1] and _isDown ? -1 : _isDown[1] and _isUp ? 1 : nz(_direction[1])
    _zigzag = _isUp[1] and _isDown and _direction[1] != -1 ? highest(2) : _isDown[1] and _isUp and _direction[1] != 1 ? lowest(2) : na
useAltTF = true
zz = useAltTF ? (change(time(tf)) != 0 ? request.security(syminfo.tickerid, tf, zigzag()) : na) : zigzag()
zzcolor = showzz ? black : na
plot(zz, title = 'ZigZag', color = zzcolor, linewidth = 2)

//Levels
dot = zz > 0 ? zz : dot[1]
uplevel = dot > dot[1] ? dot : uplevel[1]
dnlevel = dot < dot[1] ? dot : dnlevel[1]
colorup = close[1] < uplevel[1] and uplevel == uplevel[1] ? lime : na
colordn = close[1] > dnlevel[1] and dnlevel == dnlevel[1] ? red : na
plot(uplevel, color = colorup, linewidth = 3)
plot(dnlevel, color = colordn, linewidth = 3)

//Background
size = strategy.position_size
bgcol = showbg == false ? na : size != size[1] ? blue : na
bgcolor(bgcol, transp = 50)

//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]

if uplevel > 0 and dnlevel > 0
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel + syminfo.mintick)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel - syminfo.mintick)

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()