StrategiesMarket-Neutral Pair Sleeve

Market-Neutral Pair Sleeve

Long/short with zero net exposure. No market beta — return comes from cross-sectional positioning.

Net exposure
0%
Factor exposure
Pinned to zero
Role
Companion sleeve
Backtest · 20152024Illustrative
Ann. return (after-tax)
4.2%
Volatility
6.0%
Net beta
0.0
Cash + Borrow

The pair sleeve is dollar-neutral and factor-neutral by construction, so a benchmark index isn't the right reference. The grey track is cash plus borrow accrual; the dark track is the sleeve's NAV trajectory.

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%.

Illustrative
2024-12-31(end of window)
Strategy$2.19M
Cash + borrow$1.30M
$1.00M$1.20M$1.40M$1.60M$1.80M$2.00M$2.20M$2.40M20152017201920212023
Static view. Resize wider for hover details.
Ann. return
4.2%
Benchmark return
2.5%
Alpha (after-tax)
170 bps
Tracking error
540 bps
Avg turnover
22.0%
Lifetime harvested
12.0% NAV
The idea

Equal long and short dollars on similar names; market beta nets to zero. The return comes from picking the right side of each pair — no index exposure, no factor exposure, no direction.

The objective
Subject to
Σ wᵢ = 0Dollar-neutral — longs and shorts net to zero
Bᵀ w = 0Factor-neutral — zero loading on benchmark factors

Maximize signal-weighted return α⊤w minus a variance penalty and the tax cost on realized gains. The residual return comes purely from idiosyncratic positioning — what the optimizer learns from the per-name signal once market and factor bets are stripped out.

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.

What goes in, what comes out
Inputs
  • Universe + factor model

    The eligible name universe and the loadings matrix B used for neutrality.

  • Per-name signal

    The alpha vector α the optimizer is trying to harvest, refreshed daily.

  • Borrow curve

    Per-name stock-loan fees for the short side.

Outputs
  • Long leg

    Long weights, dollar-equal to the short leg by construction.

  • Short leg

    Short weights, factor-neutral against the benchmark factors.

  • Trade list

    Daily trades to maintain the neutral position as drift accumulates.

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.

Where you see it

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 IndexingLong/Short Tax-AwareMarket-Neutral Pair Sleeve
Net exposure100%100%0%
Factor exposureTrackedTrackedPinned to zero
Source of returnIndex + tax alphaIndex + tax + activeCross-sectional alpha only
RoleStandalone bookStandalone bookCompanion sleeve