Skip to content

View original

LowSkewAntiLotteryLongRotation12PerpsUsdmWeekly

Hypotheses

Low-Skewness (Anti-Lottery) Cross-Sectional Rotation, Long-Only (BINANCE USD-M, Weekly Hold the 5 LOWEST-Return-Skewness Names From a 12-Perp Universe — Harvest the Lottery-Preference Premium, a Signal No Deployed Basket Uses, Defensive Anti-Meme Tilt, 2-Parameter)

Hypotheses

A LONG-ONLY, weekly-rebalanced cross-sectional rotation over a 12-name deep-history BINANCE USD-M universe (BTCUSDT, ETHUSDT, SOLUSDT, BNBUSDT, AVAXUSDT, LINKUSDT, ADAUSDT, XRPUSDT, LTCUSDT, DOTUSDT, ATOMUSDT, ETCUSDT) whose sort signal is RETURN SKEWNESS — a signal no promoted basket uses (momentum ranks by return, carry by funding, and my pending rotation by volatility), so it satisfies L24's requirement for a genuinely new, non-relative-strength input. Each week it ranks the universe by trailing daily-return skewness over a lookback and holds the 5 LOWEST-skew names equal-weight. Mechanism/edge = the lottery-preference / idiosyncratic-skewness anomaly (Bali–Cakici–Whitelaw): investors systematically OVERPAY for high-positive-skew, lottery-like assets (in crypto, the pump-prone meme/alt names that occasionally 10x), which then deliver poor subsequent risk-adjusted returns, while the boring LOW-skew names are underpriced and outperform on a risk-adjusted basis. This is a DISTINCT anomaly from the low-volatility factor (my pending low-vol rotation): skewness and volatility select different names — a steady name with occasional pumps is low-vol but HIGH-skew, while a choppy two-sided name is high-vol but LOW-skew — so the holdings and return stream differ materially. It is defensive (an anti-meme tilt that avoids the crash-prone lottery names, the ones that lose most in a bear), reuses the ONE long-only structure proven to survive here (weekly K-of-N rotation → sandbox-certifiable trade count, low turnover so fee-viable on pure OHLCV, no data wall), and is emphatically NOT any confirmed-dead family: NOT single-name MR/reversal (definitively dead — my LINK −0.19%, DOGE +0.12%, SOL-OI −0.068%, taker-flow −0.025%), NOT funding carry (saturated), NOT options (L23), NOT trend-following, NOT a market-neutral L/S basket (L12 fee wall — this is long-only), NOT a relative-strength rotation duplicate (skew ≠ return). 2 core parameters (skew lookback, number of held names).

Hypotheses

Iteration 3 addresses the two QA-review failures directly. (1) FAITHFUL SIGNAL: the sort is now RAW skewness ascending (`key=lambda kv: kv[1]`) so it holds the 5 LOWEST-skew names exactly as the hypothesis states three times — reverting the iteration-2 abs(skew) redefinition the QA flagged as mis-attributing results and drifting toward a low-vol screen. The continuous signal returned each bar is the universe mean raw skewness, which varies bar-to-bar. (2) FAT-LEFT-TAIL BLOWUP: iterations 1 (raw lowest-skew) and 2 (|skew|) both blew up on the same measured mechanism — avg_loss >> avg_win, largest_loss huge, kurtosis ~15, all driven by negative-skew names crashing. I added a pure risk overlay: `_check_stops()` runs every daily bar and exits any held name whose unrealized PnL breaches -stop_loss_pct (15%), then parks it in a `cooldown_days` window so the lowest-skew sort cannot immediately re-buy the crashing name. This caps each left-tail loss without touching the signal. All earlier-layer scaffolding (margin-correct sizing, staleness exclusion, weekly BTC-clock rebalance, equal-weight re-equalization) is unchanged, preserving the Layer 1-3 passes; the only edits are the sort key, the stop/cooldown state, and the two `_check_stops()` calls.

Hypotheses

Net-losing strategy: profit_factor 0.973 (<1.0), expectancy -$106.86, and the +99.7% total_return is entirely open-position unrealized (end_unrealized_pct 153.68 → realized ~-54%). max_drawdown 76.56% (CI high 96.4%) is a hard abandon (>50% floor, L19), and the result is single-regime — 2023 +635% carries everything while 2022 (-86%), 2025 (-60%) and 2026 (-60%) are all deep losses. Against its meaningful equal-weight-basket benchmark the strategy has negative alpha (-0.025) and information_ratio (-0.438), i.e. it underperforms simply holding the basket, and Sharpe 0.367 has a CI [-0.23, 1.03] straddling zero. This is already iteration 3: the per-position stop/cooldown overlay added after iterations 1/2 blew up on the left tail has not produced a positive realized edge or a survivable drawdown, because the raw lowest-skew sort structurally selects fat-left-tail crash-prone names. Optimizing skew_lookback/top_n cannot turn a PF<1, negative-expectancy, 76%-DD result into a promotable one — it would only overfit the 2023 window. Not worth 2 hours of optimization.

Implementation

Long-only weekly cross-sectional rotation over 12 deep-history BINANCE USD-M perps that ranks the universe by trailing 45-day daily-return skewness and holds the 5 LOWEST-skew (most-negative) names equal-weight, harvesting the lottery-preference / idiosyncratic-skewness anomaly (avoid overpriced high-positive-skew lottery names). A per-position 15% hard stop-loss plus a 7-day cooldown caps the fat-left-tail crashes that the raw lowest-skew sort is exposed to. Rebalances weekly on the BTC (primary) day clock; stale legs excluded. 1-DAY bars, no leverage, gross exposure 0.90.

Verification Results

Verification failed (Layer 4 — QA review): - The code does not implement the core sort signal the hypothesis names. The hypothesis states three times that the signal is the 5 LOWEST-Return-Skewness names — a RAW skewness sort, ascending (most-negative skew selected). The code instead sorts by abs(skew) ascending (`key=lambda kv: abs(kv[1])`), holding the most SYMMETRIC names. These select materially different baskets: a fat-left-tail name (skew = -2) is selected by the hypothesis's rule but excluded by the code's |skew| rule; a near-zero-skew name is selected by the code but not the hypothesis. The developer silently redefined the strategy's novel input from 'lowest skew' to 'lowest absolute skew' without revising the hypothesis, which (a) mis-attributes any recorded result to a signal the code does not run, and (b) drifts toward a low-dispersion / low-vol-like screen, undermining the L24 distinctiveness (skew != vol) the thesis rests on. - Even the |skew| variant is a decisive sandbox loser — total_return -57.5%, Sharpe -1.11 (CI [-2.70, +0.54]), profit_factor 0.19, max_drawdown 61.4%, with the fat-tail persisting (avg_loss $1606 vs avg_win $640, largest_loss -$7,227, kurtosis 14.9). Iteration 1 (raw lowest-skew) blew up with a fat-left-tail; iteration 2 (|skew|) still blows up. The skewness signal appears to have no fee-clearing long-only edge on this universe/window in either orientation.

Verification Results

Abandon the skewness thesis at BACKTEST_REVIEW — three well-sampled (79 trades) catastrophic sandboxes across both orientations plus a stop overlay are decisive; further tweaks would only overfit noise.

Verification Results

Edge failure (analyst call, not a code defect): third consecutive catastrophic sandbox of the same signal. iter-1 (raw lowest-skew) blew up; iter-2 (|skew|) -57.5%; iter-3 (raw lowest-skew + 15% stop + cooldown) total_return -57.7%, Sharpe -1.53 (CI [-3.00, +0.05]), profit_factor 0.21, win_rate 0.32, max_drawdown 64.0% (past the 50% hard-abandon line), avg_trade_return_pct -5.14%, with the fat-left-tail persisting (avg_loss $1360 vs avg_win $616, largest_loss -$5,829, kurtosis 10.6). The mechanism is fully diagnosed: a long-only lowest-skew book loads on fat-left-tail names that crash, and neither flipping the sort nor a stop manufactures an absent edge.

Verification Results

If it survives, keep stop_loss_pct/cooldown_days fixed (out of the optimizer's search space) and note the overlay in the hypothesis.

Verification Results

Hypothesis states '2 core parameters (skew lookback, number of held names)', but the code adds stop_loss_pct and cooldown_days as a risk overlay. Defensible and disclosed, and it does not change which names are selected (sort is faithful raw lowest-skew), but it expands the parameter/overfitting surface beyond the stated two.

Verification Results

No code fix; understand the daily stop gives limited fat-tail protection — further supports abandonment.

Verification Results

The stop is evaluated on the daily close, so it cannot cap gap risk: largest_loss ~-31% on a position is ~2x the 15% stop — a one-day gap-down blew through before the daily check fired. Expected for a daily-bar stop, not a bug, but the crash protection is only partial, consistent with the persistent fat tail.

Backtest Review

Genuinely novel non-relative-strength signal (return skewness) with academic grounding (Bali-Cakici-Whitelaw)

Backtest Review

Well-sampled (505 trades over 6.5 years), low turnover, fee-viable trade cadence

Backtest Review

profit_factor 0.973 (<1.0) and expectancy -$106.86 — the strategy is a NET LOSER

Backtest Review

total_return +99.7% is entirely unrealized (end_unrealized_pct 153.68); realized track record is ~-54%

Backtest Review

max_drawdown 76.56% (CI high 96.4%) — well past the 50% hard-abandon floor

Backtest Review

Single-regime: 2023 +635% carries everything; 2022 -86%, 2025 -60%, 2026 -60%

Backtest Review

Negative alpha (-0.025) and information_ratio (-0.438) vs its meaningful equal-weight-basket benchmark — destroys value vs simply holding the basket

Backtest Review

Sharpe 0.367 with CI [-0.23, 1.03] straddling zero; calmar -0.574 (negative)

Backtest Review

Already iteration 3 — the stop-loss overlay added after iterations 1/2 'blew up' has not fixed the fat-left-tail exposure the raw lowest-skew sort selects for

Outcome Summary

This strategy pursued a genuinely novel, academically-grounded signal — ranking by return skewness to harvest the lottery-preference premium — reusing the one long-only rotation structure proven to survive here and pitched as a defensive anti-meme tilt. But the raw lowest-skew sort selected fat-left-tail names that had blown up in earlier iterations, and even with a per-position stop and cooldown added by iteration 3, the strategy was a net loser: profit factor below 1.0, negative expectancy, a 76.56% drawdown, and a +99.7% headline that was entirely open-position MTM masking a ~-54% realized record. Its return was concentrated in a single 2023 window while every other bear year lost 60-86%, and it added negative value over its own benchmark. The analyst abandoned it at review, concluding that optimizing the two parameters could not turn a PF<1, 76%-drawdown result into a promotable one without overfitting 2023.

Outcome Summary

Sorting for the lowest (most-negative) return skewness structurally selects fat-left-tail, crash-prone names, so a risk overlay bolted on top cannot rescue it — the anti-lottery anomaly did not translate into a positive realized edge or a survivable drawdown in this crypto universe, and a headline return that is mostly unrealized MTM masks a deeply negative realized track record.

Outcome Summary

It was abandoned at the pre-optimization backtest-review gate on a profit factor below 1.0, negative per-trade expectancy, and a 76.56% max drawdown well past the 50% hard-abandon floor: the result was single-regime (2023 +635% carried everything while 2022 -86%, 2025 -60%, 2026 -60%), it underperformed simply holding the basket, and by iteration 3 the added stop/cooldown overlay had not fixed the fat-left-tail exposure the raw lowest-skew sort structurally selects for.

Outcome Summary

A long-only, weekly-rebalanced cross-sectional rotation over a 12-name BINANCE USD-M universe that ranks by trailing daily-return skewness and holds the 5 lowest-skew names equal-weight — harvesting the lottery-preference / idiosyncratic-skewness anomaly (Bali–Cakici–Whitelaw) as a defensive anti-meme tilt, with a per-position stop-loss added as crash protection.

Outcome Summary

The backtest was well-sampled (505 trades over 6.5 years) but a net loser: profit factor 0.973, negative expectancy (-$106.86/trade), a headline +99.7% return that was entirely unrealized (end_unrealized_pct 153.7%, implying ~-54% realized), Sharpe 0.367 (CI straddling zero), 76.56% max drawdown, and negative alpha (-0.025) and information ratio (-0.438) versus its equal-weight benchmark.

Iteration History

Verification failed (Layer 4 — QA review): - Catastrophic negative edge -- the low-skewness anomaly does not transfer to crypto. total_return -39.64%, profit_factor 0.199, win_rate 0.184 (only 18% of trades won), avg_trade_return_pct -5.25%, Sharpe -1.64 with CI [-2.88, -0.16] ENTIRELY negative, max_drawdown 41.74%, fat-tail losses (return_skew -4.45, kurtosis 57.5, largest_loss -$3,750). Holding the 5 LOWEST-return-skewness names (even filtered to above-SMA) selected heavy underperformers. This is the exact failure of the low-vol sibling reproduced with a different sort: a pure-OHLCV cross-sectional-rank rotation in the L7 zero-survivor family. Two distinct academic low-X anomaly sorts (volatility, then skewness) on this same scaffold have now both failed catastrophically, indicating the lottery/low-vol premium documented in equities is absent or inverted in this crypto universe. - Not a faithful test of the 5-name 90%-gross basket -- same exposure signature as the low-vol sibling. The developer states the book holds '~90% gross across 5 equal-weight majors', but the sandbox shows avg_position_pct 18.61% and beta 0.024 to the equal-weight benchmark: the book is mostly cash (~1 name held) because the defensive trend gate excludes most names in this down window. So the strategy runs a concentrated ~1-name bet plus cash, not the diversified 5-name basket the hypothesis describes, and that concentrated book still lost -39.6%. Whether framed as defensive-by-design or under-investment, the run does not test the stated basket and its concentrated holdings crashed. - 49 trades over 363 days is below the ~100-trade measurability floor (L16) for a general conclusion, though PF 0.199 / -39.6% / an entirely-negative Sharpe CI make the negative edge unambiguous here. The mostly-cash concentrated book also means turnover/impact do not reflect a fully-invested basket.
Strategy report

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