{% extends "base.html" %}{% from "_macros.html" import empty, paper_banner, demo_context, flash, page_head, source_note %} {% block title %}F1 (Polymarket){% endblock %} {% block content %} {{ page_head("F1 (Polymarket)", "Every open F1 market on Polymarket (" ~ n_markets ~ " outcomes; synced " ~ synced|fmt ~ ")" ~ (", with " ~ ("your picks' current call" if profile.basic else profile.name ~ "'s current call") ~ " on each: which side, how many shares, the most to pay, and how hot it is" if profile else "") ~ ". Prices are Polymarket's, per $1 payout.") }} {{ paper_banner(signals_nav) }} {{ flash(msg) }} {{ source_note("f1", ["polymarket"]) }} {% if sport_status %}{% include "_sport_status.html" %}{% endif %} {% if profile %}
Heat grades how much the model expects an entry to earn: warm hot very hot. It's a guide, not a promise. Calls update after every practice and qualifying session.
{% endif %} {% macro event_card(e, h="h3") %}ends {{ e.end_date|fmt }}{% if e.calls %} · {{ e.calls }} call{{ "s" if e.calls != 1 }}{% endif %}
| Outcome | Bid | Ask | Price | Volume | {{ (profile.name.split(' ')[0] ~ "'s call") if profile and not profile.basic else "Call" }} |
|---|---|---|---|---|---|
| {{ r.subject }} {{ r.prediction|kind if r.prediction != 'unmodeled' }} | {{ "%.2f"|format(r.last_bid) if r.last_bid is not none }} | {{ "%.2f"|format(r.last_ask) if r.last_ask is not none }} | {{ "%.3f"|format(r.mid) if r.mid is not none else "–" }} | {{ (r.volume|money(false, false)) if r.volume is not none else "–" }} | {% if r.call.action %}BUY {{ r.call.side }} {{ "%.0f"|format(r.call.shares) }} sh @ ≤{{ "%.2f"|format(r.call.limit) }} ({{ r.call.cost|money(false, false) }}){% if r.heat_label %} {{ r.heat_label }}{% endif %}{% else %}{{ r.call.why }}{% endif %} |
Polymarket hasn't listed markets for this race yet. They usually appear 3 to 4 weeks before the race; they'll show here{% if profile %}, with {{ "your picks" if profile.basic else profile.name.split(' ')[0] ~ "'s calls" }},{% endif %} as soon as they do.
{% endfor %} {% else %}{{ empty("No upcoming races yet.") }} {% endfor %} {% if season %}{{ "Your picks cover" if profile.basic else profile.name ~ " trades" }} race-weekend markets only, so these carry no call.
{% endif %} {% for e in season %}{{ event_card(e) }}{% endfor %}{% endif %} {% if other %}Props, and markets of races already run that Polymarket hasn't resolved yet.
{% for e in other %}{{ event_card(e) }}{% endfor %}{% endif %} {% call demo_context() %}Takers trade directly on Polymarket: there's no maker on the other side of these calls in the app. The demo taker takes about a third of them (hotter ones more often); its paper trades are on Positions and Strategy.{% endcall %} {% endblock %}