STZ Astra
Decision Desk · Certa ex incertisFortis Fortuna Adiuvat
Offline demo password: astra2026
When deployed, the password is verified server-side (FastAPI signed-cookie session). The offline demo password only works when this file is opened directly.
STZ AstraCerta ex incertisFortis Fortuna Adiuvat
Bankroll
$50,000
starting $48,000
Deployed
$4,820
9.6% of bankroll
Open
7
positions
Realized P&L
+$1,388
5 settled
Daily DD · lim −5%
−0.4%
Weekly DD · lim −10%
−2.1%
--:--:-- ET
CIRCUIT · CLEAR

Recommendations

Model edges ranked by net-of-fee expected value. World Cup 2026 group + knockout markets. Sizes are Kelly-fraction suggestions — you execute manually.

Live Edges
awaiting sweep
Best Net Edge
no qualifying edge
Suggested Deploy
$0
0 stage-ready
Avg Confidence
cold-start dampened

Edge Blotter · sorted by Net Edge ↓

Match Market Selection pmodel pmkt Gross Net Edge Conf Size · Kelly Kickoff Actions
Spain vs Cape VerdeGroup H · MetLife
Total O/U Over 2.5 71.2% 62.8% +8.4% +6.9% $640 · 0.18× 02:11:40

Score Probability Matrix

H↓ A→
0
1
2
3
4
0
2.1
3.4
3.0
1.6
0.6
1
5.1
8.2
6.4
3.2
1.2
2
7.8
9.4
10.1
5.0
1.9
3
5.6
7.1
6.0
3.4
1.3
4
2.4
3.1
2.6
1.5
0.6
cell = P(Spain i : Cape Verde j) % · shaded by density

Implied 1X2 & Consensus

P(Spain win)79.4%
P(Draw)13.1%
P(Cape Verde)7.5%
Model E[goals]3.18
λ Spain / λ CV2.55 / 0.63
API-Football consensus O2.564.1%
Kalshi mid (yes)62.8%
Pinnacle no-vig65.5%
Edge vs Kalshi+8.4% gross

Per-Venue Fees & Net

Kalshi · best−1.5% fee → +6.9% net
Coinbase Predict−2.2% fee → +6.2% net
Suggested venueKalshi

pmodel vs pmarket · 24h

modelmarket
edge has widened 3.1pp over 24h
Argentina vs CroatiaR16 · SoFi
Winner Argentina ML 64.0%57.5%+6.5% +5.3% $720 · 0.16× 26:40:00
France vs MoroccoGroup I · AT&T
BTTS Yes 58.9%52.0%+6.9% +5.1% $410 · 0.11× 04:55:10
Brazil vs Korea Rep.R16 · Hard Rock
Spread Brazil −1.5 55.4%49.8%+5.6% +4.4% $560 · 0.13× 50:10:00
USA vs TurkiyeGroup D · Levi's
Winner Draw 28.1%24.5%+3.6% +2.9% $300 · 0.08× LIVE 70'
Portugal vs UruguayGroup F · Gillette
Correct Score 2–1 Portugal 12.4%9.0%+3.4% +2.6% $180 · 0.05× 28:20:00
Germany vs MexicoGroup G · Lumen
Total O/U Under 3.5 61.0%57.9%+3.1% +2.0% $260 · 0.06× 06:15:00
Netherlands vs JapanGroup E · MetLife
Winner Netherlands ML 59.2%57.4%+1.8% +1.0% $140 · 0.03× 30:00:00
England vs SenegalR16 · Mercedes-Benz
Total O/U Over 2.5 54.8%53.5%+1.3% +0.6% $90 · 0.02× 52:30:00
Colombia vs EcuadorGroup C · NRG
BTTS No 51.5%50.8%+0.7% −0.2% — skip — 31:45:00
Belgium vs CanadaGroup B · BMO
Spread Canada +1.5 63.0%63.7%−0.7% −1.6% — skip — 08:00:00

Live / In-Play

Matches in progress. Live model re-prices each minute off the score state and clock; flagged rows are mispricings where Kalshi's live line diverges from the model.

70' Group D · Levi's Stadium
USA
1 : 1
Turkiye
USA win
28% / 45k
Draw
38% / 33k
Turkiye
34% / 30k
Mispricing: USA still 45% on Kalshi at 70', model says 28%. Fade USA / back Draw — net edge +9.8% after fees.
54' Group A · SoFi Stadium
Mexico
2 : 0
Poland
Mexico win
84% / 82k
O2.5 goals
71% / 68k
BTTS yes
41% / 43k
31' Group H · MetLife
Spain
0 : 0
Cape Verde
Spain win
76% / 77k
O2.5 goals
58% / 55k
Spain −1.5
49% / 50k

Live Edges

sized in-play recs across winner / totals / spread / BTTS — priced off the live score matrix
MatchMarketModelMkt mid Net edgeStake
No live edges — nothing in play, or no market diverges from the live model.

Positions / Portfolio

Open exposure marked to current Kalshi mid. Caps enforced per match and per market type by the risk engine.

Total Exposure
$0
budget $500
Open Stakes
$612
at entry cost
Largest Position
$980
Argentina ML
Positions
7
5 matches

Open Positions

marked 38s ago
MatchMarketSelection StakeEntryMark QtyUnreal. P&L%
Argentina vs CroatiaWinnerArgentina ML$98057.5¢61.0¢1,704+$60+6.1%
Spain vs Cape VerdeTotalOver 2.5$64062.8¢66.4¢1,019+$37+5.7%
Brazil vs Korea Rep.SpreadBrazil −1.5$56049.8¢52.5¢1,124+$30+5.4%
Mexico vs PolandWinnerMexico ML$70066.0¢84.0¢1,060+$191+27.3%
France vs MoroccoBTTSYes$41052.0¢54.1¢788+$17+4.0%
Germany vs MexicoTotalUnder 3.5$26057.9¢56.2¢449−$8−2.9%
USA vs TurkiyeWinnerDraw$30024.5¢38.0¢1,224+$285+55.1%

Exposure by Match

vs $2,000 per-match cap
Argentina–Croatia
$980
Mexico–Poland
$700
Spain–Cape Verde
$640
Brazil–Korea
$560
France–Morocco
$410
USA–Turkiye
$300
⚑ No open exposure.

By Market Type

% of total exposure
$0 DEPLOYED
Headroom · 100%

Bet Log

Full audit trail of staged, filled, and resolved bets with fees and realized P&L. Cold-start sample — 23 markets resolved so far this tournament.

Cumulative P&L
+$2,000
since 11 Jun · ROI +4.0%
Win Rate
61%
14 W / 9 L · n=23
Avg Edge Captured
+3.8%
vs +4.6% modeled
Brier Score
0.214
small sample · unstable

Cumulative P&L

realized · tournament to date
+$2.0k $0

Bet History

23 records
SettledMatchMarketSelection EdgeStakeFillFees OutcomeP&L
24 JunMexico vs PolandWinnerMexico ML+5.1%$70066.0¢$11● Won+$349
24 JunJapan vs TunisiaTotalUnder 2.5+3.2%$32054.0¢$5● Won+$268
23 JunCroatia vs GhanaBTTSYes+4.4%$28051.5¢$4● Lost−$280
23 JunArgentina vs Saudi A.SpreadArg −1.5+6.0%$54048.0¢$8● Won+$585
22 JunBrazil vs SerbiaScore2–0 Brazil+2.9%$15011.0¢$2● Lost−$150
22 JunEngland vs IranWinnerEngland ML+3.6%$60072.0¢$9● Won+$233
21 JunFrance vs AustraliaTotalOver 2.5+4.1%$45059.0¢$7● Won+$313
21 JunPortugal vs GhanaWinnerDraw+2.2%$20025.0¢$3● Lost−$200

Tournament Futures

Champion & round-qualifier edges from the bracket Monte Carlo — 1M simulated tournaments per refresh (Rust engine), consensus-anchored where ties are scheduled, MLE prior beyond. Extra skepticism is built in: a 5pt edge floor plus a confidence haircut.

AWAITING SWEEP

Futures Edges

updated by the twice-daily futures cron
MarketTierSideModelKalshi MidNet EdgeConfStake
No futures sweep yet — the cron runs twice a day.

Calibration

How well do model probabilities match observed frequencies? In a single 3.5-week tournament we cannot fully calibrate — this state is shown honestly below.

UNCALIBRATED · COLD START
⚠ Cold start. Only 23 markets have resolved this tournament — far below the ~200+ needed for stable reliability bins. Treat all pmodel values as directional, not calibrated. Kelly sizing is dampened to 0.25× and per-bin error bars are wide. Calibration will firm up only across multiple tournaments.

Reliability Diagram

predicted vs observed · n=23
predicted probability observed freq 01.0
Dashed = perfect calibration. Wide bars = few samples per bin.

Brier Score Over Time

lower is better · 0.25 = coin flip
0.30 0.10
Trending toward 0.21 but noisy — sample too small to trust the slope.
Current Brier0.214
Reliability component0.031
Resolution component0.118
Samples (resolved)23
Kelly damping0.25×

Verticals

Non-World-Cup surfaces (crypto strikes, tennis, MLB, Fed/macro, global events). Each carries its own calibration ladder and stays paper-only behind the 5pt skepticism floor until its log matures. Disabled verticals are surfaced here but do not sweep.

PAPER · STAGED ROLLOUT

Watchlist

surfaced, not staked — no anchor or zero confidence
MarketVerticalQuestion / side p0posteriornews LRrationale
No watchlist rows — enable a vertical or wait for the next sweep.

Parlays

Multi-leg (combo) markets priced off the joint score distribution, not the product of leg odds. Legs from the same match are correlated, so our fair value diverges from the crowd's independence assumption — that gap is the model's structural edge. Books are thin until near kickoff; net-vs-market fills in then.

MODEL FAIR · SAME-MATCH

Same-Match Combos

correlation-aware joint fair value vs Kalshi's packaged price
MatchLegs Joint fairNaïveCorr Δ Mkt midNet edge
No parlay scan yet — run the parlays job or wait for the next refresh.

Research

Free-feed evidence (injuries + RSS) condensed by one Haiku call per match into aggregate likelihood ratios, then clamped (max 2.0x), confidence-shrunk, and Bayes-applied to the model. Everything shown is auditable.

Evidence Feed

no signals yet
No news signals cached — the news cron runs each morning and again before kickoffs.

Applied Ratios

post clamp + confidence shrink
Ratios appear once a signal is computed.

Help & Platform Guide

What STZ Astra does, what every screen means, and how to run your daily World Cup betting loop. Concise by design — each panel covers one part of the platform.

What STZ Astra is

overview

A single-user decision-support desk for FIFA World Cup 2026 prediction markets on Kalshi. Astra builds one probability model per match, prices every Kalshi market from it (winner, totals, correct score, spread, BTTS, halves), compares those fair prices to live Kalshi quotes, and surfaces the mispricings — ranked by net-of-fee edge with a suggested bet size. You approve and place each trade; Astra never fires orders on its own.

The daily loop

how to use it
1
Glance at the risk bar — bankroll, deployed, drawdown, breaker status.
2
Scan Recommendations — edges ranked by net-of-fee value, biggest at top.
3
Open a row to inspect the score matrix, consensus vs Kalshi, and fees before trusting it.
4
Place the bet on Kalshi — the row shows the exact ticker + side. Suggested size is fractional Kelly, capped.
5
Log the fill → hit + on the row, enter your actual fill price + contracts, Log position. It appears in Positions instantly.
6
Watch Live / In-Play for overreactions; resolved bets settle and feed Calibration overnight.

Risk bar

money at risk, always visible
Bankroll
Current play-money balance and where it started.
Deployed Today
Capital in open bets placed today vs the 10%/day cap.
Open P&L
Unrealized mark-to-market across open positions.
Realized · Today
Settled profit/loss booked today.
Daily / Weekly DD
Drawdown vs the −5%/day and −10%/week limits.
Circuit
Breaker status — turns red and halts new bets at −5% on the day.

Recommendations blotter

column glossary
Market badge
Winner / Total / Correct Score / Spread / BTTS.
p_model
Astra's fair probability for the selection.
p_market
Kalshi's implied probability (de-vigged mid).
Gross / Net edge
p_model − p_market, before and after fees. Net is what matters.
Conf.
Model confidence (odds freshness, data, time-to-kickoff).
Size · Kelly
Suggested stake = fractional Kelly (0.25×), capped at 2%/bet.

The goal model

one engine prices everything

A Dixon-Coles bivariate-Poisson model produces a full score-probability matrix — P(home goals i, away goals j) — for each match, seeded from FIFA strength and the de-vigged sharp bookmaker consensus (API-Football, ~13 books). Every market is just a region of that one matrix: winner = summed halves, totals = diagonals, correct score = a single cell, BTTS = both ≥ 1. The detail drawer shows the matrix behind each edge.

Edge, sizing & fees

how a bet is chosen
Benchmark
Sharp consensus is the anchor; we bet where Kalshi disagrees with the model.
Net of fees
Every edge must clear the Kalshi spread + fee to qualify.
Sizing
0.25× Kelly on the fee-inclusive price, scaled by confidence.
Caps
2% / bet · 10% deployed / day · halt at −5% daily, −10% weekly.

Live / In-Play

during matches

As a match plays, the model re-prices from the current score and minutes remaining and compares to Kalshi's live quote. It flags overreactions — e.g. a team still priced near its pre-match number after the game state has clearly shifted. These are the cleanest, most time-sensitive edges.

Positions & Bet Log

tracking & history
Positions
Open bets with entry, current mark, unrealized P&L, and exposure by match / market type vs caps.
Bet Log
Full history with actual fill + fees, outcome, P&L curve, win rate, Brier, and ROI.
Log discipline
Always record the actual fill — calibration depends on accurate logs.

Logging a bet you placed

the + order ticket
The + button
On any Recommendations or Live Edges row, + opens an order ticket pre-filled with that market's ticker, side, and model price.
Enter your fill
After you place the bet on Kalshi, type the actual fill price (0–1) and number of contracts; stake is computed for you.
Log position
Records it via POST /api/bets into the ledger — it appears in Positions immediately and settles with the nightly job.
Placing on Kalshi
Search the shown ticker on kalshi.com (e.g. KXBTCD = BTC price), pick the strike/expiry, buy the side the row names.

Where your data lives

persistence
Single writer
The service persists to a cloud bucket mounted as its data dir — one instance, so logs are consistent. No manual file copying.
Positions / P&L
Every logged bet is written straight to the durable ledger; it survives restarts and settles overnight.
Recommendations
Refreshed by the sweep crons through the day; World-Cup and crypto edges are kept together so neither clobbers the other.

Calibration & Research

trust & context

Calibration shows whether 60%-predictions actually win ~60% (reliability diagram + Brier over time). In a single 3.5-week tournament there aren't enough resolved markets to fully calibrate, so the model runs in an honest UNCALIBRATED · cold-start state — shown explicitly. Research surfaces news/lineups and a copilot brief that nudges probabilities before kickoff.

Execution & bankroll

play money first
paper
Simulated fills vs real prices, play-money bankroll. Default — no risk.
demo
Routes orders to Kalshi's sandbox API (separate demo key).
prod
Real money — only after calibration is proven over weeks.
Market data
Always read from prod, so edges are real regardless of execution mode.

Themes & access

this dashboard
Ash / KK toggle
Switch the look — Ash (plum) or KK (terminal). Your choice is remembered.
? button
Top-right — opens this guide from anywhere.
Access
Password-gated. The production gate is enforced server-side, not in the browser.