Strategies
US Large-Cap Lottery-Demand (MAX) Skew-Premium Harvest — Dollar-Neutral Cross-Sectional Long/Short Across 30 Sector-Diverse USEQ Single Stocks, Vol-Scaled MAX Ranking, 21-Session Rebalance on DAILY Bars (2 core parameters + 1 blow-up stop)
Outcome: Abandoned
UsLargeCapMaxLotteryDemandSkewPremiumLS
Outcome Summary
Hypothesis
coding_stuck_3_timeouts
Implementation
Dollar-neutral cross-sectional long/short over a fixed 30-name, sector-diverse panel of pre-1992-listed US large caps on the commission-free USEQ venue, traded on DAILY bars. Every ~21 sessions (calendar-anchored 30-day period index taken from the bar timestamp) each name is scored by its VOL-SCALED MAX statistic - the mean of its 3 largest single-day returns over the trailing 21 sessions divided by that name's own 21-session return volatility. The book goes SHORT the 5 highest scores (crowded lottery tickets) and LONG the 5 lowest (no-jackpot names), equal dollar weight, gross capped at 45% of equity, unlevered, net ~0. Rotation is full-book: at each period boundary every held leg is closed and the fresh book is established only once the book is flat, so PnL is realized once per period and exposure between rebalances is binary (full paired book or flat). A single blow-up stop: if any leg's unrealized loss exceeds 25%, the ENTIRE book is flattened until the next rebalance.
Verification Results
sandbox_timeout: Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit on a ~20000-bar window (2400 days of AAPL.USEQ-1-DAY-LAST-EXTERNAL). This almost always means per-bar work that scales with history — e.g. rescanning the full funding/supplementary series, or rebuilding a list and calling min()/sorted() inside calculate_signal()/on_bar() on every bar. Precompute sorted timestamp arrays ONCE in __init__ and use bisect, or cache lookups keyed by timestamp, so per-bar cost is O(log n) not O(n).
Set n_max=2, or record the deviation so the analyst does not score a MAX(3) result against a MAX(2) prediction.
Hypothesis pre-registers MAX as the mean of the TWO largest daily returns; code defaults n_max=3. Structure (mean of k largest / own-vol) matches and n_max is bounded [1,5], so it is a magnitude deviation, but the tested statistic is not the pre-registered one.
State the de-risking in run metadata or restore gross_cap=0.90.
Sizing is half the stated book: hypothesis ~8%/name and gross ~80%; code per_name_pct 0.04 with gross_cap 0.45 gives ~4%/leg, gross ~45%. Structure (equal-dollar, dollar-neutral, unlevered) is correct, but returns/drawdowns are not comparable to the pre-registered numbers.
Log/count dropped legs; if long-leg count != short-leg count after _execute, flatten rather than run unpaired.
Entry submission is wrapped in a bare `except Exception: pass`, and legs sizing to 0 shares are silently skipped — either drops one side of a paired book with no log, leaving the 'dollar-neutral' book net-directional until the next rebalance (the exact defect class iterations 4 and 6 chased).
Un-enrol a leg stale for more than N primary bars and rank on remaining breadth, logging the drop.
Lazy alignment-barrier enrolment is one-way — an enrolled leg is never removed, so if any one of the 30 names stops delivering bars (tail gap, rename, delisting) the primary blocks forever and the strategy silently stops trading.
Acceptable as-is (bounded, documented); if sign-disagreement in metrics recurs, close+open the flip in one netting order.
Sign-flipping legs are flattened on the rebalance bar and entered only next session, so each rebalance carries a one-session lag and a briefly unbalanced leg count.
Analysis
Backtest gate: - metrics unreliable: Incoherent: Sharpe 0.04 disagrees in sign with total_return -17.23% — the Sharpe is computed from the mtm_equity_curve series while the return comes from the equity curve. Judge on the equity curve.
Outcome Summary
A behavioral anomaly documented in small, low-priced, high-idiosyncratic-vol names does not survive transplant onto a 30-name mega-cap panel — and when a pre-cost parameter grid is negative everywhere, further coding iterations only burn timeouts.
The run was abandoned at the coding stage with reason 'coding_stuck_3_timeouts' after 8 iterations, so backtest review, analyst and risk review were never reached; the developer's own iteration-7 notes had already recommended abandonment after a 108-configuration pre-cost grid came out negative post-2013 and on the holdout slice.
Harvest the lottery-demand / MAX skew premium by running a dollar-neutral cross-sectional long/short book on 30 sector-diverse USEQ large caps, shorting the 5 highest and buying the 5 lowest vol-scaled MAX scores on a 21-session rebalance of daily bars.
No backtest report was produced for this run and optimization never ran, so there are no validated pipeline metrics; the strategy's own code notes five earlier completed backtests on the same 31.5-year panel (~4,600 trades each) that all lost money — -51.0% (PF 0.92), -38.9% (PF 0.91), -8.4% (PF 0.986), -17.8% (PF 0.967) and -17.2% — with win rate pinned at 50.4-51.3%.
Backtest Review
- Sharpe
- 0.04
- Total return
- -17.23%
- Max drawdown
- 30.46%
- Trades
- 4714
- Win rate
- 50.0%
- Profit factor
- 0.97
Backtest and paper results are hypothetical. Trading involves risk of loss.