What has been concluded about this
A methodology's `rules` and `universe_filters` are declared, merged, and hashed into its identity, but no pipeline step evaluates them. They have zero references in the executor. A reader seeing rules: - id: concentration_cap expr: max_asset_weight <= 0.25 reasonably concludes the constraint is enforced by that rule. It is not. In hrp@3 the constraint happens to hold because `contract.weight_bounds.max` is also 0.25 — the rule is decorative, and the two could disagree silently. This inverts the defect class the project has found repeatedly. The usual pattern is a hidden choice that takes effect without being declared. Here a declared rule appears to take effect and does not, which is arguably worse: declaring it creates the belief that it is checked. Surfaced by adding a second methodology family. xsmom@1 declares `has_full_formation_history` and a `min_history` rule; neither runs, and the history requirement is enforced only incidentally by an ExecutionError inside compute_momentum.
On this version: Declares concentration_cap <= 0.25, which is satisfied only because contract.weight_bounds independently enforces the same number.
Hierarchical risk parity degenerates into a cash proxy when the universe contains a near-zero-variance instrument and no per-asset ceiling is imposed. Recursive bisection allocates inverse-variance, so an instrument whose variance approaches zero absorbs an unbounded share of the portfolio. This is a property of the method, not an implementation error, and the source paper does not address it because it demonstrates HRP on assets of comparable risk.
On this version: Created in response, imposing a 25% per-asset ceiling — the smallest change that makes the allocation describe the methodology rather than describing BIL.
A price panel joined across instruments with different trading calendars inherits the union of their sessions. Forward-filling a five-session instrument onto a seven-day index manufactures zero-return observations that are not market data — deflating realized volatility and mis-scaling any annualization that assumes a session count the data does not have.
On this version: Annualized 1.3664% -> 2.2892% and volatility 3.1879% -> 4.0939% once weekend padding was removed; a further correction to 2.2094% once NYSE holidays were excluded.
Questions asked about this
| Investigation | Outcome | Trials | Question |
|---|---|---|---|
| investigation/cost-model-vs-realized-spreads@1 | inconclusive | 0 | Is the flat 10bps transaction cost in protocol/standard@1 an adequate stand-in for realized costs across this universe, or does it... |
| investigation/declared-rules-are-inert@1 | Finding | 0 | Do the `rules` and `universe_filters` a methodology declares actually constrain what the executor does, or are they documentation that... |
| investigation/hrp-sharpe-implausible@1 | Finding | 4 | Why does methodology/hrp@1 report a Sharpe ratio of 6.59 on a diversified multi-asset universe, when published multi-asset risk-parity... |
| investigation/regime-features-leak-future-state@1 | Open | 0 | Do any of the ensemble regime features derive, directly or through a rolling transform, from observations later than the point at which... |
| investigation/weekend-padding-in-joined-panel@1 | Finding | 2 | Does joining equity and crypto price series into one panel introduce sessions that the equity instruments never traded, and if so does... |
Reasoning
Claims this rests on
Assumptions it depends on
| Assumption | Kind | Checked? |
|---|---|---|
| assumption/adjusted-close-is-restated@1 | data | test |
| assumption/hard-bounds-beat-soft-turnover@1 | constraint policy | test |
| assumption/nyse-sessions@1 | market structure | test |
| assumption/one-session-execution-lag@1 | execution | test |
| assumption/sample-covariance@1 | estimation | test |
Methodology
- lookback
- 504 trading_days
- linkage method
- single
- correlation distance
- sqrt_half_one_minus_rho
- covariance estimator
- sample
- max turnover
- 0.25 fraction_of_notional
- rebalance cadence
- 21B
- weight bounds
- [0.0, 0.25]
- gross leverage max
- 1.0
- universe
- SPY, SH, TLT, TBT, LQD, DBC, GLD, HYG, BIL
- content hash
- 20238973e509efc2bc5aa03be9e8dd6d…
Pipeline
Assumptions
- Close-to-close execution at the next session's price.
- Correlations estimated over the trailing window are informative for the next rebalance.
- No borrow constraints or short availability limits (the universe is long-only ETFs).
- A 25% ceiling is binding often enough to diversify without overriding the method.
Limitations
- Long-only; expresses bearish views solely through inverse ETFs already in the universe.
- No regime conditioning — allocation responds to correlation structure alone.
- Estimated on daily Adj Close, which is restated over time by the data vendor.
- Ignores capacity and market impact.
- The 504-day lookback needs two years of history before the first allocation.
- The per-asset ceiling is an imposed constraint, not part of Lopez de Prado's published method; results are therefore not a replication of that paper.
Grounded in
History
| Version | Why it exists | Comparable to this one? |
|---|---|---|
| @1 | Initial publication. | Not comparable |
| @2 | Erratum 2026-07-30-01 established that v1's published performance was computed without an execution lag or transaction costs. Correcting those revealed that v1's 5-business-day rebalance carries turnover the... | Not comparable |
| @3 | 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... | — |