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 Técnica PyQuotex

1. Aspectos Técnicos

1.1 Estrutura do Projeto

O projeto segue uma estrutura modular organizada da seguinte maneira:

📦 pyquotex/
 ┣ 📂 docs/                    # Documentação
 ┣ 📂 examples/                # Exemplos de uso
 ┃ ┣ 📜 custom_config.py       # Configuração personalizada
 ┃ ┣ 📜 monitoring_assets.py   # Monitoramento de ativos
 ┃ ┣ 📜 trade_bot.py          # Bot de trading
 ┃ ┗ 📜 user_test.py          # Testes de usuário
 ┣ 📂 pyquotex/               # Núcleo da API
 ┃ ┣ 📂 network/              # Módulos de Rede (Autenticação, Configurações)
 ┃ ┃ ┣ 📜 login.py
 ┃ ┃ ┣ 📜 logout.py
 ┃ ┃ ┗ 📜 settings.py
 ┃ ┣ 📂 utils/                # Utilitários
 ┃ ┣ 📂 ws/                   # WebSocket
 ┃ ┃ ┣ 📂 channels/          # Canais WS
 ┃ ┃ ┗ 📂 objects/           # Objetos WS
 ┃ ┣ 📜 api.py               # API principal
 ┃ ┗ 📜 stable_api.py        # API estável

1.2 Arquitetura da API

A API é construída sobre uma arquitetura cliente-servidor utilizando WebSocket como protocolo principal de comunicação. Os componentes principais são:

Componentes Principais

Canais WebSocket

A API implementa vários canais WebSocket para diferentes funcionalidades:

Processamento de Dados

1.3 Gerenciamento de Sessões

O sistema implementa um sofisticado gerenciamento de sessões que inclui:

Autenticação

async def authenticate(self):
    logger.info("Connecting User Account...")
    async with self.login as login:
        status, message = await login(
            self.username,
            self.password,
            self.user_data_dir
        )
    if status:
        self.state.SSID = self.session_data.get("token")
        self.is_logged = True
    return status, message

Persistência de Sessão

Estado da Conexão

1.4 Considerações de Segurança

Autenticação e Autorização

Proteção de Dados

# Contexto SSL unificado para todas as operações de rede
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2
ssl_context.maximum_version = ssl.TLSVersion.TLSv1_3
ssl_context.set_ciphers('ECDHE-ECDSA-AES128-GCM-SHA256:...')

Medidas de Segurança Implementadas

  1. Exclusive use of TLS 1.2 and 1.3 with browser-like cipher suites
  2. SSL certificate verification with latest CA bundles
  3. Mitigation against JA3 fingerprinting by mimicking browser cipher order
  4. Full set of browser-like HTTP headers during WebSocket handshake
  5. Protection against man-in-the-middle attacks

Tratamento de Erros

Notas Importantes

  1. Rate Limiting: A API implementa limites de taxa para prevenir abuso:
    • Máximo de reconexões
    • Delays entre operações
    • Limites de requisições por minuto
  2. Tratamento de Erros: Sistema robusto de tratamento de erros:
    try:
        await self.connect()
    except Exception as e:
        logger.error(f"Erro de conexão: {e}")
        await self.reconnect()
    
  3. Logging: Sistema abrangente de logging para debugging e monitoramento:
    logging.basicConfig(
        level=logging.DEBUG,
        format='%(asctime)s %(message)s'
    )
    

Recomendações de Uso

  1. Configuração:
    • Usar variáveis de ambiente para credenciais
    • Configurar timeouts apropriados
    • Implementar tratamento de erros personalizado
  2. Segurança:
    • Não armazenar credenciais no código
    • Manter dependências atualizadas
    • Usar conexões seguras (SSL/TLS)
  3. Otimizações de Performance Comercial:

Circular Buffers (Gestão de Memória)

Para evitar vazamentos de memória (Memory Leaks) em execuções de longa duração, a API utiliza collections.deque com limites estritos (maxlen). Isso garante que o histórico de preços em tempo real não cresça indefinidamente.

Event-Driven Architecture

O processamento de indicadores técnicos agora é totalmente orientado a eventos. O sistema apenas recalcula indicadores quando o sinal candle_generated é recebido, reduzindo drasticamente o uso de CPU.

Conexões Persistentes

Utilizamos httpx.AsyncClient com pooling de conexões para acelerar requisições de rede e reduzir o overhead de rede.