22. september 2026 · futures

Kontinuerlig futuresgraf viser en kontrakt ingen kunne handle

Kontinuerlig futuresgraf viser en kontrakt ingen kunne handle

En kontinuerlig futureserie kobler sammen kontrakter som utløper etter hverandre, til én historikk. Du kan bruke historikken til å undersøke signaler, men hvis du beregner trading-P&L direkte fra prisendringene, kan du skape gevinster og tap ved hver rullering. Serien forteller deg ikke hvilken kontrakt du eide.

Se på et særlig nådeløst eksempel: NYMEX WTI-råolje 20. april 2020. Mai-kontrakten ble gjort opp til minus $37.63 per fat. Juni-kontrakten ble gjort opp til pluss $20.43. Begge prisene var reelle. Det samme var forskjellen på $58.06 mellom dem. Men det ga ikke en long-posisjon den forskjellen å bytte graf fra mai til juni.

La oss se nærmere på denne skjøten. Dette er historiske oppgjørspriser. Regnskapseksemplene nedenfor er hypotetiske og bruker prisene for å vise regnestykket, ikke for å hevde at en ordre kunne blitt fylt til disse prisene.

CLK20 og CLM20: identifikatorene grafen utelot

FeltMai-kontraktJuni-kontrakt
KontraktidentifikatorCLK20CLM20
LeveringsmånedMai 2020Juni 2020
Oppgjørspris 20. april, dollar per fat−37.6320.43
Kontraktsstørrelse1,000 fat1,000 fat

Månedskoden er viktigere enn tickerprefikset. K betyr mai, M betyr juni. Disse kontraktene hadde ulike leveringsforpliktelser og ulike priser. Mai nærmet seg utløp mens lagringskapasiteten var under et ekstraordinært press. Juni ga én måned til.

En leverandørs kontinuerlige symbol skjuler dette skillet bak noe behagelig kompakt. Jeg liker kompakte symboler helt til de er den eneste identifikatoren som finnes igjen i handelsloggen. Da begynner feilsøkingen å ligne arkeologi, bare med dårligere kaffe.

Det finnes heller ingen universell kontinuerlig historikk. En leverandør kan rullere et fast antall virkedager før utløp, når volumet krysser over, eller etter en annen tidsplan. Mange historikker hadde allerede gått ut av mai før 20. april. Eksempelet vårt skjøter med hensikt sammen disse to oppgjørsprisene for å synliggjøre feilen; det sier ikke noe om rulleringen hos en bestemt leverandør.

1,000 fat: multiplikatoren bak hver pris

Standardkontrakten for NYMEX WTI-futures representerer 1,000 fat. En bevegelse på $1 endrer derfor verdien av en long-posisjon i 1 kontrakt med $1,000. Et tick på $0.01 er $10.

For en uendret posisjon i 1 kontrakt er grunnberegningen:

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

Dette fungerer også når prisen er under null. Prosentavkastning på den oppgitte futuresprisen blir langt mindre nyttig: Når prisen krysser null, kan avkastningen bli udefinert eller få motsatt tilsynelatende betydning. Strategiavkastning bør beregnes ut fra kontoens egenkapital og konvensjonen for kontantstrømmer. Den oppgitte prisen per fat er ikke kapitalen som er bundet i strategien.

$58.06: spranget i skjøten

Anta at en naiv motor ser oppgjørsprisen for mai etterfulgt av oppgjørsprisen for juni og bruker formelen som om instrumentet ikke hadde endret seg:

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

Ingenting har beveget seg over tid i denne sammenligningen. Dette er prisene på 2 kontrakter fra samme handelsøkt. Motoren har forvekslet prisforskjellen mellom kontraktene med gevinst i eierperioden.

I en faktisk daglig skjøt inneholder gårsdagens pris på den gamle kontrakten og dagens pris på den nye kontrakten også vanlige markedsbevegelser. Da blir feilen vanskeligere å oppdage. Den registrerte endringen kombinerer bevegelsen i den gamle kontrakten med prisforskjellen mellom kontraktene idet byttet skjer.

Det retter heller ikke modellen å trekke fra $58,060 som en angivelig kontant «rulleringskostnad». Futures kjøpes ikke ved å betale hele den oppgitte nominelle verdien. Når du stenger 1 kontrakt og åpner en annen, endres posisjonene, realisert eller gjort opp P&L bokføres, og du får gebyrer, gjennomføringseffekter og marginkrav. Prisforskjellen mellom kontraktene er ikke automatisk et kontanttrekk.

+58.06: backjusteringen skrevet inn i historikken

En vanlig måte å lage en kontinuerlig serie på er å legge rulleringsgapet til tidligere priser. Med denne metoden blir mai-prisen på −37.63 til 20.43, slik at den møter juni uten et sprang. Tidligere observasjoner i samme historikksegment økes også med 58.06.

KonstruksjonHva skjer i denne skjøtenKonsekvens for analyse
UjustertGapet på $58.06 blir ståendeIndikatorer kan tolke kontraktbyttet som en markedsbevegelse
Additiv backjusteringLegg 58.06 til det eldre segmentetEndringer i dollar innenfor segmentet består; historiske nivåer og prosentendringer forskyves
Forholdstallsbasert backjusteringMultipliser det eldre segmentet med 20.43 / −37.63, omtrent −0.543Den negative faktoren snur fortegnet på prisendringer innenfor segmentet

Den siste raden er grunnen til at jeg ikke godtar «justert etter forholdstall» som en fullstendig dataspesifikasjon. En metode som fungerer for priser som alltid er positive, trenger en uttrykkelig regel for nullpriser og negative priser.

Additiv justering har også konsekvenser. Et signal som kjøper under en absolutt grense på $30, kan endres når senere rulleringer omskriver tidligere nivåer. Et signal basert på et raskt minus et langsomt glidende gjennomsnitt kan være uendret av en felles additiv forskyvning, forutsatt at begge vinduene får samme forskyvning. Vinduer som krysser en justeringsgrense, må undersøkes separat.

Ta vare på justeringsmetode, rulleringsplan og dataversjon sammen med analyseresultatet. For signaler som er følsomme for justerte nivåer, rekonstruer historikken slik den var tilgjengelig på hver beslutningsdato. En nedlasting du gjør i dag, kan inneholde justeringer fra rulleringer som ennå ikke hadde skjedd.

De 2 ordrene som mangler i den kontinuerlige grafen

Her er en bevisst forenklet hovedbok. Anta at 1 mai-kontrakt ble verdsatt til −30.00 før rulleringen. Anta at salget av mai-kontrakten og kjøpet av juni-kontrakten skjer til de historiske oppgjørsprisene ovenfor, og at juni deretter verdsettes til 21.00. Disse antatte fyllingene illustrerer regnskapsføringen.

Hendelse i hovedbokenBeregningBrutto P&L
Steng 1 long-kontrakt for mai til −37.631,000 × (−37.63 − (−30.00))−$7,630
Åpne 1 long-kontrakt for juni til 20.43Ingen prisbevegelse ved inngang$0
Verdsett juni til 21.001,000 × (21.00 − 20.43)+$570
TotaltFør gjennomføringskostnader og gebyrer−$7,060

Gapet på $58.06 føres ikke noe sted som en egen inntekt eller utgift. Daglig variasjonsmargin avgjør når futures-P&L overføres til kontanter; den skaper ikke en ekstra kopi av P&L-en.

En faktisk rullering kan gjennomføres som en kalenderspreadordre i stedet for som 2 separate ordre. Simulatoren bør modellere mekanismen den legger til grunn, med fyllinger og kostnader, samtidig som de individuelle kontraktsposisjonene bevares i bunn.

Kontrollen jeg bruker, er enkel: Hver dollar av trading-P&L fra futures må kunne avstemmes mot en navngitt kontrakt, en mengde, en multiplikator og 2 priser som gjelder den kontrakten. Jeg vil også ha tidspunktet for rulleringsbeslutningen og hvilke data den bygger på. En volumbasert regel som bruker dagens fullførte handelsvolum, kan ikke i det skjulte handle tidligere i samme handelsøkt.

Plott den kontinuerlige linjen som kontekst. Plott kontraktene du faktisk holdt under den, og marker hvert bytte. Hvis egenkapitalkurven hopper ved et bytte, er de 2 ordrelinjene det første jeg undersøker.

kontinuerlige futuresbacktestingfuturesrullermarkedsdataP&L-regnskap
← Alle innlegg