FHussain
Portfolio
Optimizer
OPIM 5641 · Business Decision Modeling · UConn
Bonmin MINLP · 20-Stock Womack Universe · 5-Day Sliding Window
Last updated:
Window ending:
Expected daily return:

Live · Auto-updates 9 AM EST weekdays
Key Metrics
Universe
20
Stocks total
Selected
10
Per day via Bonmin
Floor
5%
Min per stock
Cap
25%
Max per stock
Rotation
3D
Max consecutive
Sectors
5
At least 1 each
Portfolio Analysis
Today's Allocation — 10 Selected Stocks
Efficient Frontier — Risk vs Return
Cumulative Return — All Strategies
Rolling 10-Day Sharpe Ratio
Comparative Analysis
Strategy Performance vs Baselines
Performance Metrics
StrategyTotal RetSharpeMax DDWin %
Current Holdings
Today's Portfolio — 10 of 20 Stocks Selected by Bonmin
TickerSectorAllocationWeight BarS&P 500ETF Bench
Full Universe
All 20 Womack Stocks — Daily Selection Status
TickerCompanySectorETFStatus
Model Constraints
All Active Bonmin MINLP Constraints
Budget
= 100%
Proportions sum to 1
Cardinality
= 10
Exactly 10 stocks
Floor
≥ 5%
Min if selected
Cap
≤ 25%
Max per stock
Sectors
≥ 1
Per sector required
Rotation
≤ 3d
Then 1-day rest
S&P Filter
−20%
Non-member haircut
ETF Match
±10%
vs sector ETF
Pipeline
How the System Works — End to End
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.