01
Data Pull
yfinance downloads daily prices for all 20 stocks from March 2026 → today. S&P 500 list from Wikipedia. Sector ETFs downloaded.
02
5-Day Window
Rolling 5-day window computes mean returns and covariance. Shifts 1 day forward each run — model sees fresh data daily.
03
Bonmin MINLP
Binary y[t] selects exactly 10 stocks. Continuous x[t] sets proportions 5–25%. Sector coverage and rotation enforced.
04
S&P + ETF
Non-S&P 500 stocks penalized 20%. Stocks beating sector ETF get +10% bonus. Guides replacement when cap hit.
05
Comparison
Results vs SPY buy & hold and Golden Cross MA. Sharpe ratio, max drawdown, win rate compared across all 3.
06
Auto-Publish
GitHub Actions cron runs notebook 9 AM EST weekdays. This dashboard regenerated and pushed — zero manual work.