Skip to main content
2026-05-22 · 5 min read · ← 1 · composition · research · pairwise

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:

  1. Parents have low pairwise correlation (under 0.5), AND
  2. The composition is same-stage (both parents intervene at the same layer — score, gate, portfolio), OR
  3. 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:

  1. Parents have low pairwise correlation (under 0.5), AND
  2. Composition is same-stage, AND
  3. 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:

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

  2. 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:

  1. PR #710: parents’ pairwise correlation predicts stack.
  2. PR #742: compute the WOULD-BE composite’s correlation.
  3. PR #748: same-stage stacks; mixed-stage interferes.
  4. 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.

deskgdfindgfstrategiesgsfeaturesgepromotionsgpapigabotgbwritinggw

Shortcuts are no-ops while typing in an input or textarea.