🕶️
SHADOW MODE
intended 0 / 0 ct
would-fill 0 (0%)
markout 1m — · 5m —
shadow PnL $0.00
suppressed 0
report
Loading games…
| Player / Market | Game | Side | Bid | Odds | Take | Edge | Kalshi | Qty | Lvl |
|---|
No active orders
| Player / Market | Game | Side | Qty | Avg Price | Fair Odds | Cost | ROI | EV | Kalshi |
|---|
No positions
Click to load performance data…
Start the bot to see overview data.
Click to load analytics
Configuration
All settings save together — changes take effect on next tick.
Leagues & Markets
First column = league on/off · cells = per-(league, propType) · click any label to bulk-toggle
Orders & Ladder
L0,L1,L2,…
¢
¢
per market
$ total
¢ min price
Deepest rung → best bid + 1
Top rung at take when anchored
Pricing & Vig
ceiling when depth schedule on; raw blend when off
pp shift to YOUR overround
empty = use global
empty = use global
% min overround
empty = use global
¢ min edge vs fair
% fallback · blank = registry
% extra on one-sided
blank = empirical registry value
blank = empirical registry value
Safety & Timing
seconds
¢ hysteresis
min after fill
skip fair < this %
skip fair > this %
skip large fair jumps; blank=off
¢ — L0 cancel when fair drifts past this; 0=off
0=off; 3.5=typical; outlier-book filter
enable for NBA/NCAAB/MLB/NHL via sports/registry policies
DEPRECATED — prefer Auto-enable above
% · fallback only (dynamic vig is primary)
skip CDF if trusted OJ alt exists at hdp
kill switch for CDF-only props (blank = none)
¢ — default 8; 0=off
default 1.5 σ (raised from 1.0, 2026-04-23)
Dynamic CDF Vig σ_fair-based per-call overround — replaces the legacy flat `CDF Overround`
formula: overround = 2 × (ciZScore × σ_fair + edgePct)
baseline at gap=0 (NBA=1.15)
× gapSigmas² (NBA=0.88)
× per-game fit RMSE (default 1.0)
1.96 = 95% CI · 1.28 = 80% · 2.58 = 99%
maker edge above σ_fair uncertainty (default 2)
% · floor (default 4)
% · ceiling (default 25)
Loading…
League Empirical Values read-only snapshot of `sports/registry.js` — the single source of truth for per-league cdfModel, 1H tie rates, cdfSigma, and NegBin dispersion. Edit the file + redeploy to change these; short-term per-(league, propType) overrides go in the Per-Scope Config Overrides card below.
Loading league policies…
Books
one row per book — drag to reorder, set weight, mark skip-if-only / one-sided vig premium
Add book:
Weights auto-normalize to 100% on save · unset weight = book skipped from weighted mode
Observed Vig & Disagreement
e.g. 100 — when DK Points has ≥this many two-sided samples, use DK×Points median
e.g. 200 — fallback median across all markets for a given book
total samples across all depths — below this, falls through to (book) rollup
fallback across all markets — below this, falls through to 2-sided ÷2 / assumedVig
samples near the quote's depth — below this, falls through regardless of total
per-¢ weight cut above threshold (per-book override in Books table)
% of fair level (relative) — 10% ≈ 5¢ at fair=50, 1¢ at fair=10
¢ floor (legacy; 0 = use % only)
× weight when book has two-sided quote (1.0 = off, 2.0 = 2× vs 1s)
default 1.00 — covers p5 of observed distribution
default 1.40 — covers p95
default 0.60 — deep-tail ceiling
default 200
Per-Scope Config Overrides
Override any config field for a specific (league / propType / pricing-method) scope — including qty / maxPos and bookWeights / bookRanking / skipIfOnlyBooks. Most-specific scope wins:
nba/SPREAD/cdf-blend > nba/SPREAD > nba > global. New leagues should start with qty=1 until you've verified pricing + fills look correct — click 🧪 Seed test qty=1 to auto-add safety overrides.Audit & Debug Endpoints
/api/bot/support-matrix — registry × OJ coverage/api/bot/challenger-audit — pricer delta vs live/api/bot/shadow-coverage — live OJ data coverage per (league, propType)