Simulación de Monte Carlo: el riesgo que un backtest oculta

Última verificación: · Contenido de vigencia prolongada
Advertencia de riesgo · YMYL Este artículo tiene fines exclusivamente educativos y no constituye asesoramiento de inversión. Operar en el mercado Forex conlleva un alto riesgo de pérdida de capital — la ESMA informa que entre el 74 % y el 89 % de las cuentas minoristas pierde dinero.

Un lector me envió una vez un backtest (prueba retrospectiva) del que estaba orgulloso: 55 % de operaciones ganadoras, ganancia media de 100 EUR, pérdida media de 80 EUR y unos 3.800 EUR de beneficio esperado sobre el papel para un año. Cifras razonables, así que abrió una cuenta real, arriesgó un 5 % por operación y la reventó en seis meses. Me preguntó dónde estaba el error. El error no estaba en la estrategia: estaba en tratar un único backtest como una verdad, cuando una simulación de Monte Carlo le habría mostrado que esa misma ventaja, con ese tamaño de posición, tenía alrededor de un 25 % de probabilidad de arruinar la cuenta. Esa conversación es la razón por la que escribí este artículo.

¿Qué es realmente una simulación de Monte Carlo de una estrategia?

Monte Carlo es un método probabilístico que toma su nombre del casino de Mónaco. En trading la idea es desarmantemente simple: en lugar de mirar la única curva de capital que la historia produjo, generas mil secuencias nuevas con las mismas estadísticas pero en otro orden. Cada una dibuja un retrato distinto de la cuenta y, en conjunto, forman la nube de posibilidades que un solo backtest de una estrategia nunca puede revelar.

Un backtest aislado es una sola realización de un proceso aleatorio. La varianza a su alrededor puede ser enorme: así se comporta un juego repetido con ventaja. Monte Carlo convierte esa varianza en cifras concretas sobre las que puedes actuar.

¿Qué preguntas responde de verdad Monte Carlo?

La simulación te da tres cosas que un backtest único no ofrece. La primera es un drawdown (caída máxima) realista con un nivel de confianza del 95 %: la profundidad que no superas en 95 de cada 100 simulaciones. La segunda es la probabilidad de perder una parte significativa de la cuenta, por ejemplo una caída por debajo de la mitad del capital. La tercera es el rango de resultados anuales plausibles mientras la ventaja se mantiene constante.

En mi escenario ilustrativo (claramente hipotético), una estrategia con un 55 % de aciertos, una ganancia media de 100 EUR, una pérdida media de 80 EUR y 200 operaciones al año tiene una expectativa cercana a 19 EUR por operación: 3.800 EUR sobre el papel. Una simulación de mil iteraciones produjo una mediana próxima a 3.750 EUR. El peor 5 % de las iteraciones terminó en torno a 500 EUR de beneficio, el peor 1 % en una pérdida de 800 EUR y el mejor 5 % en 7.500 EUR. La misma ventaja, una diferencia de cinco veces.

¿Cómo ejecutar la simulación en Excel?

Una versión sin macros basta para entender tu propia estrategia. En las celdas A1 a A5 colocas los parámetros: porcentaje de aciertos 0,55, ganancia media 100, pérdida media -80, número de operaciones 200 y capital inicial 10.000. En la celda B1 escribes =SI(ALEATORIO()<A1; A2; A3): la función ALEATORIO de Excel devuelve un valor entre cero y uno, y cuando cae por debajo del porcentaje de aciertos obtienes una ganancia; en caso contrario, una pérdida.

En la celda C1 sumas el capital inicial al valor de B1, el primer punto de la curva de capital. B2 reutiliza la misma fórmula y C2 suma el valor de C1 a B2. Arrastras ambas columnas hacia abajo hasta la fila 200. Así construyes una secuencia anual completa.

Copiando esas dos columnas hacia el lado mil veces (B–C, D–E, F–G y así sucesivamente) obtienes mil curvas de capital independientes. A partir de los valores finales lees =PERCENTIL.INC(rango; 0,5) para la mediana, y luego 0,05 y 0,01 para el peor 5 % y el peor 1 %. Al pulsar F9 se recalcula cada sorteo aleatorio, de modo que cada pulsación se convierte en un nuevo estudio de mil iteraciones. Eso, de verdad, es suficiente.

¿Cómo hacer lo mismo en Python con bootstrap?

Python te da dos cosas que Excel no. Primero, velocidad: miles de iteraciones tardan segundos. Segundo, y más importante, te permite hacer bootstrap (remuestreo con reemplazo): extraer no de parámetros supuestos, sino de tu lista real de operaciones históricas.

Importas NumPy, cargas 100 o más cifras reales de beneficios y pérdidas (P&L) desde un diario y escribes nueva_secuencia = np.random.choice(historia, size=200, replace=True). La función np.cumsum convierte la lista de valores de P&L en una curva de capital, y un bucle a su alrededor te da mil iteraciones independientes. Lees los percentiles con np.percentile y usas Matplotlib para dibujar un spaghetti plot (gráfico de espagueti): las mil curvas superpuestas, con la mediana y la banda del percentil 5 al 95 resaltadas.

El bootstrap conserva las colas reales de tu distribución: pérdidas abultadas, movimientos agrupados, la ganancia récord ocasional en una semana volátil. Los supuestos paramétricos no lo hacen, porque no asumen la distribución que tus operaciones realmente tienen.

«Las relaciones de beneficio a riesgo apenas tienen sentido si no incluyes el tamaño de la posición en la ecuación. A través del tamaño de la posición puedes alcanzar casi cualquier objetivo que desees.» — Van K. Tharp, Trade Your Way to Financial Freedom, McGraw-Hill, 2007

Los límites honestos: lo que Monte Carlo no hará

Una simulación paramétrica se apoya en dos supuestos: que las operaciones son independientes y que la distribución de resultados es estacionaria. Ambos se rompen en los mercados reales al mismo tiempo. Las pérdidas se agrupan: cuando cambia el régimen de mercado, varias operaciones seguidas pueden moverse en la misma dirección, algo que un modelo que extrae muestras independientes no puede reproducir. Los drawdowns reales suelen parecer peores que el percentil del 1 % de Monte Carlo, no mejores.

El segundo problema es que la simulación usa la misma historia que le proporcionaste. Si tus 100 operaciones cubren únicamente una tendencia alcista en EUR/USD, Monte Carlo no te dirá nada sobre cómo se comporta la estrategia durante una consolidación prolongada o un movimiento brusco de 200 pips tras un dato estadounidense. Por eso conviene combinar la simulación con un análisis walk-forward, que prueba la estrategia sobre ventanas móviles y detecta el deterioro de la ventaja.

Los drawdowns más oscuros suelen cavar más hondo que el percentil del 1 % de una simulación de Monte Carlo limpia. Trata la simulación como un suelo probabilístico, no como un techo, y léela junto al material sobre gestión del riesgo en ForexMechanics para el contexto extenso. Si operas desde Latinoamérica, consulta tu regulador local —CNBV (México), CNV (Argentina), CMF (Chile), SBS (Perú) u otro organismo competente en tu país.

¿Qué hacer mañana para aprovechar esto de verdad?

  1. Extrae un historial de al menos 100 operaciones cerradas desde tu diario o la exportación de la plataforma. Por debajo de 100 las estadísticas quedan demasiado ruidosas para que Monte Carlo diga algo útil sobre las colas. Si tienes menos, opera otras seis a doce semanas y vuelve a este ejercicio con una muestra más completa.
  2. Abre una hoja de Excel en blanco y construye la versión paramétrica descrita arriba. Introduce tu propio porcentaje de aciertos, ganancia media, pérdida media y capital, copia las columnas mil veces, pulsa F9 y estudia la dispersión de los valores finales. Esa hora de trabajo revela lo amplio que es en realidad el rango detrás de tu «año medio».
  3. Lee el percentil del 5 % del drawdown máximo en esas mil simulaciones. Si apunta a una caída del 30 % mientras tu tolerancia psicológica termina hacia el 15 %, el problema no es la estrategia sino el tamaño de la posición. Reduce a la mitad el riesgo por operación y vuelve a ejecutar hasta que ese suelo del 5 % encaje dentro de tu umbral de dolor.
  4. Después de un año operando en real, ejecuta la simulación de nuevo con el historial actualizado y compárala con la del año anterior. Si la mediana ha caído y las colas se han ensanchado, tu ventaja se está degradando: ese es el momento de preguntarte si la estrategia sigue funcionando, no solo cómo seguir manteniéndola con vida.
Jarosław Wasiński
Sobre el autor

Jarosław Wasiński

Redactor jefe de MyBank.pl · Analista financiero y de mercados

Analista y profesional independiente con más de 20 años en el sector financiero. Fundador y redactor jefe del portal MyBank.pl, en marcha desde 2004. Análisis fundamental de los mercados de divisas y macroeconómicos desde 2007. Escribe desde la perspectiva de los mercados europeos y el marco regulatorio de ESMA.

Fuentes y bibliografía

  1. Bank for International Settlements Minimum capital requirements for market risk (d457) · Bazylejski standard pokazujący, jak instytucje liczą ryzyko rynkowe za pomocą expected shortfall i historycznej symulacji — analog Monte Carlo dla portfela. www.bis.org ↗
  2. Van Tharp Institute About Van K. Tharp · Strona biograficzna potwierdzająca autorstwo książki „Trade Your Way to Financial Freedom" (McGraw-Hill) i jego pracę nad position sizingiem oraz symulacją Monte Carlo dla traderów detalicznych. www.vantharp.com ↗
  3. NumPy Developers numpy.random.choice — Random sampling · Oficjalna dokumentacja funkcji losowania z powtórzeniami; podstawowe narzędzie do bootstrap resampling listy transakcji w Pythonie. numpy.org ↗
  4. Python Software Foundation random — Generate pseudo-random numbers · Oficjalna dokumentacja biblioteki standardowej Pythona z funkcjami random.choices i random.sample, używanymi do prostych symulacji Monte Carlo bez NumPy. docs.python.org ↗

Preguntas frecuentes

¿Qué es la simulación de Monte Carlo de una estrategia de trading?

Monte Carlo es un método probabilístico que toma su nombre del casino de Mónaco. En trading consiste en tomar la lista de tus operaciones históricas o las estadísticas de la estrategia —porcentaje de aciertos, ganancia media, pérdida media— y, en lugar de mirar la única curva de capital que dio la historia, generar mil secuencias nuevas en orden aleatorio. Cada una tiene los mismos parámetros, pero distinto orden de ganancias y pérdidas, así que dibuja un retrato distinto de la cuenta. ¿Para qué?: un backtest aislado es una sola realización. La varianza a su alrededor puede ser enorme. La misma estrategia con una expectativa de unos 19 EUR por operación y 200 operaciones al año puede dar en las simulaciones de Monte Carlo una mediana cercana a 3.750 EUR anuales, pero el peor percentil del 5 % baja a 500 EUR y el mejor 5 % dispara hasta 7.500 EUR. El abanico es amplio incluso con la misma ventaja. El malentendido más frecuente: «el año pasado la estrategia dio 5.000 EUR, así que este año dará algo parecido». Monte Carlo muestra que, con la ventaja constante, el rango realista puede ir de 1.000 a 10.000 EUR, y no hay nada extraño en ello: es simplemente varianza.

¿Cómo hacer una simulación de Monte Carlo en Excel?

La versión más simple no necesita macros ni VBA. En las celdas A1 a A5 escribes los parámetros: porcentaje de aciertos de la estrategia (por ejemplo 0,55), ganancia media (por ejemplo 100), pérdida media (por ejemplo menos 80), número de operaciones en la secuencia (por ejemplo 200) y capital inicial (por ejemplo 10.000). En la celda B1 escribes la fórmula =SI(ALEATORIO()<A1; A2; A3), que simula una operación: la función aleatoria de Excel devuelve un número entre cero y uno y, si cae por debajo del porcentaje de aciertos, obtienes una ganancia; en caso contrario, una pérdida. En la celda C1 sumas el capital inicial al resultado de B1. Las fórmulas de B2 y C2 se construyen de forma análoga, pero C2 se refiere a C1. Arrastras hacia abajo hasta la fila 200. Así surge una secuencia anual completa. Duplicando esas dos columnas hacia el lado 1.000 veces obtienes 1.000 curvas de capital independientes. A partir de los valores finales calculas =PERCENTIL.INC(rango; 0,5) para la mediana, y con 0,05 y 0,01 para ver el peor 5 % y el peor 1 %. La tecla F9 recalcula todos los valores aleatorios de nuevo, así que cada pulsación da un nuevo conjunto de mil simulaciones. Excel lo gestiona sin problemas y eso basta para entender tu propia estrategia.

¿Cómo implementar Monte Carlo en Python?

Python hace lo mismo más rápido y permite hacer bootstrap (remuestreo con reemplazo) a partir de un historial real de operaciones, no solo de parámetros. Importas NumPy, defines los parámetros de la estrategia y escribes una función que genera una secuencia de resultados: una tabla aleatoria de valores entre cero y uno comparada con el porcentaje de aciertos da un vector de ceros y unos, y la función np.where convierte ese vector en ganancias y pérdidas medias. La función np.cumsum convierte la lista de beneficios y pérdidas (P&L) individuales en una curva de capital. Ejecutas esa función en un bucle mil veces, recoges los valores finales y calculas los percentiles con np.percentile. Con una lista de 100 o más operaciones reales, usas np.random.choice(historia, size=200, replace=True) para hacer bootstrap: extraes una secuencia nueva de 200 operaciones con reemplazo de tu propio historial, conservando así las colas reales de la distribución que los supuestos paramétricos no reproducen. La biblioteca Matplotlib permite dibujar un spaghetti plot (gráfico de espagueti), es decir, las 1.000 curvas superpuestas con la mediana y la banda del percentil 5 al 95 resaltadas: una sola imagen dice más sobre el riesgo de la estrategia que diez tablas.

¿Cuáles son las limitaciones de Monte Carlo en el trading?

Monte Carlo no es una adivinación y conviene decirlo claro. El supuesto básico de una simulación paramétrica es la independencia de las operaciones y la estacionariedad de la distribución de resultados. En el mercado real ambas condiciones se rompen a la vez. Las pérdidas tienden a agruparse: cuando cambia el régimen de mercado, varias operaciones seguidas pueden moverse en la misma dirección, algo que un modelo que extrae muestras independientes de la misma distribución no reproduce. Por eso los drawdowns (caídas máximas) más oscuros en real suelen parecer peores que el percentil del 1 % de Monte Carlo, no mejores. El segundo problema es que la simulación usa las mismas estadísticas que extrajiste de la historia. Si esa historia abarca solo una tendencia alcista en EUR/USD, Monte Carlo no te dirá nada sobre el comportamiento de la estrategia en una fase de consolidación. La consecuencia práctica: trata el resultado de Monte Carlo como un suelo probabilístico, no como un techo. Si el peor escenario del 5 % habla de una caída del 30 %, asume que en combate verás una más profunda. Ajusta el tamaño de la posición a ese suelo probabilístico y no al resultado esperado medio: así un revés real no te deja fuera de juego.

Profundiza más · la guía completa