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.
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.
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)
PyQuotex ofrece varios métodos para suscribirse a diferentes tipos de streams:
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)
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)
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)
El sistema soporta los siguientes tipos de streams:
PyQuotex utiliza una arquitectura avanzada de WebSocket para garantizar estabilidad y performance a nivel comercial.
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()
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.