A reproducible comparison of S&P 500 and KOSPI monthly price-index performance, volatility, drawdowns and rolling correlations from 2000 through 2024.
| Market | Ann. geometric price return | Ann. volatility | Max drawdown | Positive months | Best year | Worst year |
|---|---|---|---|---|---|---|
| SP500 | 5.7% | 15.3% | -52.6% | 62.3% | 2013 (29.6%) | 2008 (-38.5%) |
| KOSPI | 3.4% | 21.2% | -49.2% | 54.7% | 2005 (54.0%) | 2000 (-50.9%) |
Data-definition warning: Results use local-currency price indices, exclude dividends and do not adjust for USD/KRW exchange-rate movements.
Over this historical sample, the table and charts describe differences in compounded price growth, month-to-month variability, and losses from prior peaks. They neither rank either market for every investor nor predict future performance.
This focused portfolio analysis answers how the broad S&P 500 and KOSPI differed in local-currency price performance, volatility, drawdowns, and return correlation from January 2000 through December 2024.
Yahoo Finance is the third-party delivery source, accessed through yfinance: ^GSPC represents the S&P 500 in US index terms and ^KS11 represents the broad KOSPI in Korean index terms. The fixed download window is 1999-12-01 through 2025-01-01 (exclusive); the common snapshot spans 1999-12 through 2024-12, with December 1999 used only to calculate January 2000's return.
Unadjusted Close values exclude dividends. Results also exclude USD/KRW conversion, fees, taxes, and inflation. Yahoo Finance is not described as an official index administrator, and these are not total returns.
Daily closes are reduced to each month's final available trading observation and aligned on common months. Price levels are normalized to 100 so differently scaled indices can share a chart; this does not represent equal currency-adjusted wealth. Calculations use simple monthly returns—not regressions or correlations between trending price levels. Annualized volatility uses pandas' sample standard deviation (ddof=1) times sqrt(12); geometric annualized returns use the actual monthly observation count.
Rolling volatility uses 12 monthly returns. Rolling Pearson correlation uses 36 aligned monthly returns and is descriptive, not evidence of causation.
python -m pip install -r requirements.txt
python analysis.py
python scripts/generate_assets.py
python scripts/update_readme_results.py
python -m pytest -q
MARKET_ANALYSIS_SMOKE=1 python scripts/run_notebook_smoke.pyNormal analysis is offline and uses the committed snapshot. python scripts/fetch_market_data.py is the explicit network-dependent refresh step.
analysis.py is canonical; data/ holds the snapshot and provenance; results/ contains machine-readable outputs; assets/ contains four text SVGs; notebooks/ is the presentation layer; scripts/ contains refresh and consistency tools; and archive/ preserves the original coursework.
This descriptive historical analysis is not a forecast, recommendation, trading strategy, causal study, total-return comparison, or currency-adjusted investor comparison. Historical behavior need not continue.
The archive preserves the original notebook, report, and inputs without making their incompatible-frequency and sector-average methodology part of the active analysis.