Generováno z docs/manual/prirucka.md · 2026-07-13

ElectionX — Příručka uživatele

Kanonický zdroj: docs/manual/prirucka.md · 2026-07-13 · In-app verze: http://localhost:3100/napoveda


1. Co ElectionX je a není

ElectionX je osobní poradce pro sázky na volby. Sleduje průzkumy a tržní kurzy, počítá vlastní pravděpodobnosti a ukazuje, kde se trh podle modelu mýlí. Nic víc.

Co ElectionX JE:

Co ElectionX NENÍ:


2. Rychlý start

Všechno běží lokálně na tvém Macu. LaunchAgents startují samy po přihlášení — normálně není co spouštět.

  1. Otevři http://localhost:3100 — dashboard (Next.js).
  2. Výchozí záložka Přehled má dva pohledy: - Doporučení — aktuální rady a stav sledovaných voleb, - Track record — vyhodnocení už vypořádaných rad.
  3. Když dashboard neběží, viz kapitola 9 (Provoz) — restart příkazy.

Backend API běží na http://localhost:8100 (FastAPI). Datový cyklus (kurzy, průzkumy, doporučení) běží automaticky 4× denně (v 01, 07, 13 a 19 hodin). Ručně ho vyvoláš přes MCP nástroj run_cycle_now (kap. 8) nebo launchctl (kap. 9).


3. Jak číst přehled (Doporučení)

Přehled ukazuje pro každou sledovanou volbu tabulku kandidátů/sázek se sloupci Model · Blend · Trh · Edge · Doporučení · Sázka.

Tři pravděpodobnosti

SloupecPoleCo to je
Modelp_modelSyrový výstup modelu: vážený průměr průzkumů + trend + Monte Carlo simulace, s γ-kalibrovanou nejistotou (kap. 10). Bez vlivu trhu.
Trhp_marketPravděpodobnost implikovaná tržní cenou, očištěná o marži bookmakera (Shin, kap. 10).
Blendp_blendProvozní číslo: p_blend = w·p_model + (1−w)·p_market, výchozí w = 0.35. Edge i návrh sázky se počítají z blendu, ne z čistého modelu.

Proč blend? Trh nese informaci taky. Kdybychom brali čistý model jako pravdu, vyráběli bychom si fantomový edge. Váha 0.35 znamená, že trh má skoro dvojnásobné slovo.

Edge, FLAG a WATCH

Sloupec Edge je edge_adjusted v procentních bodech (pp):

edge_adjusted = edge_raw − náklady platformy − 5pp nejistota modelu

Sloupec Sázka (suggested_stake_czk) se ukazuje jen u FLAG řádků. Výpočet: frakční Kelly 15 % (konzervativní zlomek plného Kellyho) nad osobním poradním bankrollem, s capy:

Výchozí bankroll je 50 000 Kč; změníš ho MCP nástrojem set_bankroll (kap. 8) nebo přes API (PUT /parameter-overrides/global/advisor-bankroll). Návrh sázky je poradní číslo, nic víc — rozhodnutí je tvoje.

Řádky bez modelu

Když pro daný typ kontraktu model neexistuje, řádek ukáže jen poslední tržní cenu a pomlčky. Žádná čísla se nevymýšlejí.


4. Freshness semafor

Každá sledovaná volba má semafor čerstvosti dat (traffic_light). Klasifikuje se stáří každého datového feedu (průzkumy, kurzy) a bere se nejhorší z nich:

BarvaVýznam
🟢 greenVšechny feedy mladší než 48 hodin. Čísla stojí na čerstvých datech.
🟡 yellowNěkterý feed je starý 2–7 dní. Čísla ber s rezervou.
🔴 redNěkterý feed je starší než 7 dní, nebo chybí úplně (žádné řádky). Volba bez jediného vyhodnotitelného feedu je taky červená (fail-closed).

Pole reasons (tooltip na semaforu) říká, co konkrétně je staré — např. „polls stale 9.3d".

Co dělat u červené:

  1. Nevěř radám pro tu volbu, dokud se data neobnoví.
  2. Spusť cyklus ručně: MCP run_cycle_now, nebo launchctl kickstart gui/$UID/com.xlab.election-alpha-runner.
  3. Když červená přetrvá, podívej se na zdroje volby (drill-down → Sources): schválený zdroj může mít rozbité URL (health check failing) — oprav URL, nebo zdroj degraduj a schval jiný.
  4. Log cyklu: /tmp/election-alpha-runner.log (řádky CYCLE-SUMMARY).

5. Životní cyklus volby

Stavový graf (elections.status):

candidate ──► active ──► awaiting_results ──► resolved
     (kterýkoli stav ──► archived)

Tvoje jediná povinnost: schválit zdroje (a tracking)

Nová volba startuje jako candidate se seznamem kandidátských zdrojů průzkumů. V drill-downu volby → záložka Sources:

  1. Projdi navržené zdroje a nastav source_status: approved (hlavní) / fallback (záložní) / blocked (nepoužívat).
  2. Schval tracking (tracking_status = approved).

Bez aspoň jednoho použitelného zdroje a schváleného trackingu volba nikdy nezačne generovat doporučení — schválení je vždy tvoje ruční akce, systém ho neudělá za tebe.


6. Zadávání výsledků

Po volbě (stav awaiting_results) zadáš oficiální výsledky ručně. Vypořádání pak proběhne automaticky: každá rada dostane outcome win / lose / void, spočítá se P&L a CLV (proti closing price) a volba se přepne na resolved.

Poctivé upozornění: dashboard zatím nemá formulář pro zadání výsledků — zadává se přes MCP nebo přímo přes API.

Přes MCP (doporučená cesta)

V Claude Desktop / Claude Code (kap. 8) řekni např.:

„Zapiš výsledek volby X: kontrakt Y = yes, kontrakt Z = no."

Claude zavolá nástroj resolve_outcome — a protože je to zápisová operace, vždy si od tebe nejdřív vyžádá potvrzení.

Přes API

# Jedna opce:
curl -X POST http://localhost:8100/market-options/<market_option_id>/resolve \
  -H 'Content-Type: application/json' \
  -d '{"outcome": "yes", "note": "oficiální výsledek"}'

# Celá volba najednou (mapa market_option_id → yes/no/void):
curl -X POST http://localhost:8100/elections/<election_id>/resolve \
  -H 'Content-Type: application/json' \
  -d '{"outcomes": {"<market_option_id>": "yes", "<jiné_id>": "no"}}'

Pravidla:


7. Track record — jak poznat, že model pomáhá

Záložka Přehled → Track record je poctivý scoreboard vypořádaných rad. Agregáty: n (počet), hit rate, celkové P&L, průměrné CLV, Brier vs. tržní baseline. Pod tím tabulka jednotlivých záznamů (režim advice = éra poradce; paper = historická éra paper tradingu), volitelně seskupená po volbách.

Jak čísla číst:

Zkratka: CLV > 0 a Brier < market baseline na rostoucím n = model něčemu pomáhá. Cokoliv slabšího = zatím nevíme.


8. MCP — ovládání přes Claude

ElectionX má MCP server: poradce jde ovládat konverzačně z Claude Desktop nebo Claude Code. Server je tenký adaptér nad lokálním API (:8100) — žádná vlastní logika, žádné obcházení pravidel.

Připojení

Nástroje (8)

NástrojTypCo dělá
list_electionsčteníSeznam voleb + stavy
get_advicečteníDoporučení: bez argumentu všechny FLAGy, s election_id detail jedné volby
get_freshnessčteníSemafor čerstvosti dat všech sledovaných voleb
get_track_recordčteníVypořádané rady + agregáty
resolve_outcome⚠️ zápisZadání výsledků volby (kap. 6)
set_bankroll⚠️ zápisZměna poradního bankrollu (Kč)
approve_source⚠️ zápisZměna stavu zdroje průzkumů
run_cycle_now⚠️ zápisRuční spuštění datového cyklu

Zápisové nástroje (⚠️) mají v popisu instrukci, že Claude musí akci nejdřív explicitně potvrdit s tebou. Navíc je k dispozici resource electionx://guide — stručný výklad čísel pro agenta.

Příklady dotazů


9. Provoz

Všechno běží jako macOS LaunchAgents (start po přihlášení, samy se drží naživu nebo běží podle plánu):

LaunchAgentPlánCo dělá
com.xlab.election-alpha-apiKeepAliveBackend API (FastAPI/uvicorn) na :8100
com.xlab.election-alpha-dashboardKeepAliveDashboard (Next.js) na :3100
com.xlab.election-alpha-runner4× denně (01/07/13/19 h)Datový cyklus: kurzy, průzkumy, model, doporučení, lifecycle sweep
com.xlab.election-alpha-forge-runnerkaždé 4 minVývojový agent (Implementer) — netýká se provozu poradce
com.xlab.election-alpha-critic-runnerkaždé 4 minVývojový agent (Critic) — netýká se provozu poradce

Restart

# Dashboard (:3100)
launchctl kickstart -k gui/$UID/com.xlab.election-alpha-dashboard

# API (:8100)
launchctl kickstart -k gui/$UID/com.xlab.election-alpha-api

# Datový cyklus hned teď (bez -k, jen spustit)
launchctl kickstart gui/$UID/com.xlab.election-alpha-runner

Logy

LogCo v něm je
/tmp/election-alpha-api.logAPI server
/tmp/election-alpha-dashboard.logDashboard (Next.js dev server)
/tmp/election-alpha-runner.logDatový cyklus — hledej řádky CYCLE-SUMMARY (elections_processed, forecasts_written, quotes_refreshed, polls_imported)
/tmp/election-alpha-runner-stdout.log, …-stderr.logObálka LaunchAgentu runneru

Data

PostgreSQL 16, databáze election_alpha na localhost:5432.

Rychlá diagnóza: dashboard má nahoře identity strip — zelená tečka = API connected; červená = API neběží (restartuj API, viz výše).


10. Metodika stručně

Detail vždy v decision notes (docs/agent_exchange/decisions/) a done reportech (docs/agent_exchange/done/) — tady jen mapa.

γ-kalibrace nejistoty (úloha 081A)

Syrová mezi-průzkumová disperze je systematicky moc těsná — model by byl přehnaně sebejistý (historicky např. 98.3 % na pozdějšího poraženého). LOO-CV kalibrace proto fituje inflační faktor γ (řádově ≈ 4.4×): σ_eff = γ · σ_disperze na vstupu Monte Carlo simulace. K tomu nezávisle drží 5pp floor fundamentální nejistoty (historická chyba průzkumů) a finální pravděpodobnosti se ořezávají do [0.01, 0.99] — kalibrovaný model nikdy netvrdí jistotu. Typ volby bez fitnutého artefaktu dostane nejkonzervativnější známé γ.

Shin — očištění kurzů o marži (úloha 081B)

Kurzy bookmakera obsahují marži (vig). Naivní normalizace 1/kurz ji rozprostře proporčně; Shin (1993) ji odstraňuje asymetricky a koriguje favorite-longshot bias. Fallback na proporční normalizaci jen při selhání solveru (loguje se). Ceny predikčních trhů se berou přímo; multi-outcome sada se sumou > 1.02 se normalizuje.

Shrinkage k trhu (úloha 081B)

p_blend = w·p_model + (1−w)·p_market, výchozí w = 0.35 — viz kap. 3. Váha je per-volba přenastavitelná přes parameter-override framework (market_blend_weight).

Cost model per platforma (úloha 081C)

Z hrubého edge se před prahem odečítají náklady:

PlatformaNáklady
Polymarket / Kalshipolovina pozorovaného spreadu z orderbooku (floor 0.5 pp), bez orderbooku flat 1.5 pp; Polymarket navíc 0.3 pp withdrawal drag
CZ bookmakeřimarže už odstraněna Shinem → 0 pp spread; konzervativní flat 1.0 pp daňový haircut (výhry z kurzových sázek jsou osvobozeny do 1 mil. Kč čistého/rok, nad to 15 %)
Neznámá platformakonzervativní flat 1.5 pp

Konstanty žijí na jednom místě: packages/parameters/advisor_policy.py.

Kam pro hloubku