PyMC3: Bayesiaanse statistiek toepassen op marktdata

Portret van Alex de Vries, Quantitatief Analist & Algo-Trading Expert
Alex de Vries
Quantitatief Analist & Algo-Trading Expert
Python Libraries voor Algoritmische Trading · 2026-02-15 · 7 min leestijd

Stel je voor: je hebt een trading bot die niet alleen kijkt naar wat de markt deed, maar ook begrijpt hoe zeker die kennis is. PyMC3 geeft je die mogelijkheid.

Het is een Python-bibliotheek voor Bayesiaanse statistiek, speciaal ontworpen om onzekerheid in marktdata te vangen en te verwerken.

In plaats van starre modellen bouw je flexibele, probabilistische systemen die meegroeien met nieuwe informatie. Ideaal voor algoritmische handel waar elke procent winst telt. Bayesiaanse statistiek draait om de combinatie van voorafgaande kennis en nieuwe data.

In trading betekent dit dat je historische patronen combineert met live prijsactie om betere voorspellingen te maken. PyMC3 maakt dit proces toegankelijk zonder dat je een wiskundige hoeft te zijn.

Je definieert een model, voegt data toe en laat de computer de onzekerheid berekenen. Dat geeft je een voorsprong op bots die alleen maar gemiddelden kijken.

Wat is PyMC3 en waarom gebruik je het in trading?

PyMC3 is een Python-bibliotheek voor probabilistisch programmeren. Het helpt je om statistische modellen te bouwen die rekening houden met onzekerheid.

In plaats van een enkele schatting te geven, levert het een verdeling van mogelijke uitkomsten.

Dat is precies wat je nodig hebt in een markt die nooit stilstaat. Waarom is dit belangrijk voor algoritmische trading? Omdat markten noisy zijn.

Een simpel gemiddelde van de laatste 10 candles zegt weinig over morgen. PyMC3 laat je zien hoe zeker je bent over een signaal.

Je kunt risico’s beter afwegen en je positie aanpassen op basis van die onzekerheid. Denk aan een bot die alleen handelt als de kans op winst boven de 70% ligt. Stel je voor dat je een mean-reversion strategie test op EUR/USD. Je hebt historische data van de afgelopen 5 jaar.

Met PyMC3 bouw je een model dat de kans op een terugkeer naar het gemiddelde schat, inclusief de onzekerheid daarover.

Je ziet niet alleen of een trade waarschijnlijk is, maar ook hoe zeker je daarover bent. Dat helpt bij het instellen van stop-loss en take-profit niveaus.

De kern van Bayesiaanse statistiek in marktdata

Bayesiaanse statistiek draait om drie elementen: prior, likelihood en posterior. De prior is je voorafgaande idee over de markt, bijvoorbeeld dat EUR/USD vaak mean-reverts.

De likelihood is hoe goed je data bij dat idee past. De posterior is het resultaat: je bijgewerkte idee na het zien van nieuwe data.

PyMC3 berekent deze posterior voor je. In trading betekent dit dat je geen vaste aannames maakt. Je prior kan gebaseerd zijn op eerdere trades of marktkennis. Bijvoorbeeld: je weet dat de RSI-indicator vaak boven de 70 een verkoopsignaal geeft.

Je prior is dan dat de kans op een daling 60% is.

PyMC3 past dit aan op basis van nieuwe data, zoals de laatste 20 candles op een 1-uur grafiek. Een concreet voorbeeld: je handelt op de NASDAQ met een bot die gebruikmaakt van de Moving Average Crossover. Je prior is dat een golden cross gemiddeld 3% winst oplevert in 5 dagen.

PyMC3 combineert dit met je historische backtestdata en levert een posterior die laat zien hoe waarschijnlijk die 3% is onder huidige marktcondities. Je kunt dan besluiten om smaller te handelen of de positie te verkleinen.

Het mooie is dat je model blijft leren. Elke nieuwe trade voegt data toe en verfijnt de posterior.

Je bot wordt dus slimmer naarmate hij meer handelt. Dat is een groot verschil met statische modellen die na een backtest niet meer veranderen.

Werking in Python: van model tot trade

Om te beginnen installeer je PyMC3 via pip. Je hebt ook NumPy en Pandas nodig voor datahandling.

Een typische setup ziet er zo uit: je laadt historische data van je broker via hun API, bijvoorbeeld van Interactive Brokers of Binance, en gebruikt PyStore voor snelle opslag van tick data.

Vervolgens bereid je de data voor met Pandas, bijvoorbeeld door de sluitingsprijzen te normaliseren. Hierna definieer je een model. Stel je wilt de volatiliteit schatten van Bitcoin.

Je kiest een normale verdeling als prior voor de standaardafwijking, met een gemiddelde van 2% en een standaardafwijking van 1%. PyMC3 combineert dit met je data en berekent de posterior. Hieronder een eenvoudig voorbeeld in code:

import pymc3 as pm
import numpy as np
import pandas as pd

# Laad data van je broker API
data = pd.read_csv('btc_1h.csv')  # 1-uur candles van Binance
returns = np.diff(np.log(data['close']))

with pm.Model() as model:
    # Prior voor volatiliteit
    sigma = pm.HalfNormal('sigma', sigma=0.02)
    # Likelihood van de data
    returns_obs = pm.Normal('returns', mu=0, sigma=sigma, observed=returns)
    # Trek samples van de posterior
    trace = pm.sample(2000, tune=1000)

Dit model levert een verdeling voor sigma, de volatiliteit. Je ziet niet alleen een gemiddelde, maar ook hoe breed de verdeling is.

Een smalle verdeling betekent hoge zekerheid; een brede verdeling vraagt om voorzichtigheid. Gebruik deze output om je stop-loss en position size aan te passen.

Bijvoorbeeld: als sigma 3% is, handel dan smaller dan bij 1,5%. Integratie met je trading bot is eenvoudig. Je kunt de posterior direct gebruiken in je risicomanagement module.

Stel je bot handelt op de S&P 500 met behulp van de Alpaca-py library voor commissievrij traden.

Je laat het model elke uur draaien op nieuwe data. Als de posterior aangeeft dat de kans op een stijging van 1% boven de 80% ligt, geef je een koopsignaal. Zo koppel je Bayesiaanse inzichten direct aan actie.

Modellen met prijsindicaties voor algoritmische strategieën

PyMC3 biedt verschillende modellen die je kunt koppelen aan prijsindicaties. Een populaire keuze is de lineaire regressie met Bayesiaanse parameters.

Gebruik dit om de relatie tussen prijs en volume te schatten. Stel je handelt op EUR/USD en wilt weten hoe volume de prijs beïnvloedt. Je prior is dat een toename van 10% in volume leidt tot een prijsstijging van 0,1%.

PyMC3 past dit aan op basis van recente data. Een ander model is de tijdreeksanalyse met ARIMA, maar dan Bayesiaans.

Je prior is dat de koers een bepaalde trend volgt, bijvoorbeeld een opwaartse trend van 0,5% per dag.

PyMC3 berekent de posterior voor de trend parameters op basis van de laatste 100 candles. Dit helpt bij het bepalen van entry- en exit-punten. Voor een bot die op de DAX handelt, kun je de posterior gebruiken om een trailing stop in te stellen. Je kunt ook modellen bouwen voor spread trading.

Stel je handelt de spread tussen twee aandelen, zoals Shell en BP. Je prior is dat de spread mean-reverts naar een gemiddelde van €0,50.

PyMC3 schat de posterior voor de spread op basis van historische data. Als de spread afwijkt, krijg je een signaal om te handelen. Dit werkt goed in combinatie met een broker die lage transactiekosten biedt, zoals Interactive Brokers.

Voor risicomanagement kun je een model bouwen op basis van Value at Risk (VaR).

Je prior is dat de maximale verlies op een dag 2% is. PyMC3 berekent de posterior voor de VaR op basis van je portfolio data. Als de posterior aangeeft dat de kans op een verlies van 3% boven de 10% ligt, verklein je de positie. Dit helpt om drawdowns te beperken zonder te defensief te handelen.

Praktische tips voor implementatie en risicomanagement

Begin klein. Test je PyMC3-model op een enkele markt, zoals EUR/USD, voordat je het uitbreidt naar een portfolio.

Gebruik historische data van minimaal 2 jaar voor een betrouwbare prior. Backtest je bot met de Bayesiaanse signalen en vergelijk de resultaten met een niet-Bayesiaanse variant. Je zult zien dat de Bayesiaanse bot vaak beter omgaat met onzekerheid.

Let op de rekenkracht. PyMC3 kan zwaar zijn, vooral als je meerdere modellen tegelijk draait.

Gebruik een cloud instance met 4-8 CPU cores en 16 GB RAM voor soepele running. Voor live trading kun je de modellen elke uur updaten, niet elke minuut, om latency te verminderen. Test dit eerst op een demo-account van je broker.

Risicomanagement is cruciaal. Gebruik de posterior niet als enige criterium, maar combineer het met technische indicatoren zoals RSI of MACD.

Stel vaste limieten in, zoals een maximaal risico van 1% per trade.

PyMC3 helpt je de onzekerheid te meten, maar je moet zelf de discipline handhaven. Gebruik een broker met een goede API, zoals Interactive Brokers of Binance, voor betrouwbare datafeed. Experimenteer met verschillende priors. Een te strakke prior kan je model beperken, terwijl een te brede prior te veel onzekerheid toevoegt.

Pas je prior aan op basis van je backtestresultaten. Bijvoorbeeld: als je gemiddelde winst per trade €50 is, zet je prior dan op een normale verdeling rond €50 met een standaardafwijking van €10.

Zo blijft je model realistisch. Sluit af met een simpele checklist: heb je goede data? Is je prior realistisch?

Werk je model regelmatig bij? En gebruik je de output voor risicomanagement?

Met PyMC3 bouw je een trading bot die niet alleen handelt, maar ook leert. Ontdek hoe in onze ultieme gids voor Python in algoritmische trading.

Portret van Alex de Vries, Quantitatief Analist & Algo-Trading Expert
Over Alex de Vries

Alex is een ervaren quantitatief analist en Python-ontwikkelaar die complexe trading concepten vertaalt naar begrijpelijke, praktische handleidingen voor zowel beginners als gevorderden.

Volgende stap
Bekijk alle artikelen over Python Libraries voor Algoritmische Trading
Ga naar overzicht →