Någon på researchsidan frågade mig förra månaden varför våra optionsagenter hela tiden avvisade en fullt rimlig idé med lång gamma. Signalen var bra. Volprognosen var bra. Problemet var två fält i marknadsdataflödet och ett tal som inte finns i flödet alls.
Här är alltså det faktiska objektet vi diskuterade. Deribit-tickersvar för BTC-25SEP26-110000-C, hämtat 11:20 UTC en måndag med arton dagar kvar till förfall. Jag har tagit bort de utfasade fälten och behållit allt som spelar roll.
{
"instrument_name": "BTC-25SEP26-110000-C",
"index_price": 96412.18,
"underlying_price": 96980.44,
"underlying_index": "SYN.BTC-25SEP26",
"estimated_delivery_price": 96412.18,
"mark_price": 0.0041,
"mark_iv": 42.14,
"best_bid_price": 0.0038, "best_bid_amount": 4.9,
"best_ask_price": 0.0045, "best_ask_amount": 12.1,
"bid_iv": 40.42, "ask_iv": 43.94,
"last_price": 0.0043,
"interest_rate": 0.0,
"open_interest": 812.7,
"greeks": {
"delta": 0.0962, "gamma": 0.0000189,
"vega": 36.77, "theta": -42.91, "rho": 4.61
},
"stats": { "volume": 61.2, "high": 0.0051, "low": 0.0036 }
}
instrument_name: fyra fakta, en sträng
BTC-25SEP26-110000-C. Underliggande BTC, förfall 25 september 2026, lösenpris 110,000, call. Vad strängen inte säger, och vad varje nytt optionsbacktest får fel minst en gång, är resten av kontraktsspecifikationen: ett kontrakt motsvarar 1 BTC i underliggande, premien noteras och betalas i BTC, och förfall sker 08:00 UTC, inte 16:00 lokal tid.
Att premien noteras i BTC är den luriga detaljen. Ett markpris på 0.0041 är 0.0041 BTC, ungefär $395 enligt indexet. Om du lagrar den kolumnen som ett pris och senare kopplar den till en USD-denominerad strategipnl har du i tysthet byggt en position vars dollarvärde rör sig med spotpriset även när optionen inte gör det. Jag har sett ett backtest där köpoptionsbenet gick med vinst en dag då BTC föll, enbart för att premiekolumnen tolkades som dollar och analytikern i själva verket hade en kort position i den BTC-denominerade premien i en dollarbaserad redovisning. Det tog två dagar att hitta felet.
index_price jämfört med underlying_price: 568 dollar emellan, och bara det ena är rätt
De skiljer sig åt med $568.26, och det är inget fel. index_price är Deribits BTC-index — spotreferensen, en sammanvägning av stora börser och det som kontraktet i slutänden regleras mot. underlying_price är priset på den syntetiska terminen för just det förfallet, SYN.BTC-25SEP26, härlett från terminsmarknaden för samma datum. Carry på ungefär 12% annualiserat under arton dagar ger dig de där $568.
Alla greker i datan, liksom mark-IV, beräknas utifrån terminspriset. Om du själv räknar fram implicit volatilitet med spot eftersom det var den serien du råkade ha inläst får du ett annat tal för varje lösenpris, och felet har systematiskt en riktning: calls ser billigare ut volmässigt än de är, puts ser dyrare ut. För ett 18-dagarskontrakt med en basis på 0.6% skulle mark-IV vid det här lösenpriset felprissättas med ungefär en och en halv volpunkt. Det är mer än de flesta volfördelar som folk bygger strategier kring.
interest_rate: 0.0 betyder att Deribit diskonterar via terminspriset och inte via en ränta. Leta inte efter en riskfri räntekurva att stoppa in; då dubbelräknar du.
mark_price och mark_iv: ett pris utan motpart
0.0041 BTC. Ingen betalade det priset. Deribit beräknar markpriset från en anpassad volatilitetsyta, förankrad i orderboken men utjämnad över lösenpriser och förfall så att marginalkrav och likvideringar inte hoppar runt när en enskild bred notering rör sig. Markpriset används för din marginal, din orealiserade P&L och visas i varje positionsendpunkt.
Därför är det det mest förföriska fillpriset i research om kryptooptioner, och det mest missvisande. Ett backtest som köper till markpris och säljer till markpris handlar mot en utjämnande spline. Det ger ett Sharpe-tal. Det Sharpe-talet beskriver ytans anpassning och säger ingenting om huruvida du hade kunnat genomföra affären.
Regeln vi till slut kodade in: markpriset används för marginal, risk och avkastningsattribuering från mittpris till mittpris. Det är aldrig ett fillpris. Om backtestet behöver ett fill och det saknas en ögonblicksbild av orderboken för den tidpunkten markeras körningen som oprissatt i stället för att fyllas till markpris. Vi tar hellre bort raden.
best_bid 0.0038 / best_ask 0.0045: spreaden i tre enheter
Sju tick brett räknat i BTC. Det är $67.50 på en option värd $395, eller 17% av premien. Räknat i vol är spreaden 3.5 punkter, 40.4 på bid-sidan mot 43.9 på ask-sidan — det är talet en optionshandlare faktiskt anger om du frågar hur bred spreaden är.
Volymerna är lika viktiga som priserna: 4.9 kontrakt på bid-sidan, 12.1 på ask-sidan. Volymen för Deribit-optioner anges i kontrakt, alltså 4.9 BTC i underliggande, cirka $472k i nominellt värde — men bara 0.47 BTC i delta vid det här lösenpriset. Om strategin behöver meningsfull gamma krävs tiotals kontrakt, och den synliga volymen på bästa köp- och säljkurs räcker bara till en bråkdel. Nästa nivå ligger vanligtvis ytterligare två eller tre tick bort. Ett optionsbacktest med en volymmodell måste antingen gå genom orderboken eller anta RFQ-/blockprissättning, och de två antagandena ger helt olika svar.
last_price: 0.0043 är en affär som ägde rum någon gång under de senaste 24 timmarna, kanske för nitton timmar sedan när spotpriset låg på en helt annan nivå. Den är inaktuell redan från början på ett instrument som omsätts 61 kontrakt om dagen. Bygg ingen avkastningsserie utifrån den.
greker: fem tal, fyra enhetskonventioner
Det här blocket orsakar mer tyst skada än resten av datan tillsammans, eftersom varje värde är dimensionsmässigt korrekt men inget av dem anges i de enheter du skulle gissa på.
| Fält | Värde | Enheter | Vanlig feltolkning |
|---|---|---|---|
| delta | 0.0962 | BTC i underliggande per kontrakt | Behandlas som dollar-delta |
| gamma | 0.0000189 | Δdelta per $1 i underliggande | Antas gälla per 1% rörelse |
| vega | 36.77 | USD per 1 volpunkt | Antas gälla per 100% vol, eller anges i BTC |
| theta | -42.91 | USD per kalenderdag | Antas gälla per handelsdag |
| rho | 4.61 | USD per 1% ränta | Ignoreras, vilket är korrekt |
Delta anges i mynt, vega och theta i dollar, och gamma per dollars rörelse i spotpriset. Att blanda ett BTC-denominerat delta med ett dollardenominerat riskmått är så man får en bok som ser delta-neutral ut men visar sig ha en lång position på 40 BTC. Och theta per kalenderdag är det som slår mot helgstrategier: från fredagsstängning till måndagsöppning förfaller tre dagars tidsvärde, cirka $129 per kontrakt här, trots att inga handelssessioner äger rum. Om backtestet stegar fram bar för bar och tillämpar theta per steg försvinner helgerna, och alla strategier som säljer premie blir i tysthet sämre än de egentligen är.
open_interest 812.7, volume 61.2: var kedjan faktiskt finns
Åttahundra kontrakt i open interest på ett lösenpris där sextioen handlades i går. Det är ett aktivt lösenpris — 110,000 är ett jämnt tal tre veckor fram, precis där flödet koncentreras. Gå två lösenpriser längre ut till 120,000 så faller open interest med en storleksordning. Gå till ett ojämnt lösenpris vid ett förfall som inte är månadsvis och du hittar instrument med en bid, en ask fyrtio procent därifrån och inga affärer på en vecka.
Ett backtest över hela optionskedjan som går igenom alla noterade instrument fyller glatt order i varenda ett. Vi införde till slut ett gemensamt urvalsvillkor: noterad spread under 20% av markpriset, minst 1 kontrakt på vardera sidan och volym större än noll under de senaste 24 timmarna. En typisk dag klarar ungefär en tredjedel av den noterade BTC-kedjan det villkoret. Det är bland de övriga två tredjedelarna den falska alfavkastningen finns.
Fältet som saknas i datan
Inget i det här objektet talar om vad en affär kostar. Deribit tar 0.0003 BTC per optionskontrakt, för både maker och taker — 0.03% av det underliggande, inte av premien — med ett tak på 12.5% av optionens pris. För det här kontraktet blir det $28.92 per sida utan tak, eftersom 12.5% av 0.0041 är 0.000513 och den fasta avgiften är lägre.
Avgift på nominellt värde och premie som beror på vol innebär att kostnaden som andel av det du betalat skjuter i höjden ju längre ut ur pengarna du går.
Köp på ask till 0.0045 ($434), sälj på bid till 0.0038 ($366) och betala avgiften två gånger: $125.80 för en tur och retur på ett kontrakt med ett markpris på $395. Din marknadstro måste vara värd 31% av premien för att du ska gå jämnt upp. Det är hela anledningen till att idén med lång gamma avvisades, och det hade inget med signalen att göra.
Det blir ännu intressantare om man frågar vad delta kostar, eftersom avgifterna skalar med antalet kontrakt och antalet kontrakt skalar omvänt mot delta. Om vi håller mark-IV konstant på 42.1% över alla lösenpriser i beräkningen (en verklig kedja har skevhet, och i krypto handlas köpoptionsvingen vanligtvis över ATM, vilket gör den här tabellen optimistisk):
| Instrument | Markpris (BTC) | Delta | Kontrakt per 1 BTC delta | Avgift per sida | Kostnad per BTC delta |
|---|---|---|---|---|---|
| 97000-C (ATM) | 0.0373 | 0.518 | 1.93 | $28.92 | $55.80 |
| 110000-C | 0.0041 | 0.096 | 10.4 | $28.92 | $301 |
| 120000-C | 0.0004 | 0.013 | 79.4 | $4.82 (med tak) | $383 |
| BTC perpetual | — | 1.0 | 1.0 | $48.21 | $48.21 |
Taket på 12.5% gör faktiskt skillnad på den nedersta vingen; utan det skulle den djupa vingen kosta $2,300 per BTC delta och lottsedelsstrategier vara matematiskt omöjliga i stället för bara dåliga. Även med taket kostar det ungefär åtta gånger så mycket att köpa exponering via lösenpriset 120,000 som via den eviga terminen. Optioner är inget billigt sätt att uttrycka en riktningssyn, och varje backtest som säger något annat har utelämnat den här tabellen.
08:00 UTC, 25 september
Det sista tickern inte berättar är hur positionen avslutas. Deribit reglerar optioner mot ett 30-minutersgenomsnitt av indexet fram till 08:00 UTC på förfallodagen och tar en leveransavgift på 0.00015 BTC för kontrakt som är in the money, också med ett tak på 12.5% av regleringsvärdet.
Det får två konsekvenser för ett backtest. För det första är det här genomsnittsintervallet en faktisk faktor som du kan räkna fel på: en option som är $300 in the money 07:59 kan regleras värdelös om den sista halvtimmen var stökig, och ett backtest som reglerar mot noteringen 08:00 kommer att skilja sig från ditt papperskonto med några baspunkter vid de flesta förfall och mycket vid några få. För det andra tillkommer leveransavgiften oavsett om du ville ha regleringen eller inte, så en strategi som håller till förfall betalar tre avgifter per cykel och en strategi som stänger 07:30 betalar två avgifter plus spreaden. Vilket som är billigare beror på lösenpriset, och det skiftar någonstans kring en premie på 0.0012 BTC. Vi räknar ut det per position i stället för att välja en fast regel.
Versionen av det här inlägget som jag ville skriva handlade om volprognoser. I stället ägnade jag en vecka åt enheter och avgiftstak, vilket är ungefär rätt förhållande mellan glamour och verklighet i optionsresearch.
Tjugo fält. Två priser som skiljer sig åt avsiktligt, ett pris som aldrig handlats, greker i fyra enhetssystem och en kostnadsmodell som helt och hållet finns utanför datan, på en dokumentsida. Om du håller på att bygga ett optionsbacktest bör du ägna första dagen åt att skriva en enda funktion som omvandlar ett sådant här objekt till en position med fullständiga kostnader och rätt enheter — spread, avgift, tak, leverans, BTC eller dollar. Varje strategi du skriver sedan ärver vad den funktionen utgår ifrån.
← Alla inlägg

