Resumen rápido
Las redes neuronales densas (DNN) son la arquitectura más usada en trading algorítmico. Conectan cada neurona de una capa con todas las de la siguiente, capturando relaciones no lineales entre precios, indicadores, volumen y datos microestructurales. Una arquitectura típica usa 2-4 capas ocultas con 64-256 neuronas, activación ReLU, dropout 0.2-0.3 y Batch Normalization. El código en Python con TensorFlow es directo: un modelo Sequential con 3 capas Dense.
En este artículo exploraremos los detalles de implementación: arquitectura óptima, ejemplos de código, métricas de rendimiento y mejores prácticas para evitar overfitting.
¿Qué son las Redes Neuronales Densas?
Una red neuronal densa (o fully connected) es una arquitectura donde cada neurona de una capa está conectada con todas las neuronas de la capa siguiente. Esto permite capturar relaciones no lineales entre las variables de entrada.
"La clave no es tener la red más compleja, sino la que mejor generalice con los datos disponibles."
Arquitectura Recomendada para Trading
Variables de Entrada
Las variables de entrada (features) son cruciales para el rendimiento del modelo. Recomendamos incluir:
- Precios OHLC: Open, High, Low, Close en múltiples temporalidades
- Indicadores técnicos: RSI, MACD, Bollinger Bands, ATR
- Volumen: Volumen relativo, delta de volumen
- Datos microestructurales: Order flow, profundidad de mercado
Configuración de Salida
La capa de salida depende del tipo de problema:
- Clasificación (3 clases): Compra, Venta, Mantener → Softmax
- Regresión: Predicción de precio futuro → Lineal
- Probabilidad: Señal de trading → Sigmoid
Ejemplo: Rendimiento vs Profundidad
Sharpe Ratio según profundidad de la red
Código de Ejemplo en Python
import tensorflow as tf
from tensorflow.keras import layers, models
def build_trading_model(input_shape):
model = models.Sequential([
layers.Dense(128, activation='relu', input_shape=(input_shape,)),
layers.BatchNormalization(),
layers.Dropout(0.3),
layers.Dense(64, activation='relu'),
layers.BatchNormalization(),
layers.Dropout(0.2),
layers.Dense(32, activation='relu'),
layers.Dense(3, activation='softmax') # Compra, Venta, Mantener
])
model.compile(
optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy']
)
return model
Mejores Prácticas
- División de datos: Usa walk-forward validation, nunca random split
- Normalización: StandardScaler o MinMaxScaler ajustado solo con datos de entrenamiento
- Regularización: L1/L2 regularization + Dropout
- Early Stopping: Monitorizar val_loss con paciencia de 10-20 epochs
- Ensemble: Combina múltiples modelos para mayor robustez
Conclusión
Las redes neuronales densas son una herramienta poderosa para el trading algorítmico, pero requieren una implementación cuidadosa para evitar overfitting y garantizar la generalización. La clave está en la calidad de los datos, la arquitectura adecuada y una validación robusta.