Skip to content

2026 - 06

Goal: Confirm or kill MR. Find a second edge on a surface where MM actually works. | Phase: 1 (Validate)

Month headline — the great edge scan. May killed passive-MM and price-direction on BTC/ETH spot. June built the tooling to test the entire edge taxonomy rigorously (real-L2 order-book backtest) and then ran ~everything through it — 31 research memos. Nearly every candidate died with evidence; a clean shortlist of ~5 survivor classes emerged, each with a known gate. No profitable strategy locked yet, but the deliverable is real: we now have an evidence-backed map of the whole edge space, not a hunch.

1. Strategy: The Edge Scan — 🔶

Instead of iterating dead families, June systematically tested the taxonomy. What survived (the shortlist that now defines the search):

  • OKX MM → ~breakeven (v16). The lever was the inventory-aware exit policy, not a signal. Deep finding: on a rebate-leader venue (−0.75 bps maker), even the most-toxic fills are net-positive after the rebate, so signal-gating sacrifices good volume. Edge beyond breakeven requires a follower venue or one where toxic fills go net-negative. Multiple new arms (basis A/B, cross-quote, stablecoin-pair) lining up — MM is the closest live thread.
  • MR = liquidity provision, not direction (reclassified). Survives because it's risk transfer — fading a transient dislocation and collecting the snap-back — which is why the kline backtest can't see it and every prediction test died. Live-positive (9W/1L) but knife-edge (a ~2 bps input perturbation flips win→loss). The fill model is not the blocker — the trade-through maker-fill kernel (#380) shipped in wheel 0.2.11, shared with live paper. The open question is wheel-vs-live reconciliation. The offline test ran net-negative on a Dec→Mar Binance tape that happens to be MR-adverse (a −21% downtrend MR gets run over in), while live is +315 bps from a May-Jun high-vol reversion cluster. Two candidate causes remain, both cheap to disambiguate: (a) regime — the May-Jun window that produced the live result is available on OKX (L2 back to 2024-09); run it as a clean reference test; (b) closed-bar (BT) vs open-bar (live) entry on the ~2 bps knife-edge filter — this is cadence- independent (matching BT's default 30s to live's 2s won't fix it; the discretization boundary is the problem), and needs entry-for-entry trip-log reconciliation. v21 loosen-vs-tight A/B running.
  • Momentum premium — the one directional that survives. Not prediction: the CTA-style time-series momentum premium (ride the current-regime trend long/flat, bear reversal risk). Confirmed broad across 63 coins. Honest shape: drawdown-managed long crypto beta, not market-neutral alpha. MomentumPremium v2 (1d OKX) deployed to paper.
  • Stablecoin-pair MM (USDC-USDT) — a mechanism breakthrough. The first MM structure whose per-fill economics are positive even at zero rebate: post-fill markout +0.35 bps @30s (mean-reverting tailwind) vs BTC's -0.8 (adverse). The peg removes adverse selection — confirmed only on true $1-pegs (USDC, DAI); the XAUT "peg" control moves and is adverse like BTC. Gated by fill rate: OKX's touch is multi-million-USDC deep + zero-fee (no rebate), so a min-qty maker sits behind a FIFO wall and ≈ never fills → $0. Unblocks only on a thin-book + rebate venue (biz-dev problem, not analysis). Needs a depeg circuit-breaker before live size.
  • Carry ~3-4% AR net, scale-competed on majors, real dispersion in alts. VRP real but a tiny BTC-only maker niche. Both gated on derivatives access (see Phase Assessment). BUS cross-venue MM flipped positive-EV (+0.5-0.7 bps/fill) after Binance.US biz-dev offered a 0.5 bps rebate — but volume-capped to single-digit $/day → a capability / option / relationship play, not a P&L line.

Organizing frame (codified in edge-taxonomy.md / small-firm-edge-doctrine.md, 06-25): every survivor sits in the Risk-transfer root — getting paid to bear risk others shed (MR liquidity provision, momentum premium = bearing reversal risk, VRP = selling insurance, stablecoin-MM = quoting a de-risked peg). Nothing in the Information root (prediction) or Structure root (scheduled/mechanical — mostly priced-in) survived. That's the durable lesson: for a small firm at our fees and scale, edge comes from bearing risk, not out-predicting.

What got killed (rigorously, each with a memo — do not re-litigate without new data): multi-asset direction & relative value · cross-sectional momentum L/S · pairs-MR · on-chain (flow-direction, capture-side, AMM-LP/LVR, MEV, liquidations, token-unlocks) · order-book OFI (signal real, IC ~0.20, but sub-fee as a taker and rebate-positive-so-can't-gate as a maker — a cost wall, not data or speed) · execution-layer fill-quality ML · mechanical flows · VSR range-scalp · ML-combination probes · ML-mid-for-MM · StatsArb ETH/BTC (retired, not cointegrated) · USDC/USDT basis · crash-avoidance · gamma/liquidation.

June cohort P&L: -$42.08 across 34 new strategies — -$41 of it MarketMaking, the v16 arm churn (dozens of arms; a few -$3 to -$5, two KILLED at -$5). This is the cost of driving OKX MM to breakeven and A/B-ing the exit / signal / basis levers. MR +$0.58, StatsArb -$1.88. The active v16 arms now trade $50K-$200K volume each at near-flat P&L (63-70% WR) — the breakeven story made concrete.

Detailed strategy metrics: 2026-06-strategy-metrics.md

2. Backtest / Infra: Real-L2 Order-Book Replay — ✅ (the enabler)

The scan was only possible because the backtest got a major capability jump. This is the quiet foundation of the month.

  • Real-L2 order-book replay (#506, phases 1-3) — depth-aware maker fills from the real venue queue, not a synthetic spread. This is what let MM/MR hypotheses be tested faithfully offline for the first time.
  • Streaming L2 + aggTrade tape, O(1) memory — solved the 1-year memory wall; ~18× faster bulk load (30min → 1.6min), model_construct fast paths (~1.3-1.5×).
  • Backtest↔live distribution comparator (#348) — the formal fidelity loop, finally closed.
  • Multi-venue market data in backtest (#507) — cross-venue signals testable offline (basis, follower).

3. Accounting & Reliability — ✅

  • Accounting overhaul (#551): KPI series endpoint, realized-PnL snapshots, portfolio-snapshot reconciliation (regenerate history from fills), Binance fee-rebate reconciliation, daily forward snapshots.
  • Reconcile-first auto-recovery (#567) — on verify failure the engine pauses, reconciles, and never closes or auto-resumes. Operator runbook updated to match.
  • Orders: amend → cancel-replace collapse (#564), SETTLING-order recovery hardening, OKX fill-record fixes, balance-aware routing (skip unfundable venues).
  • Gateway: OKX USDC pairs on the USD unified book (tradeQuoteCcy), alt symbols + ORDER_RULES, 1d klines.

4. ML — ✅ (role pinned: not an alpha engine)

The month's ML conclusion is a demotion, and a useful one: ML is not an alpha engine for us. Its one surviving residual is a vol estimate for risk sizing — and EWMA already suffices (OOS R² +0.15 @24h; the production model's +0.30 is only worth it if downstream sizing is that sensitive). Codified in the doctrine.

  • The "highest-value ML target" tested dead: the revert-vs-continue classifier (the doctrine's flagged prize) came back OOS AUC 0.466 < 0.5 on adequate N — and gating on its confidence is anti-predictive (the fill-toxicity signature again). Vol direction mechanically predictable (imb5 → 63.5% dir-acc) but magnitude at the noise floor and sub-cost. "You know which way, not how much."
  • Three independent "ML can't rescue marginal edge" confirmations: ML-overlay on momentum (negative), ML-combination probes (cross-asset features hurt direction; vol-timed VRP sells into the tail), ML-mid for MM (real signal, no quoting/skew/cancel use pays after the rebate). VSR classifier + OB-depth/breakout regression shipped.
  • Wire VSR gate into MR — the one open ML-into-strategy thread; carries to July.

5. Frontend — ✅

  • Fill Markouts tab — post-fill capture/drift/markout view for execution quality. Directly served the MM toxicity analysis that produced the breakeven finding.
  • Recent Errors table on the strategy view — faster identification/triage of strategy faults.
  • State Sync promoted to its own Operations page + one-page redesign + Reconcile Snapshots action.
  • Portfolio KPI series / Accounting Performance tab; Strategy Current/Console refresh; latency columns split.

Incident: Absorb-Dust Realized-PnL Over-Reporting (Jun 3)

Impact: reporting-only (no fund movement). A dust reclassification (absorb_dust, base→dust) booked its mark into realized_pnl — but a reclassification is not a trade. Over many fills this compounded into arbitrary positive drift on retired MM strategies (the inflated +$5-8 lifetime figures on v10-v14 are this artifact, not earnings).

Key lesson: realized PnL comes only from closing trades; a reclassification that preserves base + dust must never book realized. Ground truth is the cash-flow identity Σ fill.quote_amount + net_base × mark — recompute from raw fills, never check the engine's number against itself.

Fix: reconcile-recompute (_rebuild_position_group + periodic reconcile_positions self-heal), not a live money-path change. Hardened into the engine's accounting invariants (now in CLAUDE.md). Pre-June P&L figures touched by the Jun-3 dust closure are excluded from all totals here.


Team

June commit counts badly understate the work — most of the month was research (31 memos) and backtest infra, not line-count.

MJ (~193 engine · ~89 strategies · ~45 frontend · ml)

  • Real-L2 backtest (#506) + streaming tape + comparator — the infra that made the scan faithful.
  • Ran the bulk of the 31-memo edge scan — killed most of the taxonomy with data, isolated the survivor shortlist.
  • Accounting overhaul (#551), reconcile-first recovery (#567), amend→cancel-replace (#564), OKX USDC + alt symbols.
  • Drove OKX MM to breakeven (exit-policy finding); momentum-premium confirmation across 63 coins.

Vicky (~10 strategies · 3 ml — commit count wildly understates a full research layer)

  • Owned the ML/quant research layer of the scan: derivatives pre-access backtest (VRP/carry/XS — the numbers behind the "no"), stablecoin-pair MM screen (the rebate-independent breakthrough), cross-asset trend confirmation (63 coins), ML mid-prediction for MM (closed), revert-vs-continue classifier (killed the doctrine's "highest-value" target).
  • Pinned the ML doctrine: ML is not an alpha engine; residual = vol-sizing (EWMA suffices). Codified in small-firm-edge-doctrine.md.
  • VSR classifier (#268) + OB-depth/breakout regression (#263) shipped. Onboarding continuing; VSR→MR wiring next.

Gaddafi (~10 frontend)

  • Fill Markouts tab (execution-quality — served the MM toxicity work), State Sync Operations page, KPI/Accounting tab.

Phase Assessment

Still in Phase 1 (Validate). No profitable strategy locked. But June converted the problem from "we don't know what works" into "here is the evidence-backed shortlist and exactly what gates each." That is the month's output.

The survivors and their gates (all Risk-transfer root):

Survivor State Gate
OKX MM (v16) ~breakeven live follower venue / basis to clear breakeven — arms lining up
MR (liquidity provision) live-positive (9W/1L), knife-edge wheel-vs-live reconciliation — fill model shipped; test regime (run the available May-Jun OKX tape) vs closed-bar/open-bar entry (cadence-independent)
Stablecoin-pair MM per-fill positive without rebate thin-book + rebate venue (OKX fill-rate locks it) + depeg breaker
Momentum premium works (63-coin), paper (v2) mandate (long crypto beta?) + alt ORDER_RULES for 4-coin
VRP (BTC only) only positive-backtest deriv sub-item, Sharpe ~0.65 but decaying derivatives access — and only 2-3× over cost
BUS cross-venue MM positive-EV, tiny volume-capped — capability/relationship play

(Carry ≈ 0 net; cross-sectional −140%/yr; both dead as standalone and not additive to VRP.)

A concrete engine unblock for July: ORDER_RULES (from the interface) has no alt symbols — a KeyError: SOL_USDT blocks both the symbol-breadth MR niche and momentum-premium's 4-coin confirmation. Adding SOL/BNB order rules (tick, min-qty, precision) unblocks two survivor threads at once.

Two founder-level decisions resolved this month (detail in the July plan):

  1. Long crypto beta (momentum premium): try it. Already in paper; it takes a long time to show a result and costs nothing to keep running. Low-effort, patient — leave it live and watch.
  2. Derivatives access: no, again, for next month. Big complexity + real risk (jurisdiction, capital lock-up, short-vol tail). The pre-access backtest is honest: BTC-VRP is the only sub-item that backtests positive (net Sharpe ~0.65, $50-150k/yr/$1M, positive every year, survived 2022) — but it's only 2-3× over operating cost and decaying fast (2026 YTD premium near zero), carry nets ~0, and cross-sectional is −140%/yr. A 5-year deployment might just break even. Option, not commitment — preserve the path (legal brief drafted; the 2025 CFTC FBOT thaw is a tailwind), don't spend on it.

Where hope actually lives: MM and MR. MM is at breakeven with a concrete path (follower/basis) and multiple new versions queued; MR is live-positive and just needs a faithful fill model to iterate. July should press both.

Learning

A rigorous "no" is a deliverable. June closed ~two dozen candidate edges, each with data, not fatigue. The value isn't the individual kills — it's that we can now stop searching the dead regions and concentrate the whole team on the short survivor list. A year ago we'd have kept most of these alive on hope; now they're filed with a "revisit if" condition and we move on.

Build the measurement before the search, not after. The scan only worked because the real-L2 backtest landed first. The recurring failure mode all year was in-sample mirages; the fix wasn't discipline alone, it was tooling that makes the honest test cheap. The order matters — measurement capability is the precondition for a fast, trustworthy search, and it's why June tested 30 hypotheses where earlier months tested three.

"Real signal" and "tradeable edge" are different things — and the gap is cost/economics, not data (and not, as first framed, latency). Order-book OFI is real (IC ~0.20) and still doesn't pay, for two precise reasons, neither of which is speed: as a taker, the predicted move is ~10× under the round-trip fee — a magnitude-vs-cost wall, the signal is genuinely too small to clear fees; as a maker on a rebate-leader, the "toxic" fills are net-positive after the −0.75 rebate (worst quartile −0.40 + 0.75 = +0.35), so gating them away forfeits good volume — unprofitable at any speed, an economic wall. Latency is explicitly not the established bottleneck on OKX: the matching engine caps everyone at ~few-10ms (no sub-ms race to lose), the 1s cadence is a choice, and whether edge survives at ~10ms is an open question the markout decay curve must answer with data — not close by vocabulary. And on a follower venue (cross-venue lead), speed genuinely could pay, so "we're too slow" would wrongly close a live question. Statistically-detectable ≠ economically-monetizable is now a five-time pattern — but the operative wall is fees + rebate economics, not our speed.

New edge needs new data/substrate, not a cleverer model on the same tape. Three independent probes this month (ML-overlay on momentum, cross-asset feature combination, ML-mid for MM) all confirmed ML cannot manufacture or rescue edge on the same public CEX data. This is the finding that most shapes what comes next: the lever isn't a better model, it's a different substrate — which is exactly why an equities scan is the logical next question (see July discussion).

Verify-first before high-stakes decisions (not "trust nothing" — daily iteration stays default-trust). Several near-misses caught before they cost anything: a recovered backtest was silently truncated (false all-negative), the venv silently pinned an old wheel (would've run the wrong fill model), a first-pass framed VRP as a Sharpe-2 edge before adversarial re-derivation cut it to a sub-2× niche. The bottleneck is trustworthy validation + structural access, not ideas.

Reclassification is not realized PnL. The Jun-3 dust leak: operations that preserve base + dust (absorb, promote, collapse) are not trades and must never book realized. Ground truth is always recompute-from-fills; never validate the engine's number against itself. Now a hard accounting invariant.