Tutoriales/Streaming en tiempo real
5 minutos
Intermedio

Streaming en tiempo real

Conectá al WebSocket y recibí trades de GGAL y YPF en vivo. Incluye autenticación con token OAuth.

Concepto clave: REST + WebSocket

Para conectar al WebSocket de forma segura, primero obtenés un token de la REST API y luego lo usás para autenticarte en el WebSocket:

POST /auth/token
access_token
WebSocket auth_token

Antes de empezar

  • Token de acceso (ver guía anterior)
  • Python: pip install websockets
  • Node.js: npm install ws (o usar browser nativo)
1

Obtener token (si no lo tenés)

Si ya completaste la guía anterior, ya tenés un token. Si no, primero autenticá con la REST API para obtener el access_token.

POST https://api.iolinversiones.com/auth/token
2

Conectar al WebSocket

Conectá al endpoint de market data, autenticá con el token, y suscribite a los activos:

Endpoint: wss://stream-marketdata.iolinversiones.com

realtime.py
Streaming en tiempo real
import asyncio
import websockets
import json

WS_URL = "wss://stream-marketdata.iolinversiones.com"
TOKEN = "tu_access_token"  # Obtener de REST API /auth/token

async def stream_prices():
    async with websockets.connect(WS_URL) as ws:
        # Autenticar con token
        await ws.send(json.dumps({
            "action": "auth_token",
            "token": TOKEN
        }))

        # Suscribirse a trades
        await ws.send(json.dumps({
            "action": "subscribe",
            "trades": ["GGAL|BCBA|T0", "YPF|BCBA|T0"]
        }))

        # Recibir datos
        async for message in ws:
            data = json.loads(message)
            if data.get("type") == "T":  # Trade
                print(f"📈 {data['S']}: ${data['P']} ({data['Z']} acciones)")

asyncio.run(stream_prices())
3

Tipos de datos disponibles

Podés suscribirte a diferentes tipos de datos:

trades

Cada operación ejecutada en el mercado

quotes

Mejor compra/venta (BBO) actualizado

order_book

Profundidad del mercado (varios niveles)

Ejemplo de suscripción múltiple:

{
  "action": "subscribe",
  "trades": ["GGAL|BCBA|T0", "YPF|BCBA|T0"],
  "quotes": ["AL30|BCBA|T0", "GD30|BCBA|T0"],
  "order_book": ["GGAL|BCBA|T0"]
}

Mantener la conexión (Heartbeat)

El servidor envía pings periódicos. Debés responder con pong para mantener la conexión:

Servidor envía:

{ "action": "ping" }

Tu respuesta:

{ "action": "pong" }

Si no respondés en 30 segundos, el servidor cierra la conexión automáticamente.

Solución de problemas

Error 401 al conectar

Token expirado o inválido. Obtené un token nuevo de la REST API.

Conexión se cierra sola

No estás respondiendo a los pings. Implementá el handler de heartbeat.

No recibo datos

El mercado puede estar cerrado. Los trades solo llegan cuando hay operaciones.

Próximos pasos