Skip to main content
← writing
2026-05-22 · 4 min read · ← 1 · research · harness · ts-momentum

Why ts_momentum leads at N=100

what you'll learn · Why per-symbol time-series-momentum with an absolute return threshold outperforms cross-sectional ranking on single-signal data, and what this tells us about the entry-rule design axis.

At N=100 seeds, ts_momentum (+0.995) beats baseline (+0.863) by +0.132 Sharpe. Hit rate 82% vs baseline's 79%. Not a small margin — 1.2 standard errors above baseline. The mechanism: ts_momentum's |return| > threshold entry rule closes time-series chop that cross-sectional ranking can't filter. Deepens PR #557's 'strategy shape beats factor count' rule into a sharper claim about the entry-rule axis.

PR #760’s N=100 leaderboard surfaced a winner the session-summary v2 missed: ts_momentum. Mean +0.995, hit rate 82% — both higher than baseline’s +0.863 / 79%, and the +0.132 Δ exceeds the standard error of the difference.

This note examines WHY.

The shape comparison

ts_momentum:
  for each symbol:
    if abs(log(P_t / P_{t-20})) > 0.02:  # 2% absolute return threshold
      weight = sign(log(P_t / P_{t-20})) / N_active

baseline (XsMomentumLive):
  for each symbol:
    score = log(P_t / P_{t-20})
  rank scores cross-sectionally
  long_quantile = top 20% by score
  short_quantile = bottom 20% by score

Two key differences:

  1. Entry rule. ts_momentum filters on absolute return magnitude; baseline always trades the quantiles regardless of magnitude.

  2. Sizing. ts_momentum equal-weights active symbols; baseline weights by gross-leverage budget across quantiles.

The +0.132 mean delta and the +3 hit-rate-percentage-point delta trace to the first difference. The sizing convention is secondary.

What the threshold does

On synthetic FOMC-drift data, most bars produce per-symbol 20-day returns in the ±1% range (the daily vol is ~1% so 20-day vol is ~4.5%, but the directional drift is small most of the time). When the 20-day return is below the 2% threshold, ts_momentum stays flat in that symbol.

Baseline can’t stay flat. It ALWAYS picks a long quantile and a short quantile. On a flat-return day, the quantiles are distinguished only by noise — the strategy is buying noise.

The 2% threshold filters time-series chop. The cross-sectional ranking has no equivalent filter. Baseline’s only filter is the symbol’s relative rank among others; when ALL symbols are chopping around zero, the rank order is meaningless.

What this confirms

PR #557’s discipline rule said:

Entry rule does more work than score rule on most signals.

The N=100 leaderboard sharpens this. Specifically:

  • Entry rule (ts_momentum threshold): lead +0.13 Sharpe over baseline.
  • Score rule (multi-factor variants): lose 0.5-1.4 Sharpe from baseline.

The DELTA in Sharpe between the best entry-rule arm and the best score-rule arm is over 1.5 — the largest design-axis difference visible at N=100.

What this rules out

  • Not “ts_momentum always wins.” The threshold is calibrated to this synthetic’s vol scale (1% daily, 2% 20-day threshold). Real markets have multiple regimes; the threshold might need to be regime-conditional, not constant. PR #717’s vol-clustering note hinted at this.

  • Not “cross-sectional is obsolete.” Cross-sectional ranking has properties (built-in market-neutrality, leverage budget, hedge against universe-wide moves) that ts_momentum doesn’t. The +0.13 Sharpe lead on this synthetic doesn’t transfer to every market regime.

  • Not “skip the cross-sectional arms.” The catalog keeps both because real data might invert the ordering — e.g., if drift signals are universe-wide, cross-sectional ranking catches the rotation while ts_momentum stays flat.

The composite question

A natural follow-up: compose ts_momentum’s entry-rule with cross-sectional ranking. The arm would:

  1. Compute per-symbol 20-day return.
  2. Filter to symbols where |return| > threshold.
  3. Cross-sectionally rank the survivors.
  4. Long top quantile, short bottom quantile.

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.

Out of scope for this note — but the strategy class XsTimeSeriesFilteredMomentumStrategy is the natural follow-up PR.

The refined catalog axis

PR #686’s catalog has the entry-rule axis with these rows:

Entry rule Strategy Effect
Always trade quantiles all Xs* score variants default
Trade only when top-bottom spread is above threshold xs_momentum_with_spread_filter closes cross-sectional chop
Trade only when per-symbol vol_5/vol_60 is under threshold xs_momentum_with_vol_regime_filter per-symbol vol level gate
Trade per-symbol only when absolute return is above threshold time_series_momentum closes time-series chop

The N=100 result orders these by effectiveness:

time_series_momentum (entry-axis):     +0.995  ← leader
baseline (no entry filter):            +0.863
xs_momentum_with_spread_filter:        +0.861  (filter dormant)
xs_momentum_with_vol_regime_filter:    +0.649  (worse)

The time-series entry rule is the only one that beats baseline on this synthetic. The cross-sectional spread filter is dormant (no effect). The vol-regime filter actively harms.

The discipline rule

On data where the underlying alpha is per-symbol momentum with time-series chop noise, the entry-rule design axis is the highest-value lever. Cross-sectional ranking captures relative strength but not absolute strength; time-series threshold filters captures absolute strength but not relative ordering. The composite of both (cross-sectional ranking on ts-filtered universe) is the obvious follow-up.

A corollary: when a new dataset is encountered, run the catalog’s entry-rule axis FIRST (ts_momentum, spread_filter, vol_regime_filter). The score axis (two/three/four_factor) is secondary. The entry rule decision likely dominates the score-weight tuning.

The closing observation

ts_momentum was in the harness from PR ~#530 — the second or third strategy after baseline. For most of this session it sat mid-pack in the rankings, lost in the noise of small-N results and the focus on composite-arm experiments. The N=100 run promoted it to clear leader.

The lesson: small-N harness output is suggestive; high-N harness output is diagnostic. The leader changed because the noise floor dropped, not because the strategy changed. Run more seeds on existing arms before shipping new ones.

deskgd findgf strategiesgs featuresge promotionsgp apiga botgb writinggw

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