Un Monte Carlo de un backtest reordena o remuestrea los resultados del historial miles de veces y mira cuánto cambian las caídas. Sirve para ver la dispersión del riesgo que un solo orden de operaciones esconde. No es una segunda prueba de la estrategia: trabaja con los mismos datos, con su suerte y con sus sesgos. Aquí ves qué responde, qué no responde y qué calcula el informe de Rigor, con un ejemplo sintético que se reproduce con su semilla.
Qué es remuestrear operaciones o una curva
Un backtest entrega una secuencia: operaciones cerradas o rendimientos por periodo de la curva de capital. Remuestrear es construir historias nuevas con esas mismas piezas. Barajar cambia solo el orden y conserva cada resultado. El bootstrap sortea piezas con reemplazo, así que una historia puede repetir unas y omitir otras. El bootstrap estacionario sortea bloques de periodos consecutivos, de longitud aleatoria, para conservar parte de la dependencia entre días cercanos.
Cada método repite el sorteo miles de veces y resume lo que sale: la caída máxima mediana, la que aparece en 1 de cada 20 historias o la proporción de historias que cae más de un umbral. El nombre Monte Carlo se refiere a ese uso de sorteos repetidos. No añade información que el historial no tenga; ordena la que ya tiene.
Qué responde: la dispersión si el orden es intercambiable
La caída máxima de un backtest depende del orden en que llegaron las pérdidas. Con los mismos resultados, otro orden habría dado una caída más leve o más profunda, y una racha perdedora más corta o más larga. Un Monte Carlo responde a esa pregunta concreta: qué rango de caídas y rachas producen estos resultados si el orden es intercambiable, es decir, si cualquier orden era igual de probable.
Ese supuesto marca el límite de la respuesta. Si las pérdidas dependen del régimen de mercado, de posiciones abiertas a la vez o de cambios de tamaño, el orden no es intercambiable y barajar lo disimula. El bootstrap por bloques conserva la dependencia dentro de cada bloque, pero no reconstruye regímenes que el historial no contiene.
Un ejemplo calculado con su semilla
Declarado · Una serie sintética de 500 rendimientos diarios, generada con NumPy con semilla 20261008, media de 0,05 % y desviación de 1 % al día. En el orden generado, su caída máxima es de 12,2 %. Con shuffled_drawdown, 1.000 órdenes al azar de los mismos rendimientos con semilla 20260926, la peor caída va de 7,5 % a 16,2 % en 9 de cada 10 órdenes, con una mediana de 10,6 %.
Declarado · Con drawdown_risk, el bootstrap estacionario del informe (2.000 historias de 252 días, bloque esperado de 5 días y semilla 12345), la caída máxima a un año tiene una mediana de 8,5 % y llega a 15,5 % en 1 de cada 20 historias. El 32,9 % de las historias cae al menos un 10 % y el 0,8 %, al menos un 20 %.
Las dos cifras miden cosas distintas: la primera recorre los 500 días de la serie; la segunda, un año. Ninguna es una medición de una estrategia ni una previsión. El código del artículo fija la semilla y los parámetros, así que el mismo cálculo da siempre estas cifras.
Qué no responde: el sobreajuste y la búsqueda
Un Monte Carlo no distingue un resultado con ventaja de uno elegido por suerte entre muchos. Remuestrea lo que hay: si lo que hay es el mejor de cien intentos, remuestrea esa suerte. Tampoco dice cómo se comportaría la estrategia con datos que no vio, ni descuenta los costos que el backtest omitió.
Para la búsqueda de configuraciones existe otra herramienta: el Sharpe deflactado compara el Sharpe observado con el que darían por azar los intentos realizados. Para el ajuste al pasado, un tramo fuera de muestra fijado antes de mirar los resultados. El artículo enlazado sobre el Sharpe deflactado y el de qué hacer después del backtest explican las dos; la calculadora de suerte enlazada hace la primera cuenta con cifras declaradas.
Por qué el Monte Carlo de un backtest optimizado hereda su sesgo
El optimizador elige la configuración cuyo historial salió mejor. Por esa misma selección, el historial tiene más rachas favorables y caídas más leves que las del proceso que lo generó. El remuestreo parte de esos mismos rendimientos, así que sus historias heredan la media inflada y las caídas suavizadas. Un abanico de curvas estrecho y ascendente puede ser solo la huella de la elección.
Declarado · Generamos 100 series sintéticas de 250 rendimientos diarios con media cero y desviación de 1 % (semilla 20261009) y nos quedamos con la de mayor resultado final. Con drawdown_risk y los mismos parámetros, su caída máxima a un año tiene una mediana de 7,4 % y el 15,6 % de las historias cae al menos un 10 %. Otros 5.000 días del mismo generador (semilla 20261010) dan una mediana de 14,8 % y un 83,4 % de historias con una caída de al menos un 10 %. Ninguna serie tenía ventaja: la diferencia la pone la selección.
Qué calcula el informe de Rigor
El informe llama a esto riesgo remuestreado a un año. La función drawdown_risk arma miles de historias de un año con bloques de los rendimientos de tu archivo, con un bootstrap estacionario cuyo bloque esperado parte de 5 periodos y se alarga cuando los rendimientos se agrupan. Muestra la caída máxima mediana, la de 1 de cada 20 y la de 1 de cada 100, la probabilidad de caer al menos un 10, 20, 30 o 50 % y los periodos seguidos bajo el máximo. La semilla es fija y el informe la imprime.
Al lado, shuffled_drawdown compara la peor caída del archivo con la de los mismos rendimientos en órdenes al azar, que conservan el Sharpe, la volatilidad y el resultado final. Si la caída del archivo es más leve que en casi todos los órdenes, las pérdidas se siguieron menos de lo que daría el azar, como en una curva suavizada; si es más profunda, llegaron en rachas. Con operaciones cerradas, loss_streak_review hace la misma comparación con la racha perdedora más larga, y el simulador de retos recorre historias remuestreadas igual con las reglas de cada reto.
Un remuestreo sí entra en la clase: el percentil 5 del Sharpe en un bootstrap estacionario forma parte de la prueba de azar. El riesgo remuestreado, los órdenes al azar y las rachas son informativos y no cambian la clase. Todos describen el historial aportado; ninguno es una predicción.
Míralo en el informe de ejemplo
Abre el informe de ejemplo enlazado para ver el riesgo remuestreado con datos sintéticos y compáralo después con el de tu propio archivo.
Preguntas frecuentes
¿Un Monte Carlo favorable descarta el sobreajuste?
No. Remuestrea el historial que ya existe; si ese historial salió de elegir la mejor de muchas configuraciones, el remuestreo conserva el sesgo. Para la búsqueda sirve el Sharpe deflactado y, para el ajuste al pasado, un tramo fuera de muestra fijado antes de mirar.
¿Cuántas simulaciones hacen falta?
Más simulaciones afinan los percentiles, pero no cambian lo que se remuestrea. El informe usa miles de historias con una semilla fija para que el mismo archivo dé los mismos números. El límite principal es la longitud y la representatividad del historial, no el número de sorteos.
Relacionado
- Ver el informe de ejemplo (datos sintéticos)
- ¿Ventaja o suerte? Calculadora de Sharpe deflactado
- Calculadora de % de aciertos
- Sharpe deflactado, explicado para quienes publican historiales
- Qué hacer después del backtest: seis comprobaciones
- Rachas perdedoras: cuántas pérdidas seguidas son normales
- Cómo auditamos