# DiffQuant: Simulador de Trading Diferenciable para Optimización Directa del Sharpe
En el trading algorítmico basado en ML, los modelos se entrenan tradicionalmente para predecir rentabilidades o dirección de precios usando MSE o entropía cruzada, mientras que el rendimiento se evalúa con el ratio Sharpe, que incluye costes. Esto genera una desconexión: pronósticos precisos de micromovimientos no garantizan rentabilidad fuera de muestra. DiffQuant elimina objetivos proxy al construir un único grafo diferenciable desde características de mercado hasta PnL final y Sharpe. Pruebas walk-forward logran un Sharpe de +1,73 y +8,22% de rentabilidad tras comisiones.
Desafíos con Objetivos Proxy Tradicionales
El flujo estándar separa predicción de trading:
- El modelo minimiza MSE en rentabilidad_{t+1}.
- El tamaño de posición se calcula con heurísticas.
- El backtester aplica comisiones al final.
Esto provoca:
- Desajuste en espacios de error: Precisión en fluctuaciones ruidosas causa sobretrading y sangrado por costes.
- Sin gradiente en tamaño de posición: El modelo no aprende agresividad de entrada.
- Ignorar costes durante entrenamiento: Deslizamiento y comisiones quedan fuera del grafo de cómputo.
DiffQuant integra dimensionamiento de posiciones, simulación de PnL y métricas en un grafo PyTorch, propagando gradientes de extremo a extremo.
Simulador de Trading Diferenciable
El simulador calcula PnL como operaciones tensoriales sobre horizonte t ∈ [0, H-1]:
$$r_t = \frac{c_t - c_{t-1}}{|c_{t-1}| + \varepsilon}$$
$$gross_t = p_{t-1} \cdot r_t$$
$$cost_t = smooth\_abs(\Delta p_t) \cdot (commission + slippage)$$
$$pnl_t = gross_t - cost_t$$
Innovación clave: smooth_abs para diferenciabilidad:
$$smooth\_abs(x) = \sqrt{x^2 + \varepsilon}, \quad \varepsilon = 10^{-6}$$
Esto asegura suavidad C^∞ cerca de cero, donde la política arranca plana, evitando discontinuidades subgradiente.
Los gradientes de -Sharpe fluyen a través de PnL → posiciones → modelo, entrenándolo para considerar costes de extremo a extremo.
Arquitectura de Política con iTransformer
El núcleo es iTransformer (ICLR 2024): un transformer invertido donde los tokens son canales de características, no pasos temporales. Para datos financieros, captura dependencias cruzadas (precio-volumen-volatilidad).
Config: d_model=32, n_layers=4, n_heads=2, d_ff=64 (52k parámetros).
Grafo completo:
- Normalización Z-score sobre ventana de contexto (B, ctx, F) sin look-ahead.
- iTransformerEncoder.
- Concat extras: [prev_pos, prev_delta, t/H, (H-t)/H].
- PolicyHead: direction_head × gate_head.
Posición: $$p_t = \tanh\left(\frac{d_t}{\tau_{dir}}\right) \times \sigma\left(\frac{g_t}{\tau_{gate}}\right)$$
La señal gate enmascara direcciones inciertas (como action masking). Inicialización gate_bias=-1.0 estabiliza arranques casi planos.
Despliegue rodante:
for t in range(H):
window = full_seq[:, t : t + ctx, :]
window_norm = normalize_context(window)
extras = [prev_pos, prev_delta, t/H, (H-t)/H]
pos_t = model(window_norm, extras)
positions_list.append(pos_t)
positions = cat(positions_list)
step_pnl = simulator.simulate(closes, positions)
loss = hybrid_loss(step_pnl, positions)
loss.backward()
Pérdida Híbrida para Evitar Patologías
Sharpe puro lleva a rotación excesiva, colapso plano, sesgo largo, exposición terminal, ceguera a drawdowns. La híbrida los corrige:
$$\mathcal{L} = \lambda_1 \cdot (-Sharpe) + \lambda_2 \cdot turnover + \lambda_3 \cdot drawdown_{log} + \lambda_4 \cdot |p_H| + \lambda_5 \cdot (\hat{f} - f^*)^2 + \lambda_6 \cdot |\bar{p}|$$
- $\lambda_2$: Penalización por rotación contra churning.
- $\lambda_3$: Log-drawdown para estabilidad.
- $\lambda_4$: Exposición cero al final del horizonte.
- $\lambda_5$: Fracción plana objetivo vía sigmoide.
- $\lambda_6$: Anti-sesgo, crucial en mercados alcistas.
$$drawdown_{log} = mean(cummax(cumsum(log(1+pnl))) - cumsum(log(1+pnl)))$$
Aumentación Espejo para Simetría
Datos de entrenamiento (2024–2025) son BTC alcista. Sin intervención, el modelo va solo largo. Aumentación espejo invierte precios y características en subconjuntos de batch, creando pares simétricos.
Resultado: short_fraction 17,3% (test), 20,9% (backtest).
Experimentos: Datos y Divisiones
| Parámetro | Valor |
|-----------|-------|
| Instrumento | BTCUSDT Binance Futures |
| Resolución | Barras de 30 min (agregadas de 1 min) |
| Período | 2021–2025 |
Divisiones:
- Entrenamiento: Ene 2024 – Mar 2025.
- Test: Jul–Sep 2025.
- Backtest: Oct–Dic 2025.
- Walk-forward OOS.
Lecciones Clave
- Un único grafo diferenciable desde características a Sharpe resuelve problemas proxy, incluyendo costes y dimensionamiento.
- iTransformer + direction×gate habilita atención cruzada y trading confiado.
- Pérdida híbrida con anti-sesgo previene patologías como rotación y solo-largos.
- Aumentación espejo genera política simétrica en datos asimétricos.
- Sharpe walk-forward +1,73 tras comisiones en BTC OOS.
— Editorial Team
Aún no hay comentarios.