Vi hade en 1-minuters BTC-momentumstrategi som såg ärlig ut på Binance. Taker-avgifter, funding, en kvadratrotsbaserad impaktterm som vi redan hade gjort lite för elak. Walk-forward som vi inte skämdes för. Papperskontot bodde på Bybit, för det var där nycklarna fanns. Jag sa till mig själv att BTC är BTC. På fredagen hade jag en strategi som hade handlat ett lead-lag vi inte kunde fylla, och en Sharpe som tillhörde en börs vi inte hade konto på.
Måndag: ett rent Binance-backtest
Agenten hade spottat ur sig något nästan tråkigt: 15-barsavkastning mot ett långsamt medelvärde, long eller short på nästa bars öppning, platta ut på en stop eller efter tolv minuter. Vi tvingade in den på Binance USD-M BTCUSDT, 2023 till början av 2026, och vägrade titta på något brutto före kostnader.
Efter 4.0 bps taker, timvis funding och impakt satt walk-forward-Sharpe på 1.6. Genomsnittlig nettoedge per fill var 3.4 bps. Antalet affärer var tillräckligt högt för att jag skulle sluta pilla på bootstrappen. Latenspåslaget vi redan lägger till för vår egen stack (signal till order, 40 millisekunder på en bra dag) rörde den knappt. Jag minns att jag var svagt irriterad över att den inte var skörare.
Tisdag: papperskontot börjar "slira"
Pappershandeln gick live 09:12 UTC. Samma kod, samma parametrar, samma "nästa öppning"-regel, riktad mot Bybits linear BTCUSDT. Första eftermiddagen såg ut som en svit av otur. Vi fylldes 2–8 bps sämre än Binance-replayn av samma minuter, alltid i affärens riktning. Blottern sa slippage. Jag trodde på blottern tills missarna klustrade på de minuter där Binance redan hade börjat springa.
Över natten mean-reverterade inte gapet på det sätt en brusig fill-modell mean-reverterar. Det låg kvar. Ett köp på Bybit printades till ett pris Binance hade visat en takt tidigare, sedan kom Bybit, sedan betalade vi det. Och minuterna strategin ville ha var minuterna de två taperna var oense. På lugna minuter låg close-priserna ovanpå varandra och strategin brydde sig inte. Den selekterade på divergens och kallade det alfa.
Onsdag: två tapes, en klocka
Vi drog båda last-trade-flödena, justerade mot börsernas tidsstämplar och ställde en fräck fråga: när BTC rörde sig minst två ticks, vilken handelsplats printade först? Under lugna timmar ledde Binance Bybit på ungefär två tredjedelar av de skurarna, median lead runt 40 millisekunder, vilket ryms i många "vi la till latens"-samtal och ligger utanför en 1-minuters bar. Under tisdagens CPI-print sträckte sig leaden in i hundratals millisekunder, och i några fula sekunder låg de två last prices $80 isär. Jag satt där med båda ladders uppe och tittade på hur Bybit jagade en film Binance redan hade visat.
Det var veckans smak, och den finns inte i Sharpen. Du kan veta, intellektuellt, att krypto-last prices är handelsplatslokala. Det är något annat att se samma coin i två fönster och inse att den ena lever i det förflutna.
Sedan körde vi testet jag borde ha krävt på måndagen. Behåll Binance-signalen. Fyll på Bybits nästa öppning. Det är papperskontots faktiska informationsmängd om du kikar på den likvida tapen och handlar någon annanstans, och det är också en form av lookahead du aldrig får i size: du använder ett pris som exekveringsplatsen inte har printat. Edgen gick till 0.6 bps. Vänd på det (Bybit-signal, Binance-fill) och du präglar en fantasi. Binance på samma handelsplats stannade på 3.4. "Strategin" var mest att sitta på den snabbare boken.
1-minuters close-gapet på minuterna vi handlade hade en median på 4.1 bps. Ovillkorligt, över alla minuter, var det ungefär 1.5. Självklart. Signalen avfyras när någon redan har börjat röra sig. Vi hade mätt edgen på det selekterade urvalet, vilket är precis där oenigheten mellan handelsplatserna bor.
Jag brukade tänka att den värsta handelsplatsbuggen var symbolmappning, BTCUSDT mot BTC-PERP, en join som tyst duplicerar en position. Det är bokföring. Det här var att titta på två böcker under CPI och märka att jag hade researchat en marknad jag inte handlar.
Torsdag: funding, marks och avgifter var inte samma marknad heller
När du väl medger att last prices är olika måste du medge att resten av marknadsdatakontraktet också är det. Vi hade kopierat Binances avgiftsschema in i ett Bybit-papperskonto och sedan undrat varför kostnadsraden drev.
| Indata | Binance-backtest | Bybit-paper, den veckan |
|---|---|---|
| Senaste pris | Binance USD-M | Bybit linear |
| Taker-avgift | 4.0 bps | 5.5 bps |
| Fundingintervall | timvis | 00 / 08 / 16 UTC |
| Mark / index | Binance-korg | Bybit-korg |
| Min. kvantitet / tick | 0.001 / 0.10 | 0.001 / 0.10 |
| Likvidationsmatematik | träffades aldrig, BTC | annan mark, fortfarande aldrig träffad |
Tick och lot råkade stämma på BTC. Jag skulle inte generalisera det. På SOL-boken vi kikade på under torsdagskvällen skilde sig både tick size och min notional, och close-gapet på handelsminuter var 11 bps. Funding var det långsammare läckaget. Binance betalade timvis. Bybit låg fortfarande på åttatimmars-klockan för den linear. En position som hölls över 01:00 UTC fick en Binance-avgift i research-ledgern och tystnad i pappershandeln, sedan en klump 08:00 som backtestet redan hade sipprat ut. Carryn stämde över en vecka och var oense över en eftermiddag, vilket är precis den horisont den här strategin levde på.
Avgifterna var nästan tråkiga, och de åt ändå 1.5 bps av en 3.4 bps-historia. Folk behandlar 4.0 mot 5.5 som en fotnot för att det ser litet ut bredvid en 2% daglig rörelse. Det är inte litet bredvid en 3.4 bps-edge. Det visste vi redan. Vi hade bara tillämpat kunskapen på den felaktiga handelsplatsens schema.
Fredag: en Bybit-native omkörning
Bygg om hela grejen på Bybit OHLCV, Bybit funding-stämplar, Bybit 5.5 bps. Samma kodväg, samma walk-forward-snitt, samma impaktfunktion. Sharpe 0.4. Genomsnittlig nettoedge 0.9 bps, vilket ligger i bruset hos en 1-minuters taker-strategi när du slutar skänka den Binances first look.
Det var en annan marknad, inte en brusigare. Pappershandeln hade inte underkänt backtestet för att pappershandel är "mer realistiskt" i abstrakt mening. Pappershandeln hade exekverat i en bok researchen aldrig såg. 1.6 var internt konsistent. 1.6 var konsistent om fel börs.
Vi lämnade Binance-versionen i arkivet med en notis på rapporten: pappershandla inte det här kontot mot den här tapen. Bybit-versionen är den som får fortsätta köra, på ett tal ingen skulle skriva en tråd om. Det är det korrekta utfallet. Jag saknar fortfarande 1.6 lite grann, vilket är hur man vet att den gjorde arbete den inte hade förtjänat.
Vad vi skulle hoppa över nästa gång
Genvägen var sociologisk. Binance är tapen varje vendor, varje research-notebook, varje agent-default vill räcka över till dig. Kontot ligger där du faktiskt kunde öppna det. De två fakta känns som en operationsdetalj. De är backtestet.
- Välj exekveringsplatsen först. Bygg research-tapen från den platsens last prices, funding-stämplar, marks, ticks och avgiftsnivå. Om vendorens default är Binance är det inte en default. Det är en annan strategi.
- Om du inte kan få historik för handelsplatsen du ska pappershandla på, ersätt inte med en ledande tape och kalla gapet slippage. Antingen vänta, eller behandla den främmande tapen som en fördröjd signal och lagga den tills den kunde ha setts i exekveringsboken.
- När du jämför pappershandel med backtest, dela upp driften: last-price-gap på handelsminuter, avgiftsrad, funding-tidsstämplar, mark som används för stops. Tisdagens blotter blandade alla fyra och märkte dem som slippage.
- Kör det korsade testet med avsikt. Signal på A, fill på B. Om hela edgen bor där har du inte en strategi. Du har ett lead-lag du inte kommer att fyllas på i size.
Skulle jag fortfarande kika på Binance när jag handlar Bybit? Som en diskretionär sanity check, visst. För en fill, nej. Papperskontot har redan visat oss vad den tittningen är värd. Den är värd de 4.1 bps det andra rummet printade först, och dem får vi inte.
← Alla inlägg


