Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

sistema de negociacao multiagente ia trading

Sistemas multiagente de IA rodam comitês de LLM em uma trade. Veja a arquitetura, os custos de mercado que um sinal precisa superar e as armadilhas de backtest envolvidas.

Um sistema de negociação multiagente baseado em IA divide uma decisão de trading entre várias instâncias de grandes modelos de linguagem, atribui um papel a cada instância e combina suas saídas em uma única ordem. O elenco usual é composto por um leitor de notícias, um analista fundamentalista, um analista gráfico, um verificador de risco e um agente gestor que arbitra. Em julho de 2026, vários frameworks open source com esse formato estão no tópico de negociação algorítmica no GitHub, cada um com algumas centenas de estrelas. Esta página detalha a arquitetura, separa as evidências publicadas das alegações de README e apresenta dados de mercado sobre os custos que qualquer versão do sistema precisa superar.

O que realmente é um sistema de negociação multiagente baseado em IA

A arquitetura é um comitê com um presidente. Cada agente é um template de prompt, um feed de dados e um esquema de saída. O agente de notícias recebe manchetes e retorna um rótulo. O agente fundamentalista recebe extratos de arquivos e retorna uma pontuação. O agente presidente recebe esses rótulos e pontuações e retorna uma ordem.

Três propriedades decorrem desse design, e cada uma merece ser nomeada antes de qualquer alegação de performance.

Cada agente geralmente compartilha um modelo base. Cinco prompts contra os mesmos pesos produzem opiniões correlacionadas, portanto, um voto de cinco agentes não equivale a cinco estimativas independentes. A estrutura de comitê sugere uma diversificação que a implementação não oferece.

O sistema é um pipeline de texto em torno de uma decisão numérica. O modelo lê palavras e emite um token. O dimensionamento de posição, o tipo de ordem, o posicionamento do stop e a lógica de saída são códigos comuns subjacentes, e a maior parte do que determina o resultado reside nesse código, e não nos prompts.

Um ciclo completo do comitê leva segundos. Isso é viável para um rebalanceamento semanal e irrelevante em velocidade intradiária, onde os formadores de mercado cotam e recotam em microssegundos.

O que a pesquisa apoia e o que não apoia

O trabalho publicado sobre modelos de linguagem em finanças se divide em três alegações de força muito diferente.

Extração e classificação é a alegação forte. Os modelos rotulam sentimento, extraem números de arquivos e comprimem documentos longos com uma precisão que exigia um modelo sob medida alguns anos atrás. É mensurável em texto retido e se sustenta.

Descrição do estado do mercado é a alegação mista. Os modelos escrevem relatos fluentes de um regime, e esses relatos geralmente são consistentes com os dados que foram mostrados ao modelo. Se a descrição carrega informações que o preço já não carrega é uma questão separada, e os artigos que testam isso cuidadosamente relatam efeitos pequenos com amplas margens de erro.

Lucratividade é a alegação fraca. A maioria dos READMEs de repositórios relata um backtest em vez de um histórico real financiado, e a distância entre uma curva de equity in-sample e uma conta real é a distância mais antiga no trading quantitativo. Colocar um modelo de linguagem no loop não a encurta.

O piso de custo que um sinal precisa superar

Toda negociação cruza um spread, e esse cruzamento é o piso que uma estratégia precisa superar antes de qualquer outra coisa. Spread mediano cotado em horário regular, de 22 a 26 de junho de 2026, para seis nomes listados nos EUA:

QueryPiso de custo: spread cotado mediano em pontos-base do ponto médio, horário regular, 22-26 de junho de 2026
O SQL exato por trás de cada número
SELECT ticker,
       round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), bid_price > 0 AND ask_price > bid_price) * 10000, 2) AS spread_bps,
       round(2 * quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), bid_price > 0 AND ask_price > bid_price) * 10000, 2) AS round_trip_bps,
       round(count() / 1e6, 1) AS quote_updates_m
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'KO', 'F', 'RIOT')
  AND sip_timestamp >= toDateTime('2026-06-22 00:00:00')
  AND sip_timestamp < toDateTime('2026-06-27 00:00:00')
  AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY ticker
HAVING countIf(bid_price > 0 AND ask_price > bid_price) > 0
ORDER BY spread_bps
Run this yourself

Um ponto-base é um centésimo de ponto percentual. O nome mais apertado no painel, SPY, cotou um spread mediano de 0.27 pontos-base naquela semana. O mais amplo, RIOT, cotou 7.09. Um round trip paga o spread duas vezes, portanto, uma entrada e saída no primeiro nome começa 0.55 pontos-base atrás, e o mesmo par no último nome começa 14.19 atrás. Um agente que gira seu book duas vezes por semana paga esse pedágio cerca de cem vezes por ano, e o pedágio é cobrado independentemente de a chamada ter sido correta ou errada. Quanto custa negociar uma ação detalha o restante da conta.

O ruído que uma chamada direcional precisa superar

As chamadas direcionais são avaliadas em relação a uma distribuição que é composta principalmente por números pequenos. Cada sessão do SPY no ano-calendário de 2025, ordenada pelo tamanho de seu movimento de fechamento para fechamento:

QueryTamanho de uma sessão típica: movimentos de fechamento a fechamento do SPY por faixa de magnitude, ano-calendário de 2025
O SQL exato por trás de cada número
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           argMax(close, window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2025-01-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= 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 d
),
paired AS (
    SELECT d, close_px,
           any(close_px) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_px
    FROM daily
),
rets AS (
    SELECT d, round(100 * (toFloat64(close_px) / toFloat64(prev_px) - 1), 3) AS ret_pct
    FROM paired
    WHERE prev_px > 0
)
SELECT multiIf(abs(ret_pct) < 0.25, 'under 0.25%',
               abs(ret_pct) < 0.5, '0.25 to 0.5%',
               abs(ret_pct) < 1.0, '0.5 to 1%',
               abs(ret_pct) < 2.0, '1 to 2%',
               '2% and up') AS move_bucket,
       count() AS sessions,
       round(100 * count() / sum(count()) OVER (), 1) AS pct_of_sessions
FROM rets
GROUP BY move_bucket
ORDER BY min(abs(ret_pct))
Run this yourself

Metade do ano ficou dentro de meio por cento. A faixa de under 0.25% conteve 24.9% das sessões, e a faixa de 0.25 to 0.5% conteve outros 24.1%. No outro extremo, 13 sessões moveram 2% and up, 5.2% do ano.

Coloque isso ao lado do painel de spread. Um ponto-base é 0,01%. Um movimento típico de sessão de 0,3% é trinta vezes um spread apertado e aproximadamente quatro vezes o spread amplo. A aritmética deixa espaço para uma chamada correta e paciente, e muito pouco para uma chamada rápida e marginal.

Onde o universo negociável realmente se encontra

Os frameworks de agentes anunciam cobertura, muitas vezes centenas de tickers escaneados todas as manhãs. O volume em dólar mostra quanto dessa lista pode absorver tamanho. Cada nome listado nos EUA que negociou durante o horário regular em 30 de junho de 2026, agrupado por sua classificação no volume em dólar daquela sessão:

QueryOnde o dinheiro negocia: volume em dólar americano por nível de liquidez, horário regular, 30 de junho de 2026
O SQL exato por trás de cada número
WITH tv AS (
    SELECT ticker,
           sum(toFloat64(close) * toFloat64(volume)) AS dollar_volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE toDate(toTimeZone(window_start, 'America/New_York')) = 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
    HAVING sum(toFloat64(close) * toFloat64(volume)) > 0
),
ranked AS (
    SELECT ticker, dollar_volume,
           row_number() OVER (ORDER BY dollar_volume DESC) AS rk
    FROM tv
)
SELECT multiIf(rk <= 10, 'top 10 names',
               rk <= 50, 'ranks 11 to 50',
               rk <= 200, 'ranks 51 to 200',
               rk <= 1000, 'ranks 201 to 1000',
               'ranks beyond 1000') AS liquidity_tier,
       count() AS tickers,
       round(sum(dollar_volume) / 1e9, 2) AS dollar_volume_bn,
       round(100 * sum(dollar_volume) / (SELECT sum(dollar_volume) FROM tv), 1) AS pct_of_dollar_volume
FROM ranked
GROUP BY liquidity_tier
ORDER BY min(rk)
Run this yourself

Dez nomes carregaram 22.5% do volume em dólar da sessão, cerca de 205.04 bilhões de dólares. Os próximos 40 carregaram 20.5%. No outro extremo, 10966 nomes classificados além de 1000 compartilharam 12.9% entre si, aproximadamente 117.83 bilhões de dólares espalhados por toda a cauda.

Amplitude é barata de anunciar e cara de negociar. Um comitê que classifica três mil nomes gasta a maior parte de seu esforço de classificação nessa cauda, onde o painel de spread acima é um custo real, e não um erro de arredondamento.

Por que esses backtests favorecem o sistema

A maior fonte única de um backtest favorável é a escolha da janela. SPY por ano-calendário, de 2016 a 2025, com a diferença entre o preço de fechamento mais alto e o mais baixo do ano:

QueryA janela decide a resposta: retorno de preço do SPY no ano-calendário e amplitude intra-anual de máxima a mínima, 2016-2025
O SQL exato por trás de cada número
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           argMax(close, window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2016-01-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= 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 d
),
yr AS (
    SELECT toYear(d) AS year,
           argMin(close_px, d) AS first_close,
           argMax(close_px, d) AS last_close,
           max(close_px) AS high_close,
           min(close_px) AS low_close,
           count() AS sessions
    FROM daily
    GROUP BY year
)
SELECT year,
       sessions,
       round(100 * (toFloat64(last_close) / toFloat64(first_close) - 1), 1) AS price_return_pct,
       round(100 * (toFloat64(high_close) / toFloat64(low_close) - 1), 1) AS high_low_range_pct
FROM yr
ORDER BY year
Run this yourself

Um sistema testado apenas em 2021, um ano que fechou 28.7% mais alto, herda uma tape em alta. O mesmo sistema testado apenas em 2022, que fechou -20%, herda uma tape em queda. A diferença intranual entre o fechamento mais alto e o mais baixo atingiu 68% em 2020 e permaneceu acima de 25.3% mesmo nos anos mais calmos.

Quatro armadilhas se somam ao problema da janela, e uma delas pertence exclusivamente aos modelos de linguagem.

  • Viés de futuro através dos dados de treinamento. Um modelo treinado em texto até 2025 já leu como uma negociação de 2023 se desenrolou. Um backtest sobre 2023 faz uma pergunta para a qual o modelo já sabe a resposta, e nenhuma reorganização da série de preços remove esse conhecimento.
  • Viés de sobrevivência na lista de tickers. Um universo montado a partir das listagens atuais omite os nomes que foram deslistados ao longo do caminho.
  • Premissas de preenchimento. Um backtest que preenche cada ordem no preço médio apaga todo o painel de custos acima.
  • Seleção sobre variantes de prompt. Vinte redações de prompt testadas e a melhor relatada é o mesmo overfitting que atormentou as varreduras de parâmetros muito antes dos modelos de linguagem existirem.

Onde os agentes de modelo de linguagem plausivelmente ajudam

A versão honesta do discurso de vendas é mais restrita do que a versão do README e ainda assim útil.

A leitura de volume é a vitória mais clara. Um agente que analisa todos os arquivos e manchetes de uma watchlist durante a noite e retorna um resumo estruturado economiza horas de atenção humana, e a saída é verificável em relação à fonte.

Descrever um regime em linguagem simples é o segundo. Um parágrafo diário sobre dispersão, amplitude e volatilidade, gerado a partir dos mesmos números que um humano leria, é um documento informativo útil, mesmo quando não carrega nenhuma previsão.

A higiene do processo é o terceiro. Um agente que recusa uma ordem que viola um limite de posição declarado, ou que sinaliza uma estratégia prestes a negociar em uma data de resultados, impõe regras que um humano distraído ignora.

Nenhum desses três é uma vantagem no mercado. Todos os três são trabalho de pesquisa e operações, que é onde os ganhos mensuráveis estão hoje. Um efeito documentado como a anomalia da baixa volatilidade exigiu grandes amostras e replicação repetida fora da amostra antes que alguém o tratasse como real, e um novo framework de agente enfrenta a mesma barreira ou não a supera. Perder os melhores dias mostra o que a troca frequente custa a um investidor de longo prazo.

A disciplina que os profissionais descrevem

Equipes que executam esses sistemas publicamente tendem a descrever a mesma sequência. Teste forward em preenchimentos simulados por meses, e não dias, já que um registro em papel se acumula apenas na velocidade do tempo real. Mantenha um trecho fora da amostra que os prompts nunca viram. Registre cada prompt, cada resposta e cada ordem, já que um comitê que não pode ser reproduzido não pode ser depurado. Dimensione as posições com regras fixas que estão fora do modelo. Conte cada custo dos painéis acima antes de chamar qualquer trecho de lucrativo.

FAQ

Os sistemas de negociação multiagente baseados em IA realmente ganham dinheiro?

A evidência pública é escassa. A maioria dos projetos open source publica um backtest em vez de um histórico real auditado, e os backtests de estratégias de modelo de linguagem carregam uma falha específica: o modelo foi treinado em texto que descreve o período de teste. Uma curva de equity não auditada demonstra o software, não uma vantagem.

Um comitê de agentes LLM é melhor do que um único modelo?

Um comitê reduz alguns erros de formatação e análise e adiciona estrutura à saída. Ele não adiciona informações independentes quando cada agente consulta o mesmo modelo base sobre os mesmos dados subjacentes. Cinco opiniões correlacionadas votam como aproximadamente uma opinião, com latência extra e custo de token extra.

Um agente de IA pode negociar mais rápido que um formador de mercado?

Não. Um ciclo completo de modelo de linguagem leva segundos, enquanto os sistemas profissionais de cotação operam em microssegundos em hardware colocalizado. Qualquer estratégia cujo lucro dependa de velocidade está fora do alcance desses sistemas, o que deixa horizontes de dias e semanas como o terreno plausível.

Qual é a maior armadilha de backtest específica para agentes de trading LLM?

Viés de futuro nos dados de treinamento. Backtests convencionais protegem contra o vazamento de preços futuros em uma decisão, mas os pesos de um modelo já codificam comentários publicados sobre a janela de teste. Janelas walk-forward e divisões fora da amostra não removem o conhecimento incorporado nos pesos, e o único teste limpo é um período após o corte do treinamento.

Por quanto tempo um período de paper trading precisa durar?

O enquadramento útil é o tamanho da amostra, e não a duração do calendário. Uma estratégia que negocia semanalmente produz cerca de cinquenta observações por ano, uma amostra pequena para qualquer alegação de vantagem. Os profissionais geralmente querem negociações suficientes para ter visto um drawdown, e não apenas um bom trecho.


Cada painel nesta página é uma consulta armazenada e versionada sobre dados reais do mercado dos EUA. Abra qualquer painel para ler o SQL por trás dele, ou execute o seu próprio nas mesmas tabelas no terminal Strasmore.

#ai agents#llm#algorithmic trading#automation#backtesting