Sortino Ratio vs Sharpe Ratio: Welke moet je gebruiken in Python?
Je zit achter je scherm, je Python-bot draait, en je hebt net een backtest gedraaid op Interactive Brokers data. De equity curve ziet er mooi uit, maar welk risicocijfer vertelt je nu écht of je strategie goed is?
De Sharpe Ratio is de klassieker, maar de Sortino Ratio kijkt net iets slimmer naar de pijn die je voelt.
Laten we ze naast elkaar leggen en kijken welke je vandaag nog moet implementeren.
Wat zijn Sharpe en Sortino eigenlijk?
De Sharpe Ratio is de standaardmanier om te zien hoeveel rendement je krijgt per eenheid risico. Het neemt je gemiddelde return en deelt die door de standaardafwijking van je returns. Simpel gezegd: hoe hoger, hoe beter de verhouding tussen opbrengst en volatiliteit.
De Sortino Ratio doet iets vergelijkbaars, maar filtert de goede volatility eruit.
Ze deelt je gemiddelde return door de standaardafwijking van de negatieve returns alleen. Het idee: als je bot alleen maar omhoog schiet en af en toe een kleine dip heeft, wil je niet dat die mooie stijging zwaar wordt afgestraft in de telling.
Beide bereken je in Python met libraries als pandas en numpy. Voorbeeldje: Sharpe = (mean_return - risk_free) / std_returns; Sortino = (mean_return - risk_free) / downside_std. Je kunt ze ook pakken uit bibliotheken als pyfolio of empyrical, maar een simpele functie schrijven is vaak sneller.
Waarom je bot anders reageert op beide ratios
Stel je hebt een trendvolgende bot op Binance Futures die af en toe een flinke klap krijgt, maar verder stabiel stijgt. De Sharpe Ratio ziet die klappen als risico en drukt je score. De Sortino Ratio kijkt alleen naar de dalende dagen en beloont de stijging meer.
Resultaat: je Sortino kan een stuk hoger zijn. Als je bot juist veel kleine schommelingen heeft en zelden echt hard daalt, dan liggen Sharpe en Sortino dicht bij elkaar.
Voor daghandel bots op bijvoorbeeld de DAX of NASDAQ via LYNK of DEGIRO, waar je spread en slippage meewegen, is dat verschil soms klein maar fijn. Een ander verschil zit in de risk-free rate.
Gebruik je 0% of de huidige rente (bijvoorbeeld 3,5%)? Dat beïnvloedt beide ratios, maar de impact is groter bij Sharpe omdat die de volledige volatiliteit meeneemt. Kies een vaste rente en hou die consistent, anders vergelijk je appels met peren.
Vergelijking op concrete criteria
Prijs: beide zijn gratis. Je berekent ze in Python zonder extra kosten, of je nu handelt via Interactive Brokers, Binance, of Bitvavo.
Er is geen duur licentiemodel nodig; een laptop en een broker-API zijn je investering. Capaciteit: Sharpe en Sortino werken op elke timeframe en elk instrument. Of je nu een 1-minute bot draait op crypto of een 1-hour bot op aandelen, de berekening blijft hetzelfde.
Voor grote datasets (>100k candles) is pandas snel genoeg, maar let op memory gebruik bij rolling windows. Gebruiksgemak: Sharpe is makkelijker uit te leggen aan investeerders.
Sortino vraagt een extra stap: je moet de downside deviation berekenen. Toch is het maar enkele regels code.
Voorbeeld in Python: downside = returns[returns < 0].std(); sortino = (returns.mean() - risk_free) / downside. Kosten op termijn: beide hebben geen onderhoudskosten. Wel moet je je data up-to-date houden en rekening houden met transactiekosten. Bij een broker als Interactive Brokers betaal je €0,01 per aandeel en ongeveer €2 per futures-contract.
Als je bot veel trades maakt, drukken die kosten je ratio’s, ongeacht welke je kiest. Risicobeeld: Sharpe straft elke volatiliteit, ook de goede.
Sortino straft alleen de neerwaartse bewegingen. Als je risicomanagement gericht is op drawdown-beperking, is Sortino realistischer. Als je juist stabiliteit wilt tonen aan een fonds, is Sharpe meer standaard.
Standaardisatie: Sharpe is breed geaccepteerd, Sortino minder. Voor rapportages naar partners of investeerders is Sharpe veiliger.
Voor intern optimaliseren van je bot is Sortino vaak scherper. Gevoeligheid voor uitschieters: Sharpe wordt sterker beïnvloed door extreme spikes, zowel omhoog als omlaag. Sortino kijkt alleen naar de dalers. Als je bot af en toe een short squeeze meepakt, helpt Sortino je om die winst niet te laten meetellen als risico.
Wanneer kies je welke in je Python-pipeline?
Kies Sharpe als je rapporteert naar investeerders of als je strategie vooral stabiele, gelijkmatige returns heeft. Sharpe is de taal die de meeste mensen spreken en het is makkelijker te vergelijken met fondsen en benchmarks.
Kies Sortino als je bot gericht is op trendvolgen of momentum, met af en toe grotere drawdowns. Sortino beloont het neerwaartse risicomanagement en geeft een realistischer beeld van je prestaties als je stoplosses en position sizing goed zitten. Gebruik beide als je een robuust beeld wilt.
Draai je backtest op historische data van je broker, bereken Sharpe en Sortino naast elkaar, en kijk welke beter correleert met je daadwerkelijke drawdowns.
Voorbeeld: benchmark je bot op een jaar data van de DAX via LYNK en kijk welke ratio je risico het beste vangt. Een middenweg is een custom score die Sharpe combineert met drawdown-maatregelen zoals de Calmar Ratio (return / max drawdown). Of bouw een dashboard dat Sharpe, Sortino en Max Drawdown naast elkaar toont. Zo kies je niet alleen, maar zie je het hele plaatje.
Praktische Python-stappen voor snelle implementatie
Zet je data op orde: gebruik 1-minute of 1-hour candles van je broker, en voeg costs toe (spread + commissie). Als je bijvoorbeeld bij Bitvavo handelt, reken dan met 0,25% per trade.
Zonder kosten zijn je ratios te optimistisch. Script een functie die returns berekent en optimaliseer je tradingstrategie met Scipy op basis van equity of prices.
Gebruik rolling windows voor out-of-sample tests. Voorbeeld: returns = equity.pct_change().dropna(); risk_free = 0.035 / 252 voor een dagelijkse rate. Voor Sharpe: sharpe = (returns.mean() - risk_free) * sqrt(252) / returns.std().
Voor Sortino: downside = returns[returns < 0].std(); sortino = (returns.mean() - risk_free) * sqrt(252) / downside. Pas de sqrt(252) aan op je timeframe (bijv. 365 voor crypto). Test op meerdere markten en periodes. Een bot die op de NASDAQ een Sharpe van 1,5 haalt, kan een Sortino van 2,0 hebben.
Als je Sortino veel hoger is dan Sharpe, weet je dat je bot goed omgaat met neerwaartse risico’s.
Als ze dicht bij elkaar liggen, is je bot waarschijnlijk al stabiel. Integreer met je broker-API en risicomanagement.
Als je max drawdown ingesteld staat op 10%, en je Sortino is laag, bereken dan de Calmar Ratio om je drawdown-analyse te verfijnen. Pas vervolgens je position sizing aan of verklein je leverage; zo koppel je de ratio’s direct aan actie.
Eindoordeel: welke kies je?
Kies Sharpe als je breed wilt vergelijken, rapporteert naar investeerders, of een stabiele, lage-volatiliteit bot draait. Kies Sortino als je drawdowns wilt beheersen en je bot meer pieken en dalen kent, zoals trendvolgende strategieën op futures of crypto.
De beste praktijk: gebruik beide, maar laat je keuze afhangen van je doel. Voor intern optimaliseren: Sortino. Voor externe rapportage: Sharpe. Voor een compleet beeld: combineer ze met drawdown-cijfers en costs, en je weet precies hoe je bot presteert.
