The frontier is the fun part. You feed a covariance matrix and some expected returns into an optimizer, and out comes a smooth curve of portfolios, each one squeezing the most return out of a given level of risk. It looks like an answer. Then you try to actually hold one of those points and everything gets awkward. The optimizer hands you 14.7 percent of one thing, 3.2 percent of another, a short you did not ask for, and a position so small the exchange will not even let you place it. So you have a chart, and you still do not have a portfolio.
I have spent enough time going from theory to a live account to think the gap between the two is where most of the actual work lives. The math gives you a direction. Turning that direction into weights you can trade without bleeding money is a separate skill, and it is the part nobody puts in the tutorial.
The optimal point is a trap, and here is why
The single portfolio that maximizes your objective, whether that is Sharpe or return at a fixed variance, is almost always the one you should not hold. The reason is that mean-variance optimization is exquisitely sensitive to its inputs, and your inputs are guesses. Expected returns especially. You are feeding the optimizer numbers you made up with error bars, and the optimizer does not know they have error bars. It treats a 6 percent expected return and a 6.4 percent expected return as meaningfully different and will happily tilt the whole portfolio toward the slightly higher one.
The classic failure is what people call error maximization. The assets that look best on paper are frequently the ones whose returns you overestimated, so the optimizer concentrates into exactly the positions most likely to disappoint. Push the covariance matrix around by a rounding error and the optimal weights can swing wildly. That is not a portfolio you want to bet on. It is a portfolio balanced on a pin.
So the mental shift is to stop treating the frontier as a single best answer and start treating it as a neighborhood. You are not looking for the one true point. You are looking for a spot on the curve where the weights are stable, meaning small changes in your assumptions do not blow up the allocation. That is usually a bit down and to the left of the mathematically optimal Sharpe point, in slightly less concentrated territory.
Picking a robust neighbor instead of the peak
A few things I do to find that neighbor, roughly in order of how much they help.
- Constrain before you optimize. Cap any single position at something like 20 or 25 percent, and if you are long only, say so explicitly. Half the crazy weights come from letting the optimizer take an unbounded short it will never actually execute.
- Perturb the inputs and re-solve. Nudge your expected returns by a small random amount, run the optimizer again, and repeat this a bunch of times. Average the resulting weight vectors. This resampling trick tends to spit out a portfolio that is more spread out and far less jumpy than any single solve. It is a poor man's version of accounting for the fact that your inputs are uncertain.
- Shrink the covariance matrix. A raw sample covariance from limited history is noisy and overconfident. Pulling it toward a simpler structure, even something as blunt as a constant correlation, usually gives you weights that behave better out of sample.
- Look at neighbors on the curve, not just the peak. Compute the portfolio one notch less aggressive than your optimum and compare the weights. If they are close, you are in a stable zone. If the allocation lurches when you take one step along the frontier, you are standing somewhere fragile.
None of this makes your portfolio optimal in the textbook sense. It makes it robust, which is the property you actually care about when you have to hold the thing for a quarter and your return estimates were never that good to begin with.
Now round it into something the exchange will accept
Say you have picked a sensible point and it hands you weights like 18.3, 11.9, 7.4, and so on. Trading those exact figures is pointless. The extra precision is fake. Nobody knows their expected returns to the tenth of a percent, so pretending the allocation is precise to the tenth of a percent is theater. Round to something you can hold in your head, typically the nearest 5 percent, maybe the nearest 1 percent for a larger position where it matters. Then check that your rounded weights still sum to 100 and fix the largest position to absorb the leftover.
Then reality intrudes in two more ways: fees and minimum trade sizes.
Minimums are the sneaky one. Every venue has a smallest order it will accept, whether that is a dollar floor or a lot size or a whole-share constraint. A 2 percent target position in a small account can round to an order the exchange rejects outright. The rule of thumb I use is that if a target weight would produce a trade smaller than the minimum, you have two honest choices: round it up to a size that clears the floor, or drop the position to zero and redistribute its weight across the others. Do not leave it hanging at some unfillable sliver. Pick one.
Fees decide how often any of this is worth doing. Every trade to move toward your target costs something, and past a certain point the drift between where you are and where the optimizer wants you is smaller than the cost of closing it. So you set a no-trade band. If a position is within, say, a few percent of its target, you leave it alone. You only trade the legs that have drifted past the band. This one habit quietly saves more money over a year than most of the clever stuff upstream, because it stops you from paying fees to chase precision that was never real.
A workflow that ties it together, start to finish:
- Optimize with position caps and a shrunk covariance matrix, then resample the inputs and average the weights.
- Step one notch down the frontier from the peak Sharpe and confirm the weights barely move. If they lurch, keep stepping until they settle.
- Round the surviving weights to the nearest 5 percent and rebalance the largest position so the total lands at 100.
- Convert each weight to a trade against your current holdings, then kill or round up any trade below the venue minimum.
- Apply a no-trade band and only execute the legs that fall outside it.
What you end up holding will look slightly worse than the frontier promised. Lower expected Sharpe on paper, a little less elegant. That is the correct outcome. The frontier was drawn with inputs you cannot trust to the decimal, and every rounding and fee and minimum you accounted for moved the portfolio from a fragile theoretical point toward one that survives contact with a real account. The pretty version of the chart was never the thing you were going to trade anyway.