{% extends "base.html" %}{% from "_macros.html" import pnl_cls, bar, pct, venue_chips, new_badge, page_head, status_badge, source_note %} {% block title %}Markets{% endblock %} {% block content %} {% call page_head("Markets", "Every sport we price: what's next, what's live on each venue, and how we did lately.") %}All Polymarket markets →{% if kalshi %} All Kalshi markets →{% endif %}{% for v in schema_exchanges %} All {{ v.name }} markets →{% endfor %}{% if tapes %} Recorded tapes →{% endif %}{% endcall %}
Exchange outcomes we price
{{ h.outcomes }}
{{ h.markets }} markets · {{ ("$" ~ "{:,.1f}M".format(h.volume / 1e6)) if h.volume >= 1e6 else (h.volume|money(false, false)) }} traded
Order books recording
{{ h.recording or "off" }}
{% if h.recorded_at %}last {{ h.recorded_at|fmt }}{% elif user.role == 'admin' %}start racinglines markets record{% else %}not yet{% endif %}
Model accuracy
{{ "%.3f"|format(h.brier_win) if h.brier_win is number else "—" }}
{% if h.brier_win is number %}win Brier, latest backtest · lower is better{% if h.brier_grid is number %} · grid-only {{ "%.3f"|format(h.brier_grid) }}{% endif %}{% else %}no backtest yet{% if user.role == 'admin' %} · run one{% endif %}{% endif %}
{% if not (alpha_layout is defined and alpha_layout()) %}
My open markets
{{ h.my_open }}
staked against me {{ h.my_staked|money(false, false) }} · worst case {{ h.my_worst|money(false, false) }}
{% endif %}{# the private book: archived for the alpha (web/layout.py) #}
Model jobs running
{{ h.jobs_active }}
{% include "_recorders.html" %} {% for s in sports %}

{{ s.name }}

{% if s.code != "f1" and fantasy_on is defined and fantasy_on() %} prices only · fantasy is F1 for now{% endif %}{% if s.calibration == "baseline" and not s.tape %} baseline prices{% endif %} {% if s.run %}live prices from run #{{ s.run.id }} · {{ s.run.created_at|fmt }}{% elif s.asof %}model: pre-race prices for {{ "{:,}".format(s.asof.races) }} past races (replay saves, latest {{ s.asof.at|fmt }}) · no live forecast yet, so upcoming races show exchange prices only{% else %}market data only · no model{% endif %}
{% if s.status %}
{{ status_badge("races", s.status.races) }}{{ status_badge("markets", s.status.markets) }}{{ status_badge("backtests", s.status.backtests) }}{{ status_badge("sweeps", s.status.sweeps) }}{{ status_badge("paper", s.status.paper) }}
{% endif %}

Loading…

{% endfor %} {% if disagree %}

Cross-venue disagreement

{{ disagree.n_above }} of {{ disagree.rows|length }} outcomes above fees · last tick {{ disagree.last|fmt }}

Polymarket vs Kalshi on every outcome listed on both, at the log's latest tick{% if user.role == 'admin' %} (racinglines markets disagree){% endif %}. Gap = Kalshi mid − Polymarket mid; net = |gap| − both taker fees; edge = the better taker trade vs our fair, net of fees. Greyed rows: a venue's tape shows nothing traded in the prior 24 h, so the gap is on paper.

{% for r in disagree.rows %} {{ "%+.1f"|format(r.gap_net * 100) }}{% endfor %}
OutcomeEventPolymarketKalshiFairPM edgeKalshi edgeGapNetAt (UTC)
{{ r.kind_label }} · {{ r.subject }}{% if r.rid %}{{ r.event }}{% else %}{{ r.event }}{% endif %} {{ pct(r.pm_mid, 1) }}{% if r.pm_bid is not none and r.pm_ask is not none %} {{ pct(r.pm_bid, 1) }}–{{ pct(r.pm_ask, 1) }}{% endif %} {{ pct(r.kalshi_mid, 1) }}{% if r.kalshi_bid is not none and r.kalshi_ask is not none %} {{ pct(r.kalshi_bid, 1) }}–{{ pct(r.kalshi_ask, 1) }}{% endif %} {{ pct(r.fair, 1) }} {% if r.pm_edge is not none %}{{ r.pm_side }} {{ "%+.1f"|format(r.pm_edge * 100) }}{% else %}–{% endif %} {% if r.kalshi_edge is not none %}{{ r.kalshi_side }} {{ "%+.1f"|format(r.kalshi_edge * 100) }}{% else %}–{% endif %} {{ "%+.1f"|format(r.gap * 100) }}{{ r.ts|fmt }}
{% if disagree.days %}
Last {{ disagree.window }} days, liquid rows above fees: {% for d in disagree.days %}{{ d.day }} {{ d.above_fees }}/{{ d.liquid }}{{ " · " if not loop.last }}{% endfor %}
{% endif %} {{ source_note(none, ["polymarket", "kalshi"], model=true) }}
{% endif %}

Calendar

{{ calendar|length }} events across every sport and venue

Every race weekend (modeled sports) and every recorded exchange event (tape-only sports). A tape-only sport has no single cross-venue event, so each exchange's own listing is its own day.

MonTueWedThuFriSatSun
{{ source_note(cal_sports|map("first")|list, cal_exchanges) }}

Browse all Polymarket markets ·{% if kalshi %} all Kalshi markets ·{% endif %}{% for v in schema_exchanges %} all {{ v.name }} markets ·{% endfor %}{% if tapes %} recorded tapes{% endif %}. Bars: our fair probability; the orange tick is the exchange price.

{% if sport_status %}{% include "_sport_status.html" %}{% endif %} {% endblock %}