Skip to content

View original

MultiMajorRegimeShockConvexBasketLS

Hypotheses

Multi-Major Regime-Shock Convex Basket — Long-Short, Engage a Name When EITHER a Large Return-Magnitude OR a Sharp Vol-Expansion Fires (Union Trigger, Max Cadence), Across 8 Majors, Shared Parameters, Flat-in-Calm (Daily Bars, 3-Parameter)

Hypotheses

A LONG-SHORT, MULTI-INSTRUMENT, pure-price CONVEX directional basket that is the evidence-forced synthesis of this session's convex results. FACTS ESTABLISHED: (a) the convex 'engage-only-on-big-moves, flat-in-calm, decorrelated' profile is the cleanest non-trend result (BTC tail-regime PF 2.03, beta 0.009), but (b) EVERY single-name convex died on the ~100-trade COUNT floor — BTC magnitude 11/yr, DOGE magnitude 14.7/yr, BTC vol-expansion 14.6/yr — because large regimes are rare per asset, and (c) only multi-major diversification can reach the count. This maximizes cadence two ways: (1) a UNION 'regime-shock' trigger — a name engages when EITHER its trailing-return magnitude z-score OR its vol-expansion ratio exceeds threshold (capturing both completed-large-move regimes AND vol-onset regimes, ~doubling per-name engagements vs either trigger alone), and (2) a WIDER 8-major set. ~28 engagements/yr/name × 8 ≈ 220 (~140 lifetime), decisively above the floor that killed the single-name and (marginally) the narrower single-trigger versions. It keeps each sleeve flat-in-calm (decorrelated, convex) with SHARED parameters across all 8 names (3 params total → low DOF for the deflated-Sharpe gate that failed AAVE), and diversification tightens the aggregate Sharpe CI. NOT confluence/OHLCV-momentum (L56 — convex regime-shock, flat most of the time, 0/213 class avoided), NOT a cross-sectional RANK rotation (L52 — no ranking/selection; standalone shared-param convex trigger per name), NOT a squeeze breakout (L54 — engages on LARGE moves/vol-expansion, not compression pops), NOT mean-reversion (L53), NOT a NON-PRICE-feed gate (L46), NOT carry/basis/liquidation/options (L57/L58/L50/L51). Distinct from my two queued baskets: it UNIONS both their triggers (they use one each) and widens to 8 names — strictly more cadence, targeting the exact universal killer. Risk profile: vol-scaled sizing per engaged sleeve (equal risk), aggregate gross capped at ~70% of equity*leverage; 2x leverage cap (reads self.config.leverage).

Hypotheses

Implements the hypothesis exactly: UNION trigger (return-magnitude OR vol-expansion) × 8 majors × shared parameters, flat-in-calm, long-short, vol-scaled equal risk, gross capped at 70% of equity×leverage, leverage read from self.config.leverage and genuinely consumed in both the sleeve notional and the caps. Cadence was dry-run before coding on the actual catalog daily closes for all 8 names (2020-01→2026-08): at the defaults the union fires 828 engagements (~126/yr, all 8 names contributing 93-112 each), with 110 in the trailing 365 days — decisively above the ~100-trade lifetime floor that killed every single-name convex version, and it guarantees the Layer-3 sandbox window trades. Net-of-fee (0.10% RT) per-trade return is +2.54% average with profit factor 1.53 — an order of magnitude above the 0.15% viability floor, as expected for a 10-day convex hold. Design choices for the known failure modes: signal is continuous every bar (never a gated constant); all per-name state is bounded deques updated incrementally (O(30) float ops per name per DAILY bar — no timeout risk); the exit horizon is anchored to position.ts_opened calendar time, not a bar counter, so restarts/paper-replay match; per-trade risk is a fixed 1.2% of equity by construction (notional × stop = risk_frac × leverage × stop_sigma, independent of sigma), and the aggregate gross budget is re-checked against live notional before each entry, so an 8-name simultaneous shock cannot compound the book. Layers 1 and 2 were exercised locally: static analysis passes and all 6 synthetic scenarios pass (I avoid base-class @staticmethods, which the Layer-2 proxy re-binds as instance methods). One honest caveat for the analyst, not acted on here: in the dry-run the LONG side carries the edge (+5.69% avg, 456 trades) while the SHORT side is negative (-1.31% avg, 372 trades), and 2025 is the one losing year — the long-short symmetry is the hypothesis's call, so it is implemented as specified rather than quietly turned into a long-only sleeve.

Hypotheses

Drawdown-heavy, regime-decayed convex basket in a confirmed-dead family (convex regime-shock class). The union 'return-magnitude OR vol-expansion' trigger across 8 majors maximized cadence (771 trades) but compounded risk and diluted edge: max_drawdown 46.85% (CI to 67%), profit_factor only 1.17 (fee-fragile band), and a catastrophic recent regime — 2025 -44.87% with rolling Sharpe swinging to -7/-9 — which is exactly where the walk-forward OOS and 15-day holdout sit, so optimization would fit the strong early years (2021 +119.7%) and fail out-of-sample. Full-sample Sharpe is only 0.611 with a CI [-0.015, 1.199] that straddles zero. This is the third failed permutation of the same mechanism this session: the multi-major MAGNITUDE basket failed full optimization (DSR 0.298, PBO 0.655, holdout -0.03), the multi-major VOL-EXPANSION basket was abandoned at review (2025 -16%), and the single-name convex bets died on fee_edge/overfit. Count was never the binding constraint the hypothesis claimed — the edge decays in the current regime, and the union trigger only added drawdown (2025 -44.9% vs the vol-expansion basket's -16%). No iteration path: 3 shared params are already minimal and the failure is a regime-dependent, drawdown-heavy edge, not a tunable. Abandon at BACKTEST_REVIEW rather than spend the optimization budget.

Implementation

Long-short, 8-major, daily-bar convex regime-shock basket on Binance USD-M perps (BTC, ETH, SOL, BNB, XRP, ADA, DOGE, LINK). Each name is an independent sleeve running one shared rule: stay FLAT in calm conditions and engage in the direction of the shock when EITHER trigger fires — (1) the trailing 5-day log return exceeds shock_z sigma of the name's own daily vol, or (2) 5-day realized vol over 30-day realized vol exceeds vol_ratio_thresh (vol expansion / regime onset). calculate_signal returns a continuous, normalised engagement score max(|ret_z|/shock_z, vol_ratio/vol_ratio_thresh) signed by the trailing return, so |score| >= 1 is exactly 'a trigger fired'. Exits after hold_days calendar days from the position's own open timestamp, or on a stop_sigma × sigma adverse excursion. Sizing is equal-risk vol-scaled — notional = equity × risk_frac × leverage / sigma — giving 1.2% of equity risked per trade regardless of the name's volatility, with a per-sleeve cap and an aggregate gross budget of equity × 0.70 × 2.0 checked live before every entry. Three tunables total (shock_z, vol_ratio_thresh, hold_days) shared across all 8 names.

Verification Results

Portfolio manager / Research Lead: treat this and the magnitude tail-regime and vol-expansion baskets as ONE convex family for allocation and novelty. If more than one promotes, size them jointly (this union basket likely dominates/subsumes the two single-trigger versions), rather than as independent sleeves.

Verification Results

High correlation with the two other convex baskets I passed this session -- the strongest PM/allocation dedup concern of the batch, and a Research-Lead novelty question. This basket is explicitly the UNION of the magnitude tail-regime trigger and the vol-expansion trigger (the two other baskets each use ONE of them) across an overlapping 8-name set, so by construction its engagements are a superset of both and it correlates heavily with each. It is not a code or hypothesis defect -- the union is the stated design -- but the three convex baskets are effectively one family, not three independent decorrelated sleeves, and should not all be allocated as if independent.

Verification Results

Backtest_review/analyst: verify the short leg contributes (or at least does not bleed) across the pooled walk-forward OOS, and weigh whether a long-biased variant is warranted; confirm the aggregate clears the deflated-Sharpe gate on more than the carry years. The developer correctly implemented the symmetric mandate as specified rather than quietly making it long-only.

Verification Results

Long/short asymmetry and regime dependence -- analyst/backtest_review considerations. The developer honestly discloses that full-sample the LONG leg carries the edge (+5.69%/trade, 456 trades) while the SHORT leg is negative (-1.31%/trade, 372 trades), and 2025 is the one losing year. So the symmetric long-short mandate is really a strong long plus a losing short. Interestingly the sandbox year is the reverse (short_win 0.64 on 67 shorts carried it, long_win 0.325 on 40 longs), confirming the asymmetry is regime-dependent rather than structural. The sandbox is positive (+17.6%, Sharpe 0.60, PF 1.43, avg_trade_return_pct 1.09%) but the bootstrap Sharpe CI [-1.03, 2.10] still straddles zero (PSR 0.77).

Verification Results

For robustness (esp. live/paper), consider managing each extra sleeve in its own on_extra_bar (as the sibling baskets do) so a primary-leg gap cannot defer an extra's entry or stop; verify in paper trading that extra entries/exits fire on the expected timestamps.

Verification Results

The extra sleeves are entered/exited from the PRIMARY's calculate_signal (_manage_extra_sleeves), not from their own on_extra_bar, so extra-sleeve management structurally depends on the primary (BTC) having a contemporaneous bar and on the base class delivering all extra legs before the primary bar is processed (so _last_ts[extra]==ts when _manage runs). This holds in the sandbox (all 8 names trade, 107 trades), and on daily majors BTC rarely gaps, so it is not a backtest defect -- but if BTC ever lacks a bar on a day when an extra has one, or if paper/live bar ordering differs, that extra's entry AND its hold/stop exit would be skipped for that timestamp. The previous two baskets managed each extra in its own on_extra_bar, which avoids this dependency.

Backtest Review

High cadence: 771 trades, well above the count floor the single-name convex bets failed

Backtest Review

avg_trade_return_pct 2.29% clears fees

Backtest Review

Lower kurtosis (11.9) than the narrower convex siblings

Backtest Review

max_drawdown 46.85% (CI high 67%) — near the hard-abandon line; 288% return with ~47% DD is leverage, not edge (L19)

Backtest Review

Recent regime catastrophic: 2025 -44.87%; rolling Sharpe swings to -7/-9 — the window optimization OOS/holdout occupy

Backtest Review

profit_factor 1.17 — union trigger diluted the per-trade edge into the fee-fragile band (vs 1.6-1.9 for narrower baskets)

Backtest Review

sharpe_ratio 0.611 with sharpe_ci_low -0.0149 — CI straddles zero

Backtest Review

Whole convex family failed: magnitude basket (DSR 0.30/PBO 0.65/holdout -0.03 in full opt), vol-expansion basket (2025 -16%), BTC/DOGE single-name (fee_edge/overfit)

Outcome Summary

MultiMajorRegimeShockConvexBasketLS was the evidence-forced synthesis of a whole session of convex attempts — unioning the return-magnitude and vol-expansion triggers across 8 majors to decisively beat the trade-count floor that had starved every single-name version. It did reach high cadence (771 trades, +288%), but the union trigger diluted the per-trade edge to a fee-fragile 1.17 profit factor, stacked a 47% drawdown, and left a Sharpe of 0.61 with a CI straddling zero and a -44.87% 2025. The analyst abandoned it at backtest review, noting count was never the binding constraint — the edge decays in the current regime — and that this was the third failed permutation of a confirmed-dead family; it never reached optimization, analysis, or risk review.

Outcome Summary

When successive variants of a mechanism fail, re-diagnose the binding constraint before iterating — the convex family's real killer was regime decay and outlier dependence, not trade count, so a union trigger built purely to raise cadence only diluted the edge (PF 1.17) and stacked drawdown (47%) while inheriting the same recent-regime collapse.

Outcome Summary

The analyst abandoned it at backtest review as a drawdown-heavy, regime-decayed convex basket in a confirmed-dead family: the union trigger maximized cadence but only added drawdown (2025 -44.9% vs the vol-expansion basket's -16%) and diluted profit factor into the fee-fragile band, with the recent regime — where the OOS/holdout sit — catastrophic. Count was never the binding constraint the hypothesis claimed; the edge decays in the current regime, and this is the third failed permutation of the same mechanism (the magnitude basket failed full optimization, the vol-expansion basket was abandoned at review, the single-name versions died fee_edge/overfit).

Outcome Summary

A long-short, multi-instrument convex directional basket (3 shared parameters) across 8 majors that engaged a name when EITHER its trailing return-magnitude z-score OR its vol-expansion ratio crossed threshold (a union 'regime-shock' trigger), taking the side of the move and exiting on a hold-days clock or a sigma-scaled stop — a union-trigger, wider-universe synthesis explicitly built to maximize cadence and clear the trade-count floor that killed every single-name convex bet.

Outcome Summary

The backtest (8-major daily basket, 2409 data days) hit high cadence (771 trades) with +288% return, avg_trade_return_pct 2.29%, and lower kurtosis (11.9) than its siblings — but the union trigger diluted the edge and compounded risk: profit factor 1.17 (fee-fragile), max drawdown 46.85% (CI to 67%), Sharpe 0.611 with a CI straddling zero (-0.015), and a catastrophic 2025 (-44.87%, rolling Sharpe swinging to -7/-9).
Strategy report

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