PolymarketClickHouse Workshops

07 Analista de mercado com IA

Entregue suas tabelas de mercado ao vivo a um ClickHouse Agent, faça-o detectar e investigar um movimento por conta própria e arbitre a resposta com SQL determinístico.

Seu computador
Terminal do macOS: Execute os comandos do workshop no Terminal usando zsh ou bash.

Ponto de partida

O coletor está saudável no modo live, degraded ou fixture, as consultas do Módulo 05 retornam e você está conectado à organização que possui polymarket-workshop. Nenhuma chave de API nova ou processo local é necessário: ClickHouse Agents roda no Cloud com a identidade criada no Módulo 00.

Por quê

O Módulo 05 respondeu a quatro perguntas que você já havia definido. O mercado não espera sua lista de perguntas. O formato útil é o de um analista de plantão: perceber um movimento, formular uma hipótese, escrever consultas para testá-la e apresentar um veredito com evidências. Esse loop também pode falhar silenciosamente; por isso, as duas últimas etapas arbitram o agente em vez de confiar nele.

Etapa 1 — Abrir o ClickHouse Agents e conectar este serviço

open 'https://ai.clickhouse.cloud'

O console do Cloud leva ao mesmo lugar: seu serviço e depois ClickHouse agents.

Crie um agente chamado Polymarket analyst, adicione a ferramenta ClickHouse, aponte-a para polymarket-workshop e confirme o status Connected. Sem a ferramenta conectada, o agente inventa o esquema. Cole o texto abaixo como instruções; cada linha evita um erro comum dos agentes:

You answer questions about live public prediction-market data in the polymarket database
of this service. Rules:
- Probability is the quote midpoint: polymarket.price_ticks where midpoint > 0, or the
  merged close of polymarket.market_midpoints_1m. A last_trade_price tick is not one.
- market_midpoints_1m holds AggregateFunction states. Read them only through
  argMinMerge(open), maxMerge(high), minMerge(low), argMaxMerge(close) and
  countMerge(updates), grouped by minute, token_id.
- Metadata comes from polymarket.markets FINAL, trades from polymarket.trades_clean.
- One condition_id per market, one token_id per outcome. A Yes move and its No
  counterpart are one event, not two findings.
- Timestamps are UTC and the newest minute is usually still filling.
- Show the SQL you ran and the age of the data behind every number.
- Public-data analysis only. Never give trading advice.

Etapa 2 — Primeira interação: deixar o agente encontrar o movimento

Using the ClickHouse tool, find the largest midpoint move in the last 30 minutes of
polymarket.market_midpoints_1m. For each token_id compare the merged close of the most
recent complete minute with the merged close five minutes earlier. Report the question,
the outcome, the token_id, both probabilities in percent, the move in percentage points,
and the two minutes you compared. Show the SQL.

Esperado: um resultado identificado, um movimento com sinal em pontos e SQL que aplica merge aos estados agregados, sem selecionar as colunas de estado brutas.

Etapa 3 — Segunda interação: pedir que investigue o próprio achado

Investigate that move before you believe it. From polymarket.price_ticks report the
latest best_bid, best_ask, spread in percentage points, and quote age in seconds for that
token_id. From polymarket.trades_clean compare matched volume as price * size over the
five minutes covering the move against the previous five minutes. Then give a verdict of
corroborated, weakly corroborated, or likely artifact, and name the evidence behind it.

Você não disse como combinar os três sinais. Fazer essa escolha é o que transforma isto em um agente, e não em uma caixa de texto para SQL.

Etapa 4 — Terceira interação: pedir que ataque o próprio veredito

List every assumption in that verdict that could be wrong, and for each one the single
query that would falsify it. Run the two you consider most likely to be wrong, then tell
me whether the verdict survives.

Uma resposta útil menciona o minuto parcial mais recente, a idade da cotação e quantas poucas atualizações sustentam um minuto fraco. Registre se o veredito sobreviveu.

Etapa 5 — Arbitrar o agente com SQL determinístico

Execute isto no SQL Console do Cloud. Ele responde à Etapa 2 sem agente, portanto a primeira linha é sua referência:

WITH per_minute AS
(
    SELECT
        token_id,
        minute,
        argMaxMerge(close) AS close_midpoint
    FROM polymarket.market_midpoints_1m
    WHERE minute >= now() - INTERVAL 30 MINUTE
      AND minute < toStartOfMinute(now())
    GROUP BY token_id, minute
)
SELECT
    m.question,
    m.outcome,
    p.token_id,
    round(argMax(p.close_midpoint, p.minute) * 100, 2) AS latest_percent,
    round(argMin(p.close_midpoint, p.minute) * 100, 2) AS oldest_percent,
    round(latest_percent - oldest_percent, 2) AS move_points,
    min(p.minute) AS window_start,
    max(p.minute) AS window_end
FROM per_minute AS p
INNER JOIN
(
    SELECT token_id, question, outcome
    FROM polymarket.markets FINAL
) AS m ON m.token_id = p.token_id
GROUP BY m.question, m.outcome, p.token_id
ORDER BY abs(move_points) DESC
LIMIT 5;

As janelas diferem de propósito: esta consulta abrange os minutos completos mais antigo e mais novo presentes, enquanto o agente recebeu uma diferença de cinco minutos. Compare token_id, o sinal de move_points e a magnitude, não os decimais. Depois, compare os números de confirmação do agente com as consultas Spread and freshness e Volume velocity salvas no Módulo 06.

Etapa 6 — Anotar o que o agente errou

Normalmente aparece pelo menos um destes erros. Encontre o seu na conversa:

  • selecionar close ou high de market_midpoints_1m sem uma função Merge e explicar o resultado com total confiança;
  • tratar o minuto mais recente, ainda parcial, como completo e exagerar o último trecho;
  • apresentar um token Yes e seu token No como dois movimentos independentes;
  • omitir FINAL em polymarket.markets, fazendo um mercado redescoberto entrar duas vezes;
  • chamar o midpoint de preço negociável ou citar um movimento sem sua idade.

Se os números coincidirem exatamente com o árbitro, teste diretamente o minuto parcial: pergunte se o minuto mais recente estava completo e compare max(minute) em polymarket.market_midpoints_1m com toStartOfMinute(now()). Valores iguais significam que não estava; um agente que afirmou o contrário apresentou uma informação falsa sobre os dados ao vivo.

Concluído quando

  • o SQL de detecção do agente ler market_midpoints_1m por funções Merge;
  • o veredito citar spread, idade da cotação e volume de negociações, não apenas preço;
  • a primeira linha do árbitro concordar com o token e a direção, ou você explicar a diferença; e
  • você anotar uma coisa que o agente errou ou exagerou.

Próximo: encerrar e limpar.

Nesta página

Acompanhar seu progresso?

Opcional. Enviaremos um link por e-mail para confirmar seu endereço; o progresso será registrado depois que você o abrir.

Use seu e-mail corporativo, não um endereço pessoal.

O acompanhamento do progresso também exige a aceitação dos Termos de Serviço atuais nas Configurações de privacidade.

PT