22 september 2026 · terminer

Ditt kontinuerliga terminsdiagram visar ett kontrakt som ingen kunde handla

Ditt kontinuerliga terminsdiagram visar ett kontrakt som ingen kunde handla

En kontinuerlig terminsserie fogar samman kontrakt som löper ut efter varandra till en enda historik. Du kan använda den historiken för att undersöka signaler, men om du beräknar handelns P&L direkt från prisförändringarna kan du skapa vinster och förluster vid varje rullning. Serien berättar inte vilket kontrakt du ägde.

Ta ett särskilt skoningslöst exempel: NYMEX WTI-råolja den 20 april 2020. Majkontraktet avräknades till minus $37.63 per fat. Juni avräknades till plus $20.43. Båda priserna var verkliga. Skillnaden på $58.06 var också verklig. Men att byta diagram från maj till juni gav inte en lång position den skillnaden.

Låt oss plocka isär den skarven. Det här är historiska avräkningspriser; de hypotetiska bokföringsexemplen nedan använder dem för att visa beräkningen, inte för att påstå att en order hade kunnat gå till avslut där.

CLK20 och CLM20: beteckningarna som diagrammet utelämnade

FältMajkontraktJuniavtal
KontraktsbeteckningCLK20CLM20
LeveransmånadMaj 2020Juni 2020
Avräkningspris den 20 april, dollar per fat−37.6320.43
Kontraktsstorlek1,000 fat1,000 fat

Månadskoden är viktigare än tickerns prefix. K betyder maj; M betyder juni. Kontrakten hade olika leveransåtaganden och olika priser. Maj närmade sig förfall under ett exceptionellt hårt tryck på lagringsutrymmet. Juni gav ytterligare en månad.

En dataleverantörs kontinuerliga symbol döljer skillnaden bakom något behagligt kompakt. Jag gillar kompakta symboler ända tills de är den enda identifierare som finns kvar i handelsloggen. Då börjar felsökningen likna arkeologi, fast med sämre kaffe.

Det finns inte heller någon universell kontinuerlig historik. En leverantör kan rulla ett fast antal arbetsdagar före förfall, vid en volymkorsning eller enligt ett annat schema. Många historiker hade redan lämnat majkontraktet bakom sig före den 20 april. Vårt exempel skarvar medvetet ihop avräkningspriserna för de här två kontrakten för att göra felet synligt; det är inget påstående om någon särskild leverantörs rullning.

1,000 fat: multiplikatorn bakom varje pris

Ett standardkontrakt för NYMEX WTI-terminermotsvarar 1,000 fat. En rörelse på $1 ändrar därför värdet på en lång position i ett kontrakt med $1,000. Ett tick på $0.01 är värt $10.

För en oförändrad position i ett kontrakt är grundberäkningen:

gross_pnl = contracts × 1,000 × (ending_price − starting_price)

Det här fungerar fortfarande under noll. Procentuell avkastning på det noterade terminspriset blir däremot betydligt mindre användbar: ett pris som passerar noll kan göra avkastningen odefinierad eller vända dess skenbara innebörd. Strategiavkastningen bör beräknas utifrån kontots eget kapital och dess konvention för kassaflöden. Det noterade fatpriset är inte det kapital som strategin binder.

$58.06: språnget vid skarven

Anta att en naiv motor ser majs avräkningspris följt av junis avräkningspris och tillämpar formeln som om instrumentet inte hade bytts:

invented_pnl = 1 × 1,000 × (20.43 − (−37.63))
             = $58,060

Inget rörde sig genom tiden i den här jämförelsen. Det här är priserna på två kontrakt från samma handelssession. Motorn har misstagit en prisskillnad mellan kontrakt för en vinst under innehavsperioden.

I en faktisk daglig skarv innehåller gårdagens pris på det gamla kontraktet och dagens pris på det nya också vanliga marknadsrörelser. Då blir misstaget svårare att upptäcka. Den bokförda förändringen blandar ihop det gamla kontraktets rörelse med prisskillnaden mellan kontrakten vid bytet.

Och att dra av $58,060 som en påstådd kontant ”rullningskostnad” rättar inte heller modellen. Terminer köps inte genom att man betalar hela deras noterade nominella värde. Att stänga ett kontrakt och öppna ett annat leder till positionsförändringar, realiserad eller avräknad P&L, avgifter, exekveringseffekter och marginkrav. Prisskillnaden mellan kontraktsnivåerna är inte automatiskt en kontant debitering.

+58.06: bakåtjusteringen som skrivs in i historiken

En vanlig metod för att skapa en kontinuerlig serie är att lägga till rullningsgapet på äldre priser. Med den metoden blir majs −37.63 till 20.43 och möter juni utan ett språng. Även tidigare observationer i samma historiska segment flyttas upp med 58.06.

KonstruktionVad händer vid den här skarvenKonsekvens för analysen
OjusteradGapet på $58.06 finns kvarIndikatorer kan tolka kontraktsbytet som en marknadsrörelse
Additiv bakåtjusteringLägg till 58.06 i det äldre segmentetDollarförändringar inom segmentet bevaras; historiska nivåer och procentuella förändringar förskjuts
Kvotbaserad bakåtjusteringMultiplicera det äldre segmentet med 20.43 / −37.63, ungefär −0.543Den negativa faktorn vänder tecknet på prisförändringar inom segmentet

Den sista raden är skälet till att jag inte godtar ”kvotjusterad” som en fullständig databeskrivning. En metod som fungerar rimligt med strikt positiva priser behöver en uttrycklig regel för noll och negativa priser.

Additiv justering får också konsekvenser. En signal som köper under en fast tröskel på $30 kan ändras när senare rullningar skriver om tidigare nivåer. En signal baserad på skillnaden mellan ett snabbt och ett långsamt glidande medelvärde kan vara oförändrad vid en gemensam additiv förskjutning, förutsatt att båda fönstren får samma förskjutning. Fönster som korsar en justeringsgräns behöver undersökas separat.

Spara justeringsmetod, rullningsschema och dataversion tillsammans med analysresultatet. För signaler som påverkas av justerade nivåer ska du återskapa den historik som fanns tillgänglig vid varje beslutstidpunkt. En aktuell nedladdning kan innehålla justeringar från rullningar som ännu inte hade skett.

De två orderraderna som saknas i det kontinuerliga diagrammet

Här är en avsiktligt förenklad bokföring. Anta att ett majkontrakt värderades till −30.00 före rullningen. Anta att majkontraktet stängs och junikontraktet öppnas till avräkningspriserna ovan, och att juni därefter värderas till 21.00. De antagna avsluten är en bokföringsillustration.

BokföringshändelseBeräkningBrutto-P&L
Stäng en lång position i majkontraktet vid −37.631,000 × (−37.63 − (−30.00))−$7,630
Öppna en lång position i juni vid 20.43Ingen prisrörelse vid öppning$0
Värdera juni till 21.001,000 × (21.00 − 20.43)+$570
TotaltFöre exekveringskostnader och avgifter−$7,060

Gapet på $58.06 förekommer inte någonstans som fristående intäkt eller kostnad. Den dagliga variationmarginen avgör när terminernas P&L förs till kontantmedel; den skapar inte ytterligare en kopia av P&L.

En verklig rullning kan utföras med en kalender spreadorder i stället för två separata order. Simuleringen bör återge den mekanism den förutsätter, inklusive avslut och avgifter, samtidigt som de enskilda kontraktspositionerna bevaras i underlaget.

Mitt godkännandekrav är enkelt: varje dollar i terminshandelns P&L måste kunna stämmas av mot ett namngivet kontrakt, en kvantitet, en multiplikator och två priser för just det kontraktet. Jag vill också se tidpunkten för rullningsbeslutet och vilka underlag som användes. En volymbaserad regel som använder dagens färdigställda sessionsvolym får inte i tysthet handla tidigare under samma session.

Visa den kontinuerliga prislinjen som sammanhang. Lägg de kontrakt som faktiskt innehades under den och markera varje övergång. Om aktiekurvan hoppar vid en övergång är de två orderraderna det första jag granskar.

kontinuerliga terminerbacktestningterminsrullningarmarknadsdataP&L-redovisning
← Alla inlägg