Estratégia de Grade Dinâmica Adaptativa para Longo e Curto
Visão Geral
Esta é uma estratégia de trading em grid dinâmico adaptativo long/short, escrita em Pine Script. A ideia central é calcular automaticamente os limites superior e inferior de uma grade com base nos pontos máximos e mínimos recentes dos preços ou numa média móvel simples, dividindo então essa faixa em várias linhas de grade. Quando o preço atinge uma determinada linha de grade, uma posição long é aberta ou fechada nesse nível. Desta forma, a estratégia consegue abrir e fechar posições continuamente em mercados laterais, obtendo ganhos com os spreads. Além disso, ao ajustar dinamicamente os limites da grade, também consegue adaptar-se a diferentes tendências de mercado.
Princípio da Estratégia
-
Cálculo dos limites superior e inferior da grade. Conforme a escolha do utilizador, os limites podem basear-se no máximo e mínimo das últimas N barras, com a opção de expandir ou reduzir uma percentagem; ou podem basear-se na média móvel simples dos preços de fecho das últimas N barras, com uma percentagem de desvio definida.
-
Geração do array de linhas de grade. De acordo com o número definido de linhas de grade, a faixa da grade é dividida uniformemente, gerando um array de preços correspondentes às linhas.
-
Entrada / Adição de posição. Percorrer as linhas de grade de baixo para cima; se o preço de fecho atual for inferior ao preço de uma determinada linha de grade e essa linha ainda não tiver posição, abrir uma posição long nesse nível. Assim, quando o preço atinge linhas de grade mais altas, a posição é continuamente aumentada.
-
Saída / Redução de posição. Percorrer as linhas de grade de cima para baixo; se o preço de fecho atual for superior ao preço de uma determinada linha de grade e a linha de grade imediatamente inferior tiver uma posição aberta, fechar a posição long dessa linha inferior. Desta forma, quando o preço recua, a posição é progressivamente reduzida.
-
Ajuste dinâmico. Se a opção de grelha dinâmica estiver ativada, os limites superior e inferior da grade e o array de linhas são recalculados em cada barra, permitindo que a grade se adapte continuamente às mudanças do mercado.
Análise de Vantagens
-
Elevada adaptabilidade. A estratégia de grid adapta-se a mercados laterais e de tendência. Em mercados laterais, a grade abre e fecha posições continuamente, ganhando spreads; em mercados de tendência, como a grade acompanha o movimento do preço, consegue manter uma certa exposição, capturando ganhos de tendência.
-
Risco controlável. O tamanho de cada posição aberta é determinado pelo número de linhas de grade definido, resultando numa exposição ao risco por operação pequena e controlável. Além disso, como o fecho de posições lucrativas ocorre quando o preço atinge as linhas de grade superiores, também há uma certa proteção contra perdas potenciais.
-
Elevado grau de automação. A estratégia pode funcionar praticamente de forma totalmente automática, sem necessidade de intervenção manual, sendo adequada para investidores que procuram retornos consistentes a longo prazo.
-
Parâmetros flexíveis. O utilizador pode ajustar flexivelmente o número de linhas de grade, os parâmetros de grade dinâmica, etc., de acordo com as características do mercado, de modo a otimizar o desempenho da estratégia.
Análise de Riscos
-
Risco de cisne negro. Em caso de movimentos extremos, como uma queda abrupta com gap de preço diretamente abaixo da linha de grade mais baixa, a estratégia pode ficar totalmente exposta e sofrer um drawdown significativo. Para mitigar este risco, pode ser definida uma condição de stop loss, fechando todas as posições quando a perda atinge um limiar.
-
Definição inadequada dos parâmetros da grade. Se a densidade da grade for demasiado elevada, os spreads entre cada abertura e fecho serão muito pequenos, e as comissões podem corroer a maior parte dos ganhos. Se a largura da grade for demasiado grande, a proporção de posição aberta de uma só vez será elevada, aumentando a exposição ao risco. É necessário avaliar cuidadosamente as características do ativo subjacente e escolher os parâmetros de grade adequados.
-
Risco de base. Esta estratégia define as condições de abertura e fecho com base no preço atual. Em mercados como futuros, se o preço do contrato diferir significativamente do preço do ativo subjacente, os níveis reais de abertura/fecho podem desviar-se consideravelmente do esperado.
Direções de Otimização
-
Inclusão de filtro de tendência. A estratégia de grid tem um desempenho fraco em mercados de tendência unilateral. Pode ser adicionado um indicador de tendência como filtro, por exemplo, ativando a grade apenas quando o ADX está abaixo de um determinado limiar, e desativando-a quando a tendência é clara, mantendo apenas uma posição direcional.
-
Otimização de sinais. Podem ser sobrepostos outros sinais à grade, como grade + média móvel: a grade determina principalmente as aberturas/fechos, mas a posição só é aberta quando o preço cruza uma determinada média móvel; caso contrário, não há abertura. Isto reduz os custos associados a entradas e saídas frequentes.
-
Gestão de posição. Atualmente, a posição por linha de grade é fixa. Pode-se ajustar a posição por linha para ser menor quando o preço está longe do preço médio de mercado, e maior quando está próximo da média, melhorando a eficiência da utilização de capital.
-
Densidade de grade adaptativa. Ajustar dinamicamente a densidade da grade com base na volatilidade do preço: quando a volatilidade é alta, pode-se aumentar o número de linhas de grade; quando é baixa, reduzir. Isto otimiza a largura da grade e melhora a utilização de capital.
Resumo
Esta estratégia, através de uma grade dinâmica adaptativa, consegue abrir e fechar posições frequentemente em mercados laterais para ganhar spreads, e também manter uma certa exposição direcional em mercados de tendência para capturar ganhos de tendência. É uma estratégia quantitativa de médio/longo prazo com boa adaptabilidade. Com uma definição adequada da lógica de acionamento da grade e gestão de posição, é possível obter retornos consistentes. No entanto, é necessário estar atento ao risco de movimentos extremos e gaps de preço, o que requer a definição de condições de stop loss apropriadas para controlar o risco. Além disso, há espaço para otimização adicional na definição de parâmetros e gestão de risco, podendo recorrer a filtros de tendência, sobreposição de sinais, gestão de posição e densidade de grade adaptativa para melhorar a robustez e rentabilidade da estratégia. Em suma, esta estratégia, baseada na lógica fundamental de grade e com um mecanismo de adaptação dinâmica, pode oferecer novas ideias e referências para investidores quantitativos de médio/longo prazo.
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jcloyd
//@version=4
strategy("(IK) Grid Script", overlay=true, pyramiding=14, close_entries_rule="ANY", default_qty_type=strategy.cash, initial_capital=100.0, currency="USD", commission_type=strategy.commission.percent, commission_value=0.1)
i_autoBounds = input(group="Grid Bounds", title="Use Auto Bounds?", defval=true, type=input.bool) // calculate upper and lower bound of the grid automatically? This will theorhetically be less profitable, but will certainly require less attention
i_boundSrc = input(group="Grid Bounds", title="(Auto) Bound Source", defval="Hi & Low", options=["Hi & Low", "Average"]) // should bounds of the auto grid be calculated from recent High & Low, or from a Simple Moving Average
i_boundLookback = input(group="Grid Bounds", title="(Auto) Bound Lookback", defval=250, type=input.integer, maxval=500, minval=0) // when calculating auto grid bounds, how far back should we look for a High & Low, or what should the length be of our sma
i_boundDev = input(group="Grid Bounds", title="(Auto) Bound Deviation", defval=0.10, type=input.float, maxval=1, minval=-1) // if sourcing auto bounds from High & Low, this percentage will (positive) widen or (negative) narrow the bound limits. If sourcing from Average, this is the deviation (up and down) from the sma, and CANNOT be negative.
i_upperBound = input(group="Grid Bounds", title="(Manual) Upper Boundry", defval=0.285, type=input.float) // for manual grid bounds only. The upperbound price of your grid
i_lowerBound = input(group="Grid Bounds", title="(Manual) Lower Boundry", defval=0.225, type=input.float) // for manual grid bounds only. The lowerbound price of your grid.
i_gridQty = input(group="Grid Lines", title="Grid Line Quantity", defval=8, maxval=15, minval=3, type=input.integer) // how many grid lines are in your grid- 1

