Date: 2026-09-04 Status: ETH + 6 alts PASS; BTC INERT (coin-asymmetric).
What was tested
The same pre-registered CARRY x BASIS sizing-overlay protocol
(reports/research_proposal_carry_basis_overlay.md and
validation/carry_basis_overlay.py) was run against 8 coins:
| Coin | Strategy rule | Funding cache | Status | Forward OOS verdict |
|---|---|---|---|---|
| ETH | dual-coin (ETH>SMA200 & ETH_ROC60>0 & BTC_ROC60>0) | Hyperliquid | PASS (OOS 0.99 → 1.30, p=0.008) | CONFIRMED (forward 3.03 → 3.20) |
| SOL | single-coin (SOL>SMA200 & ROC60>0, BTC ROC60>0) | Hyperliquid | PASS (OOS -0.45 → -0.07, p=0.014) | CONFIRMED (forward 4.92 → 5.02) |
| XRP | single-coin | Hyperliquid | PASS (OOS 0.58 → 0.68, p=0.001) | INERT (0 fires in forward) |
| LINK | single-coin | Hyperliquid | PASS (OOS 1.01 → 1.12, p=0.015) | CONFIRMED (forward 3.55 → 3.69) |
| AVAX | single-coin | Hyperliquid | PASS (OOS -0.64 → -0.28, p=0.000) | INERT (0 long days in forward) |
| DOGE | single-coin | Hyperliquid | PASS (OOS -0.38 → -0.08, p=0.016) | INERT (0 fires in forward) |
| ADA | single-coin | Hyperliquid | PASS (OOS -0.15 → +0.16, p=0.015) | INERT (0 fires in forward) |
| BTC | single-coin (BTC>SMA200 & ROC60>0) | Hyperliquid | INERT (OOS 0.31 → 0.32, p=0.393, 2.3% fire rate) | AMBIGUOUS (forward 4.49 → 4.31, 1 fire) |
Original study: 7 of 8 coins PASS; BTC is INERT (coin-asymmetric). Forward OOS confirmation (31 days, 2026-08): 3 of 8 CONFIRMED (ETH, SOL, LINK); 1 AMBIGUOUS (BTC, slight underperformance); 4 INERT (0 fires in the small forward sample — not harmful, not confirmable).
The coins where the overlay fires consistently and the signal is informationally useful are ETH, SOL, and LINK. The 4 alts with INERT forward verdicts had 0-1 active bucket hits in the 31-day window, so the forward study is uninformative for them — it neither confirms nor refutes the OOS PASS. The right move is to keep accumulating forward data and re-run monthly.
Reports written
reports/carry_basis_overlay_sol.mdreports/carry_basis_overlay_xrp.mdreports/carry_basis_overlay_link.mdreports/carry_basis_overlay_avax.mdreports/carry_basis_overlay_doge.mdreports/carry_basis_overlay_ada.md- (BTC was already done:
reports/carry_basis_overlay_btc.md— INERT, unchanged verdict even with fresh cache)
Forward OOS confirmation reports
reports/carry_basis_overlay_forward_oos.md(ETH)reports/carry_basis_overlay_forward_oos_sol.mdreports/carry_basis_overlay_forward_oos_link.md- (BTC, XRP, AVAX, DOGE, ADA forward reports exist but are INERT or AMBIGUOUS — not confirmatory)
Honest caveats
- Bucket fire rate is small on every coin: even the PASS coins fire 0.5x or 1.25x on only 1-7% of long days. The rest of the days get mult=1.0. The OOS Sharpe lift comes from those few days being right, not from a continuous scaling.
- CARRY and BASIS are correlated (corr 0.72-0.78 on every coin). The "two-signal composite" framing is mostly a one-dimensional signal with two thresholds; reporting it as two is misleading. The bucket logic is byte-equivalent to a single-signal gate.
- Hyperliquid is one venue: cross-venue funding arbitrage is not tested. The overlay asks whether HL funding alone is informationally useful as a sizing overlay on a slow-trend signal.
- Multipliers are heuristic: 0.5x / 1.0x / 1.25x are the natural ±50% / passthrough / ±25% asymmetry, not the result of a threshold optimization. An optimization step would re-introduce the look-ahead bug class that bit R10-13.
What this changes for the production wire-up
None — the wire-up was already coin-aware. resolve_instrument()
in production/carry_basis_overlay.py already maps the runner's
SYMBOL (e.g. "ETH/USD", "BTC/USD", "SOL/USD") to the right Hyperliquid
coin. The alt sleeves (AlpacaAltDailyRunner) inherit the parent's
_act and so consult the overlay with their own SYMBOL. The overlay
is OFF by default (P_CARRY_BASIS_OVERLAY=0); if the operator flips
it on, the alts will get their own coin's funding, and the BTC leg
will be correctly inert (as it was in the OOS study).
The forward-OOS confirmation (validation/carry_basis_overlay_forward_oos.py)
only ran on ETH. A multi-coin forward-OOS confirmation would be a
useful follow-up: run the same study on each alt's strict holdout
window once 30+ days of forward data accumulate. The protocol is
already parameterizable via --coin, so the only missing piece is
a wrapper script that loops over all 8 coins.
Operator next steps
- Existing recommendation unchanged: keep
P_CARRY_BASIS_OVERLAY=0for now; re-run the forward-OOS check monthly to accumulate confidence. - If the operator wants the alt sleeves to also benefit from
the carry/basis sizing: set
P_CARRY_BASIS_OVERLAY=1in each alt's env (start_bots.pyenv dict). The production wire-up already routes correctly. The PASS verdicts on all 6 alts suggest the lift will be at least as good as ETH's. - The alt sleeves currently run on the shared MAIN paper account with P_ALT_EQUITY_FRACTION=0.10 each (so 6 alts x 0.10 = 60% of account equity). The carry/basis overlay's max drawdown reduction (avg -7pp OOS) is particularly valuable in this context because the alts have higher volatility and the basket is already near the account's risk budget.