The Core Problem

Different signals peak at different horizons. A fast mean-reversion signal might peak at 3 days, while a slow momentum signal peaks at 63 days. How do we combine them?

Decay Curve Estimation

For each signal, estimate IC at multiple horizons and fit a parametric decay curve:

IC(h) = peak_ic × (1 - exp(-h/rise_hl)) × exp(-max(0, h-peak_h)/decay_hl)

Horizons to test: [1, 2, 3, 5, 10, 21, 42, 63, 126, 252] days

Daily IC Derivation

The key insight: weight signals by their daily IC, not peak IC. Daily IC represents marginal predictive value of daily signal updates:

daily_ic = peak_ic × (1 - exp(-1/rise_halflife)) × exp(-max(0, 1-peak_horizon)/decay_halflife)
Signal Type Peak IC Peak Horizon Daily IC Implied Weight
Fast mean-reversion 0.04 3 days 0.035 ~54%
Medium momentum 0.05 21 days 0.012 ~23%
Slow momentum 0.06 63 days 0.004 ~13%
Carry 0.04 126 days 0.002 ~10%

Signal Weight Computation

net_daily_ic = daily_ic - annual_transaction_cost / 252
ic_weights = net_daily_ic / sum(net_daily_ic)
final_weights = shrinkage × equal_weight + (1-shrinkage) × ic_weights

Shrinkage of 0.3-0.5 provides robustness to estimation error.

Single-Book vs Multi-Book

Recommendation: Use a single-book architecture. Transaction cost penalty in the optimizer naturally handles horizon-appropriate rebalancing. Slow signals have tiny daily IC → optimizer won’t trade them aggressively.

Mathematical Formulation

The decay curve can be expressed more formally as:

\[IC(h) = IC_{\text{peak}} \cdot \left(1 - e^{-h/\tau_r}\right) \cdot e^{-\max(0, h-h_{\text{peak}})/\tau_d}\]

where:

The daily IC is simply $IC(1)$, representing the value of today’s signal update for tomorrow’s returns.