PyQuotex

pyquotex is a Python library designed to easily integrate with the Quotex API, enabling automated trading operations. Fully open-source and licensed under MIT, the library provides features like order execution, balance checking, real-time market data collection, and more. Perfect for traders and developers looking to build efficient and customized solutions.

View the Project on GitHub cleitonleonel/pyquotex

Documentación WebSocket PyQuotex

Tabla de Contenidos

Manejo de WebSocket

PyQuotex utiliza la biblioteca websockets (asíncrona) para mantener conexiones de alto rendimiento con el servidor de Quotex. La implementación principal está dividida entre WebsocketClient e QuotexAPI.

Inicialización y Heartbeat

La conexión se mantiene activa a través de un sistema de Heartbeat que envía un mensaje de “tick” cada 5 segundos, garantizando que el servidor no cierre la sesión por inactividad.

from pyquotex.global_value import WebsocketStatus

# Heartbeat implementado en QuotexAPI._on_open
async def heartbeat():
    while self.state.status == WebsocketStatus.CONNECTED:
        try:
            await self.websocket.send('42["tick"]')
        except Exception:
            break
        await asyncio.sleep(5)

Suscripción a Streams

PyQuotex ofrece varios métodos para suscribirse a diferentes tipos de streams:

Suscripción a Velas (Candles)

def start_candles_stream(self, asset, period=0):
    self.api.current_asset = asset
    self.api.subscribe_realtime_candle(asset, period)
    self.api.follow_candle(asset)

Suscripción a Sentimiento del Mercado

async def start_realtime_sentiment(self, asset, period=0):
    self.start_candles_stream(asset, period)
    while True:
        if self.api.realtime_sentiment.get(asset):
            return self.api.realtime_sentiment[asset]
        await asyncio.sleep(0.2)

Suscripción a Precios en Tiempo Real

async def start_realtime_price(self, asset, period=0):
    self.start_candles_stream(asset, period)
    while True:
        if self.api.realtime_price.get(asset):
            return self.api.realtime_price
        await asyncio.sleep(0.2)

Streams Disponibles

El sistema soporta los siguientes tipos de streams:

  1. Candles Stream
    • Datos de velas en tiempo real
    • Histórico de velas
    • Velas en diferentes periodos de tiempo
  2. Price Stream
    • Precios en tiempo real
    • Actualizaciones de precios por asset
  3. Sentiment Stream
    • Sentimiento del mercado
    • Indicadores de compra/venta
  4. Signals Stream
    • Señales de trading
    • Datos de indicadores

Manejo de Eventos

Eventos Principales (Asíncronos)

  1. _on_message ```python async def _on_message(self, msg): “”” Procesa mensajes brutos del WebSocket de forma asíncrona.
    • Extracción automática de JSON/Socket.IO
    • Sincronización de reloj (server_timestamp)
    • Disparo de eventos a través de EventRegistry “”” ```
  2. Sincronización de Tiempo El bot sincroniza automáticamente su reloj interno con las marcas de tiempo recibidas en los mensajes de precios, garantizando que los cálculos de vencimiento sean precisos, independientemente de la zona horaria local.

7. WebSocket

PyQuotex utiliza una arquitectura avanzada de WebSocket para garantizar estabilidad y performance a nivel comercial.

Supervisor de Auto-Reconexión

La conexión es monitoreada por um supervisor dedicado (_websocket_supervisor) que realiza reconexiones automáticas con Exponential Backoff. Si el socket cae, el sistema re-autentica y reabre la conexión sin necesidad de intervención manual.

# El Supervisor gestiona el ciclo de vida de la conexión automáticamente
await client.connect() 

Message Dispatcher

Para maximizar la velocidad de procesamiento, implementamos un sistema de despacho basado en diccionario (O(1)). En lugar de recorrer cadenas de if/elif, el sistema invoca directamente al handler modular responsable del evento, reduciendo drásticamente la latencia de ejecución.

Buenas Prácticas

  1. Manejo de Errores
    • Implementar try-catch en operaciones críticas
    • Logging de errores y eventos importantes
  2. Estado de Conexión
    • Verificar estado antes de operaciones
    • Mantener tiempo de espera adecuado entre reconexiones
  3. Limpieza de Recursos
    • Cerrar conexiones apropiadamente
    • Liberar recursos al finalizar