31. august 2026 · prediktionsmarkeder

Hvad går galt, når man backtester prediktionsmarkeder: en dagbog fra otte dage

Hvad går galt, når man backtester prediktionsmarkeder: en dagbog fra otte dage

Prediktionsmarkeder ligner det nemmeste i verden at backteste. Prisen ligger mellem [0, 1]. Udbetalingen er en dollar eller ingenting. Ingen gearing, ingen funding, intet basis, ingen særheder ved perpetual swaps kl. 00:00 UTC. Vi havde allerede en backtester, der håndterede kryptoperps med gebyrer, funding og market impact, og planen var at bruge to dage på at tilpasse den og derefter begynde at generere strategier.

Det tog otte. Her er loggen, omtrent i rækkefølge, inklusive dagen, hvor aktiekurven så fantastisk ud, og faktisk var det.

Dag 1: adapteren, der burde have været en smal sag

Den indledende mapping var én til én og virkede enkel. Et marked er et instrument. YES-prisen er prisen. At købe YES er at gå long, at købe NO er at gå short. Afgørelsen lukker positionen automatisk til 1.00 eller 0.00. Send den timebaserede prisserie gennem den samme event-loop, færdig.

Den mapping holdt i omkring halvfems minutters kontakt med rigtige data. Det første, der røg, var afkastserien. Hele vores risikolag — positionsstørrelse, volatilitetsmålretning, Sharpe-rapporteringen — forudsatte logafkast fra et fortsættende instrument. Et marked, der går fra 0.04 til 0.00, har et udefineret logafkast og et defineret, totalt tab. Og et marked, der ligger på 0.04 tre dage før afgørelsen, er grundlæggende et andet objekt end et, der ligger på 0.04 fire minutter før, selvom begge rækker siger 0.04.

Vi endte med at omparametrisere hele serien ud fra tid til afgørelse i stedet for klokkeslæt og behandle PnL som terminalt i stedet for løbende opgjort. Det var det rigtige valg, og det gjorde al rapporteringskode efterfølgende ugyldig.

Dag 2: gebyrformlen er strategien

På Kalshi er handelsgebyret ikke et fradrag i basispoint. Det er kvadratisk i forhold til prisen: cirka 0.07 × contracts × P × (1−P), rundet op til nærmeste cent på ordreniveau. Det betyder, at gebyret er størst præcis dér, hvor et møntkastmarked er mest interessant, og næsten gratis ude i halerne.

PrisGebyr pr. kontraktNødvendig edge (sandsynlighedspoint)Gebyr som % af indsatsen
5¢0.33¢0.336.7%
10¢0.63¢0.636.3%
25¢1.31¢1.315.3%
50¢1.75¢1.753.5%
75¢1.31¢1.311.8%
90¢0.63¢0.630.7%
95¢0.33¢0.330.35%

Læs den tredje kolonne som det afgørende: For at gå i nul ved køb til 50¢ og beholdning frem til afgørelsen skal dit sandsynlighedsestimat være 1.75 point bedre end markedets. Ikke 1.75 procent relativt. Absolut. Hvis du lukker positionen før afgørelsen i stedet for at holde den, betaler du gebyret to gange plus spreadet.

3.5%Envejsgebyr ved 50¢, som andel af indsatsen
1.75ppSandsynlighedsedge for at gå i nul dér
1Afgørelser pr. instrument, nogensinde

Polymarkets CLOB har historisk haft en helt anden gebyrprofil, tæt på nul for selve handlen, så hele omkostningen ligger i spread og dybde. Derfor har den samme strategilogik vidt forskellig økonomi alt efter handelsplads, og enhver sammenligning på tværs af handelspladser, der bruger én gebyrmodel, er fiktion. Nu bruger vi en gebyrfunktion pr. handelsplads i stedet for én enkelt værdi.

Hvis du kun læser én linje i en backtestrapport for prediktionsmarkeder, så læs gebyret angivet i sandsynlighedspoint. En strategi, der hævder en prognose-edge på 1.2 point på markeder til 50¢, taber på Kalshi, før nogen anden omkostning er medregnet. Det skal fremgå tydeligt på første side, så læseren ikke selv skal regne det ud.

Dag 3: ordrebogen er trappeformet og kort

Vores impact-model var en kvadratrodsfunktion kalibreret på BTC-perp-ordrebøger. Det er den forkerte form. Med et tick på 1¢ for et instrument til $1 er der kun 99 mulige prisniveauer i hele ordrebogen, og et marked med middel likviditet kan have et par hundrede kontrakter liggende på det øverste niveau og derefter et spring.

Her er et øjebliksbillede fra et marked for økonomiske data, som vi samplede, YES-siden, omkring 30 timer før afgørelsen:

NiveauStørrelse (kontrakter)Samlet købsomkostning
42¢310310 @ 42.0¢ i gennemsnit
43¢85395 @ 42.2¢ i gennemsnit
45¢140535 @ 42.9¢ i gennemsnit
49¢6001,135 @ 46.1¢ i gennemsnit

En ordre på 1,000 kontrakter — fem hundrede dollars i risiko, en afrundingsfejl i krypto — flytter den effektive pris fire cent. Fire cent er mere end dobbelt så meget som gebyret. Der er ingen glat funktion at tilpasse her; du går ordrebogen igennem niveau for niveau, ellers finder du på tallene. Vi slettede sqrt-modellen for denne aktivklasse og skrev en bogstavelig ordrebogsgennemløber, som er langsommere og korrekt.

På et tidspunkt gik det op for mig, at jeg var irriteret over, at markederne var "for små til at betyde noget". De er små, fordi det, der prissættes, er ét enkelt spørgsmål fra den virkelige verden med en deadline, og der er kun et begrænset antal mennesker, der har en mening om de første ugentlige dagpengeansøgninger i USA på en onsdag. Størrelsen er markedet. At klage over den svarer til at klage over, at et pokerbord kun har plads til ni.

Dag 4: dagen, hvor aktiekurven var smuk

Sharpe 4.1 på 1,400 markeder. Jævn. Enhver researchers mave bør synke ved det syn, og det gjorde min til sidst, omkring fyrre minutter efter at jeg allerede havde taget et skærmbillede.

Fejlen lå i resampleren. Prishistorik for illikvide markeder kommer med uregelmæssige tidsstempler, så vi genindekserede til et ensartet timegrid. Det sidste punkt i hver arkiveret serie er afregningsværdien, 1.00 eller 0.00. Vores genindeksering brugte udfyldning med nærmeste nabo uden begrænsning på retningen, så for ethvert marked, hvor den sidste handel lå timer før afgørelsen, blev afregningsværdien spredt bagud over hullet. Modellen læste morgendagens svar i dagens række for netop de illikvide markeder, hvor den kunne øge positionsstørrelsen uden at ramme dybdebegrænsningerne.

Udfyldning med nærmeste nabo er fint for et kontinuerligt instrument. For et instrument, hvor den sidste observation er facit, er det en lookahead-maskine. Nu tjekker vi, at al udfyldning kun sker fremad, og at afregningsrækken er mærket og udelukket fra alle featureberegninger. Det tjek er ni linjer langt og den mest værdifulde kode, vi skrev hele ugen.

Dag 5–6: 1,412 markeder, cirka 180 væddemål

Stikprøvestørrelse i prediktionsmarkeder er en fælde med et venligt ansigt. Du får afgjort 1,412 markeder, føler, at du har 1,412 observationer, og beregner en t-stat derefter. Men fjorten NFL-kampe samme søndag deler et vejrsystem, en offentliggørelse af skadesrapporter og et fælles flow af spillere. Enoghalvtreds delstatsbaserede valgmarkeder deler én national politisk bevægelse. "Sker X inden 31. marts" og "sker X inden 30. juni" er det samme væddemål med forskellige udløbsdatoer, og de afgøres samtidig.

Vi grupperede markeder efter den underliggende begivenhedskilde og afgørelsesdato og nåede frem til et effektivt antal uafhængige observationer på omkring 180. Det er ikke nok til at skelne en reel edge fra støj ved de effektstørrelser, vi undersøgte, og bootstrap pr. marked løser det ikke, fordi bootstrap skal resample grupper i stedet for rækker. Hvis man tager fejl her, oppuster det signifikansen med en faktor to eller tre, helt ubemærket.

Dag 7: afgørelsen er også en sandsynlighedsfordeling

De ting, vi slet ikke havde modelleret, og opdagede på den hårde måde:

Vi tilføjede et led for kapitalbindingstid og en tilfældig forskydning af afgørelsesdatoen til simulatoren. Ingen af delene er præcise. Begge er bedre end den implicitte antagelse, at afgørelsen med sikkerhed falder præcis på den angivne dato.

Dag 8: hvad vi ville springe over, og hvad vi ville gøre først

  1. Drop hele det afkastbaserede stillads. Tilpas ikke et risikolag med volatilitetsmålretning til et instrument med terminal udbetaling. Skriv et lag til positionsstørrelse, der taler i sandsynlighed og indsats. Vi brugte to dage på at prøve at få det gamle til at passe.
  2. Byg gebyrfunktionen før strategien. Vis kurven for break-even-edge på alle handelspladser, du har tænkt dig at handle på, og hæng den op over skrivebordet. Den slår omkring halvdelen af idéerne ihjel, før de koster dig en backtestkørsel.
  3. Gå ordrebogen igennem fra dag ét. Enhver parametrisk impact-model hentet fra et kontinuerligt marked vil være forkert på en måde, der får dig til at se bedre ud.
  4. Gruppér, før du tæller. Beslut nøglen til gruppering ved beregning af den effektive stikprøvestørrelse, samtidig med at du vælger universet, ikke efter at du har fundet en Sharpe, du kan lide.
  5. Kontrollér retningen på udfyldning. Én linje pr. join. Hvis en serie ender med facit, så behandl bagudrettet udfyldning som en fejl per definition i stedet for noget, du håber at opdage i reviewet.

De otte dage var det værd, mest fordi prediktionsmarkeder fjerner den tvetydighed, der gør det så let at narre sig selv med kryptobacktests. Ingen fundingrente at bortforklare, ingen konvention for mark price at diskutere. Kun et spørgsmål, en deadline og et svar. Når backtesten tager fejl her, er det på en måde, du kan pege på.

prediktionsmarkederbacktestinggebyrermarkedsmikrostrukturdatateknik
← Alle indlæg