Conditional Value at Risk (CVaR): Een betere maatstaf voor extreme markten
Je kent het wel: je hebt een gave Python-strategie gebouwd, getest met backtests in Backtrader of Lean (QuantConnect), en de resultaten zien er stralend uit. Tot die ene dag.
De markt doet iets geks, een extreme gebeurtenis, en je portfolio zakt als een pudding in elkaar. Je standaard risicomaat, de VaR (Value at Risk), gaf aan dat een verlies van 2% 'zeer onwaarschijnlijk' was. En tóch gebeurde het.
Dit is waarom je misschien een betere metgezel nodig hebt: Conditional Value at Risk (CVaR).
Laten we het hierover hebben, zonder ingewikkelde theorie, maar met concrete stappen die je morgen nog kunt toepassen.
Waarom VaR je in de steek laat als het écht spannend wordt
Stel je voor: Value at Risk (VaR) is als een waarschuwingssysteem dat zegt: "Er is een kleine kans (bijvoorbeeld 5%) dat je vandaag maximaal €1.000 verliest." Dat klinkt best geruststellend.
Het zegt alleen niets over wat er gebeurt als die 5% zich wél voordoet. Wat als het geen €1.000 is, maar €5.000? VaR tekent een streep in het zand, maar zegt niets over de diepte van de afgrond net achter die streep.
In de wereld van algoritmische trading, waar een flash crash of een onverwachte rentestijging in seconden je posities kan verpletteren, is dat een groot probleem. CVaR, ook wel Expected Shortfall genoemd, pakt dit anders aan.
In plaats van te vragen "wat is de ergste verliezen binnen de veilige zone?", vraagt CVaR: "als het misgaat, hoe erg is het dan gemiddeld?" Het neemt al die ellendige uitschieters (de 'extreme tails' van de verdeling) en geeft je een gemiddelde waarde.
Als je VaR zegt dat je €1.000 kunt verliezen, kan CVaR zeggen: "Maar als het fout gaat, verlies je gemiddeld €2.500." Dat is een wereld van verschil voor je risicomanagement.
Hoe CVaR precies werkt in je trading stack
De kern van CVaR draait om de zogenaamde 'tail risk'. Je bent niet bang voor een dagje groen of rood, je bent bang voor de dagen diep in het rood.
CVaR berekent de gemiddelde waarde van al die verliezen die verder gaan dan je VaR-grens.
Stel je hebt een portfolio van €50.000 en je kijkt naar een confidence level van 95%. Je VaR is €2.500. Als je CVaR uitkomt op €4.000, weet je dat de schade bij een crisis gemiddeld €4.000 is, niet €2.500.
Dit helpt je om realistischere stop-losses en position sizing te bepalen. Om dit te berekenen, heb je data nodig. Veelal gebruiken we historische data van brokers zoals Interactive Brokers of LMAX. Je haalt de prijzen op via hun API, bijvoorbeeld met de IB-insync library of de CCXT bibliotheek voor crypto exchanges.
Je berekent de logreturns van je asset, of van je hele portfolio als je meerdere assets draait.
Vervolgens sorteer je deze returns van laag naar hoog. Je neemt de onderste 5% van deze verliezen en telt ze bij elkaar op.
Als je portfolio een CVaR van 8% heeft op een kapitaal van €100.000, weet je dat in de ergste 5% van de gevallen je verlies gemiddeld €8.000 is. Dat is de realiteit die je nodig hebt.
Een Python-benadering voor de berekening
Het gemiddelde van die onderste 5% is je CVaR. Het is simpeler dan het klinkt en je kunt het met een paar regels Python code. Stel je gebruikt Pandas voor je data-analyse.
Na het ophalen van je historische data via de API van je broker, bereken je de returns.
In Python ziet dat er vaak zo uit: je laadt je DataFrame met prijzen, berekent `df['returns'] = df['price'].pct_change()`. Vervolgens bepaal je de Value at Risk (VaR) op het 5%-niveau, bijvoorbeeld `VaR_5 = np.percentile(returns, 5)`. De magie voor CVaR is simpeler dan veel denken: je filtert alle returns die lager zijn dan deze VaR-waarde en neemt daar het gemiddelde van.
De code hiervoor is bijna te simpel om waar te zijn, maar krachtig: `CVaR_5 = returns[returns <= VaR_5].mean()`. Je ziet direct het verschil.
Waar de VaR je een getal geeft als -0.02 (2% verlies), laat de CVaR zien dat de gemiddelde impact van die extreme gevallen -0.035 (3.5%) is.
Dit getal is goud waard voor je risico-engine. Je weet nu dat je buffer groter moet zijn dan je dacht.
Modellen en prijskaartjes: van Excel tot Institutional Grade
Voor de DIY-trader begint het bij gratis tools. Python libraries zoals `pyfolio` (hoewel wat verouderd), `quantstats` en `arch` bieden uitstekende functionaliteiten voor het berekenen van CVaR.
Deze zijn gratis, mits je de tijd investeert om ze te integreren in je backtesting-omgeving.
Als je een platform gebruikt als QuantConnect (LEAN), zit deze functionaliteit vaak al ingebouwd in hun risk management modules. De basisversie van QuantConnect is gratis, maar voor geavanceerdere data en live trading betaal je al snel $20 - $100 per maand. Als je bedrijfsmatig gaat handelen en geen eigen code wilt onderhouden, kijk je naar platforms zoals Riskalyze (vaak vanaf €100-€200 per gebruiker per maand) of institutional-grade software zoals MSCI RiskMetrics.
Deze systemen draaien complexe Monte Carlo-simulaties om de CVaR te voorspellen op basis van toekomstige scenario's, niet alleen historische data. Ze kosten al snel duizenden euros per jaar.
De impact op je handelsstrategie
Een middenweg zijn broker-tools, zoals die van Interactive Brokers, die risico-analyse aanbieden in hun TWS software, soms inbegrepen bij een actief account, soms als betaalde add-on. Het echte voordeel zit hem in de toepassing. Als je CVaR significant hoger is dan je VaR, weet je dat je strategie extreem gevoelig is voor 'black swan' events. Begrijp je tail risk en hoe je je bot hiertegen verzekert, zodat je weet wanneer je smaller moet traden (minder size) of je hefboom moet verlagen.
Of het duidt op een strategie die 'short volatility' is—die goed presteert tot de markt ontploft.
Denk aan strategieën die profiteren van rustige markten, zoals Iron Condors of grid-bots. Die doen het goed tot een breakout. CVaR helpt je de impact van die breakout in te schatten.
Stel je draait een bot die op de S&P 500 futures (ES) handelt. Je backtest over de afgelopen 2 jaar ziet er mooi uit.
Je berekent de CVaR over die periode. Omdat de markt vooral stijgend was, kan de CVaR laag zijn. Als je hem berekent over een specifieke periode met een correctie (bijvoorbeeld maart 2020), schiet de CVaR omhoog.
De les: bereken CVaR niet alleen over je 'goede' data. Gebruik specifieke stress-perioden om te zien wat er gebeurt. Je wilt weten wat je verliest als de rente omhoog gaat of als de VIX explodeert.
Praktische tips voor de algoritmische handelaar
Wil je morgen al slimmer risico beheren? Pas dan deze stappen direct toe in je stack.
Het gaat erom dat je CVaR niet als een los getal ziet, maar als een dynamische limiet in je bot.
- Integreer het in je live monitoring: Schrijf een simpele script die elke dag (of elk uur) je huidige portfolio-waarde vergelijkt met je theoretische CVaR-grens. Als je verlies de 1,5x van je CVaR benadert, schakel de bot dan uit of reduceer de size met 50%.
- Gebruik 'Rolling' CVaR: Bereken je CVaR niet over de hele historie, maar over een bewegend venster van bijvoorbeeld 60 dagen. De markt verandert, je risico verandert. Een strategie die vorig jaar veilig was, kan nu riskant zijn door hogere volatiliteit.
- Combineer met Stress Testing: CVaR is gebaseerd op data, maar sommige dingen zie je niet terug in data (een hack van een exchange, een faillissement). Voeg handmatige 'stress tests' toe aan je backtest. Simuleer een flash crash van 10% in 5 minuten en kijk wat je CVaR doet. Dit doe je met Python door je prijsdata tijdelijk te manipuleren.
- Check je Broker API limieten: Zorg dat je bot bij een crash niet vastloopt door API-ratelimits. Test of je bot sneller kan verkopen dan de markt crasht. Een lage CVaR betekent niets als je order niet uitgevoerd wordt omdat de broker down is.
Zolang je portfolio binnen de CVaR-grens blijft, draai je door. Schiet de werkelijke drawdown hierdoorheen? Dan is het tijd voor noodremmen en moet je weten hoe je omgaat met systemic risk.
Uiteindelijk is CVaR geen toverstaf, maar een kompas. Het vertelt je niet waar de storm komt, maar het geeft aan hoe hoog de golven kunnen worden als hij er wel is. In een wereld van algoritmische trading, waar snelheid en efficiëntie key zijn, is het kennen van je diepste verliezen de ultieme vorm van controle. En dat gevoel wil je hebben als je je geld aan de markt toevertrouwt.
