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

1. Aspectos Técnicos

1.1 Estructura del Proyecto

El proyecto sigue una estructura modular organizada de la siguiente manera:

📦 pyquotex/
 ┣ 📂 docs/                    # Documentación
 ┣ 📂 examples/                # Ejemplos de uso
 ┃ ┣ 📜 custom_config.py       # Configuración personalizada
 ┃ ┣ 📜 monitoring_assets.py   # Monitoreo de activos
 ┃ ┣ 📜 trade_bot.py          # Bot de trading
 ┃ ┗ 📜 user_test.py          # Tests de usuario
 ┣ 📂 pyquotex/              # Núcleo de la API
 ┃ ┣ 📂 network/              # Módulos de Red (Autenticación, Configuración)
 ┃ ┃ ┣ 📜 login.py
 ┃ ┃ ┣ 📜 logout.py
 ┃ ┃ ┗ 📜 settings.py
 ┃ ┣ 📂 utils/                # Utilidades
 ┃ ┣ 📂 ws/                   # WebSocket
 ┃ ┃ ┣ 📂 channels/          # Canales WS
 ┃ ┃ ┗ 📂 objects/           # Objetos WS
 ┃ ┣ 📜 api.py               # API principal
 ┃ ┗ 📜 stable_api.py        # API estable

1.2 Arquitectura de la API

La API está construida sobre una arquitectura cliente-servidor utilizando WebSocket como protocolo principal de comunicación. Los componentes principales son:

Core Components

Canales de WebSocket

La API implementa varios canales WebSocket para diferentes funcionalidades:

Procesamiento de Datos

1.3 Manejo de Sesiones

El sistema implementa un sofisticado manejo de sesiones que incluye:

Autenticación

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

Persistencia de Sesión

Estado de la Conexión

1.4 Consideraciones de Seguridad

Autenticación y Autorización

Protección de Datos

# Contexto SSL unificado para todas las operaciones de red
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 Seguridad Implementadas

  1. Uso exclusivo de TLS 1.3
  2. Verificación de certificados SSL
  3. Protección contra ataques de intermediarios
  4. Rate limiting para prevenir abuso de la API
  5. Validación de datos de entrada

Manejo de Errores

Notas Importantes

  1. Rate Limiting: La API implementa límites de tasa para prevenir el abuso:
    • Máximo de reconexiones
    • Delays entre operaciones
    • Límites de solicitudes por minuto
  2. Manejo de Errores: Sistema robusto de manejo de errores:
    try:
        await self.connect()
    except Exception as e:
        logger.error(f"Connection error: {e}")
        await self.reconnect()
    
  3. Logging: Sistema comprensivo de logging para debugging y monitoreo:
    logging.basicConfig(
        level=logging.DEBUG,
        format='%(asctime)s %(message)s'
    )
    

Recomendaciones de Uso

  1. Configuración:
    • Usar variables de entorno para credenciales
    • Configurar timeouts apropiados
    • Implementar manejo de errores personalizado
  2. Seguridad:
    • No almacenar credenciales en código
    • Mantener actualizadas las dependencias
    • Usar conexiones seguras (SSL/TLS)
  3. Optimizaciones de Rendimiento Comercial:

Circular Buffers (Gestión de Memoria)

Para evitar fugas de memoria (Memory Leaks) en ejecuciones de larga duración, la API utiliza collections.deque con límites estrictos (maxlen). Esto garantiza que el historial de precios en tiempo real no crezca indefinidamente.

Event-Driven Architecture

El procesamiento de indicadores técnicos ahora está totalmente orientado a eventos. El sistema solo recalcula indicadores cuando se recibe la señal candle_generated, reduciendo drásticamente el uso de CPU.

Conexiones Persistentes

Utilizamos httpx.AsyncClient con pooling de conexiones para acelerar las peticiones de red y reducir el overhead de red.