Quantify Investment research that keeps its history

methodology/hrp@1 vs methodology/hrp@3

Not comparable

2 contract differences prevent these figures from being read against each other.

Where the boundary falls

3 versions, 2 comparability walls

not comparable not comparable @1 @2 @3 · latest
BoundaryBlocking difference
@1 → @2 rebalance frequency 5B -> 21B why
@2 → @3 weight bound max 1.0 -> 0.25 why

Blocking differences

Field13Why it matters
rebalance frequency 5B 21B Turnover and cost drag scale with rebalance frequency, so the two sets of figures were produced under different cost burdens.
weight bound max 1.0 0.25 The earlier version could take positions this one cannot (or vice versa), so the two describe different strategies rather than the same strategy tuned differently.

Differences that do not block

Field13
assumptions ["Close-to-close execution at the next session's price.",... ['A 25% ceiling is binding often enough to diversify without...
assumptions_ref ['assumption/adjusted-close-is-restated@1',... ['assumption/adjusted-close-is-restated@1',...
claims_ref ['claim/hrp-diversifies-without-constraints@1',... ['claim/hrp-outperforms-mvo-out-of-sample@1']
contract {'universe': ['SPY', 'SH', 'TLT', 'TBT', 'LQD', 'DBC', 'GLD',... {'universe': ['SPY', 'SH', 'TLT', 'TBT', 'LQD', 'DBC', 'GLD',...
limitations ['Estimated on daily Adj Close, which is restated over time by the... ['Estimated on daily Adj Close, which is restated over time by the...
objective Allocate across a fixed multi-asset ETF universe using... Allocate across a fixed multi-asset ETF universe using...
params {'correlation_distance': {'value': 'sqrt_half_one_minus_rho',... {'correlation_distance': {'value': 'sqrt_half_one_minus_rho',...
pipeline ['estimate_correlation', 'cluster_assets', 'quasi_diagonalize',... ['estimate_correlation', 'cluster_assets', 'quasi_diagonalize',...
rules [{'id': 'min_history', 'enforced_by': 'params.lookback',... [{'id': 'concentration_cap', 'enforced_by':...
universe_filters [{'id': 'has_full_lookback_history', 'enforced_by':... [{'id': 'has_full_lookback_history', 'enforced_by':...

These changed without changing what the methodology promises its consumers.

How comparability could be restored

Performance comparison

Performance comparison unavailable — versions are directly comparable, performance classes are declared, publication permits this surface

Versions are directly comparable 2 blocking contract difference(s)
Performance classes are declared no performance_class attached
Publication permits this surface no publication decision recorded
Historical and forward series would be separated

A performance visual is itself a claim. It renders only when every condition holds — otherwise the chart would assert something the artifacts do not support.

Why methodology/hrp@3 exists

Evaluation under protocol/standard@1 flagged hrp@1 and hrp@2 as degenerate: BIL, the cash proxy, took 99.6% of the portfolio on average, effective breadth was 1.01 assets, and the reported Sharpe of 6.59 was cash return divided by cash volatility rather than risk-adjusted performance. This is inherent to HRP, not an implementation error. Recursive bisection allocates inverse-variance, so an instrument with near-zero variance dominates any universe it is in. Lopez de Prado (2016) demonstrates HRP on a universe of comparable-risk assets and does not address a cash proxy. v3 imposes a 25% per-asset ceiling via the output contract, which is the smallest change that makes the allocation describe the methodology rather than describing BIL. The ceiling is applied by the existing apply_bounds step, which iterates clip-and-renormalize to a fixed point. Comparability: this changes weight_bounds in the contract, so results published against v1 and v2 describe a different strategy and must not be linked to v3's.

← back to hrp