{% from "_macros.html" import empty, chart, demo_context, kpi, pnl, pc, px, source_note %} {% macro t(ms) %}{% if ms %}{{ "%d:%06.3f"|format(ms // 60000, (ms % 60000) / 1000) }}{% endif %}{% endmacro %} {% if not snap %}
No live event right now. The next downhill final will show here while it runs.
{% else %} {# --- status strip --- #}Before the final. {{ snap.waiting }}.
{% for q in snap.qualifying or [] %}| # | Rider | Time | Gap | Status |
|---|---|---|---|---|
| {{ r.rank or "" }} | {{ r.name }} {{ r.nation or "" }} | {{ t(r.time) }} | {{ "+%.3f"|format(r.gap / 1000) if r.gap else "" }} | {{ "" if r.rank else r.status or "" }} |
No qualifying times yet.
{% endfor %}Late window since {{ (snap.betting.late_at or "")[11:19] }} UTC: updates every {{ snap.betting.interval }} s, the crowd bets at 50× the normal pace, and every private taker has a fresh {{ snap.betting.late_cap|money(false, false) }} cap. Quotes stay live while each market remains safe to price.
{% elif snap.betting %}Quotes refresh every {{ snap.betting.interval }} s until each individual market becomes unquoteable; the late window opens with {{ snap.betting.to_start }} riders still to start.
{% endif %} {% call demo_context("A live experiment.") %}{% if maker %}The demo maker re-quotes every rider's win and podium market on every timing update: fair odds from a live simulation of the rest of the final, plus a spread that widens while a rider is on course. The demo taker bought a dozen of these quotes before the fast riders started, picked on hype.{% else %}The demo taker bought a dozen YES bets on the maker's quotes before the fast riders started, picked on hype (big names, home riders, fan favourites) rather than on value. Prices update live until the final settles.{% endif %} Paper only.{% endcall %} {# --- the headline numbers --- #}| # | Rider | Time | Gap |
|---|---|---|---|
| {{ r.rank }} | {{ r.name }} {{ r.nation or "" }} | {{ t(r.time) }} | {{ "+%.3f"|format(r.gap / 1000) if r.gap else "" }} |
{% if snap.waiting %}the final's start list isn't out yet{% else %}{% for r in nxt %}{{ r.name }}{{ " · " if not loop.last }}{% else %}everyone has started{% endfor %}{% endif %}
Pricing model v{{ snap.model_version }} (switched mid-final; earlier bets keep their prices): the track is wearing, so riders still to come are priced on a start-order trend{% if snap.trend %} (next rider's final at {{ "%.1f"|format((snap.trend.next_ratio - 1) * 100) }}% vs qualifying, ± {{ "%.1f"|format(snap.trend.sd * 100) }}% shared){% endif %}; quotes pulled after a rider's last split.
{% endif %}| Rider | 1st | 2nd | 3rd | Top 3 | Top 5 | Top 10 | Win bid / ask | Podium bid / ask | |
|---|---|---|---|---|---|---|---|---|---|
| {{ r.name }} | {% if r.status == 'Finished' %}finished{% elif r.status == 'InRace' %}on course{% elif r.next is not none %}starts {{ r.next + 1 }}{{ {0: "st", 1: "nd", 2: "rd"}.get(r.next, "th") }}{% endif %} | {{ pc(r.p1) }} | {{ pc(r.p2) }} | {{ pc(r.p3) }} | {{ pc(r.top3) }} | {{ pc(r.top5) }} | {{ pc(r.top10) }} | {{ px(r.win_bid) }} / {{ px(r.win_ask) }} {{ "▲" if r.win_move == 'up' else "▼" if r.win_move == 'down' else "" }} | {{ px(r.podium_bid) }} / {{ px(r.podium_ask) }} {{ "▲" if r.podium_move == 'up' else "▼" if r.podium_move == 'down' else "" }} |
| Market | Shares (YES) | Result | P&L |
|---|---|---|---|
| {{ p.rider }} {{ "wins" if p.market == 'win' else "podium" }} | {{ "%+.0f"|format(p.inv) }} | {% if p.settled %}{{ "YES" if p.value else "NO" }}{% else %}{{ pc(p.value) }}{% endif %} | {{ pnl(p.pnl) }} |
| UTC | Crowd | Market | Price | Shares |
|---|---|---|---|---|
| {{ f.ts }} | {{ "bought YES" if f.side == 'buy' else "sold YES" }} | {{ f.rider }} {{ "wins" if f.market == 'win' else "podium" }} | {{ px(f.price) }} | {{ "%.0f"|format(f.shares) }} |
| {{ empty("No fills yet.") }} | ||||
{{ cr.bettors }} have bet: {{ cr.up }} up, {{ cr.down }} down · median {{ cr.median|money(true) }} · best {{ cr.best|money(true) }} · worst {{ cr.worst|money(true) }} · together {{ cr.total|money(true) }}{{ " (settled)" if snap.done else " (marked to fair)" }}
A random taker, {{ cr.spotlight.taker[:8] }}: {{ cr.spotlight.pnl|money(true) }} on
{% for b in cr.spotlight.bets %}{{ "long" if b.yes > 0 else "short" }} {{ "%.0f"|format(b.yes|abs) }} YES on {{ by_bib.get(b.market.split(':')[0]|int, b.market) }} {{ "winning" if b.market.endswith('win') else "podium" }} ({{ b.pnl|money(true) }}){{ "; " if not loop.last }}{% endfor %}