Rebalancing Sensitivity
Rebalancing Sensitivity isolates one question: how much the rebalance policy changes the result when the portfolio itself stays fixed.
On this page
What this tool is for
The Rebalancing sensitivity tab in Portfolio Backtest tests schedules, drift thresholds, and nearby date offsets on the same portfolio. Holdings, weights, and dates stay fixed.
Choose Portfolio to rebalance within the section or select its row in the results table. The sweep uses the dates and amount of the analysis line. It has its own Run, so the Backtest Run never starts a sweep. "Use this policy" writes a swept policy into that portfolio, and Undo reverts it.
If a policy looks good only at one offset or on an unusually frequent schedule, its result may be sensitive to that choice.
What stays fixed
- Portfolio: every comparison uses the same tickers and weights.
- Date range: the sweep tests every policy on the same historical sample.
- Return construction: every run reuses the same price series and portfolio setup.
What changes
- Frequencies: monthly, quarterly, annual, and other scheduled rebalance cadences.
- Thresholds: drift bands for deviation-based rebalancing.
- Offsets: signed trading-day shifts around the period boundary.
- Mode: whether a trade needs time, drift, or both.
How to read the outputs
- Leaderboard: use it to see which policies rank highest on the selected metric.
- Scatter plot: use it to inspect tradeoffs such as CAGR versus turnover or CAGR versus drawdown.
- Offset curve: use it to check whether nearby schedule shifts produce similar results or materially different outcomes.
- Offset sensitivity: use it to see which frequency/threshold policies have the widest Calmar spread across tested offsets before reading the full row table.
- Deviation sweeps: use them to compare drift thresholds directly when the policy does not depend on a calendar schedule.
Tax-aware sweeps
Enabling a tax profile reports pre-tax and after-tax results side by side. Every cell carries both metric blocks, plus tax extras. The extras are annual drag in basis points, total dollars paid in taxes, and an effective tax rate on gross sell-side turnover.
- View selector: switch the table, scatter, and curve between Pretax, After-tax, Tax drag, and Δ without rerunning.
- Highest Sharpe after tax: the row mark names the policy with the highest after-tax Sharpe. The banner also shows when a different cell has the highest pre-tax CAGR.
- Drag heatmap: rendered when the sweep spans at least two frequencies and two thresholds, showing annual drag (bps/year) across the frequency × threshold grid.
- Daily and weekly rules: frequent trading can generate wash-sale events and increase tax drag.
- Run-count cap: tax-aware sweeps are 10-15× slower for each cell. The default cap keeps response time predictable. Enable the full sweep only for a denser grid.
- Cash flows: tax-aware runs do not support cash flows. Remove contributions or withdrawals to run a tax-aware sweep, or disable the tax profile to include cash flows.