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

Documentação WebSocket PyQuotex

Índice

Gerenciamento de WebSocket

PyQuotex utiliza a biblioteca websockets (assíncrona) para manter conexões de alto desempenho com o servidor do Quotex. A implementação principal está dividida entre WebsocketClient e QuotexAPI.

Inicialização e Heartbeat

A conexão é mantida ativa através de um sistema de Heartbeat que envia uma mensagem de “tick” a cada 5 segundos, garantindo que o servidor não encerre a sessão por inatividade.

from pyquotex.global_value import WebsocketStatus

# Heartbeat implementado no 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)

Inscrição em Streams

PyQuotex oferece vários métodos para se inscrever em diferentes tipos de streams:

Inscrição em Candlesticks

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)

Inscrição em Sentimento do 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)

Inscrição em Preços em Tempo 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 Disponíveis

O sistema suporta os seguintes tipos de streams:

  1. Candles Stream
    • Dados de candlesticks em tempo real
    • Histórico de candlesticks
    • Candlesticks em diferentes períodos de tempo
  2. Price Stream
    • Preços em tempo real
    • Atualizações de preços por ativo
  3. Sentiment Stream
    • Sentimento do mercado
    • Indicadores de compra/venda
  4. Signals Stream
    • Sinais de trading
    • Dados de indicadores

Tratamento de Eventos

Eventos Principais (Assíncronos)

  1. _on_message ```python async def _on_message(self, msg): “”” Processa mensagens brutas do WebSocket de forma assíncrona.
    • Extração automática de JSON/Socket.IO
    • Sincronização de relógio (server_timestamp)
    • Disparo de eventos via EventRegistry “”” ```
  2. Sincronização de Tempo O bot sincroniza automaticamente seu relógio interno com os timestamps recebidos nas mensagens de preço, garantindo que os cálculos de expiração sejam precisos, independente do fuso horário local.

7. WebSocket

O PyQuotex utiliza uma arquitetura avançada de WebSocket para garantir estabilidade e performance em nível comercial.

Supervisor de Auto-Reconexão

A conexão é monitorada por um supervisor dedicado (_websocket_supervisor) que realiza reconexões automáticas com Exponential Backoff. Se o socket cair, o sistema re-autentica e reabre a conexão sem necessidade de intervenção manual.

# O Supervisor gerencia o ciclo de vida da conexão automaticamente
await client.connect() 

Message Dispatcher

Para maximizar a velocidade de processamento, implementamos um sistema de despacho baseado em dicionário (O(1)). Em vez de percorrer cadeias de if/elif, o sistema invoca diretamente o handler modular responsável pelo evento, reduzindo drasticamente a latência de execução.

Boas Práticas

  1. Tratamento de Erros
    • Implementar try-catch em operações críticas
    • Logging de erros e eventos importantes
  2. Estado da Conexão
    • Verificar estado antes de operações
    • Manter tempo de espera adequado entre reconexões
  3. Limpeza de Recursos
    • Fechar conexões apropriadamente
    • Liberar recursos ao finalizar