Pular para o conteúdo principal

Visão Geral

O canal market permite receber atualizações em tempo real sobre um ou mais mercados específicos. Você pode escolher receber atualizações de orderbook, trades ou ambos.

Autenticação

O canal market não requer autenticação. Você pode se inscrever sem fornecer uma chave de API.

Subscribe

Para se inscrever no canal market:
{
  "type": "subscribe",
  "channel": "market",
  "markets": ["market-id-1", "market-id-2"],
  "filter": "orderbook"
}

Requisitos

  • markets (obrigatório): Array de IDs de mercado
  • filter (opcional): Tipo de atualização desejada
    • "" ou "all": Todas as atualizações (padrão)
    • "orderbook": Apenas atualizações de orderbook
    • "trades": Apenas atualizações de trades

Exemplos

Receber Todas as Atualizações

{
  "type": "subscribe",
  "channel": "market",
  "markets": ["market-id-1"]
}

Receber Apenas Orderbook

{
  "type": "subscribe",
  "channel": "market",
  "markets": ["market-id-1", "market-id-2"],
  "filter": "orderbook"
}

Receber Apenas Trades

{
  "type": "subscribe",
  "channel": "market",
  "markets": ["market-id-1"],
  "filter": "trades"
}

Mensagens Recebidas

Atualização de Orderbook

Recebida quando há mudanças no orderbook de um mercado (quando filter é "orderbook" ou "all"). Estrutura:
{
  "msg_type": "update-orderbook",
  "event_id": "string",
  "market_id": "string",
  "orderbook": {
    "yes_orderbook": {
      "outcome": "YES",
      "bids": [
        {
          "price_ticks": 40,
          "quantity": 100,
          "order_count": 2
        }
      ],
      "asks": [
        {
          "price_ticks": 41,
          "quantity": 150,
          "order_count": 3
        }
      ],
      "spread": 1,
      "last_transaction": 40
    },
    "no_orderbook": {
      "outcome": "NO",
      "bids": [],
      "asks": [],
      "spread": null,
      "last_transaction": null
    },
    "market_price_yes": 40,
    "market_price_no": 60,
    "chance": 40,
    "volume": 10000,
    "liquidity": 5000,
    "spread_yes": 1,
    "spread_no": 2
  }
}

Nova Trade

Recebida quando uma nova trade é executada em um mercado (quando filter é "trades" ou "all"). Estrutura:
{
  "msg_type": "new-trade",
  "event_id": "string",
  "market_id": "string",
  "last_trade": {
    "canceled": false,
    "taker_id": "string",
    "total_amount": 1000,
    "qty_contracts": 10,
    "avg_price": 40,
    "side": "BUY",
    "contract_type": "YES",
    "makers": [
      {
        "maker_id": "string",
        "qty_contracts": 5,
        "price": 40,
        "total_amount": 500,
        "side": "SELL",
        "contract_type": "YES"
      }
    ]
  }
}

Atualização Completa

Recebida quando há atualizações gerais no mercado (quando filter é "all" ou não especificado). Estrutura:
{
  "msg_type": "update",
  "event_id": "string",
  "market_id": "string",
  "orderbook": {
    // Mesma estrutura do orderbook acima
  },
  "last_trade": {
    // Mesma estrutura da trade acima
  }
}

Exemplo de Uso

const ws = new WebSocket('wss://data-ws.voxfi.com.br');

ws.onopen = () => {
  // Inscrever-se em um mercado com filtro orderbook
  ws.send(JSON.stringify({
    type: 'subscribe',
    channel: 'market',
    markets: ['market-id-1'],
    filter: 'orderbook'
  }));
};

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  
  if (data.msg_type === 'update-orderbook') {
    console.log('Orderbook atualizado para mercado:', data.market_id);
    console.log('Preço YES:', data.orderbook.market_price_yes);
    console.log('Preço NO:', data.orderbook.market_price_no);
  } else if (data.msg_type === 'new-trade') {
    console.log('Nova trade no mercado:', data.market_id);
    console.log('Trade:', data.last_trade);
  }
};

Unsubscribe

Para cancelar a inscrição de mercados específicos:
{
  "type": "unsubscribe",
  "channel": "market",
  "markets": ["market-id-1", "market-id-2"]
}

Campos do Orderbook

Consulte a documentação completa do orderbook para detalhes sobre os campos retornados.

Campos Principais

  • market_price_yes: Preço de mercado atual para YES em ticks (0-100);
  • market_price_no: Preço de mercado atual para NO em ticks (0-100);
  • chance: Probabilidade de YES em percentual (0-100);
  • volume: Total de contratos criados (trades históricas);
  • liquidity: Total de contratos disponíveis no orderbook;
  • spread_yes: Spread para YES em ticks;
  • spread_no: Spread para NO em ticks.

Casos de Uso

  • Monitoramento de Preços: Use com filtro orderbook para receber atualizações de preço em tempo real;
  • Análise de Liquidez: Monitore a profundidade do orderbook para avaliar liquidez;
  • Tracking de Trades: Use com filtro trades para monitorar atividade de negociação;
  • Alertas de Preço: Configure alertas quando preços atingirem certos níveis;
  • Market Making: Use atualizações de orderbook para ajustar suas ordens limitadas.

Boas Práticas

  • Use Filtros: Se você só precisa de orderbook ou trades, use o filtro apropriado para reduzir o tráfego;
  • Múltiplos Mercados: Você pode se inscrever em múltiplos mercados na mesma conexão;
  • Gerenciamento de Estado: Mantenha o estado local do orderbook e atualize conforme as mensagens chegam;
  • Identificação de Mercado: Sempre verifique o market_id nas mensagens para garantir que está processando o mercado correto.