22 september 2026 · futures

Je doorlopende futuresgrafiek toont een contract waarin niemand kon handelen

Je doorlopende futuresgrafiek toont een contract waarin niemand kon handelen

Een doorlopende futuresreeks voegt opeenvolgende aflopende contracten samen tot één historie. Je kunt die historie gebruiken om signalen te onderzoeken, maar als je de handels-P&L rechtstreeks berekent op basis van de prijsveranderingen, kunnen er bij elke roll winsten en verliezen ontstaan die er niet waren. De reeks vertelt niet welk contract je in bezit had.

Neem een bijzonder meedogenloos voorbeeld: NYMEX WTI-ruwe olie op 20 april 2020. Het mei-contract sloot op min $37.63 per vat. Juni sloot op plus $20.43. Beide prijzen waren echt. Ook het verschil van $58.06 was echt. Maar door in een grafiek van mei naar juni over te schakelen, verdiende een longpositie dat verschil niet.

Laten we die aaneenschakeling uit elkaar halen. Dit zijn historische afrekenprijzen; de hypothetische administratieve voorbeelden hieronder gebruiken ze om de rekenkunde te laten zien, niet om te beweren dat een order tegen die prijzen had kunnen worden uitgevoerd.

CLK20 en CLM20: de identificaties die de grafiek wegliet

VeldMei-contractJuni-contract
ContractidentificatieCLK20CLM20
LeveringsmaandMei 2020Juni 2020
Afrekening op 20 april, dollars per vat−37.6320.43
Contractgrootte1,000 vaten1,000 vaten

De maandcode is belangrijker dan het tickerprefix. K staat voor mei; M voor juni. Deze contracten hadden verschillende leveringsverplichtingen en verschillende prijzen. Mei liep bijna af, terwijl de druk op de opslag uitzonderlijk hoog was. Juni bood nog een maand extra.

Een doorlopend symbool van een dataleverancier verbergt dit onderscheid achter iets aangenaam compacts. Ik houd van compacte symbolen, tot ze de enige identificatie zijn die nog in het transactielog staat. Dan begint debuggen op archeologie te lijken, met slechtere koffie.

Er bestaat ook niet één universele doorlopende historie. Een dataleverancier kan een vast aantal werkdagen voor expiratie doorrollen, bij een omslag in het volume of volgens een ander schema. Veel historische reeksen waren vóór 20 april al uit mei gerold. Ons voorbeeld voegt deze twee afrekenprijzen bewust samen om de fout zichtbaar te maken; het zegt niets over de roll van een specifieke dataleverancier.

1,000 vaten: de multiplier achter elke prijs

Het standaard NYMEX WTI-futurescontract vertegenwoordigt 1,000 vaten. Een beweging van $1 verandert de waarde van een longpositie van één contract dus met $1,000. Een tick van $0.01 is $10.

Voor een ongewijzigde positie in één contract is de basisberekening:

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

Dit werkt ook onder nul. Rendementen in procenten op de genoteerde futuresprijs zijn dan veel minder bruikbaar: als de prijs door nul gaat, kunnen ze ongedefinieerd worden of een omgekeerde betekenis lijken te krijgen. Strategierendementen moeten worden berekend op basis van het eigen vermogen op de rekening en de gehanteerde kasstroomconventie. De genoteerde vatprijs is niet het kapitaal dat voor de strategie is vastgelegd.

$58.06: de discontinuïteit bij de overgang

Stel dat een naïeve engine de afrekening van mei laat volgen door die van juni en de formule toepast alsof het instrument niet is veranderd:

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

In deze vergelijking is er geen tijd verstreken. Dit zijn de prijzen van twee contracten uit dezelfde sessie. De engine ziet een prijsverschil tussen contracten aan voor winst over een aanhoudperiode.

Bij een echte dagelijkse aaneenschakeling bevatten de prijs van gisteren voor het oude contract en die van vandaag voor het nieuwe contract ook gewone marktbewegingen. Daardoor valt de fout minder op. De geregistreerde verandering combineert de beweging van het oude contract met het prijsverschil tussen de contracten op het moment van overschakelen.

En $58,060 aftrekken als vermeende contante “rollkosten” herstelt het model evenmin. Futures koop je niet door de volledige genoteerde nominale waarde te betalen. Het sluiten van het ene contract en openen van het andere brengt positiewijzigingen, gerealiseerde of afgerekende P&L, kosten, uitvoeringseffecten en marginvereisten met zich mee. Het verschil tussen de prijsniveaus is niet automatisch een kasuitgave.

+58.06: de back-adjustment die in de historie wordt geschreven

Bij een veelgebruikte constructie van doorlopende reeksen wordt het rollverschil bij de oudere prijzen opgeteld. Volgens die conventie wordt mei's −37.63 gelijk aan 20.43 en sluit de reeks naadloos aan op juni. Ook eerdere waarnemingen in hetzelfde historische segment stijgen met 58.06.

ConstructieWat er bij deze overgang gebeurtGevolg voor onderzoek
OnaangepastHet verschil van $58.06 blijft staanIndicatoren kunnen de contractwissel aanzien voor een marktbeweging
Additieve back-adjustmentTel 58.06 op bij het oudere segmentVeranderingen in dollars binnen het segment blijven behouden; historische niveaus en procentuele veranderingen verschuiven
Ratio-back-adjustmentVermenigvuldig het oudere segment met 20.43 / −37.63, ongeveer −0.543De negatieve factor keert het teken van prijsveranderingen binnen het segment om

Die laatste rij is de reden dat ik “ratio-adjusted” niet accepteer als volledige dataspecificatie. Een methode die zich redelijk gedraagt bij uitsluitend positieve prijzen heeft een expliciet beleid nodig voor prijzen rond en onder nul.

Additieve aanpassing heeft ook gevolgen. Een signaal dat koopt onder een absolute drempel van $30 kan veranderen wanneer latere rolls eerdere niveaus herschrijven. Een signaal op basis van het verschil tussen een snel en langzaam voortschrijdend gemiddelde kan onveranderd blijven bij een gelijke additieve verschuiving, mits beide perioden dezelfde verschuiving krijgen. Perioden die een grens van de aanpassing overschrijden, moet je afzonderlijk onderzoeken.

Bewaar de aanpassingsmethode, het rollschema en de dataversie bij het onderzoeksresultaat. Reconstrueer voor signalen die gevoelig zijn voor aangepaste niveaus de historie die op elke beslisdatum beschikbaar was. Een huidige download kan aanpassingen bevatten van rolls die toen nog niet hadden plaatsgevonden.

De twee orderregels die ontbreken in de doorlopende grafiek

Hier is een bewust vereenvoudigd grootboek. Stel dat één mei-contract vóór de roll op −30.00 stond. Stel dat de mei-positie wordt gesloten en de juni-positie wordt geopend tegen de historische afrekenprijzen hierboven, waarna juni op 21.00 wordt gewaardeerd. Die veronderstelde uitvoeringsprijzen dienen ter illustratie van de administratie.

BoekingsregelBerekeningBruto-P&L
Sluit één longpositie in mei op −37.631,000 × (−37.63 − (−30.00))−$7,630
Open één longpositie in juni op 20.43Geen prijsbeweging bij opening$0
Waardeer juni op 21.001,000 × (21.00 − 20.43)+$570
TotaalVóór uitvoeringskosten en commissies−$7,060

Het verschil van $58.06 verschijnt nergens als afzonderlijke opbrengst of kostenpost. De dagelijkse variation margin bepaalt wanneer P&L uit futures in contanten wordt verrekend; die maakt geen tweede kopie van die P&L aan.

Een echte roll kan worden uitgevoerd met een calendar-spreadorder in plaats van twee losse orders. De simulator moet het mechanisme modelleren waarvan hij uitgaat, inclusief uitvoeringen en kosten, en tegelijk de afzonderlijke contractposities blijven bijhouden.

Mijn acceptatiecriterium is eenvoudig: elke dollar aan handels-P&L uit futures moet te herleiden zijn tot een benoemd contract, een hoeveelheid, een multiplier en twee prijzen van datzelfde contract. Ik wil ook het tijdstip van de rollbeslissing en de gebruikte invoer zien. Een volumeregel die het voltooide sessievolume van vandaag gebruikt, kan niet ongemerkt eerder in diezelfde sessie handelen.

Toon de doorlopende lijn voor context. Zet daaronder de contracten die daadwerkelijk in bezit waren en markeer elke overgang. Als de equitycurve bij een overgang verspringt, zijn die twee orderregels de eerste plek waar ik kijk.

doorlopende futuresbacktestenfuturesrollenmarktdatapnl-administratie
← Alle artikelen