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.
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 é:
Use o ema para suavizar o preço de fechamento com médias móveis exponenciais triplas, obtendo a curva suavizada _hls.
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.
Repita este processo para obter a linha zigzag zigzag.
Quando o zig-zag subir, registe o ponto de pico atual.
Desenhe a linha verde de suporte para cima quando o ponto sobe, a linha vermelha de resistência para baixo quando o ponto cai.
Tomar posição longa quando o preço ultrapassa a linha verde.
As vantagens desta estratégia incluem:
Identificar os principais níveis de suporte/resistência usando o indicador Zigzag.
O zigzag filtra algum ruído do mercado, gerando sinais comerciais mais claros.
Entrar em posições através de breakout, que pode capturar as reversões de tendência em tempo útil.
Uma forma simples e eficaz de desenhar linhas de apoio/resistência.
Lógica clara e grande espaço de otimização de parâmetros.
Flexibilidade na escolha de produtos e prazos.
Riscos desta estratégia:
Parâmetros Zigzag inadequados podem perder oportunidades comerciais.
Os preços podem testar novamente o suporte/resistência após a quebra.
Os sinais de ruptura podem ser enganosos, precisam de validação com tendências e padrões.
Os trâmites laterais prolongados podem gerar transacções ineficazes excessivas.
Considere os custos de transação e evite trocas excessivamente frequentes.
Soluções:
Otimize os parâmetros do zigzag para encontrar a melhor combinação.
Configure um stop loss oportuno após a ruptura para limitar as perdas.
Adicionar filtros como indicadores de tendência para melhorar a precisão.
Identifique os laterais e evite negociar durante estes períodos.
Relaxa a faixa de ruptura para reduzir as transacções ineficazes.
A estratégia pode ser otimizada nos seguintes aspectos:
Otimize os parâmetros do Zigzag por backtesting para encontrar o ideal.
Considere a possibilidade de testar novamente o suporte/resistência após a quebra.
Adicionar filtros como MA para filtrar sinais de baixa probabilidade.
Incorporar indicadores de volume para confirmar sinais de ruptura.
Implementar a metodologia dupla de Lachenbruch (longa e curta) para filtrar sinais incorretos e lucro.
Usar machine learning para otimizar dinamicamente parâmetros.
Introduzir uma estratégia de stop loss para limitar os riscos.
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)