Lección 420 min60 XPGratis
Azar o habilidad: por qué una racha no demuestra nada
Al terminar sabrás
- Explicar por qué en un grupo grande siempre hay "genios" aunque nadie tenga ventaja
- Distinguir entre el resultado de un trader y la evidencia de que tiene ventaja
- Entender qué es el sesgo de supervivencia y dónde lo ves cada día
Antes de esta conviene haber hecho Riesgo: volatilidad y drawdown.
En TikTok hay alguien que lleva ocho meses seguidos en verde y enseña sus retiradas. En un foro, alguien triplicó la cuenta en un año. Parecen pruebas. No lo son, y no porque mientan: es que, con suficiente gente probando, esos resultados aparecen solos, sin que nadie tenga ventaja alguna.
El problema
Cuando ves a un trader con resultados espectaculares, no ves a los cientos que probaron lo mismo y perdieron. Solo ves al que sobrevivió. Y el que sobrevivió, mirándose a sí mismo, también cree que fue habilidad. Hasta que no separas el resultado de la ventaja, cualquier "prueba" que veas te va a engañar.
Tres capas
Intuición
Mete a 1.000 personas en una sala y dales una moneda. Cada día, cara suma un 1 % a la cuenta y cruz le resta un 1 %. Nadie sabe nada de mercados; es una moneda. Al cabo de un año, mira la clasificación.
Habrá alguien arriba con un +60 %. Habrá más de cien con más de un +20 %. El de arriba habrá tenido una racha de siete caras seguidas y estará convencido de que "leyó bien el mercado esa semana". Nadie de los mil tenía ventaja, y sin embargo la clasificación parece la de un concurso de talento.
Ahora imagina que solo los cien mejores abren canal de YouTube. Lo que tú ves es un mundo lleno de genios. El mundo real es una sala llena de monedas.
Ejemplo numérico
Un solo trader-moneda, 252 días, +1 % / −1 %:
- Retorno esperado de un día: 0,5 × (+1 %) + 0,5 × (−1 %) = 0 %.
- Volatilidad diaria: 1 %. Anualizada: 1 % × √252 ≈ 15,9 %.
- Con 252 lanzamientos, el número de caras sigue una campana centrada en 126 con desviación √(252 × 0,25) ≈ 7,9. Sacar 141 caras o más (15 por encima de la media, unas 2 desviaciones) le pasa a un 2-3 % de la gente.
- 141 caras y 111 cruces → equity ≈ 1,01¹⁴¹ × 0,99¹¹¹ ≈ 4,065 × 0,328 ≈ 1,33: un +33 %.
O sea: de 1.000 monedas, entre 20 y 30 acaban el año con más de un +30 % sin ninguna ventaja. Y una racha de 7 caras seguidas en 252 tiradas no es rara: la probabilidad de que ocurra al menos una vez ronda el 60 %.
Formal
Sea el resultado del día con . El número de días ganadores . Con y : , .
El retorno final es , una función creciente de . Que el mejor de traders independientes tenga un alto no es evidencia de nada: el máximo de variables aleatorias crece con . Para , el máximo esperado de una normal estandarizada es aproximadamente desviaciones; el mejor "trader" tendrá unas caras y un retorno cercano al +60 % que verás en el código.
Esto tiene dos nombres en la literatura. Sesgo de supervivencia: estudiar solo a los que siguen existiendo (traders, fondos, estrategias, acciones) sesga la media hacia arriba porque los que fracasaron han desaparecido de la muestra. Sesgo de selección (o problema de los tests múltiples): elegir el mejor resultado entre muchos y evaluarlo como si fuera el único. Es el mismo mecanismo que hace que probar 40 variantes de una estrategia y quedarte con la mejor produzca un Sharpe alto por azar. El Nivel 3 lo formaliza (PBO, deflated Sharpe); esta lección es la intuición.
La pregunta correcta no es "¿cuánto ha ganado?" sino "¿cuántos lo intentaron y cuánto habría ganado el mejor de ellos por puro azar?". Sin el denominador, el numerador no dice nada.
Ejemplo trabajado con código
# numpy 2.4 — 1.000 traders lanzando una moneda: ¿cuántos parecen genios tras un año?
import numpy as np
rng = np.random.default_rng(42)
traders, dias = 1000, 252
# Cada día cada trader gana o pierde un 1 % con probabilidad 0,5: ventaja CERO por construcción
retornos = rng.choice([0.01, -0.01], size=(traders, dias))
equity = 100 * (1 + retornos).cumprod(axis=1)
final = equity[:, -1]
print(f"Retorno medio real de todos: {final.mean()/100 - 1:+.2%} (la moneda no tiene ventaja)")
print(f"Mejor trader del año: {final.max()/100 - 1:+.1%}")
print(f"Peor trader del año: {final.min()/100 - 1:+.1%}")
print(f"Traders que acabaron > +20 %: {(final > 120).sum()} de {traders}")
print(f"Traders que acabaron > +30 %: {(final > 130).sum()} de {traders}")
# Rachas: el número máximo de días ganadores seguidos del mejor trader
mejor = retornos[final.argmax()] > 0
racha, mejor_racha = 0, 0
for g in mejor:
racha = racha + 1 if g else 0
mejor_racha = max(mejor_racha, racha)
print(f"Racha ganadora más larga del mejor trader: {mejor_racha} días seguidos")Retorno medio real de todos: -0.30% (la moneda no tiene ventaja)
Mejor trader del año: +59.6%
Peor trader del año: -42.5%
Traders que acabaron > +20 %: 118 de 1000
Traders que acabaron > +30 %: 43 de 1000
Racha ganadora más larga del mejor trader: 7 días seguidosLa media de todos es −0,3 %, no 0 %: es la asimetría de la lección 2 (un −1 % seguido de un +1 % deja un −0,01 % por cada par). Y 43 personas de 1.000 acabaron con más de un 30 %. Ninguna sabía nada.
Figura

El error típico
Juzgar una estrategia (o a una persona) por su resultado sin preguntar cuántas se probaron. Un vendedor de sistemas puede lanzar diez estrategias en cuentas reales, esperar un año, y publicar el track record de la que salió mejor. Es exactamente la sala de las monedas con un filtro delante. Lo mismo te haces a ti mismo cuando pruebas veinte variantes de parámetros y te quedas con la que "funciona": el resultado que ves está seleccionado, y la selección infla. La defensa es siempre la misma: escribe cuántas cosas probaste antes de mirar resultados, y compara el mejor con lo que produciría el azar entre ese número de intentos.
Quiz
5 preguntas · se aprueba con 60 %
1.De 1.000 traders sin ventaja, ¿cuántos esperarías con más de un +30 % tras un año de apuestas de ±1 % cada día?
2.Un fondo lleva 10 años seguidos batiendo al índice. ¿Qué necesitas saber antes de impresionarte?
3.Pruebas 40 configuraciones de una estrategia y la mejor tiene un backtest excelente. ¿Qué has demostrado?
4.¿Por qué la media de los 1.000 traders-moneda sale ligeramente negativa (−0,3 %) y no cero?
5.Ves un canal que muestra ocho meses en verde con retiradas reales. ¿Qué puedes concluir?
0 de 5 respondidas
Ejercicio
Modifica el código: cambia traders a 10.000 y luego a 100. Anota en cada caso el retorno del mejor trader y cuántos superan el +30 %. Después, sin cambiar el número de traders, cambia la semilla (default_rng(1), default_rng(2)) y observa cómo cambia quién es "el genio" pero no cuántos genios hay.
Resultado verificable: con 10.000 traders el mejor debería superar el +70 %; con 100, rondar el +40-45 %. Con 10.000 traders, la proporción por encima de +30 % debe rondar el 4-5 % con cualquier semilla; con 100 verás que baila mucho (eso también es tamaño de muestra). Si te sale muy distinto, revisa que cumprod va sobre axis=1.
Qué te llevas
- En un grupo grande, los resultados extremos aparecen solos. El mejor de 1.000 monedas parece un genio.
- Sin saber cuántos lo intentaron, un track record no es evidencia. Pregunta siempre por el denominador.
- Tú te haces lo mismo cuando eliges la mejor de veinte pruebas. Anota cuántas hiciste antes de mirar.
Siguiente lección: Qué hace un quant de verdad. Vas a ver el ciclo completo, hipótesis, datos, medida y comparación con el azar, en 30 líneas de código, y vas a ver cómo la semilla 42 casi nos engaña.
