Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

robô de grid trading como funciona

Um robô de grid trading compra em cada degrau de queda e vende em cada degrau de alta dentro de um intervalo fixo. Veja o formato de mercado que paga o mecanismo e o que o quebra.

Um robô de grid trading coloca uma escada de ordens em intervalos de preço fixos: uma compra em cada degrau abaixo do preço atual, uma venda em cada degrau acima dele. Cada vez que o mercado cai um degrau, o robô compra. Cada vez que sobe um degrau, o robô vende o que comprou mais abaixo. O mecanismo colhe oscilação e acumula uma posição aberta sempre que o mercado se afasta da escada em uma direção e continua.

Esta página desmonta a mecânica e, em seguida, mede os dois formatos de mercado que decidem seu resultado. Cada painel abaixo é uma consulta armazenada sobre preços reais de ações dos EUA, fixada em datas específicas para que os números permaneçam reproduzíveis.

Como funciona um robô de grid trading

Três configurações definem uma grade: os limites superior e inferior do intervalo, o número de linhas dentro dele e o tamanho da ordem em cada linha. O espaçamento entre as linhas decorre dos dois primeiros.

Aqui está a aritmética, usando números redondos escolhidos para clareza, e não de uma cotação real. Suponha que uma ação seja negociada perto de $100 e um operador defina uma grade de $95 a $105 com onze linhas com diferença de um dólar e 100 ações por linha. O preço cai para $99 e a ordem de compra pendente é executada. O preço retorna para $100 e a ordem de venda correspondente é executada, fechando o par para um lucro bruto de $100. Ambas as ordens são rearmadas. Nada mudou na empresa naquela hora. A posição simplesmente completou uma viagem de ida e volta entre dois degraus adjacentes.

Duas variantes aparecem nos projetos de código aberto que circulam publicamente. Uma grade aritmética espaça as linhas por um valor fixo em dólar. Uma grade geométrica as espaça por uma porcentagem fixa, o que mantém o lucro percentual por viagem de ida e volta estável em uma ampla faixa. A documentação também separa uma grade neutra, que começa plana e opera em ambas as direções, de uma grade longa, que começa mantendo estoque e vende na alta.

O formato do retorno merece uma frase direta. O lucro em uma viagem de ida e volta concluída é limitado a um passo da grade menos os custos. A posição aberta que se acumula quando o preço sai do intervalo não carrega limite correspondente.

O formato de mercado que uma grade precisa

Uma grade é paga pela viagem, não pela direção. Duas ações podem terminar um período no mesmo preço após percorrer distâncias radicalmente diferentes. Somar o tamanho absoluto de cada movimento diário dá a distância total percorrida. Dividir o movimento líquido por essa distância dá um índice de eficiência, uma medida padrão de quão direcional foi um caminho. Um índice baixo descreve um caminho que vagou. Um índice alto descreve uma marcha reta.

QueryDistância percorrida vs movimento líquido: doze ações conhecidas, jan 2024 a jun 2026
O SQL exato por trás de cada número
WITH daily AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
           argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY','KO','PG','JNJ','VZ','MO','XOM','JPM','WMT','NVDA','TSLA','NFLX')
      AND toDate(toTimeZone(window_start, 'America/New_York')) BETWEEN toDate('2024-01-02') AND toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, dt
),
steps AS (
    SELECT ticker, dt, c,
           c / lagInFrame(c) OVER (PARTITION BY ticker ORDER BY dt) - 1 AS ret
    FROM daily
)
SELECT ticker,
       round(sum(abs(ret)) * 100, 0) AS travel_pct,
       round(abs(argMax(c, dt) / argMin(c, dt) - 1) * 100, 1) AS net_move_pct,
       round(100 * abs(argMax(c, dt) / argMin(c, dt) - 1) / sum(abs(ret)), 1) AS efficiency_pct
FROM steps
WHERE ret > -0.5 AND ret < 0.5
GROUP BY ticker
ORDER BY efficiency_pct
Run this yourself

Leia a primeira e a última linhas juntas. PG cobriu 527% de movimento diário acumulado e terminou 0.9% de onde começou, uma eficiência de 0.2%. SPY está na extremidade oposta em 14.3%, transformando 415% de viagem em um movimento líquido de 59.2%. Uma escada de grade colocada no primeiro caminho encontra seus próprios degraus repetidamente. A mesma escada colocada no segundo caminho é deixada para trás.

Calma e limitada a um intervalo são propriedades relacionadas, mas distintas. Uma ação pode derivar para cima em incrementos diários muito pequenos e ainda deixar uma grade encalhada, o que é uma das razões pelas quais os nomes estudados na literatura da anomalia da baixa volatilidade não são automaticamente material para grade.

Contando as viagens de ida e volta

A eficiência é uma lente. A receita da grade depende de algo mais concreto: quantas vezes o preço realmente revisita um nível. Ancorando no primeiro fechamento de cada ano civil e contando as sessões cujo fechamento cai no lado oposto dessa âncora, obtém-se o número de cruzamentos que uma única linha de grade teria capturado. A Coca-Cola (KO) é o assunto aqui, um nome de consumo grande e líquido do tipo que a documentação de grade tende a apresentar.

QueryKO: cruzamentos do nível de abertura do ano, por ano civil, 2019 a 2025
O SQL exato por trás de cada número
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
           argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'KO'
      AND toDate(toTimeZone(window_start, 'America/New_York')) BETWEEN toDate('2019-01-01') AND toDate('2025-12-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY dt
),
anchored AS (
    SELECT toYear(dt) AS year, dt, c,
           first_value(c) OVER (PARTITION BY toYear(dt) ORDER BY dt) AS anchor
    FROM daily
),
sided AS (
    SELECT year, dt, c, anchor,
           if(c >= anchor, 1, 0) AS side,
           row_number() OVER (PARTITION BY year ORDER BY dt) AS rn,
           lagInFrame(if(c >= anchor, 1, 0)) OVER (PARTITION BY year ORDER BY dt) AS prev_side
    FROM anchored
)
SELECT year,
       countIf(rn > 1 AND side != prev_side) AS crossing_count,
       count() AS sessions,
       round((argMax(c, dt) / any(anchor) - 1) * 100, 1) AS net_change_pct
FROM sided
GROUP BY year
ORDER BY year
Run this yourself

Em 2019, o fechamento cruzou seu próprio nível de abertura 8 vezes em 252 sessões, terminando o ano 17.9% desse nível. Em 2025, a contagem foi de 6 em 250 sessões, com uma variação líquida de 13%. Uma linha, uma ação, e a matéria-prima para uma grade varia várias vezes de ano para ano, sem como saber a contagem do ano seguinte com antecedência.

Essa variabilidade é o problema silencioso. O retorno anunciado de uma grade geralmente é cotado por viagem de ida e volta concluída, e o número de viagens de ida e volta é definido pelo mercado, não pelas configurações.

Onde uma grade quebra

O modo de falha tem um formato específico. Fixe uma grade em um intervalo e deixe o mercado sair dele. Abaixo, o teto e o piso são os fechamentos mais alto e mais baixo das primeiras vinte sessões de 2024, mantidos fixos nos trinta meses seguintes, com o fechamento mensal do tracker do S&P 500 desenhado contra eles.

QueryGrade fixada no início de 2024, e para onde o tracker do S&P 500 foi depois
O SQL exato por trás de cada número
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
           argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) BETWEEN toDate('2024-01-02') AND toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY dt
),
opening_20 AS (
    SELECT c FROM daily ORDER BY dt LIMIT 20
),
band AS (
    SELECT min(c) AS grid_low, max(c) AS grid_high FROM opening_20
),
monthly AS (
    SELECT toStartOfMonth(dt) AS month_start, argMax(c, dt) AS close_px
    FROM daily
    GROUP BY month_start
)
SELECT formatDateTime(monthly.month_start, '%Y-%m') AS month,
       round(monthly.close_px, 2) AS spy_close,
       round(band.grid_high, 2) AS grid_top,
       round(band.grid_low, 2) AS grid_bottom
FROM monthly, band
ORDER BY monthly.month_start
Run this yourself

A faixa vai de $467.27 a $491.26. O primeiro mês da série fechou a $482.92, dentro dela. O último dos 30 meses fechou a $746.32, muito acima do teto, e o gráfico mostra a linha saindo da faixa e nunca mais voltando.

Percorra o que a escada faz ao longo desse caminho. Subindo pelo intervalo, o robô vende o estoque degrau por degrau, embolsando um passo de lucro a cada vez. Acima do teto, ele detém dinheiro e observa. Cada ponto adicional do avanço é um ganho do qual o operador não participa mais, o que é a versão suave da falha.

A versão severa é a imagem espelhada. O preço cai abaixo do piso e o robô comprou em cada degrau na descida, então agora detém a escada completa de estoque a um custo médio acima do mercado, com cada passo adicional ampliando a perda não realizada. Um intervalo que antes produzia negociações estáveis, pequenas e visivelmente bem-sucedidas se transforma em uma única posição concentrada. O marketing de grade descreve isso como o robô estar "preso"; em um extrato de corretora, é um drawdown aberto sem saída embutida.

Custos escalam com o número de negociações

Uma grade completa muitas negociações pequenas, e cada uma paga o custo total de uma viagem de ida e volta: o spread, mais comissões ou taxas de bolsa quando aplicáveis. O spread bid-ask é a peça mais frequentemente omitida da matemática da grade, já que nunca aparece em um extrato como um item de linha.

A aritmética ilustrativa é rápida. Em uma ação de $100 com um spread de um centavo, uma viagem de ida e volta que cruza o spread em ambos os lados abre mão de aproximadamente dois centavos, ou 0,02% do valor nocional. Contra um passo de grade de um dólar, isso é cerca de 2% do lucro bruto por viagem. Aumente o spread para cinco centavos, um valor rotineiro em um nome mais fino, e a mesma viagem abre mão de dez centavos contra um dólar de lucro bruto, ou 10%. Apertar a grade para passos de dez centavos para pegar mais oscilação reduz o lucro bruto por viagem para dez centavos, deixando o custo inalterado, e o spread de cinco centavos agora consome toda a negociação.

Essa relação estabelece um piso para o espaçamento útil da grade: os passos devem permanecer grandes em relação aos custos de ida e volta, e quanto mais apertada a grade, mais de sua receita pertence à bolsa, e não ao operador.

Por que backtests favorecem robôs de grid trading

Estratégias de grade produzem backtests excepcionalmente atraentes, e quatro razões estruturais explicam a maior parte disso.

  1. Seleção de intervalo com retrospectiva. Limites escolhidos após ver os dados conterão os dados. Uma grade ajustada a um período que variou dentro de um intervalo mostrará uma alta taxa de acerto naquele período.
  2. A escada não fechada. Um teste que para em uma data final escolhida frequentemente conta as viagens de ida e volta realizadas enquanto trata o estoque restante de forma generosa. A contabilidade honesta marca a posição aberta a mercado no último dia e inclui essa perda no resultado.
  3. Suposições de execução. Ordens pendentes simuladas são executadas sempre que o preço as toca. Filas reais nem sempre executam no toque, e as viagens que não conseguem executar são desproporcionalmente as lucrativas em mercados rápidos.
  4. Densidade de parâmetros. Limites, número de linhas, espaçamento e tamanho da ordem fornecem quatro botões sobre uma única série de preços, o que é suficiente para ajustar quase qualquer janela histórica.

As contagens de cruzamento acima são o contrapeso para todas as quatro. Elas vêm apenas do histórico de preços, sem configurações anexadas, e variam ano a ano de uma forma que nenhuma escolha de parâmetro controla. Qualquer um avaliando uma alegação de grade pode fazer uma única pergunta: de quantas viagens de ida e volta concluídas isso depende, e de onde veio essa contagem? Um período de prática em um simulador, com a escada aberta marcada a mercado no final, responde a isso mais honestamente do que um gráfico de viagens realizadas.

FAQ

Robôs de grid trading realmente ganham dinheiro?

Uma grade ganha um lucro limitado em cada viagem de ida e volta concluída e carrega uma posição aberta ilimitada quando o preço sai de seu intervalo. Se as viagens realizadas superam a posição aberta em qualquer período depende de quanto o mercado oscilou dentro desse intervalo, o que é uma propriedade do mercado, e não do software.

Que condições de mercado são adequadas para um robô de grid?

O mecanismo é construído para um preço que revisita repetidamente os mesmos níveis: alta distância total percorrida em relação ao movimento líquido. No painel de doze nomes acima, os índices de eficiência variaram de 0.2% na extremidade errante a 14.3% na extremidade direcional, e o mecanismo de escada encontra seus próprios degraus apenas na primeira extremidade.

O que acontece quando o preço sai do intervalo da grade?

Acima do intervalo, o robô vendeu seu estoque e fica em dinheiro enquanto o mercado continua sem ele. Abaixo do intervalo, ele detém cada degrau que comprou na descida, a um custo médio acima do preço atual, e cada declínio adicional amplia essa perda não realizada.

Como o grid trading é diferente do dollar-cost averaging?

Ambos compram mais à medida que o preço cai, e aí termina a semelhança. O dollar-cost averaging adiciona um valor fixo em um cronograma fixo, sem regra de saída e sem limite superior. Uma grade compra e vende com base em gatilhos de preço dentro de um intervalo escolhido antecipadamente, e seu comportamento muda completamente assim que o preço sai desse intervalo.

Um espaçamento de grade mais apertado produz mais receita?

Um espaçamento mais apertado aumenta o número de viagens de ida e volta e reduz o lucro bruto em cada uma, enquanto o custo da viagem de ida e volta permanece o mesmo. Além de um ponto definido pelo spread, viagens adicionais subtraem do total, em vez de adicionar a ele.


Cada figura acima vem de uma consulta armazenada e versionada sobre preços reais de ações; abra o SQL abaixo de qualquer painel para verificá-la, ou meça a viagem contra o movimento líquido em sua própria lista de nomes no terminal Strasmore.

#grid trading#trading bots#automation#mean reversion#market data