Optimize
The Optimize wizard runs portfolio optimization on any set of tickers — from scratch, from a connected account, or from an existing saved Portfolio. It supports classic mean-variance (using historical data) and Black-Litterman (blending the market prior with your own forward views).
Open Optimize from the sidebar or hit E. Requires Pro.
The 3-step wizard
The footer shows the current step and a Continue → button; the primary action turns into Run optimization on step 3.
Step 1 · Holdings
Pick the tickers you want to optimize over.
- Start from scratch — add tickers one at a time via the + Add ticker modal, or pick from the search picker.
- Import from account — choose any connected account; positions seed the holdings list.
- Skip strip — tickers Norn doesn't track (see Insights) surface at the top with Dismiss or Request coverage actions. Dismissed tickers are dropped from the run.
- Remove — every row has an ✕; the counter updates live.
You can deep-link straight into the wizard with pre-filled holdings:
/optimization?tickers=NVDA,AVGO,TSM,AMD,MU&source=account&account_name=Fidelity%20IRAThe Accounts page includes an Optimize these holdings button that does exactly this.
Step 2 · Strategy
Choose the objective, the model, and the constraints.
Objective
- Mean-Variance (default) — maximize risk-adjusted return.
- Minimum Variance — lowest-variance feasible portfolio.
- Equal Risk Contribution — every holding contributes the same amount of risk.
Model
- Historical — 252-day empirical means and covariance.
- Black-Litterman — combines the market-implied prior with views you supply.
Views (Black-Litterman only)
Open the Views modal to add opinions like "NVDA will beat SPY by 5% next year, 60% confidence". Each view takes an asset, a benchmark (or another asset), an expected relative return, and a confidence weight. Feasibility of the resulting posterior is validated before the run.
Constraints
- Min / max weight — floor and cap per name. A feasibility checker warns when the constraint set can't sum to 100%.
- Long-only — on by default. Turn off to allow shorts.
- Risk-free rate and Risk aversion (δ) — Black-Litterman parameters.
Errors surface inline on the constraint card. Fix them before continuing.
Step 3 · Review
- Diversification check — flags concentrated pairs (same sector, similar market cap) so you can back off before running.
- Correlation card — pairwise correlation matrix for the holdings.
- Efficient frontier preview — computed frontier if enough data is available, simulated cloud otherwise.
Hit Run optimization to launch the run. You'll see a 5-step crafting animation while the solver works.
Results (code/optimization/result
)
/optimization/resultOptimization finishes on the results page:
- Efficient frontier chart with your run's point highlighted.
- Weights table — per-ticker allocation, sorted by size.
- Stats — Sharpe, expected return, volatility, sum of weights.
- Configuration card — same panel as Step 2, collapsible. Editing dims the results and re-enables Re-run.
- Save — name the result and persist it as a saved Portfolio. You'll be redirected to after save.code
/portfolio/[id]
Unsaved runs are treated as Plans on the Items page — they show up but age out over time. Save the ones you want to keep.
Common recipes
- Rebalance an existing account — Accounts → Optimize these holdings → Step 2, set max weight to 25% → Run.
- Build a themed portfolio — Insights → sort by Sharpe, filter to ETFs → collect 5–8 tickers → Optimize wizard from scratch → save.
- Test a thesis with Black-Litterman — pick tickers, switch model to Black-Litterman, add one or two views for your favored names, run, and compare the tilt vs. the historical mean-variance run.
Ask Norn AI
Optimization from Norn AI uses the same solver. Try:
- "Optimize NVDA, AVGO, TSM, AMD, MU for max Sharpe with no name over 30%."
- "Rebalance my Fidelity IRA to minimum variance."
- "Optimize with a Black-Litterman view that NVDA beats SPY by 5%."
- "Add MU to my Semis Core portfolio and re-optimize."
Saved output lives at Portfolios.