CUSUM-filter: eventsampling in financiële markten
Leer hoe het symmetrische CUSUM-filter log-rendementen omzet in tijdstippen van gebeurtenissen, hoe vaste en dynamische drempels werken en hoe je look-ahead voorkomt.
In deze gidsWelke vraag beantwoordt het CUSUM-filter?
Korte samenvatting
Het CUSUM-filter legt een tijdstip vast zodra opeenvolgende log-rendementen in dezelfde richting samen een drempel overschrijden. Dat levert gebeurtenistijdstippen op waarmee je een steekproef opbouwt, geen voorspelling van de koersrichting, uitkomstlabel of garantie dat de markt stationair is.
Welke vraag beantwoordt het CUSUM-filter?
Als een model voor elke handelssessie één rij krijgt, kunnen perioden zonder betekenisvolle verandering het grootste deel van de steekproef vormen. Het CUSUM-filter kiest volgens een vaste regel de momenten waarop bewegingen in dezelfde richting voldoende zijn opgeteld. Elk rendement wordt nog steeds bekeken; alleen bars die aan de trigger voldoen, worden als gebeurtenis vastgelegd. ‘Filter’ betekent hier tijdstippen selecteren, niet een koop- of verkoopsignaal geven.
Het idee van een cumulatieve som (CUSUM) komt uit sequentiële statistische bewaking. E. S. Page beschreef continue inspectieschema’s in zijn artikel uit 1954. Voor financiële data plaatst hoofdstuk 2 van Advances in Financial Machine Learning sampling in de context van datastructuren. De mlfinpy-documentatie beschrijft vervolgens een symmetrisch CUSUM-filter dat bars selecteert op basis van cumulatieve bewegingen.
Bereken twee sommen uit log-rendementen
Voor een positieve slotkoers (P_t) bereken je het log-rendement (r_t=\ln(P_t/P_{t-1})). Het filter houdt twee afzonderlijke sommen bij, beide beginnend bij nul: een positieve en een negatieve. De recursies zijn S+_t = max(0, S+_(t-1) + r_t) en S-_t = min(0, S-_(t-1) + r_t). De positieve som bewaart alleen de opbouw boven nul; de negatieve som alleen die onder nul.
Met een symmetrische drempel (h>0) leg je tijdstip (t) vast als S+_t > h of S-_t < -h. Na een opwaartse gebeurtenis zet je S+ terug op nul; na een neerwaartse gebeurtenis zet je S- terug op nul. Daarna worden nieuwe rendementen gewoon verder verwerkt. Dit is iets anders dan alleen een gebeurtenis registreren wanneer één rendement de drempel overschrijdt: meerdere kleine rendementen met hetzelfde teken kunnen samen een event veroorzaken.
Leg vooraf vast wat er gebeurt als de som precies op de drempel uitkomt. De tekst in de mlfinpy-documentatie zegt dat de som de drempel bereikt of overschrijdt, terwijl de geraadpleegde implementatie strikte vergelijkingen > en < gebruikt. Bij exact S=h leveren die conventies een ander resultaat op. Kies en documenteer de gelijkheidsregel; de naam CUSUM bepaalt die niet vanzelf.
Volg een hypothetisch koerspad
Stel dat de slotkoersen achtereenvolgens 100,00 → 100,20 → 100,40 → 100,60 → 100,40 → 100,20 → 100,00 zijn en (h=0,005) in eenheden van log-rendement is, oftewel 0,5%. De prijzen en uitkomsten zijn alleen illustratief en zijn geen marktdata of uitvoeringsprijzen.
Tijdens de stijging is de cumulatieve log-verandering van 100,00 naar 100,60 ln(100,60 / 100,00) = 0,005982, ongeveer 0,598%. De positieve som overschrijdt de drempel bij de slotkoers 100,60. Dat tijdstip wordt een opwaartse gebeurtenis en de positieve som wordt gereset. Daarna daalt de koers. Wanneer het pad terugkomt op 100,00, is de log-som sinds de reset ln(100,00 / 100,60) = -0,005982. De negatieve som zakt onder -h, zodat 100,00 een neerwaartse gebeurtenis wordt.
Beide gebeurtenissen volgen uit de samplingregel. De eerste betekent niet dat het filter een verdere stijging voorspelt; de tweede is geen verkoopadvies. Controleer code door rendementen en sommen bar voor bar bij te houden en te bevestigen dat de tijdstippen overeenkomen met de gekozen drempel- en resetregel.
Kies een drempel die past bij de marktschaal
Een vaste drempel is eenvoudig te controleren: elke som wordt met dezelfde (h) vergeleken. Maar een beweging van 0,5% kan groot zijn in een rustige markt en normaal tijdens hoge volatiliteit. Een dynamische drempel kan de volatiliteitsschaal volgen, bijvoorbeeld h_t = k × σ_(t-1), waarbij (k) een gekozen vermenigvuldigingsfactor is en (sigma) een maat voor de volatiliteit van rendementen.
Om look-ahead te voorkomen, bepaal je wanneer (sigma) beschikbaar is. Als de samplingbeslissing na slot (t) wordt genomen, is een drempel die met data tot en met (t-1) is berekend een duidelijke causale keuze. Houd de schatter, het venster, de schaal per bar of op jaarbasis en de behandeling van uitschieters en ontbrekende waarden consistent. Kies (k) niet alleen omdat de historische gebeurtenissenreeks er aantrekkelijk uitziet; evalueer de keuze buiten de steekproef.
Een te lage drempel geeft veel gebeurtenissen, waaronder kleine bewegingen die door ruis, spread, commissie en slippage kunnen verdwijnen. Een te hoge drempel geeft weinig gebeurtenissen en kan relevante bewegingen missen. Er bestaat geen universele waarde. Vergelijk voor een reeks redelijke instellingen het aantal gebeurtenissen, de tijd ertussen, stabiliteit per periode en downstreamkosten.
Houd prijzen en tijdstippen causaal
Log-rendementen vereisen positieve prijzen. Een instrument dat nul of negatief kan noteren, kun je niet rechtstreeks met de log van de prijs verwerken. Een eenvoudig rendement of andere transformatie verandert de schaal en het gedrag van het filter en moet daarom opnieuw worden gedefinieerd en getest. Controleer ook aanpassingen voor aandelensplitsingen en dividenden. Een slotkoers die alleen voor splitsingen is aangepast, is geen total-returnreeks. Een doorlopende futuresreeks kan door het doorrollen bovendien sprongen bevatten die niet overeenkomen met de beweging van één verhandelbaar contract.
Een gebeurtenis die op slotkoers wordt getriggerd, is pas bekend nadat die slotkoers is vastgelegd. Features mogen informatie gebruiken die op of vóór dat tijdstip werkelijk beschikbaar was. Een backtest mag niet aannemen dat een order tegen precies die triggerende slotkoers is uitgevoerd, tenzij de uitvoeringsregel en marktdata dat ondersteunen. Vaak simuleer je een order na de trigger en neem je spread, slippage, marktimpact, financiering en commissie mee.
Het filter geeft gebeurtenistijdstippen terug en maakt de volledige geschiedenis niet gelijkmatig bemonsterd. Niet-getriggerde bars kunnen nog nodig zijn voor tijdgebaseerde features, volatiliteit en marktomstandigheden. Pas formules die gelijke observatie-intervallen veronderstellen, zoals annualisering van statistieken, niet toe zonder de werkelijke intervallen en de definitie van de horizon te controleren.
Onderscheid sampling, stabiliteitstoetsen en labels
Dezelfde naam wordt soms voor verschillende procedures gebruikt. Het prijs-CUSUM-filter in deze gids telt directionele log-rendementen op om gebeurtenissen te selecteren. Een econometrische toets, zoals de CUSUM-toets voor regressiestabiliteit en recursieve residuen, onderzoekt residupatronen onder de aanname van stabiele regressieparameters. Dat is niet deze prijs-samplingregel. Geen van beide maakt data of processen stationair doordat een grens wordt overschreden.
Het filter bepaalt geen leerdoel. Nadat je eventtijdstippen hebt geselecteerd, moeten features alleen informatie gebruiken die toen beschikbaar was. De target (y) wordt apart gevormd op basis van toekomstige uitkomsten met een expliciete definitie. De triple-barriermethode voor financiële eventlabeling beantwoordt een andere vraag: welke barrière wordt na het event als eerste geraakt? CUSUM kent dat label niet automatisch toe, voorspelt geen richting en garandeert geen liquiditeit of winst.
Maak voor validatie elke drempel opnieuw met alleen data die op dat moment beschikbaar was, behoud de tijdsvolgorde en voorkom dat overlappende labelintervallen informatie naar validatiefolds lekken. Beoordeel bied-laatspread, kosten, funding, slippage, capaciteit en vertraging tussen signaal en uitvoering. Minder gebeurtenissen zijn op zichzelf geen bewijs voor een betere strategie; de meetmethode en fillaannames moeten passen bij de beoogde toepassing.
Veelgestelde vragen
Q1Is het CUSUM-filter hetzelfde als een econometrische CUSUM-toets?
Nee. Dit filter telt log-rendementen van prijzen op om events te selecteren. Een CUSUM-toets voor regressies gebruikt recursieve residuen om modelstabiliteit te beoordelen onder eigen aannames en kritieke waarden.
Q2Is een drempel van 0,5% geschikt voor elke markt?
Nee. Hoe vaak een vaste drempel afgaat, hangt af van volatiliteit, barfrequentie en instrument. Vergelijk vaste en dynamische drempels met causaal beschikbare informatie en downstreamkosten.
Q3Betekent een CUSUM-tijdstip dat een order tegen de slotkoers wordt uitgevoerd?
Nee. Het tijdstip is pas bekend zodra de slotkoers beschikbaar is. Simuleer verzending en uitvoering na de trigger met passende data en kostenveronderstellingen.
Bronnen en verder lezen
Probleem melden
We bereiden een e-mail met de link naar dit artikel voor. Mark ontvangt je melding pas nadat je die verstuurt
Snelle check
De gids gelezen? Test jezelf met 3 vragen
Vraag 01
Wanneer legt het CUSUM-filter een bar vast als gebeurtenis?
Kies een antwoord om de uitleg te zien
Optiewoordenlijst
The current IV's position between a lookback-period low and high; one outlier can distort it, so it should not be read as a standalone signal.
Lees de uitgebreide gidsIV percentileThe percentage of observations in a lookback window below the current IV; the result depends on the data series, window, and treatment of missing or extreme values.
Lees de uitgebreide gidsVIXA constant 30-day expected-volatility measure for the S&P 500 calculated from a strip of SPX option prices; it is not the IV of an individual stock or contract.
Lees de uitgebreide gids