Skip to content

View translation

MajorsOiConfirmedCrossSectionalMomentumDollarNeutralLS

Hypotheses

Cross-Sectional OI-Confirmed Momentum Rotation, Dollar-Neutral Long-Short (Multi-Instrument BINANCE USD-M Majors — Rank ~8 Liquid Perps by RETURN Momentum CONFIRMED by OPEN-INTEREST Growth: Long the Names Whose Rally Is Backed by Fresh Capital Inflow, Short the Names Whose Decline Is Backed by Fresh OI, Bi-Weekly Rebalance, Low-Turnover, 3-Parameter)

Hypotheses

A DOLLAR-NEUTRAL, MULTI-INSTRUMENT cross-sectional strategy on ~8 liquid BINANCE USD-M major perps (BTC, ETH, SOL, BNB, XRP, ADA, AVAX, LINK — all SAME venue, so no L44 cross-venue leg-availability problem; OI coverage on USD-M majors is confirmed multi-year, e.g. the ETH single-name OI hypothesis produced a full backtest). It deliberately builds on the factory's ONE proven survivor archetype — cross-sectional relative-strength momentum on perps (the deployed Sharpe-2.6 strategy) — but differs on three axes that address why recent attempts died: (1) it is DOLLAR-NEUTRAL long-short, stripping the crypto beta that blew up the long-only spot-rotation variants (81% DD, negative expectancy) and filling the under-represented long-short bucket (13.4%); (2) the ranking is not pure price — it CONFIRMS each name's return momentum with its OPEN-INTEREST growth, an orthogonal flow signal (L42-compliant), so we prefer moves backed by fresh capital (which persist) over moves on contracting OI (which fade); this cross-sectional aggregation across 8 names raises the OI signal-to-noise that made the SINGLE-instrument OI-trend strategy near-zero and fee-fragile; (3) BI-WEEKLY rebalance keeps turnover very low, so the ~0.20% two-side round-trip fee is amortized over multi-percent relative moves. It is distinct from every pending hypothesis (all single-instrument or a 2-leg funding pair) and from the dead cross-sectional betting-against-beta (that ranked by realized beta and found no edge; this ranks by OI-confirmed momentum, the proven-direction signal). Market-neutral cross-sectional momentum is the single most robust edge this factory has found; adding an orthogonal OI confirmation and neutralizing beta is a principled improvement, not a new textbook cliche.

Hypotheses

Iteration 3 fixes the single QA blocker: the confirmation feed is now REAL per-name OPEN INTEREST, not dollar turnover. The framework does expose per-leg OI (src/backtesting/subprocess_entry.py _add_per_leg_open_interest attaches open_interest_by_instrument for the primary AND every extra_instrument, gated on the strategy code referencing that key), which the previous iteration was unaware of. I verified all 8 legs have OI coverage 2021-12 to today (~300k hourly points total, ~19s one-time load) and that at 14-day calendar rebalance dates over the last 365 days 25/26 rebalances have >=4 legs with a valid OI growth reading at a 7-day staleness tolerance, so Layer 3 still produces trades. OI is CONTRACT open interest (coin units), i.e. net positioning outstanding - orthogonal to the price move, unlike turnover which tracks volatility and the move itself. Lookups are strictly as-of the bars own timestamp (searchsorted on a pre-sorted array parsed once in _ensure_oi), so there is no look-ahead and no per-bar rescan that could blow the sandbox wall clock. A leg with no usable OI is EXCLUDED from the cross-section rather than scored on price alone, and if fewer than min_universe legs carry OI the rebalance is skipped entirely - the strategy never silently degenerates into plain price momentum (no fallback to a different edge mechanism). Everything that already passed Layers 1-3 is untouched: same imports, same class shape, same calendar-anchored (timestamp-derived) bi-weekly schedule, same equal-dollar-per-side neutral construction, same netting delta orders and min-notional churn guard, same inert should_enter/should_exit/position_size. The only other change is a shortened warmup (min_bars_required lb+2 instead of 2*lb+2) which is a direct consequence of dropping the turnover prior-window and gives the sandbox more tradable days. Note on the QA second point: the weak sandbox metrics were produced by the turnover proxy; the OI-confirmed ranking is a different signal and needs a fresh read - if it too shows avg_trade_return_pct below the fee floor, the hypothesis itself (not the implementation) should be judged.

Hypotheses

Dollar-neutral OI-confirmed cross-sectional momentum basket with no robust edge — not worth 2 hours of optimization. Sharpe is 0.66 with bootstrap CI [-0.11, 1.43] straddling zero and profit_factor 1.17 (below the 1.2 meaningful-edge line) — the exact L45 first-backtest tell of the dollar-neutral major-perp basket family (mediocre PF paired with a large 29.7% drawdown), which is 0/84 (residual-momentum, cross-sectional rank, betting-against-beta all died overfit/no_edge). The attractive CAGR 27.7% is leverage/outlier-driven, not per-name edge: gross exposure 352%, return_kurtosis 23.7, enormous outlier days (2023-12-07 +38.5%, 2024-01-04 +32.3%, 2023-07-20 -37.4%), and the return is concentrated in the 2023 (+38%) and 2024 (+119%) bull. The recent regime is negative (2025 -2.9%, 2026 -13.9%, rolling Sharpe to -1.5), so the last-20% holdout sits in the losing window and would likely fail the positive-holdout hard gate. The OI confirmation does not rescue it — L73 established single-perp OI-gated signals as edge-dead this session, and cross-sectional aggregation raised turnover without adding robustness the deflation can't strip. The hypothesis leans on the promoted Sharpe-2.6 cross-sectional survivor, but that specific rotation is already captured and this variant lands at Sharpe 0.66 with a zero-straddling CI, so it did not inherit the edge. benchmark_meaningful is correctly false; judged on absolute risk-adjusted metrics the result is marginal-to-negative. No tuning of mom_lookback/oi_weight/rebalance_days flips it. Failure pattern: no_edge/overfit dollar-neutral multi-instrument cross-sectional momentum (L45), OI-gated (L73).

Implementation

Dollar-neutral cross-sectional momentum across 8 liquid Binance USD-M major perps on 1-DAY bars, where each name return momentum is confirmed by its own OPEN-INTEREST growth. Per-leg OI contracts are read from supplementary_data[open_interest_by_instrument] with strict as-of lookups; momentum and OI growth are z-scored across the cross-section and combined as score = z_mom + oi_weight*sign(z_mom)*z_oi. Bi-weekly calendar-anchored rebalance buys the top quartile and sells the bottom quartile at equal dollar notional per side (structurally dollar-neutral), moving each leg to target with a single netting delta order.

Verification Results

CLEAN RESTART 2026-09-04 — this run's verdict history and learning records were removed and it was restarted from verification. Its previous abandonment came from the pipeline, not from the market: the Layer-2 harness mis-bound @staticmethod helpers (fixed), QA issued terminal performance verdicts on an unoptimized smoke test (removed — QA now judges correctness only), and sandbox timeouts came from backtest-slot starvation (fixed). The hypothesis and the strategy code are unchanged. Verify the code on its merits; performance is decided later by the full backtest and the optimizer.

Verification Results

The OI-confirmation is a 0.5-weighted tilt on a momentum-dominated score, so the strategy is close to plain cross-sectional momentum with an OI nudge. Whether OI adds real orthogonal edge (vs being cross-sectional momentum, a low-survivor mechanism per L81) is unproven and is the entire justification for the hypothesis. Run the oi_weight=0 ablation OOS; only credit it if oi_weight>0 materially improves Sharpe/expectancy.

Verification Results

Dollar-neutral (equal notional/side) doesn't neutralize beta across majors of differing beta, so residual factor/directional exposure remains — consistent with the 30.5% max_drawdown (CI to 62%) and fat tails (kurtosis 25.9). The 'strips crypto beta' claim is only partial. Confirm realized net beta near zero OOS; a beta-weighted construction would neutralize it if residual beta drives the drawdown.

Backtest Review

Data/plumbing sound: OI loaded for all 8 legs (23,949 events), 309 trades, no liquidation; dollar-neutral construction contains single-name blowups

Backtest Review

avg_trade_return_pct 1.20% clears fees; commission only 1.53% of gross

Backtest Review

Sharpe 0.66 with CI [-0.11, 1.43] straddling zero, profit_factor 1.17 (below 1.2) — the L45 mediocre-PF + large-DD (29.7%) tell of the 0/84 dollar-neutral basket family

Backtest Review

Headline CAGR 27.7% is leverage/outlier-driven: exposure 352%, return_kurtosis 23.7, huge single days (+38.5%/+32.3%/-37.4%), concentrated in the 2023-2024 bull

Backtest Review

Recent regime negative (2025 -2.9%, 2026 -13.9%; rolling Sharpe to -1.5) — the last-20% holdout sits in the losing window and would likely fail

Backtest Review

OI-gated cross-sectional momentum — L73 established single-perp OI signals edge-dead; aggregation didn't add robustness the deflation can't strip

Iteration History

MajorsFlowConfirmedCrossSectionalMomentumDollarNeutralLS

Iteration History

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['flow_weight', 'min_notional', 'min_universe', 'mom_lookback', 'gross_exposure', 'rebalance_days'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: MajorsFlowConfirmedCrossSectionalMomentumDollarNeutralLS._zscore() takes 1 positional argument but 2 were given (bar timestamp: 1735691340000) - steady_downtrend: TypeError: MajorsFlowConfirmedCrossSectionalMomentumDollarNeutralLS._zscore() takes 1 positional argument but 2 were given (bar timestamp: 1735691340000) - flat_ranging: TypeError: MajorsFlowConfirmedCrossSectionalMomentumDollarNeutralLS._zscore() takes 1 positional argument but 2 were given (bar timestamp: 1735691340000) - volatility_spike: TypeError: MajorsFlowConfirmedCrossSectionalMomentumDollarNeutralLS._zscore() takes 1 positional argument but 2 were given (bar timestamp: 1735691340000) - zero_volume: TypeError: MajorsFlowConfirmedCrossSectionalMomentumDollarNeutralLS._zscore() takes 1 positional argument but 2 were given (bar timestamp: 1735691340000) - price_gap: TypeError: MajorsFlowConfirmedCrossSectionalMomentumDollarNeutralLS._zscore() takes 1 positional argument but 2 were given (bar timestamp: 1735691340000)

Iteration History

Verification failed (Layer 4 — QA review): - CORE EDGE NOT IMPLEMENTED — the hypothesis's named confirmation signal is OPEN INTEREST, but the code uses DOLLAR TURNOVER. The title and description are explicit and repeated: 'RETURN Momentum CONFIRMED by OPEN-INTEREST Growth', 'CONFIRMS each name's return momentum with its OPEN-INTEREST growth, an orthogonal flow signal', and the whole novelty claim rests on OI being orthogonal to price and on cross-sectional aggregation raising 'the OI signal-to-noise'. The code instead computes flow = mean(close*volume, last L) / mean(close*volume, prior L) - 1 (per-name dollar TURNOVER growth), z-scores it, and blends it as the confirmation term (score = z_mom + flow_weight*sign(z_mom)*z_flow). Open interest is never read. OI (net contracts outstanding / fresh committed positioning) and turnover (trading activity ~price*volume) are different signals: turnover is strongly correlated with volatility and the price move itself, so it is NOT the orthogonal 'fresh capital backing the move' feed the hypothesis is designed to test — it collapses toward plain volume-weighted cross-sectional momentum, a far more textbook, previously-explored mechanism. The developer documented the swap honestly (per-name OI is loaded only for the primary instrument), but a transparent substitution is still a substitution: the strategy that ran is not the OI-confirmed strategy the hypothesis specifies. - Even taking the turnover variant at face value, the sandbox shows no demonstrated edge: Sharpe 0.23 with a 95% CI straddling zero widely [-1.56, +1.89], probabilistic_sharpe 0.61, profit_factor 1.04, win_rate 0.42, and avg_trade_return_pct -0.117% (negative, below the ~0.15% fee floor) despite a marginally positive total_return of 5.09% over 71 trades / 362 days. Statistically indistinguishable from noise, and another entry in the cross-sectional-momentum-rank family with no recent survivors (L7).
Strategy report

Backtest and paper results are hypothetical. Trading involves risk of loss.