Aula 14
WebSocket: Dados em Tempo Real para Trading Automatizado
Aula 14: WebSocket para Dados em Tempo Real
Para trading automatizado, polling REST não é suficiente. Precisas de WebSocket para receber atualizações de preço, negociações executadas e alterações no book em tempo real.
Mecanismo: O WebSocket da Polymarket usa um modelo de subscrição por canal. Ligas-te ao endpoint ws-subscriptions-clob.polymarket.com e envias uma mensagem JSON a subscrever canais (price_change, book, user_trades). O servidor envia atualizações contínuas enquanto a ligação estiver ativa.
import asyncio
import websockets
import json
async def subscribe_price_changes(asset_id):
uri = "wss://ws-subscriptions-clob.polymarket.com/ws/"
async with websockets.connect(uri) as ws:
# Subscrever canal de preços
msg = {"type": "subscribe", "channel": "price_change", "asset_id": asset_id}
await ws.send(json.dumps(msg))
print(f"Subscrito em price_change para asset {asset_id}")
# Processar mensagens contínuas
async for message in ws:
data = json.loads(message)
if data.get("channel") == "price_change":
preco = data["price"]
timestamp = data["timestamp"]
print(f"Preço: {preco} às {timestamp}")
# Para múltiplos assets em simultâneo
async def monitor_multiple_assets(asset_ids):
tasks = [subscribe_price_changes(aid) for aid in asset_ids]
await asyncio.gather(*tasks)
asyncio.run(subscribe_price_changes("asset_id_do_mercado_de_futebol"))
Modo de falha
Modo de Falha Comum
“O WebSocket desligou e perdi dados.”
WebSocket ligações caem — é esperado. O que não podes fazer é não tratar a reconexão. Implementa um loop com reconexão automática (exponential backoff), um heartbeat para detectar desconexão, e um buffer local para evitar perda de dados durante a janela de reconexão.
Aprofundamento operacional
WebSocket serve para reduzir atraso informacional, mas aumenta complexidade operacional. Um feed ao vivo sem controle de reconexao, deduplicacao e estado local pode parecer sofisticado e ainda assim produzir sinais errados.
Para trading automatizado, o ponto central e manter um estado confiavel do mercado. Mensagens podem chegar fora de ordem, a conexao pode cair, e o book local pode ficar inconsistente. Por isso, sistemas serios combinam snapshot inicial via REST com updates incrementais via WebSocket.
Arquitetura minima
- Buscar snapshot inicial do book.
- Abrir WebSocket para updates.
- Aplicar updates ao estado local.
- Reconciliar periodicamente com REST.
- Descartar sinais quando o estado estiver desatualizado.
- Registrar latencia, quedas e reconexoes.
Exercicio pratico
Adicione ao seu script uma variavel last_message_at. Se o feed ficar sem mensagem por mais de um limite definido, pause qualquer decisao automatica e recarregue o snapshot via REST.
Auditoria aplicada
Esta aula deve terminar com uma pequena auditoria escrita. O objetivo nao e produzir uma nota bonita, mas transformar “WebSocket: Dados em Tempo Real para Trading Automatizado” em uma decisao verificavel. Use os conceitos centrais da aula (os conceitos principais da aula) para construir um registro que possa ser revisado depois, quando o mercado ja tiver se movido ou o evento ja tiver sido resolvido.
Comece pela pergunta operacional: o que eu consigo observar agora que muda minha decisao? Depois separe evidencia, inferencia e decisao. Evidencia e dado verificavel: preco, spread, profundidade, regra de resolucao, horario, volume, estado do book, endpoint consultado ou custo calculado. Inferencia e a leitura que voce faz a partir desses dados. Decisao e o que voce faz com a leitura: estudar mais, descartar, entrar com ordem limit, esperar liquidez, reduzir stake, usar API apenas para leitura ou classificar como No Bet.
Protocolo de revisao
- Escreva a tese em uma frase curta.
- Liste os tres dados que sustentam a tese.
- Liste o principal dado que poderia invalidar a tese.
- Defina o custo de estar errado: perda financeira, slippage, fee, tempo preso, erro de resolucao ou risco operacional.
- Defina o gatilho de pausa. Se esse gatilho acontecer, a decisao deve ser reavaliada antes de qualquer nova ordem.
Perguntas de controle
- O mercado esta suficientemente liquido para o tamanho que eu quero usar?
- O preco atual ainda paga o risco depois de spread, fees e slippage?
- A regra de resolucao esta clara o suficiente para eu aceitar exposicao?
- Se eu estivesse explicando este trade para outra pessoa, conseguiria separar dado de opiniao?
- Existe um caminho simples de saida se a leitura estiver errada?
Saida esperada
No fim da aula, salve uma nota de cinco linhas: mercado observado, preco observado, risco principal, decisao tomada e motivo para revisar depois. Esse habito cria memoria operacional. Sem memoria, o operador repete erros com mais confianca. Com memoria, cada aula vira uma parte do sistema de pesquisa.