Monte Carlo Stock Simulator
Simulador de riesgos bursátiles de Ntizar (David Antizar) que aplica modelos estocásticos institucionales directamente en el navegador.
Repositorio
https://github.com/Ntizar/MonteCarloInversion
https://ntizar.github.io/MonteCarloInversion/
Stack
- Vanilla JS (ESM modules)
- Web Workers para simulación sin bloquear UI
- Plotly.js para gráficos (fan chart, histogramas)
- GitHub Pages para deploy
Los 5 Modelos Estocásticos
| Modelo |
Qué captura mejor |
Característica |
| GBM |
Tendencia + volatilidad constante |
Modelo clásico Black-Scholes |
| Heston |
Volatilidad estocástica (mean-reverting) |
Captura clustering de volatilidad |
| Jump-Diffusion |
Eventos extremos (crashes, rallies) |
Saltos Poisson en precio |
| GARCH(1,1) |
Volatilidad que cambia con el tiempo |
Captura fat tails |
| Bootstrap |
No-paramétrico, basado en datos reales |
Re-muestreo de rendimientos históricos |
Arquitectura del simulador (código fuente real)
public/js/
simulation.js — Motor principal: 5 modelos + consenso
simulation-worker.js — Web Worker para cálculos pesados
math-utils.js — Mulberry32 RNG, percentiles, rolling stats
api.js — Fetch de datos de Yahoo Finance
charts.js — Plotly: fan chart, histogramas
config.js — Configuración por defecto
fundamentals.js — Análisis fundamental
technicals.js — Indicadores técnicos
options.js — Análisis de opciones
news.js — Sentimiento de noticias
insiders.js — Insider trading
reddit.js — Sentimiento Reddit
macro.js — Contexto macro
screener.js — Comparación entre activos
portfolio.js — Análisis de portfolio
exporter.js — Exportar a PDF
cache.js — Cache local de resultados
Señal de consenso
- Cada modelo genera una señal BUY/HOLD/SELL
- Score 0-100 basado en consenso entre los 5 modelos
- Fan chart con bandas de confianza 95%/99%
- VaR y CVaR al 95% y 99%
Métricas calculadas
- VaR/CVaR: cuánto puedes perder en el peor escenario
- Probabilidades: de caída ≥10%, ≥20%, ≥30%
- Sharpe y Sortino: rentabilidad ajustada al riesgo
- Señal: BUY/HOLD/SELL con score 0-100
Código clave (simulation.js)
// checkpoint-based validation: re-evalúa el modelo en puntos históricos
// para calibrar confianza en la simulación futura
function buildCheckpointIndices(priceCount, horizon, minTrainingDays, checkpointStep, maxCheckpoints) {
// Construye índices de validación cruzada temporal
}
// classifyDirection: clasifica retornos en up/down/neutral
function classifyDirection(returnPct, neutralBandPct) {
if (returnPct > neutralBandPct) return 1;
if (returnPct < -neutralBandPct) return -1;
return 0;
}
Contexto de Mercado Multi-Fuente
9 fuentes de datos en paralelo (sin registro):
- Analisis tecnico — RSI, MACD, Bollinger, MA, ATR, soporte/resistencia
- Opciones — Put/Call ratio, IV implícita
- Contexto macro — FRED: tipos, inflacion, VIX, curva
- Fundamentales — P/E, ROE, margenes, BPA, deuda
- Earnings Calendar — proximos resultados
- Noticias — RSS + sentimiento
- Sentimiento Reddit — WSB + r/stocks
- Insider Trading — SEC EDGAR Form 4
- Correlacion — matriz Pearson entre activos
APIs Gratuitas (sin registro)
- Yahoo Finance → precios OHLCV, fundamentales, opciones
- Yahoo Finance RSS → noticias y sentimiento
- FRED (St. Louis Fed) → macro: tipos, inflacion, VIX, curva
- Wikipedia → composicion IBEX 35 y S&P 500
- Reddit (JSON publico) → sentimiento WSB/r/stocks
- SEC EDGAR EFTS → insider trading Form 4
Cache con TTL Diferenciado
- Precios: 4 horas
- Fundamentales: 24 horas
- Contexto macro: 6 horas
- Noticias: 15 minutos
- Insider trading: 24 horas
Pitfalls
- Usar Mulberry32 como PRNG (no Math.random) para reproducibilidad
- Los Web Workers deben serializar datos — no pasar funciones
- Yahoo Finance API tiene rate limits — usar cache local
- Los modelos son educativos, no advice financiero
- El bootstrap requiere al menos 250 días de datos históricos
- GARCH necesita convergencia numérica — tener fallback a GBM
- checkpoint-based validation permite calibrar confianza del modelo
- CORS: necesitar cadena de proxies para APIs sin CORS
- CSP: definir Content-Security-Policy estricta en HTML
1---2name: monte-carlo-stock-simulator3description: Simulador Monte Carlo de riesgos bursátiles en navegador: 5 modelos estocásticos (GBM, Heston, Jump-Diffusion, GARCH, Bootstrap), Web Worker, señales BUY/HOLD/SELL, VaR/CVaR, Sharpe/Sortino. Sin servidor, sin registro.4---56# Monte Carlo Stock Simulator78Simulador de riesgos bursátiles de Ntizar (David Antizar) que aplica modelos estocásticos institucionales directamente en el navegador.910## Repositorio1112https://github.com/Ntizar/MonteCarloInversion13https://ntizar.github.io/MonteCarloInversion/1415## Stack1617- Vanilla JS (ESM modules)18- Web Workers para simulación sin bloquear UI19- Plotly.js para gráficos (fan chart, histogramas)20- GitHub Pages para deploy2122## Los 5 Modelos Estocásticos2324| Modelo | Qué captura mejor | Característica |25|--------|-------------------|----------------|26| GBM | Tendencia + volatilidad constante | Modelo clásico Black-Scholes |27| Heston | Volatilidad estocástica (mean-reverting) | Captura clustering de volatilidad |28| Jump-Diffusion | Eventos extremos (crashes, rallies) | Saltos Poisson en precio |29| GARCH(1,1) | Volatilidad que cambia con el tiempo | Captura fat tails |30| Bootstrap | No-paramétrico, basado en datos reales | Re-muestreo de rendimientos históricos |3132## Arquitectura del simulador (código fuente real)3334```35public/js/36 simulation.js — Motor principal: 5 modelos + consenso37 simulation-worker.js — Web Worker para cálculos pesados38 math-utils.js — Mulberry32 RNG, percentiles, rolling stats39 api.js — Fetch de datos de Yahoo Finance40 charts.js — Plotly: fan chart, histogramas41 config.js — Configuración por defecto42 fundamentals.js — Análisis fundamental43 technicals.js — Indicadores técnicos44 options.js — Análisis de opciones45 news.js — Sentimiento de noticias46 insiders.js — Insider trading47 reddit.js — Sentimiento Reddit48 macro.js — Contexto macro49 screener.js — Comparación entre activos50 portfolio.js — Análisis de portfolio51 exporter.js — Exportar a PDF52 cache.js — Cache local de resultados53```5455## Señal de consenso5657- Cada modelo genera una señal BUY/HOLD/SELL58- Score 0-100 basado en consenso entre los 5 modelos59- Fan chart con bandas de confianza 95%/99%60- VaR y CVaR al 95% y 99%6162## Métricas calculadas6364- **VaR/CVaR**: cuánto puedes perder en el peor escenario65- **Probabilidades**: de caída ≥10%, ≥20%, ≥30%66- **Sharpe y Sortino**: rentabilidad ajustada al riesgo67- **Señal**: BUY/HOLD/SELL con score 0-1006869## Código clave (simulation.js)7071```js72// checkpoint-based validation: re-evalúa el modelo en puntos históricos73// para calibrar confianza en la simulación futura74function buildCheckpointIndices(priceCount, horizon, minTrainingDays, checkpointStep, maxCheckpoints) {75 // Construye índices de validación cruzada temporal76}7778// classifyDirection: clasifica retornos en up/down/neutral79function classifyDirection(returnPct, neutralBandPct) {80 if (returnPct > neutralBandPct) return 1;81 if (returnPct < -neutralBandPct) return -1;82 return 0;83}84```8586## Contexto de Mercado Multi-Fuente87889 fuentes de datos en paralelo (sin registro):89901. **Analisis tecnico** — RSI, MACD, Bollinger, MA, ATR, soporte/resistencia912. **Opciones** — Put/Call ratio, IV implícita923. **Contexto macro** — FRED: tipos, inflacion, VIX, curva934. **Fundamentales** — P/E, ROE, margenes, BPA, deuda945. **Earnings Calendar** — proximos resultados956. **Noticias** — RSS + sentimiento967. **Sentimiento Reddit** — WSB + r/stocks978. **Insider Trading** — SEC EDGAR Form 4989. **Correlacion** — matriz Pearson entre activos99100## APIs Gratuitas (sin registro)101102- Yahoo Finance → precios OHLCV, fundamentales, opciones103- Yahoo Finance RSS → noticias y sentimiento104- FRED (St. Louis Fed) → macro: tipos, inflacion, VIX, curva105- Wikipedia → composicion IBEX 35 y S&P 500106- Reddit (JSON publico) → sentimiento WSB/r/stocks107- SEC EDGAR EFTS → insider trading Form 4108109## Cache con TTL Diferenciado110111- **Precios**: 4 horas112- **Fundamentales**: 24 horas113- **Contexto macro**: 6 horas114- **Noticias**: 15 minutos115- **Insider trading**: 24 horas116117## Pitfalls118119- Usar Mulberry32 como PRNG (no Math.random) para reproducibilidad120- Los Web Workers deben serializar datos — no pasar funciones121- Yahoo Finance API tiene rate limits — usar cache local122- Los modelos son educativos, no advice financiero123- El bootstrap requiere al menos 250 días de datos históricos124- GARCH necesita convergencia numérica — tener fallback a GBM125- checkpoint-based validation permite calibrar confianza del modelo126- **CORS**: necesitar cadena de proxies para APIs sin CORS127- **CSP**: definir Content-Security-Policy estricta en HTML