kalmari.app / Strategies
Strategy

Chorus — methodology

🧪 experimental · runs Paused — was Politics ensemble Sun 17:00 PT (paused 2026-07-20 at 4 resolved picks, too few to judge)

Status: shadow (not auto-copy) · Source: audit · Current version: 2 · Legacy tag: audit_version=v2, run_id ending -ensemble

Many voices, one call. Instead of one model, Chorus runs 6 independent LLMs (via Hermes + OpenRouter) over the same shared candidate list, then pools and sizes their views. Where the models genuinely agree, it bets; where they disagree, the bet shrinks toward silence.

How it works (shrinkage + Kelly)

  1. Filter (deterministic) → shared candidate list.
  2. Fan-out: each of the 6 models independently researches every candidate and returns P(YES) + keep/reject.
  3. Pool: geometric mean of odds across models.
  4. Shrinkage (calibration): pull the pool toward the market price by the raw cross-model dispersion — tight agreement keeps its edge; wide/bimodal disagreement shrinks to ~the market (≈0 edge). Raw dispersion (not spread/√n) on purpose: model errors are correlated (majorities hallucinate together), so the pool is not n independent samples.
  5. Size: fractional Kelly on the net-of-spread edge, capped per pick, with a 15% cluster cap + cash reserve. No abstention gate.

Why it exists

The single-model strategies (Keel/Tracer) take one noisy draw; that single-sample variance is why their stated EV was anti-predictive. Pooling independent models + shrinkage attacks the optimizer's curse directly: a confident-but-wrong majority (e.g. 4/6 models hallucinating "Starmer resigns") shrinks to ~0 edge and gets ~$0, instead of becoming the biggest bet.

Status

Shadow-tracked in the v2 Audit Lab (CLV + calibration) — not cleared for auto-copy. Note: Chorus uses Kelly sizing, deliberately different from Keel's entry-band guardrails; reconciling the two (apply Keel's empirical guardrails on top of the Chorus probability) is the open question before any graduation.

Version history

Known issue: the Chorus Cloud Run jobs ran with SKIP_PUSH=1, so their HTML reports were built but never deployed — report_url dead-ends. Fix: drop SKIP_PUSH=1 + add the gh-token secret to the Chorus job.

See this strategy's live track record

Every pick this strategy has ever published — resolved results, P&L, and calibration vs the market — is public and auditable.

Open in the Strategy Explorer →