Det finnes et spørsmål alle backtester unngår: Ville den samme koden, med det samme markedet i sanntid, ha gjort det samme? Du kan ikke svare på det med mer backtesting. Du kan bare få svar ved å kjøre strategien mot livedata med reelle regler for ordreutførelse og deretter kontrollere — handel for handel — at de to verdenene stemmer overens. Vi gjør denne kontrollen automatisk hver dag, og den har vært plattformens klart mest effektive feilfinner.
Dag én: bygg speilbildet
Hver godkjente strategi kjører i sin egen isolerte live-node og bruker ekte strømmer fra børsen: livekurser for utførelser, reelle spreader og faktiske åpningstider for handelsøktene. Strategiene deler ingen tilstand (vi lærte det på den harde måten — med en delt node kunne posisjonsspørringer fra én strategi lekke over i en annen). Hver utførelse loggføres sammen med signalverdien som utløste den.
Hver morgen: kjør replay og sammenlign
En daglig jobb tar papirperioden til hver strategi, kjører identisk kode gjennom backtestmotoren over den samme perioden med katalogdata og matcher utførelsene én til én: samme side, samme tidsstempeltoleranse, samme størrelse. Resultatet er ikke en korrelasjon eller en magefølelse. Det er en tabell: matchet, bare i papirhandel, bare i replay. En strategi som fungerer som den skal, viser 54 av 55 matchet. En strategi som ikke fungerer, viser nøyaktig hvilken handel som avvek, og når.
Hva som gikk galt, i rekkefølgen det skjedde
- Utførelser under oppvarming. Live-noden brukte historiske data til å varme opp indikatorene — og strategier med egendefinerte stolpebehandlere handlet gladelig på dem. Backtestene så aldri disse fantomhandlene. Løsningen var en sperre i ordreinnsendingen, ikke en endring i strategien, siden alle strategier ellers arver feilen.
- Sekvensiell oppvarming av flere bein. En tverrsnittstrategi varmet opp ett instrument om gangen; hvert bein så tomme søskenbein, og forankringen ble aldri initialisert. I livehandel utførte den ingen handler; i replay fungerte den fint. Ingen matchede handler — men det var bare sammenligningen som gjorde det tydelig.
- Krasjsløyfer på grunn av tick-presisjon. Live-ticks fra aggTrade kommer med en annen presisjon enn det instrumentet i sandkassen forventet. Noden havnet i en krasjsløyfe på grunn av en assertion som backtesten aldri kunne utløse, fordi stolpene i katalogen allerede er normalisert.
- Restart-amnesi. Prosessomstarter utløste inngangslogikken på nytt for posisjoner som allerede fantes — for en rebalanseringsstrategi ble en omstart i det stille til en rebalansering. I livehandel er ikke dette en fotnote om samsvar; det er et varselsignal med penger på spill.
Legg merke til mønsteret: Ingen av disse feilene ligger i signalene. De handler alle om grensene for utførelse — oppvarming, tilstand, presisjon og omstarter. Det er nettopp denne typen feil backtester er strukturelt blinde for, fordi backtestmotoren er selve utførelsesgrensen i en backtest.
Asymmetriene vi bevisst beholder
De to verdenene er med vilje ikke identiske. Backtesten belaster PnL med en modellert halv spread pluss kvadratrotslippage; papirhandel betaler den reelle spreaden i utførelsesprisen og bruker ingen slippagemodell. Hvis vi la den modellerte spreaden til papirhandel (eller den reelle spreaden til backtester), ville vi telt den dobbelt. Samsvar betyr samme beslutninger, samme utførelser innenfor toleransen — ikke identisk PnL på bitnivå. Mye av disiplinen handler om å vite hvilke forskjeller som er tilsiktede, og hvilke som er feil.
En backtest er en hypotese. Papirhandel er eksperimentet. Samsvarskontrollen med replay er laboratoriejournalen som avslører når du lurer deg selv.
Hvis du kjører strategier uten regelmessig å sammenligne liveatferd med atferd i replay, har du en kategori feil du aldri har sett. Vi finner en omtrent annenhver uke, og hver av dem var usynlig fra innsiden av backtesten.
← Alle innlegg

