Strategy S2d (cross-sectional momentum) — pre-implementation smell test — 2026-06-01
Status: exploratory research / learning capture — not a build gate. Fourth sibling to S2a
(trend), S2b (mean-reversion), S2c (hedge/grid). This is the “D2” idea in
strategy-2-trend-following-implementation-plan.md §9 and the handoff’s best-shot candidate: rank a
basket of perps each rebalance, long the top quantile / short the bottom (relative-strength), plus a
long-only-top variant. The first multi-asset smell test.
⚠️ This is NOT a backtest. In-sample, single IS/OOS split, optimistic fills (no slippage, no
missed fills; intra-period rebalancing assumed free), crude per-day funding. And the big one for any
cross-sectional study: it is SURVIVORSHIP-FLATTERED BY CONSTRUCTION — Binance’s public API lists only
perps that survived to today, so every coin that pumped and then delisted/died is invisible. A real
study needs a point-in-time universe (incl. the dead names), which the free API does not give.
Numbers perishable (~2026-06-01). Re-run:make smell-test-xsmom.
Why this script uses pandas (the other three don’t). S2a/S2b/S2c are single-asset and stay
stdlib-only. S2d is the first multi-asset, cross-sectional idea — it needs ragged-date alignment (24
coins listing on different days → a panel full of holes) and per-rebalance ranking across that panel.
pandas does that cleanly; it’s confined to research scripts via theresearchextras group in
bot/pyproject.toml, so the live trading core stays data-lib-free. Data acquisition is still
stdliburllib— read-only, no auth, writes nothing — exactly like the other smell tests.
Question
Does relative-strength momentum — winners keep winning relative to peers — survive a first pass on
crypto, where it’s often claimed to be more robust than the single-asset time-series trend that decayed in
S2a? And the two traps the handoff flagged: is the long-only-top just levered beta, and is the L/S just
short beta? Universe: 24 liquid USDT perps (research proxy — USDC has too few liquid names), daily,
2019-09 → 2026-06 (2,459 days).
Method (what’s modeled vs not)
Each rebalance, rank assets by trailing 30-day return skipping the most recent 7 days (skip dodges
short-term reversal). Long the top 5 / short the bottom 5; hold to next rebalance (monthly default).
Decide on closed bars, then shift weights forward one day before they earn anything (no look-ahead).
Costs: turnover × one-way fee (taker 0.05%+0.02% slip, or maker 0.02%) charged when the basket changes;
per-leg funding booked daily (long pays / short receives). Equity floored at 0 = ruin.
L/S is dollar-neutral (longs +1 / shorts −1 → gross 2×, market-neutral) — its raw return is not
comparable to a 1× B&H; read its Sharpe / maxDD / correlation-to-BTC instead.
Not modeled: delisted/dead coins (survivorship), point-in-time liquidity, short borrow cost/availability,
real fills, intra-period weight-drift cost.
The cross-section is thin and BTC-correlated (the known failure mode)
Mean pairwise daily-return correlation across the 24-coin basket: 0.58. Correlation-to-BTC runs 0.51–0.82
for the alts. Crypto mostly moves as one factor (BTC beta), so there’s little independent cross-section for a
relative-strength bet to exploit — exactly the structural headwind the handoff warned about. Note also the
funding column: the majors carry +10…+15%/yr funding while several newer L1s sit negative
(APT −1.4%, INJ −1.8%, TIA −3.0%, SEI −4.9%) — this matters below.
Headline (lookback 30d, skip 7d, monthly rebal, top/bottom 5, equal-weight, taker)
| variant | net% | CAGR% | Sharpe | maxDD% | turn/yr | funding% | ρBTC |
|---|---|---|---|---|---|---|---|
| long-only-top | +2195 | 65.5 | 0.99 | −88 | 16.8 | +58.8 | 0.73 |
| long/short (dollar-neutral) | +369 | 28.6 | 0.69 | −75 | 35.0 | −7.5 | 0.01 |
| equal-weight basket B&H | +639 | 34.6 | 0.78 | −81 | 0.0 | 0.0 | 0.83 |
| BTC buy & hold | +587 | 33.2 | 0.78 | −77 | 0.0 | 0.0 | 1.00 |
Two very different stories, and the handoff called both:
-
long-only-top is mostly levered, concentrated long beta — not a clean factor win. Yes, CAGR 65.5%
beats BTC’s 33.2% with a higher Sharpe (0.99 vs 0.78). But ρBTC = 0.73, the drawdown is worse than
spot (−88% vs −77%), and it pays a punishing +58.8% cumulative funding — because momentum-long in
crypto means being long the crowded, high-funding coins. (That’s §4.6 of the philosophy doc in the flesh:
a directional long pays the very funding Strategy 1 earns — here ≈8%/yr of drag.) Strip the survivorship
flattering and the OOS decay (below) and the “win” is largely a high-beta momentum tilt in a 6-year bull. -
The honest factor is the dollar-neutral L/S — and it loses to buy-and-hold. It is genuinely
market-neutral (ρBTC = 0.01), which is structurally interesting — a different return stream. But on the
base config its Sharpe (0.69) is below BTC B&H (0.78), it does not beat spot on return, and it carries a
−75% drawdown. The +369% headline is gross-2× leverage on a market-neutral book and still can’t out-run
holding BTC. Its funding is slightly positive (−7.5% = net received), the one small tailwind.
In-sample vs out-of-sample (split 2023-01-01)
| segment | net% | CAGR% | Sharpe | maxDD% | ρBTC |
|---|---|---|---|---|---|
| IS long-only-top (2.8y) | +702 | 110.3 | 1.20 | −88 | 0.71 |
| IS L/S (2.7y) | +104 | 30.1 | 0.68 | −71 | 0.03 |
| OOS long-only-top (3.4y) | +186 | 36.0 | 0.79 | −67 | 0.78 |
| OOS L/S (3.4y) | +129 | 27.5 | 0.77 | −45 | −0.03 |
- long-only-top is the gorgeous-monster pattern: 110% CAGR in-sample halves to 36% out-of-sample —
the decay the philosophy doc tells us to expect and distrust. - L/S is the more honest surprise: it’s consistent across the split (CAGR 30.1 → 27.5, Sharpe ~0.68 →
0.77, and maxDD actually improves −71% → −45%). It doesn’t decay the way S2a’s single-asset trend did.
That stability — market-neutral, OOS-robust — is the strongest signal any of the four smell tests has
produced. It is still not a B&H-beating edge, but it’s the first one that isn’t cleanly dead.
Probes (L/S unless noted; one knob at a time vs base)
| probe | net% | CAGR% | Sharpe | maxDD% | turn/yr |
|---|---|---|---|---|---|
| lookback 7d | −77 | −20.8 | −0.10 | −92 | 35.5 |
| lookback 30d (base) | +369 | 28.6 | 0.69 | −75 | 35.0 |
| lookback 90d | −61 | −14.7 | 0.02 | −89 | 19.6 |
| skip-recent OFF | +393 | 29.6 | 0.70 | −63 | 34.9 |
| rebalance weekly | +755 | 41.4 | 0.91 | −46 | 72.7 |
| top/bottom 3 | +227 | 21.0 | 0.62 | −78 | 40.1 |
| inverse-vol weight | +362 | 28.3 | 0.73 | −76 | 36.7 |
| maker fills | +422 | 30.9 | 0.72 | −74 | 35.0 |
- Fragile to the one knob it hangs on. 30d “works” (Sharpe 0.69) but 7d collapses (−0.10) and 90d
collapses (0.02). A signal that lives or dies on a single lookback value is the textbook overfit smell —
Phase B’s Deflated Sharpe / PBO exist precisely to punish this. - skip-recent doesn’t earn its keep here (turning it off is marginally better: 0.70 vs 0.69, less DD).
The reversal-dodging refinement isn’t adding value on this data. - Weekly rebalance is the one variant that beats B&H risk-adjusted (Sharpe 0.91 > 0.78, maxDD −46%, ρBTC
≈ 0) — but at 2× the turnover (72.7/yr). On optimistic fills that’s attractive; under real maker/taker +
slippage + missed fills + the survivorship haircut it is exactly where the gloss comes off. A flag for
Phase B, not a result to trust. - Maker vs taker is not decisive at this (moderate) turnover (+422 vs +369) — unlike S2c’s grid.
Verdict
Yellow — the least-dead of the four, but no deployable edge demonstrated. The handoff’s prediction held
on both counts:
- The long-only-top headline that looks like a winner is largely levered/concentrated long beta
(ρBTC 0.73, drawdown worse than spot, ~8%/yr funding drag) whose in-sample CAGR halves out-of-sample —
flattered further by survivorship. - The honest, market-neutral L/S factor (ρBTC ≈ 0.01) is the genuine cross-sectional test, and at the
base config it loses to buy-and-hold on both return and Sharpe with a −75% drawdown, and is fragile to
the lookback (7d and 90d both blow up).
What earns it yellow rather than the others’ yellow→red: the L/S factor is genuinely market-neutral and
out-of-sample-stable (CAGR 30→27.5, drawdown improving), which is structurally more interesting than S2a’s
decaying single-asset trend — a different, BTC-uncorrelated return stream. That is the one thread worth a
proper look if Richie ever wants a market-neutral directional sleeve. But “worth a proper look” means a
real Phase-B backtest whose first job is to fix the survivorship hole with a point-in-time universe
(including delisted coins) — because every number here is flattered by only ever ranking the survivors, and a
relative-strength bet is exactly the strategy that survivorship most distorts (you never get to ride, or be
long, the coins that mooned and then died). Until that’s done, this is learning capital, not trading capital.
The through-line, restated: S2a/S2b/S2c failed for lack of a structural edge; S2d reaches for a
cross-sectional one and gets the closest — but crypto’s high BTC-correlation thins the cross-section, the
beta-vs-factor split shows the eye-catching number is mostly beta, and survivorship flatters what’s left. The
only contractual edge Richie actually has remains funding capture (and note S2d’s own funding column: the
momentum-long book pays it).
Reproduce
Read-only, no auth, writes nothing. Needs the bot venv’s research extras (pip install -e ".[dev,research]"
— numpy/pandas, confined to research scripts). Source of truth:
bot/src/richie_bot/cli/smell_test_xsmom.py (golden self-test first: asserts the ranker longs the winner /
shorts the loser, that a dollar-neutral L/S with no dispersion nets ≈ 0, and that turnover cost reduces net).
The funding-history fetch across 24 perps is the slow part (~1–2 min).
make smell-test-xsmom # all sections (reproduces this memo)
make smell-test-xsmom ARGS="--only probes"
make smell-test-xsmom ARGS="--only headline --rebal 7" # the weekly-rebal variant
make smell-test-xsmom ARGS="--assets BTCUSDT,ETHUSDT,SOLUSDT --legs 1"See also
docs/research/2026-06-01-strategy-2-smell-test.md(S2a trend),
…-strategy-2b-mean-reversion-smell-test.md(S2b),…-strategy-2c-hedge-harvest-grid-smell-test.md(S2c).
Contrast: S2d is the first to produce a market-neutral, OOS-stable return stream — still not a B&H-beater,
but not cleanly dead like the other three.docs/research/strategy-2-trend-following-implementation-plan.md§9 (cross-sectional momentum = D2; this
smell test de-risks that future plan) and §4 (Phase-B real backtest: CPCV / Deflated Sharpe / PBO — and the
point-in-time, survivorship-free universe S2d would need first).docs/research/2026-05-30-binance-funding-screen.md— the one genuinely market-neutral, contractual edge
Richie runs; S2d’s momentum-long book is on the wrong side of that funding.docs/research/strategy-2-smell-test-handoff-S2d-S2g.md— the playbook; S2e/S2f/S2g remain.