Guided portfolio lab

Turnover-constrained optimization

Choose a validated current portfolio, step through a projected-gradient solve, and see exactly when the one-way half-L1 budget or the input contract stops the rebalance.

All displayed fixtures are synthetic teaching data.

Scenario and parameter controls

Validate the input contract

The canonical two-asset objective pushes toward asset A, but the cap limits the move from the current holdings.

Step 1 / 4

Check that the current holdings already sum to one and that covariance is positive semidefinite. No fallback portfolio is emitted when this check fails.

Current and solved portfolio weights Bars show the current and returned weights for each asset; an invalid input is shown as a rejected state.
current w⁰ returned w rejected input
Status
—
Objective f(w)
—
Direct turnover
—
Frank–Wolfe gap
—
What to notice: the starting state already shows the current portfolio and the contract boundary. Press Step to expose the next causal computation.

Compare the boundary, not just the answer

Direct signed trade. Compute turnover from the returned weights. A positive/negative auxiliary split can have slack, so its sum is not reported as the actual measure without a tightness proof.

Input lineage. Split-adjusted units and basis, current marks, FX direction/time, and dividend entitlement versus cash receipt are upstream states. Repairing them can change whether a trade is needed.

Try next: set τ to zero, choose the nonbinding cap, then choose the three-asset fixture. Finally select either failure scenario or set the iteration budget to one.

Open the static simplex fallback · Read the written lab