Multi-Jurisdiction Direct Indexing
Direct indexing across the US, Canada, Australia, and India — each with its own tax rules.
The dark track is the strategy's after-tax NAV. The grey track is the benchmark NAV. Both start at $1M on the start date, rebalanced daily under the CLARABEL solver.
Numbers are plausible placeholders, not a real backtest. Replace by running taxview-runner over the same window. Daily rebalance, CLARABEL solver. Marginal-rate assumptions: short-term 37%, long-term 20%, NIIT 3.8%.
The same direct-indexing engine swapped between four tax regimes. The optimizer is identical; what changes is the tax engine — lot identification, wash-sale equivalent, holding-period thresholds, and any jurisdiction-specific exemptions or surcharges.
| Σ wᵢ = 1 | Fully invested |
| J ∈ {US, CA, AU, IN} | Tax engine plug-in selects the local statute |
| TE(w) ≤ TE_max | Tracking error stays inside the budget |
Same objective as US tax-aware DI; the tax cost function τ_J is swapped to the local statute — HIFO in the US, ACB averaging in Canada, FIFO + 50% CGT discount in Australia, FIFO + STT in India. The optimizer harvests aggressively where lot-picking helps, conservatively where averaging rules dampen the marginal benefit of any single sale.
We solve this as a portfolio-optimization problem each day, using CVXPY with the CLARABEL conic solver. The solver searches the feasible set defined by the constraints and returns the weight vector that minimises (or maximises) the objective — typically in tens of milliseconds for a 500-name universe.
- Jurisdiction selector
The tax engine plug-in: US, Canada, Australia, or India.
- Local benchmark
The local large-cap index (S&P 100 / TSX 60 / ASX 200 / NIFTY 50).
- Holdings + lots
Account lots in the local accounting convention (HIFO, ACB, FIFO).
- Trade list
Daily trades sized to the local universe and statute.
- Tax engine output
Realized gains/losses under the jurisdiction's lot identification rules.
- Realized P/L
Net realized capital effect, broken out by holding period.
Factor tilt
A factor tilt lets the optimizer hold more of the names that score well on a chosen factor — quality, value, momentum, or low-volatility — and less of the names that score poorly. The portfolio still tracks the benchmark, but with a measurable lean toward the chosen factor.
B_f is the column of factor loadings for the chosen factor from the risk model. The constraint forces the portfolio's active exposure to that factor to be at least t_f standard deviations above the benchmark. The optimizer redistributes weight within the tracking-error budget to satisfy it — buying high-scoring names, underweighting low-scoring ones.
You consume part of your tracking-error budget on the tilt. Less budget remains for tax-loss harvesting, so factor tilts typically reduce expected harvest activity slightly. The factor's own active return is the offset.
The console's risk panel shows the current active factor exposure next to its target. Trade tickets annotate names whose factor score drove the buy or sell.
| Tax-Aware Direct Indexing | Long/Short Tax-Aware | Multi-Jurisdiction Direct Indexing | |
|---|---|---|---|
| Net exposure | 100% | 100% | 100% |
| Lot method | HIFO | HIFO | Per-jurisdiction |
| Tax engines | US only | US only | US · CA · AU · IN |
| Role | Standalone (US) | Standalone (US) | Cross-border |