El planteo
Un repo abierto y popular de bots de trading tiene una carpeta con
quince estrategias de reversión a la media testeadas sobre perpetuos
del SP500, con dos documentos que el resto del catálogo notablemente
no tiene: un RESULTS.md con métricas explícitas y un ROBUSTNESS.md
con una batería de seis tests y un puntaje compuesto ponderado. Esto
es ingeniería de verdad, algo raro en las colecciones de estrategias
retail.
Su ganadora — por puntaje compuesto de robustez 97.09, con la segunda en 61.87 — era la Agente 11:
Z-score(15) del precio, fade de extremos en la ventana 10:00-11:00 ET, stop ATR ancho (k_sl=2.0), target ATR ajustado (k_tp=0.3), tope de tiempo de 40 barras.
Sus números titulares sobre 31 días de datos tick: win rate 75.6%, 168 trades, WR out-of-sample 80%. El out-of-sample mejoraba al in-sample. El intervalo de confianza bootstrap del 95% sobre el win rate era [69, 82]. Peor caso de sensibilidad de parámetros: 70.3% — es decir, incluso perturbando los parámetros ±25%, el win rate se mantenía arriba de 70%.
Por todas las medidas que su batería puntuaba, la A11 era la estrategia.
Lo que encontramos
Porteamos la lógica de la A11, bajamos 5 años de barras de 1 minuto de SPY (494.686 barras en 1.824 días de mercado) y la corrimos 70/30 in-sample / out-of-sample. Comisiones barridas a 0, 1 y 3 puntos básicos por lado. Misma lógica, mismos parámetros, solo más datos y un modelo de comisiones honesto.
| Comisión | Trades | Win rate | Profit factor | Retorno total |
|---|---|---|---|---|
| 0 bps | 7.839 IS / 3.420 OOS | 82.0% / 82.4% | 0.72 / 0.72 | −71% IS / −24% OOS |
| 1 bps | igual | 30.0% / 27.9% | 0.12 / 0.11 | −207% / −90% |
| 3 bps | igual | 1.1% / 1.1% | 0.00 / 0.01 | −746% / −226% |
El win rate se reproduce. Obtuvimos 82.4% out-of-sample — incluso mejor que el 80% que declaraba el catálogo. La señal es real.
Volvé a leer la tabla. Incluso a comisión cero, la estrategia perdió 71% en cinco años. El win rate, lo único que su batería medía con robustez, no era lo que determinaba si la estrategia hacía plata.
La matemática que su batería no podía ver
El stop de la A11 es k_sl = 2.0 veces el ATR. Su target es
k_tp = 0.3 veces el ATR. El stop es 6.7 veces más ancho que el
target. Esa es la geometría declarada de la estrategia.
La expectativa por trade con 82% de win rate, en unidades de ATR:
0.82 × (+0.3 ATR) + 0.18 × (−2.0 ATR)
= +0.246 ATR + −0.360 ATR
= −0.114 ATR por trade
La estrategia tiene expectativa negativa estructural. Pierde plata en promedio, trade por trade, antes de que caiga la primera comisión. Para llegar a break-even con esta geometría necesitás un win rate arriba de 86.96%. La A11 no llega nunca — ni en sus datos, ni en los nuestros, ni en ninguna de las perturbaciones de sensibilidad.
No es un bug sutil. La matemática es una división. No la escribieron porque su fórmula compuesta no la pedía.
Por qué la batería no lo vio
El puntaje compuesto de robustez pondera, en orden:
- Estabilidad del WR entre splits train/test
- Intervalo de confianza bootstrap del 95% sobre el WR
- Sensibilidad de parámetros (cuánto se mueve el WR bajo ±25%)
- Consistencia del WR mes contra mes
- Concentración del P&L por día
- Supervivencia del WR a 1 / 3 / 5 bps de comisión
Cada test está al servicio de confiar en el win rate. Ninguno pregunta: dado este win rate, ¿cuál es el valor esperado por trade en plata?
No hay nada mal en lo que construyeron. Es una batería cuidadosa. Solo que tiene un punto ciego exactamente donde viven las estrategias de win rate alto con stops asimétricos. Y esa es una región grande del espacio de diseño — una que produce estrategias que se ven increíbles en muestras chicas, porque en 168 trades normalmente no tenés la mala suerte suficiente en el 18% perdedor para exponer la geometría.
Nosotros testeamos con 11.259 trades en 5 años. La matemática alcanzó.
La trampa más profunda: el ruido del time-stop
El tope de tiempo de la A11 cierra cualquier trade abierto a los 40 minutos si no tocó ni stop ni target. En una muestra de 168 trades, esas salidas por tiempo caen al precio que haya en ese momento — y en una ventana corta, esa distribución depende del régimen.
Su profit factor in-sample era 1.20. Apenas arriba de break-even. La matemática de expectativa de arriba dice que debería estar abajo de 1. La diferencia eran salidas por tiempo cayendo levemente arriba de la entrada, más veces que abajo, en la ventana específica de 31 días que muestrearon.
Eso es suerte, no edge. No generaliza.
En nuestra muestra de 5 años, las salidas por tiempo se promedian, y la geometría se impone. El PF cae a 0.72 — a un pelo de lo que predice la cuenta de −0.114 ATR/trade.
Lo que construimos en respuesta
Esto ahora es parte de nuestro pipeline de validación:
Piso de expectativa por trade. Cualquier estrategia donde el retorno neto promedio por trade sea ≤ 0 se rechaza, sin importar el win rate.
Piso de cantidad de trades consciente del R:R. Las estrategias con ratio TP/SL peor que 1:1 tienen que superar un mínimo de muestra más alto (500+ trades en 1m, contra 100 por defecto). La ilusión de muestra chica es sensiblemente peor para esta geometría.
Alerta de WR deslumbrante. Cualquier estrategia con WR out-of-sample ≥ 70% que además falle en expectativa por trade o PF recibe una advertencia educativa de una línea: "WR alto con expectativa negativa = ilusión de muestra chica o problema estructural de R:R."
Si hubiéramos corrido estos chequeos sobre la A11 primero, la habríamos rechazado en segundos. Si la batería del catálogo hubiera hecho la pregunta de la expectativa, la A11 no habría llegado a "ganadora de robustez".
Lo que no estamos diciendo
No estamos diciendo que el trabajo del catálogo sea malo. Esa carpeta es más honesta que el 95% de lo que hay en el mismo repo. Publicaron su metodología, corrieron un test out-of-sample, testearon sensibilidad a comisiones. El bug es un pecado de omisión específico — una ecuación faltante en un framework sofisticado.
Tampoco estamos diciendo que la señal subyacente sea falsa. El 82% de win rate de la A11 es real. Lo reprodujimos en una muestra 67 veces más grande que la de ellos. El patrón de fade por z-score en el SP500 a la mañana tiene valor predictivo. Lo que no tiene es una geometría de stop y target que monetice ese valor predictivo al win rate que produce.
Acá hay una estrategia. No es la que ellos escribieron.
El takeaway
Cuando veas una estrategia con:
- Win rate alto (≥ 70%)
- R:R asimétrico peor que 1:1 (stop ancho, target ajustado)
- Muestra chica (< 500 trades)
- Robustez medida exclusivamente vía estabilidad del win rate
Calculá el valor esperado por trade, en unidades de ATR, a mano. Es una multiplicación y una resta. Si da negativo, ninguna estabilidad del WR lo va a salvar.
Lo que parece rigor no siempre es rigor.
Nota de metodología: reprodujimos la estrategia desde su fuente publicada, bajamos cinco años de datos de 1 minuto de forma independiente y corrimos la misma lógica con un modelo de comisiones explícito. El log de validación completo — spans de datos, conteos de trades, tablas por nivel de comisión — vive en nuestros registros internos de research; los números de arriba están citados de ahí textualmente.