The sign-vs-rank composition conflict
what you'll learn · Why composing two strategies with different but ALIGNED edges stacks, while composing two strategies with different but OPPOSING edges interferes — and how to read this from the strategies' shape before running the harness.
PR #768's ts_filtered composite was predicted to stack (low pairwise correlation, different mechanisms). Instead it interferes — composite +0.527 vs leader ts_momentum's +0.995. The mechanism: ts_momentum's edge is sign-based (trade each active symbol in its momentum direction); cross-sectional ranking's edge is rank-based (short the lower-ranked even if positive). Composing them OPPOSES the parents' edges, not aligns them. This is a third refinement to the pairwise rule.
PR #764’s note named the natural follow-up to ts_momentum’s N=100 lead:
A natural follow-up: compose ts_momentum’s entry-rule with cross-sectional ranking… This combines the chop-filter benefit (ts_momentum’s edge) with the market-neutrality benefit (cross-sectional’s edge). It’s also same-stage composition (filter × rank, both at score-time) of two arms with low pairwise correlation, so the pairwise rule predicts stacking.
PR #768 ran it. The composite interferes:
ts_momentum: +0.995 (parent 1)
baseline: +0.863 (parent 2 surrogate)
ts_filtered (composite): +0.527 ← interferes, worse than both
This note diagnoses why the pairwise rule’s prediction was directionally wrong.
The two parents’ edges
ts_momentum’s edge:
for each symbol independently:
if abs(20-day return) > 2%:
weight = sign(20-day return) / N_active
Every active symbol trades in its momentum direction. A symbol with +5% return goes LONG. A symbol with −5% return goes SHORT. The sign of the return determines the sign of the position.
Cross-sectional ranking’s edge (baseline):
scores = {sym: 20-day return for each sym}
top quantile (highest scores) → LONG
bottom quantile (lowest scores) → SHORT
The RANK determines the sign. The highest-momentum names go long, the lowest-momentum names go short, regardless of their absolute return direction.
Both are described as “momentum” strategies but their sign-decision mechanisms are different.
The composite’s failure mode
ts_filtered’s algorithm:
1. Filter: drop symbols where abs(20-day return) <= 2% threshold.
2. Cross-sectional rank the survivors.
3. Top quantile → LONG, bottom quantile → SHORT.
Consider a day where 6 symbols all have positive returns: +5%, +4%, +3.5%, +3%, +2.5%, +2.1%.
- ts_momentum would take all 6 long (positive sign per symbol). 6 long, 0 short, gross 6× per-symbol.
- Cross-sectional ranking (baseline-style on the survivors) would take top 2 long (+5%, +4%) and bottom 2 short (+2.5%, +2.1%). 2 long, 2 short.
The cross-sectional step DROPS positive-return symbols that would have been longs in ts_momentum, AND SHORTS positive-return symbols that would have been longs. The strategy actively trades AGAINST the momentum signal it just filtered for.
This is the sign-vs-rank conflict: the filter selects momentum candidates by sign, then the ranking re-decides their signs by relative ordering.
What the pairwise rule got right (and wrong)
PR #710’s discipline rule said:
Low correlation (under 0.5) between parents predicts stack.
The empirical correlation between ts_momentum and baseline
isn’t in the matrix from PR #742 (the matrix had top-10 arms;
ts_momentum was rank-11ish at N=10). At N=100 with
ts_momentum as the leader, its correlation with baseline is
probably 0.3-0.5 (both are momentum-flavored but operate on
different decision principles).
The rule said: low correlation → stack. The empirical result says: low correlation between MECHANISMS doesn’t guarantee stack; the mechanisms must also be ALIGNABLE under composition.
When you compose:
- sign-based decision + ranking-based decision = the ranking step OVERRIDES the sign step. The composition reduces to “ranking on filtered universe” — a stricter version of cross-sectional ranking, NOT a stack of two edges.
The sharper rule
PR #748’s combined rule:
Composite stacks if and only if:
- Parents have low pairwise correlation (under 0.5), AND
- The composition is same-stage (both parents intervene at the same layer — score, gate, portfolio), OR
- The cross-stage intervention fires frequently enough on the data that its per-seed contribution is non-zero.
PR #768’s refinement (4th iteration):
Composite stacks if and only if:
- Parents have low pairwise correlation (under 0.5), AND
- Composition is same-stage, AND
- The compositional mechanism PRESERVES both parents’ decision rules. If one parent’s decision is sign-based and the other’s is rank-based, the composition picks ONE (typically the later stage in the pipeline) and discards the other.
A corollary: when proposing a composite, ask “would both parents agree on the sign of a given symbol on a given day?” If yes, stack possible. If no, one parent’s sign discipline will be discarded.
What this rules out
-
Not “the pairwise rule is wrong.” It was right that parents with low correlation are CANDIDATES for stacking. The refinement says low correlation isn’t sufficient — the composition mechanism has to be compatible.
-
Not “ts_momentum and baseline have no synergy.” A DIFFERENT composition might work. Example: take ts_momentum’s active set as the universe, weight each by its cross-sectional rank score (preserving sign of momentum, scaling by relative-rank within-active-set). That would preserve ts_momentum’s sign discipline while adding cross-sectional information. Out of scope for this PR but named as a follow-up.
-
Not “negative results are bad.” The composite-interferes pattern is informative — the pairwise rule sharpened from “low correlation predicts stack” to “low correlation + compatible composition mechanism predicts stack.” That’s a more useful rule.
Two named follow-up composites
The refined rule suggests two new composites worth trying:
-
XsTimeSeriesActiveSetMomentumStrategy— universe is ts_momentum’s active set (filter), weights are sign-preserving (ts_momentum’s sign × cross-sectional relative magnitude). Preserves sign-discipline. Predicted to stack. -
XsRankedMomentumWithVolThresholdStrategy— same as spread_filter but per-symbol vol threshold instead of universe-wide spread threshold. Pure rank-based; no sign conflict. Predicted to behave like baseline.
Both are score-stage. Both have predictable composition behaviors per the refined rule.
The closing observation
The harness produced eight load-bearing claims this session (per session-summary v2 + this note’s refinement = nine discipline rules). Each was a refinement of a previous claim that turned out to be incomplete. The pairwise rule has been iterated four times:
- PR #710: parents’ pairwise correlation predicts stack.
- PR #742: compute the WOULD-BE composite’s correlation.
- PR #748: same-stage stacks; mixed-stage interferes.
- PR #768 (this note): same-stage + compatible composition mechanism stacks; sign-vs-rank conflicts interfere.
The rule isn’t getting longer because it’s wrong — it’s getting longer because it’s catching more of the territory each time. The harness, run honestly across many composites, is the instrument that produces the refinement.