StrategiesLong/Short Tax-Aware

Long/Short Tax-Aware

Go more than 100% long, short the difference, and harvest tax losses on both sides.

Net exposure
100%
Gross exposure
Up to 160% – 400%
Profiles
130/30 → 250/150
Results · coming soon

Backtest figures will appear here once results on real data are published. Until then, this page sets out the method.

Results · coming soon

Backtest results are coming soon.

Backtest results on real data will be published with a forthcoming paper on SSRN, a preprint server for research papers. The paper describes the methodology and compares a CPU solver with a GPU solver on real data. Until then, this site explains the method, and the tools show results on sample portfolios.

When they land, this section will chart the strategy's after-tax growth against its benchmark and its drawdowns, with tracking error, turnover and harvested losses alongside.

The idea

A long-only portfolio can bank a tax loss only when a stock it owns falls. Short positions add a second source: a short that moves against the portfolio, because the stock rose, can be closed at a loss and replaced with a similar short, so the portfolio keeps its shape while the loss is banked.

The objective
Subject to
Σ wᵢ = 1Net exposure (longs minus shorts) stays at 100% of the portfolio's value
Σ wᵢ⁺ ≤ LLongs add up to at most L (1.30 for 130/30)
Σ wᵢ⁻ ≤ L − 1Shorts add up to at most L − 1 (0.30 for 130/30)
wᵢ ≥ -0.005No single short larger than 0.5% of the portfolio's value
|wᵢ − w_b,ᵢ| ≤ 2% (soft)Per-name and per-sector drift beyond ±2% is penalized in the objective

The same two costs as tax-aware direct indexing (distance from the benchmark and tax), plus a third term, φ⊤w⁻, the fee for borrowing the stocks held short. Here w⁻ is the short side of the portfolio and φ the borrow rate: this configuration uses one default rate for every stock, though the optimizer also accepts a separate rate per stock. A short is worth holding only where it lowers the other two costs by more than its fee.

The optimizer library implements this objective: the problem is written in CVXPY (an open-source modelling library) and solved by a CPU-based conic solver, which returns the long and short weights that minimise it within the constraints. The backtester runs only the long-only direct-indexing configuration today, so there are no long-short backtest results yet; results on real data will come with the forthcoming paper on the methodology, which also compares a CPU solver with a GPU solver on real data. Nothing runs on this site: everything is computed offline.

What goes in, what comes out
Inputs
  • Long lots + shorts

    Lot history on the long side, current short positions on the short side.

  • Benchmark

    The long benchmark (a broad US large-cap index) — net exposure target.

  • Borrow rate

    One default stock-loan fee applied to every short and priced into the objective; the optimizer accepts per-name rates, but none are supplied yet.

  • Leverage split

    The active gross profile, e.g. 130/30 through 250/150.

Outputs
  • Long trades

    Buys and harvest sells on the long leg, lot ID on every sale.

  • Short trades

    Opening and covering trades on the short leg.

  • Realized P/L + borrow cost

    Capital gains and losses on each sale, with the borrow fee reported as its own term in the objective's cost breakdown.

Customization · Coming soon

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.

How the optimizer applies it

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.

The trade-off

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.

 Tax-Aware Direct IndexingMarket-Neutral Pair SleeveLong/Short Tax-Aware
Net exposure100%0%100%
Gross exposure100%200%Up to 160% – 400%
Source of returnIndex + tax alphaCross-sectional alphaIndex + tax + active
RoleStandalone bookCompanion sleeveStandalone book