
A estratégia de negociação apresentada neste artigo é a estratégia de negociação de seguimento de tendências baseada no indicador ZigZag. A estratégia usa o indicador ZigZag para identificar tendências de preços e abrir posições para seguir a tendência quando a tendência se inverte. No código Strategy Pine, o indicador ZigZag é usado para confirmar novos altos e novos baixos de preços.
O núcleo da estratégia é o uso do indicador ZigZag para localizar os extremos dos preços e mostrar a tendência dos preços. O indicador ZigZag é composto por uma média móvel exponencial de preços altos e baixos.
O EMA é uma média móvel indexada de preços de fechamento, composta por três médias móveis: linha rápida, linha média e linha lenta.
A linha média é a linha que indica se o preço está em alta ou baixa.
Se a tendência atual é ascendente, então encontre o preço mais baixo no período de detecção, contando a partir do ponto mais baixo da onda anterior, como o valor de ZigZag.
Se a tendência atual é de queda, então encontre o preço mais alto no período de detecção, contando a partir do pico da onda anterior, como o valor de ZigZag.
Assim se formou o indicador ZigZag, que reflete os extremos da oscilação dos preços.
Com base nisso, nós usamos a linha ZigZag como referência para avaliar a tendência dos preços. Ou seja, quando os preços sobem, nós fazemos mais; quando os preços caem, nós fazemos menos.
As vantagens de usar o indicador ZigZag para determinar a tendência dos preços e rastrear os extremos dos preços como posicionamento são:
O Google Analytics é uma ferramenta que permite filtrar o ruído do mercado e captar as principais tendências.
Os sinais de negociação baseados em alta e baixa de preços podem ser altamente lucrativos.
A linha ZigZag é mais suave e pode reduzir sinais falsos.
É fácil de otimizar a estratégia, ajustando os parâmetros ZigZag.
Os principais riscos desta estratégia são:
A operação de longo prazo pode ser bloqueada por uma forte volatilidade.
Os indicadores ZigZag são sensíveis aos parâmetros. Se não forem configurados adequadamente, podem perder oportunidades de negociação ou gerar falsos sinais. Os parâmetros precisam ser testados e otimizados adequadamente.
A estratégia de acompanhamento de tendências depende mais da situação da tendência. A estratégia não é muito eficaz se houver um balanço de choque.
Para os riscos acima, podemos configurar um mecanismo de stop loss para controlar perdas individuais; ao mesmo tempo, ajustar o tamanho da posse, não perseguir a operação de toda a posição; e, finalmente, combinar diferentes tipos de estratégias.
A estratégia pode continuar a ser melhorada nos seguintes aspectos:
Aumentar os mecanismos de suspensão de perdas, como a definição de suspensão móvel ou de suspensão de retorno de preço.
Em combinação com outros indicadores, filtrar a entrada. Por exemplo, o indicador de energia reforçada, para garantir que haja energia dinâmica suficiente; ou o indicador de volume de transação, para garantir que haja características de emissão.
Configurações de parâmetros diferentes de acordo com diferentes cenários de mercado (por exemplo, mercado de touros e mercados de ursos).
Testar diferentes parâmetros da linha média da EMA para encontrar a melhor combinação de parâmetros.
Esta estratégia usa o indicador ZigZag para determinar a tendência dos preços e estabelecer posições de acompanhamento perto do ponto extremo. Sua vantagem é que ela é correta e eficiente. Ao mesmo tempo, existe risco de cobertura.
/*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)