31 august 2026 · piețe de predicție

Ce se strică atunci când faci backtest pe piețe de predicție: jurnal de opt zile

Ce se strică atunci când faci backtest pe piețe de predicție: jurnal de opt zile

Piețele de predicție par cel mai ușor lucru din lume pentru backtesting. Prețul este între [0, 1]. Câștigul este un dolar sau nimic. Fără levier, fără finanțare, fără bază, fără ciudățenii de swap perpetuu la 00:00 UTC. Aveam deja un backtester care gestiona contracte perpetue crypto cu comisioane, finanțare și impact, iar planul era să petrecem două zile adaptându-l, apoi să începem să generăm strategii.

A durat opt zile. Iată jurnalul, aproximativ în ordine, inclusiv ziua în care curba capitalului arăta incredibil și chiar era.

Ziua 1: adaptorul care trebuia să fie banal

Maparea inițială era unu la unu și părea simplă. O piață este un instrument. Prețul YES este prețul. Cumpărarea de YES înseamnă poziție long, cumpărarea de NO înseamnă poziție short. Decontarea este o închidere forțată la 1.00 sau 0.00. Introducem seria de prețuri orare în aceeași buclă de evenimente și gata.

Maparea rezistă cam nouăzeci de minute în contact cu date reale. Primul lucru care a cedat a fost seria randamentelor. Întregul nostru strat de risc — dimensionarea poziției, țintirea volatilității, raportarea Sharpe — presupunea randamente logaritmice ale unui instrument cu durată nedeterminată. O piață care trece de la 0.04 la 0.00 are un randament logaritmic nedefinit și o pierdere totală definită. Iar o piață la 0.04 cu trei zile înainte de decontare este un obiect categoric diferit de una la 0.04 cu patru minute înainte, deși ambele rânduri indică 0.04.

În cele din urmă, am reparametrizat întreaga serie în funcție de timpul rămas până la decontare, nu de ora de perete, și am tratat PnL ca valoare la scadență, nu ca valoare de piață. A fost decizia corectă și a invalidat fiecare componentă de cod pentru raportare aflată mai jos în lanț.

Ziua 2: formula comisionului este strategia

Pe Kalshi, comisionul de tranzacționare nu este o reducere în puncte de bază. Este pătratic în funcție de preț: aproximativ 0.07 × contracts × P × (1−P), rotunjit în sus la cent la nivelul ordinului. Asta înseamnă că comisionul este cel mai mare exact acolo unde o piață de tip monedă aruncată este cea mai interesantă și aproape gratuit spre extreme.

PrețComision per contractAvantaj necesar (puncte prob.)Comision ca % din miză
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%

Citiți a treia coloană: aceasta este cea care contează. Ca să ieșiți pe zero cumpărând la 50¢ și păstrând poziția până la decontare, estimarea probabilității trebuie să depășească estimarea pieței cu 1.75 puncte. Nu cu 1.75 procente în termeni relativi. În valoare absolută. Dacă ieșiți înainte de decontare în loc să păstrați poziția, plătiți comisionul de două ori, plus spreadul.

3.5%comision pe sens la 50¢, ca pondere din miză
1.75ppavantaj de probabilitate necesar pentru a ieși pe zero
1decontare per instrument, în total

CLOB-ul Polymarket a avut, istoric, un profil de comisioane foarte diferit, mai aproape de zero pentru tranzacția în sine, ceea ce mută întregul cost în spread și adâncimea pieței. Așadar, aceeași logică de strategie are două structuri de cost complet diferite în funcție de platformă, iar orice comparație între platforme care folosește un singur model de comisioane este o ficțiune. Acum folosim o funcție de comision specifică fiecărei platforme, nu o valoare scalară.

Dacă citiți un singur rând dintr-un raport de backtesting pentru piețe de predicție, citiți-l pe cel despre comision exprimat în puncte de probabilitate. O strategie cu un avantaj de prognoză declarat de 1.2 puncte pe piețe la 50¢ este o strategie perdantă pe Kalshi înainte de orice alt cost. Acest fapt trebuie să fie vizibil pe prima pagină, nu dedus de cititor.

Ziua 3: carnetul de ordine e o scară și se termină repede

Modelul nostru de impact era o funcție de tip rădăcină pătrată, calibrată pe carnetele de ordine ale contractelor perpetue BTC. Forma era greșită. Cu un tick de 1¢ la un instrument de $1, există doar 99 de niveluri de preț posibile în întregul carnet, iar o piață cu lichiditate medie poate avea câteva sute de contracte la nivelul superior, apoi un gol.

Iată o captură dintr-o piață pe date economice pe care o eșantionam, partea YES, cu aproximativ 30 de ore înainte de decontare:

NivelMărime (contracte)Cost cumulativ al cumpărării
42¢310310 @ 42.0¢ medie
43¢85395 @ 42.2¢ medie
45¢140535 @ 42.9¢ medie
49¢6001,135 @ 46.1¢ medie

Un ordin de 1,000 de contracte — risc de cinci sute de dolari, o eroare de rotunjire în crypto — mută prețul efectiv cu patru cenți. Patru cenți înseamnă mai mult decât dublul comisionului. Nu există aici o funcție lină de ajustat; parcurgi carnetul nivel cu nivel sau inventezi cifre. Am eliminat modelul cu rădăcină pătrată pentru această clasă de active și am scris un algoritm care parcurge literal carnetul, mai lent, dar corect.

La un moment dat, m-am surprins iritat că piețele astea sunt „prea mici ca să conteze”. Sunt mici fiindcă se stabilește prețul unei singure întrebări din lumea reală, cu un termen limită, și sunt doar atâția oameni care au o opinie despre cererile inițiale de ajutor de șomaj din SUA într-o zi de miercuri. Dimensiunea este piața. Să te plângi de asta e ca și cum te-ai plânge că o masă de poker are loc doar pentru nouă persoane.

Ziua 4: ziua în care curba capitalului arăta superb

Sharpe 4.1 pe 1,400 de piețe. Lină. Oricărui cercetător ar trebui să i se strângă stomacul la vederea ei; mie mi s-a strâns, până la urmă, cam la patruzeci de minute după ce făcusem deja o captură de ecran.

Eroarea era în reeșantionare. Istoricul prețurilor pentru piețele ilichide vine cu marcaje temporale neregulate, așa că l-am reindexat pe o grilă orară uniformă. Ultimul punct din fiecare serie arhivată este valoarea de decontare, 1.00 sau 0.00. La reindexare am folosit completarea cu cel mai apropiat vecin fără constrângere de direcție, așa că, pentru orice piață al cărei ultim tranzacție avusese loc cu ore înainte de decontare, valoarea de decontare s-a propagat înapoi peste intervalul gol. Modelul citea răspunsul de mâine în rândul de azi, tocmai pentru piețele ilichide unde putea mări poziția fără să atingă limitele de adâncime.

Completarea cu cel mai apropiat vecin este în regulă pentru un instrument continuu. Pentru un instrument a cărui ultimă observație este adevărul de la decontare, devine o mașină de anticipare. Acum verificăm că fiecare completare se face doar înainte în timp și că rândul de decontare este etichetat și exclus din orice calcul de caracteristici. Această verificare are nouă linii și este cel mai valoros cod pe care l-am scris toată săptămâna.

Zilele 5–6: 1,412 de piețe, aproximativ 180 de pariuri

Mărimea eșantionului pe piețele de predicție este o capcană cu o față prietenoasă. Decontezi 1,412 piețe, ai impresia că ai 1,412 observații și calculezi un t-statistic în consecință. Dar paisprezece meciuri NFL în aceeași duminică au în comun un sistem meteorologic, publicarea raportului despre accidentări și fluxurile acelorași pariori. Cincizeci și una de piețe electorale la nivel de stat au în comun un singur viraj național. „Se va întâmpla X până la 31 martie” și „Se va întâmpla X până la 30 iunie” sunt același pariu, cu termene diferite, și se decontează împreună.

Am grupat piețele după sursa evenimentului subiacent și data de decontare și am obținut un număr efectiv de observații independente de aproximativ 180. Nu este suficient pentru a distinge un avantaj real de zgomot, la dimensiunile efectului pe care le analizam, iar reeșantionarea bootstrap la nivel de piață nu rezolvă problema, fiindcă bootstrapul trebuie să reeșantioneze grupuri, nu rânduri. Dacă greșești aici, semnificația statistică se umflă în tăcere de două sau trei ori.

Ziua 7: și decontarea are o distribuție de probabilitate

Lucrurile pe care nu le modelasem deloc și pe care le-am descoperit pe calea cea grea:

Am adăugat în simulator un termen pentru costul de deținere și o variație aleatoare a datei de decontare. Niciunul nu este precis. Ambele sunt mai bune decât ipoteza implicită că decontarea are loc cu certitudine chiar la data indicată.

Ziua 8: ce am sări peste și cu ce am începe

  1. Săriți complet peste infrastructura bazată pe randamente. Nu adaptați un strat de risc cu țintirea volatilității la un instrument cu plată la scadență. Scrieți un strat pentru dimensionarea pariurilor care lucrează cu probabilități și miză. Am pierdut două zile încercând să-l facem pe cel vechi să se potrivească.
  2. Construiți funcția de comision înaintea strategiei. Afișați curba avantajului de prag de rentabilitate pentru fiecare platformă pe care intenționați să tranzacționați și puneți-o la vedere în birou. Elimină cam jumătate dintre idei înainte să vă consume o rulare de backtest.
  3. Parcurgeți carnetul de ordine din prima zi. Orice model parametric de impact preluat de pe o piață continuă va fi greșit într-un mod care vă avantajează.
  4. Grupați înainte să numărați. Stabiliți cheia de grupare pentru mărimea efectivă a eșantionului odată cu definirea universului, nu după ce obțineți un Sharpe care vă place.
  5. Verificați direcția completării. O linie pentru fiecare îmbinare. Dacă o serie se termină cu adevărul de la decontare, tratați completarea înapoi în timp ca eroare prin definiție, nu ca pe ceva ce veți observa la revizuire.

Cele opt zile au meritat, în mare parte fiindcă piețele de predicție înlătură ambiguitatea care face atât de ușor să te păcălești cu backtesturile crypto. Nu există o rată de finanțare pe care s-o treci cu vederea, nici o convenție de preț de marcare despre care să te cerți. Doar o întrebare, un termen limită și un răspuns. Când backtestul greșește aici, poți arăta exact unde.

piețe de predicțiebacktestingcomisioanemicrostructura piețeiingineria datelor
← Toate articolele