DeepQLearning es un sistema avanzado de trading algorítmico que combina aprendizaje por refuerzo profundo con la plataforma NinjaTrader 8. El sistema utiliza datos de mercado en tiempo real para generar señales de trading, las ejecuta automáticamente y aprende de los resultados reales para mejorar continuamente.
graph TD
A[NinjaTrader/DataFeeder.cs] <--Datos de mercado--> B[DeepQ.py]
A <--Señales de trading--> B
A <--Resultados de operaciones--> B
B --> C[(dqn_learning.db)]
D[HFT_TheStrat_ML] --> A
A --> E[Operaciones de mercado]
- 🤖 Aprendizaje por Refuerzo Profundo: Utiliza Stable-Baselines3 con el algoritmo PPO
- 🔄 Retroalimentación Bidireccional: Integración completa entre Python y NinjaTrader
- 💡 Sistema de Consenso: Combina múltiples fuentes de señales para reducir falsos positivos
- 📊 Adaptación Continua: Aprende y mejora con cada operación realizada
- 🛡️ Gestión de Riesgo Integrada: Utiliza estrategias ATM de NinjaTrader para control profesional del riesgo
- 📚 Persistencia de Conocimiento: Almacena experiencias en SQLite para aprendizaje a largo plazo
El cerebro del sistema. Implementa un agente de aprendizaje por refuerzo que:
- Recibe datos de mercado vía TCP
- Procesa los datos usando técnicas de ventana móvil
- Genera señales de trading con niveles de confianza
- Almacena experiencias en la base de datos
- Aprende de los resultados reales de las operaciones
Una estrategia para NinjaTrader 8 que:
- Envía datos de mercado a DeepQ.py
- Recibe y evalúa señales de trading
- Implementa un sistema de votación con el indicador HFT_TheStrat_ML
- Ejecuta operaciones usando estrategias ATM nativas
- Envía resultados de operaciones de vuelta a DeepQ.py
Un enfoque innovador que:
- Comienza con recompensas simuladas basadas en movimientos de precio
- Gradualmente incorpora recompensas reales basadas en P&L
- Utiliza un factor de ponderación adaptativo (alpha) que evoluciona con el tiempo
- Normaliza las ganancias/pérdidas a un rango consistente de recompensas
- Python 3.9 o superior
- NinjaTrader 8
- Dependencias Python (ver
requirements.txt)
-
Preparar Plantillas ATM:
- Crea dos plantillas: "ATM-LONG" y "ATM-SHORT" en NinjaTrader
- Configura niveles apropiados de stop loss y take profit
-
Importar Componentes:
- Descomprime e importa
NT8/ML_Predator.zip(indicador) - Descomprime e importa
NT8/DataFeeder.zip(estrategia) - Compila los NinjaScripts (Build > Compile)
- Descomprime e importa
-
Configurar DataFeeder:
- Aplica la estrategia a un gráfico del instrumento deseado
- Configura parámetros:
DefaultQuantity: Cantidad de contratosMaxDailyTrades: Límite diario de operacionesRequireConsensus: Preferiblemente "true"MinConfidenceThreshold: Entre 0.6-0.7
# Instalar dependencias
pip install -r requirements.txt-
Iniciar NinjaTrader y DataFeeder:
- Abre NinjaTrader y asegúrate que DataFeeder esté activo
- Verifica que las plantillas ATM estén configuradas
-
Ejecutar DeepQ.py:
python DeepQ.py
- Configura el tamaño de la ventana de lag si es necesario
- Espera a que se acumulen suficientes datos
-
Monitoreo:
- Observa la consola de Python para ver señales emitidas
- Verifica la pestaña "Output" en NinjaTrader para confirmación de operaciones
- Supervisa el rendimiento en el gráfico de NinjaTrader
sequenceDiagram
participant NT as NinjaTrader
participant DF as DataFeeder.cs
participant DQ as DeepQ.py
participant DB as dqn_learning.db
NT->>DF: Datos de mercado
DF->>DQ: Datos vía TCP (puerto 5555)
DQ->>DQ: Procesa datos y genera predicción
DQ->>DB: Almacena experiencia simulada
DQ->>DF: Envía señal de trading (puerto 5590)
DF->>DF: Evalúa señal + TheStrat
DF->>NT: Ejecuta operación (si procede)
NT->>DF: Notifica resultado de operación
DF->>DQ: Envía resultado real (puerto 5591)
DQ->>DB: Actualiza experiencia con recompensa real
DQ->>DQ: Ajusta modelo con experiencia real
- Entrenamiento: La base de datos
dqn_learning.dbalmacena todas las experiencias y es persistente entre sesiones. No la elimines para conservar el conocimiento adquirido. - Recolección de Datos: Al inicio de cada sesión, el sistema necesita acumular suficientes datos (por defecto 3000 puntos) antes de comenzar a generar señales.
- Modo Playback: El entrenamiento puede realizarse en modo playback de NinjaTrader para acumular experiencias sin riesgo real.
- Intervalo entre Operaciones: El sistema espera un mínimo de 2 minutos entre operaciones para evitar sobretrading.
- Límite Diario: Respeta el número máximo de operaciones diarias configurado para gestionar el riesgo.
- Implementar guardado/carga de modelos entrenados
- Añadir soporte para múltiples instrumentos simultáneos
- Implementar un panel de visualización en tiempo real
- Añadir notificaciones por correo electrónico o SMS
- Incorporar análisis de sentimiento de mercado