Lad os starte med tallene, for de er hele argumentet. En taker-handel tur-retur på en større perp-børs koster omkring 0,10% af notionalen i kommission. Funding på en overfyldt long-position kan løbe op i 10-30% annualiseret imod dig. En markedsordre, der er stor i forhold til dybden i toppen af ordrebogen, betaler kvadratrods-impact oven i spreadet. Og en backtest, der læser dagens revision af gårsdagens data, får en edge til flere procent om året, som aldrig har eksisteret.
Det overraskende tal er det første. Ikke fordi det er stort — men på grund af hvad det gør ved handelsfrekvensen. Alle nikker til "husk gebyrerne" og tester så en strategi, der handler fyrre gange om dagen. Ved 0,10% tur-retur er fyrre handler 4% af notionalen om dagen i omkostninger. Der findes ikke et signal på en mid-cap-perp, der klarer den tærskel. Strategien var ikke i nærheden af at være levedygtig, og den gebyrfri backtest sagde, at den var genial.
Gebyrer er et filter, ikke et nedslag
Den mentale model, de fleste går rundt med, er at gebyrer barberer kurven: samme form, bare en anelse lavere. Det er forkert. Gebyrer er et frekvensfilter. De udsletter højfrekvente varianter af en edge fuldstændigt og lader de langsomme varianter stå næsten urørte. Da vores pipeline begyndte at håndhæve rigtige maker/taker-satser pr. børs, var de strategier, der døde, ikke de dårlige idéer — det var gode idéer, der handlede for ofte. Løsningen var som regel en længere tidsramme, ikke et bedre signal. Vi opgiver nu alt, hvis gennemsnitlige afkast pr. handel er under 0,15% af notionalen, for efter omkostninger begge veje er der intet tilbage at forrente.
Funding er en positionsskat med hukommelse
Evige futures betaler funding hver time eller hver ottende time, og det er ikke støj: det er strukturelt korreleret med præcis de handler, momentum-systemer gerne vil tage. Når alle er long, er funding positiv, og din long momentum-position betaler den. En backtest uden funding-tilskrivning smigrer systematisk trendfølgning på perps. Vi lærte det på den pinlige måde — en hel familie af funding-carry-strategier blev automatisk opgivet, fordi motoren ikke krediterede den funding, de var designet til at høste. Signalet fejlede ingenting. Regnskabet manglede.
Impact skalerer med kvadratroden af din størrelse
Den høflige fiktion i bar-baseret backtesting er, at du fylder til close. For små ordrer passer det nogenlunde. For alt af betydning er den accepterede model, at impact vokser med kvadratroden af ordrestørrelsen i forhold til volumen — og den kommer aldrig tilbage. Vi folder et kvadratrods-impactestimat ind i hver eneste fill og i selve egenkapitalkurven. Det betyder allermest præcis dér, hvor det er mest ubelejligt: kapacitet. En strategi kan være reelt profitabel ved $50k og strukturelt urentabel ved $5M, og kun en impact-bevidst kurve viser grænsen.
Look-ahead gemmer sig i dataene, ikke i koden
Ingen skriver if tomorrow_close > today_close: buy(). Look-ahead sniger sig ind gennem datarørene: nyhedssentiment stemplet med udgivelsestidspunkt i stedet for indlæsningstidspunkt, funding-rater sammenkædet med den periode, de dækker, i stedet for hvornår de var kendt, "aktuelle" symboluniverser lagt ned over historikken (survivorship), reviderede økonomiske nøgletal, der erstatter det tal, som faktisk ramte skærmen. Vores regel er point-in-time overalt: hver supplerende serie tidsstemples efter, hvornår vi kunne have vidst det, og en backtest kan kun læse det, der eksisterede i det pågældende nanosekund.
Prøven på en backtest er ikke, om kurven peger opad. Det er, om den samme kode, fodret med de samme signaler live, producerer de samme handler — og det finder du kun ud af ved at tjekke det, dagligt, for altid.
Den sidste sætning er en reel proces, ikke et slogan. Hver dag afspiller vi hver papirhandlet strategis vindue gennem backtest-motoren og sammenligner handlerne én for én. Når papirhandel og replay er uenige, lyver den ene af dem, og det er som regel en omkostning eller et tidsstempel. De fire poster ovenfor er blot dem, der løj for os først.
← Alle indlæg