reinforcement learning - ErnestoCobos/MidasV4 GitHub Wiki

Aprendizaje por Refuerzo en MidasScalpingv4

Este documento explica el sistema de aprendizaje por refuerzo implementado en MidasScalpingv4 para mejorar las decisiones de trading y adaptarse dinámicamente a las condiciones cambiantes del mercado.

Introducción al Aprendizaje por Refuerzo para Trading

El aprendizaje por refuerzo (RL) es un paradigma de aprendizaje automático en el que un agente aprende a tomar decisiones óptimas mediante la interacción con un entorno, recibiendo recompensas o penalizaciones por sus acciones. En el contexto del trading, el agente es el algoritmo de trading, el entorno es el mercado, y las recompensas son los beneficios o pérdidas generados.

Ventajas del RL para Trading

  • Aprendizaje continuo: El sistema mejora constantemente con nuevos datos de mercado
  • Adaptabilidad: Se ajusta a diferentes regímenes de mercado (tendencia, rango, volatilidad)
  • Optimización directa: Aprende a maximizar el rendimiento financiero, no métricas indirectas
  • Gestión de riesgo integrada: Puede incorporar penalizaciones por drawdown y volatilidad

Arquitectura del Modelo RL

MidasScalpingv4 implementa un modelo de aprendizaje por refuerzo basado en redes Q duales con ramificación de acciones, inspirado en el enfoque DeepScalper presentado en investigaciones académicas.

Componentes Principales

1. RLTradingModel

El núcleo del sistema es la clase RLTradingModel (en models/deep_scalper.py), que implementa:

  • Red Q dual: Separa la estimación del valor del estado (V) de las ventajas de cada acción (A)
  • Ramificación de acciones: Permite descomponer el espacio de acciones en tipos (comprar/vender/mantener) y tamaños de posición
  • Memoria de experiencia: Almacena experiencias previas para entrenamiento por lotes
  • Actualización suave de la red objetivo: Mejora la estabilidad del aprendizaje
# Arquitectura de alto nivel:
def _build_network(self):
    # Red convolucional para patrones a corto plazo
    conv_features = Conv1D(...)(input)
    
    # LSTM bidireccional para dependencias temporales
    temporal_features = Bidirectional(LSTM(...))(input)
    
    # Red dual (valor + ventaja)
    value = Dense(1)(value_stream)
    advantages = [Dense(size_dim)(advantage_stream) for action_type]
    
    # Q(s,a) = V(s) + A(s,a) - mean(A(s,a'))
    q_values = [value + advantage - mean(advantage) for advantage in advantages]
    
    return Model(inputs=input, outputs=q_values)

2. RLStrategy

La clase RLStrategy (en strategy/rl_strategy.py) integra el modelo RL con el sistema de trading:

  • Gestiona el estado del mercado como entrada para el modelo
  • Mapea las acciones del modelo a señales de trading concretas
  • Calcula las recompensas basadas en resultados de trading
  • Implementa Experience Replay con bonificación retrospectiva

Representación del Estado

El estado del mercado se representa como una secuencia temporal de vectores de características, incluyendo:

  • Indicadores técnicos: RSI, Bollinger Bands, ADX, medias móviles, etc.
  • Datos de precios: OHLCV (Open, High, Low, Close, Volume)
  • Métricas derivadas: Volatilidad, fuerza de tendencia, volumen relativo
  • Características de velas: Tamaño del cuerpo, sombras superior e inferior
  • Régimen de mercado: Clasificación del estado actual del mercado
# Ejemplo simplificado de preprocesamiento de estado:
def preprocess_state(self, features):
    feature_list = []
    
    # Extraer indicadores técnicos relevantes
    for feature in ['rsi', 'bb_upper', 'bb_lower', 'sma_7', 'sma_25', ...]:
        feature_list.append(features.get(feature, 0))
    
    # Normalizar características para mejorar el aprendizaje
    return np.array(feature_list)

Espacio de Acciones

El espacio de acciones está diseñado con ramificación para permitir decisiones más granulares:

  1. Tipo de acción:

    • Comprar (BUY)
    • Vender (SELL)
    • Mantener (HOLD)
  2. Tamaño de posición:

    • 5 niveles de tamaño (0-4), donde 0 es el más pequeño y 4 el más grande
    • El tamaño se ajusta dinámicamente basado en volatilidad y drawdown

Esta estructura permite 15 posibles acciones (3 tipos × 5 tamaños).

Función de Recompensa

La función de recompensa está diseñada para balancear rendimiento y riesgo:

def calculate_reward(pnl, drawdown, volatility, win_streak):
    # Recompensa base proporcional al P&L
    base_reward = pnl * 10
    
    # Penalización por drawdown
    drawdown_penalty = drawdown * 2
    
    # Bonificación por consistencia (rachas ganadoras)
    consistency_bonus = min(win_streak * 0.1, 0.5)
    
    # Penalización por volatilidad excesiva
    volatility_penalty = max(0, volatility - 0.01) * 5
    
    return base_reward + consistency_bonus - drawdown_penalty - volatility_penalty

Bonificación Retrospectiva

El sistema implementa una técnica de Hindsight Experience Replay (HER) que aprovecha el conocimiento posterior sobre el movimiento real del precio para mejorar el aprendizaje:

def hindsight_experience_replay(self, trajectory):
    final_state = trajectory[-1][3]
    
    for state, action, _, next_state, _ in trajectory:
        # Calcular recompensa basada en el conocimiento de cómo evolucionó realmente el precio
        hindsight_reward = self._calculate_hindsight_reward(state, final_state)
        
        # Guardar experiencia relabelizada
        self.memory.append((state, action, hindsight_reward, next_state, False))

Integración con Gestión de Riesgo

Una característica clave del sistema RL es su integración con el módulo de gestión de riesgo:

  • Ajuste dinámico del tamaño: Reduce posiciones cuando hay drawdown significativo
  • Tarea auxiliar de riesgo: El modelo también aprende a estimar el riesgo de cada operación
  • Umbrales adaptativos: Ajusta los criterios de cierre de posiciones según el régimen de mercado

Entrenamiento y Actualización

El modelo se entrena y actualiza de varias formas:

  1. Entrenamiento inicial offline con datos históricos
  2. Aprendizaje online durante la operativa, actualizando gradualmente el modelo
  3. Reentrenamiento periódico programado (por ejemplo, diariamente o semanalmente)

El proceso de entrenamiento utiliza técnicas de estabilización:

  • Replay buffer prioritizado: Muestrea experiencias más informativas con mayor frecuencia
  • Doble Q-learning: Reduce el sobreoptimismo en la estimación de valores Q
  • Actualización suave de la red objetivo: Mezcla lentamente los pesos para evitar inestabilidad

Uso en Producción

Para usar el modelo RL en producción:

  1. Asegúrate de que los parámetros de configuración rl_* estén correctamente establecidos
  2. Inicializa la estrategia:
from strategy.rl_strategy import RLStrategy

# Inicialización
rl_strategy = RLStrategy(config, binance_client=client)

# Generación de señales
signal = await rl_strategy.generate_signal(symbol, features)

# Procesamiento de resultados tras cerrar posición
rl_strategy.process_trade_result(symbol, entry_price, exit_price, side, quantity)

Limitaciones y Consideraciones

  • Periodo de calentamiento: El modelo necesita suficientes datos para generar señales confiables
  • Exploración vs. explotación: Ajusta epsilon según tu tolerancia al riesgo
  • Requisitos computacionales: El entrenamiento puede requerir recursos significativos (CPU/GPU)
  • Sobreajuste: Monitorea el rendimiento fuera de muestra para evitar sobreajustar a datos históricos

Métricas de Rendimiento

Para evaluar el modelo RL, se utilizan las siguientes métricas:

  • Rendimiento financiero: Retorno, Sharpe ratio, Sortino ratio, drawdown máximo
  • Precisión de decisión: Porcentaje de operaciones rentables, beneficio medio por operación
  • Comportamiento adaptativo: Rendimiento en diferentes regímenes de mercado
  • Convergencia de aprendizaje: Estabilidad de la función de pérdida durante el entrenamiento

Futuras Mejoras

Áreas de desarrollo futuro para el sistema RL:

  • Implementación de Proximal Policy Optimization (PPO) para mayor estabilidad
  • Incorporación de datos de order book para visión más profunda del mercado
  • Aprendizaje multi-agente para diferentes símbolos/timeframes
  • Meta-aprendizaje para adaptación más rápida a nuevos mercados