Skip to main content
← writing
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.

deskgd findgf strategiesgs featuresge promotionsgp apiga botgb writinggw

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