Wat is Matplotlib en hoe visualiseer je koersgrafieken in Python?
Stel je voor: je hebt een killer-strategie voor een trading bot. Je Python-code is perfect, je API van Interactive Brokers of Alpaca is ingesteld, en je backtests draaien als een trein.
Maar er is één probleem. Je ziet alleen een waslijst aan getallen in je terminal. Pijlscherpe winsten, diepe verliezen, een complexe equity curve.
Het voelt als proberen een auto te repareren met een gesloten motorkap. Je weet dat er iets gebeurt, maar je ziet het niet.
Dit is waar Matplotlib het roer volledig overneemt. Het is je dashboard, je cockpit, je X-ray brill.
Het transformeert saaie data in visuele inzichten die direct impact hebben op je risicomanagement en besluitvorming. Laten we je dashboard bouwen.
Wat je nodig hebt voordat we beginnen
Voordat we de eerste lijn code trekken, zorgen we dat de basis stabiel staat. Dit is geen rocket science, maar goede voorbereiding voorkomt frustratie later.
Je wilt niet halverwege je analyse moeten stoppen omdat een library mist.
Zorg dat je een computer bij de hand hebt met Python geïnstalleerd, bijvoorbeeld versie 3.8 of nieuwer. Je hebt een code-editor nodig. VS Code of PyCharm zijn topkeuzes, maar zelfs een simpele Jupyter Notebook werkt perfect voor dit soort data-analyse.
Het belangrijkste zijn natuurlijk de libraries. We gaan er drie installeren. De eerste is natuurlijk matplotlib, ons hoofdonderwerp. De tweede is pandas, omdat je data nu eenmaal in DataFrames moet verwerken.
De derde is yfinance, een handig hulpje om direct echte marktdata van bijvoorbeeld de AEX, of aandelen zoals Tesla, te fetchen.
Open je terminal of command prompt en typ: pip install matplotlib pandas yfinance
Reken op een minuutje of 2 tot 3 voor de installatie, afhankelijk van je internet snelheid. Als je klaar bent, ben je ready to go. Je hebt nu een complete set tools in handen om data te downloaden, te verwerken en te visualiseren.
De totale setup kost je, als je alles al hebt, nog geen 5 minuten.
Dat is een schijntje voor de inzichten die je straks krijgt.
Stap 1: Je data ophalen en voorbereiden
Een grafiek is slechts zo goed als de data die erin gaat. We beginnen dus met het binnenhalen van echte koersdata.
We pakken een aandeel dat je waarschijnlijk kent: Shell (SHEL). We vragen data op van de afgelopen 6 maanden. Dit is een goeie periode om zowel korte-termijnbewegingen als langere trends te zien.
We slaan dit direct op in een Pandas DataFrame, zodat we er makkelijk mee kunnen werken.
Open je Python-omgeving en draai onderstaande code. Zorg dat je internet aan staat. De 'ticker' is de beurscode van het bedrijf.
- Importeer de benodigde bibliotheken:
import matplotlib.pyplot as plt,import pandas as pdenimport yfinance as yf. - Definieer je ticker:
ticker = 'SHEL'. - Download de data:
data = yf.download(ticker, start='2023-06-01', end='2023-12-01'). - Bekijk de data met
print(data.head())om te zien of het gelukt is.
Voor Shell is dat 'SHEL'. Als je een andere wilt, pas dit dan aan.
Veelgemaakte fout: het verkeerde ticker-symbool gebruiken. Niet alle bedrijven hebben overal een ticker voor.
Check dit altijd even op een site als Yahoo Finance. Een andere veelvoorkomende fout is een typefout in de datum. Gebruik altijd het formaat 'JJJJ-MM-DD'. Als je de data succesvol hebt gedownload, zie je een overzicht met Open, High, Low, Close, Volume en Adj Close. Dit is je basis.
Stap 2: Je eerste koersgrafiek maken
Nu komt het leuke gedeelte. We gaan de 'Close' prijs plotten.
Dit is de prijs waarmee de markt sloot op een bepaalde dag. Dit geeft je een schoon beeld van de koersontwikkeling. We gaan van een kale lijst getallen naar een visueel verhaal.
Je zult direct zien hoe de koers beweegt, zonder dat je getallen hoeft te vergelijken.
We maken een simpel script. Ons doel is om de 'Close' prijs te plotten tegenover de datum. Dit is de basis voor elke trading analyse. Zie het als het bouwen van een interactief trading dashboard met Python.
Je hebt nu een simpele lijngrafiek. Dit is al een stuk beter dan getallen in een terminal.
- Gebruik de data die we net hebben gedownload.
- Maak een nieuwe plot met:
plt.figure(figsize=(12, 6)). Dit maakt het canvas 12 inch breed en 6 inch hoog. Een goeie maat voor een duidelijke grafiek. - Teken de lijn:
plt.plot(data.index, data['Close'], label='SHEL Close Price', color='blue'). - Voeg een titel toe:
plt.title('Koers Shell (SHEL) - Laatste 6 Maanden'). - Voeg labels toe aan de assen:
plt.xlabel('Datum')enplt.ylabel('Prijs (in USD)'). - Voeg een legenda toe:
plt.legend(). - Toon de grafiek:
plt.show().
Je ziet direct de pieken en dalen. Een veelgemaakte fout is het vergeten van plt.show(). Dan gebeurt er niets, of de grafiek wordt niet getoond.
Een andere fout is het niet meegeven van de 'x-as' (data.index). Dan weet Matplotlib niet wat er op de x-as moet en krijg je een vreemde plot.
Met deze code heb je een solide basis.
Stap 3: De grafiek opfleuren voor trading inzicht
Een simpele lijn is oké, maar voor trading willen we meer. We willen support en resistance levels zien, of een trendlijn.
We kunnen ook candlesticks toevoegen voor meer detail. Laten we onze grafiek uitbreiden met een 20-daags voortschrijdend gemiddelde (SMA). Dit helpt om de trend te zien, los van de dagelijkse prijsbewegingen.
Dit is een standaard tool voor elke technische analyse. Je kunt Matplotlib op twee manieren gebruiken: via de 'pyplot' interface (wat we net deden) en de 'object-oriented' interface. Twijfel je nog over de visualisatie? Lees dan onze vergelijking: Plotly vs Matplotlib voor interactieve trading charts.
Die tweede is krachtiger en flexibeler. We gaan die nu gebruiken. Je werkt dan met Figuren en Axes.
- Bereken het 20-daags gemiddelde:
data['SMA_20'] = data['Close'].rolling(window=20).mean(). - Maak een Figuur en een Axes object:
fig, ax = plt.subplots(figsize=(12, 6)). - Teken de originele koers op de Axes:
ax.plot(data.index, data['Close'], label='Close Price', color='skyblue', alpha=0.8). - Teken het gemiddelde eroverheen:
ax.plot(data.index, data['SMA_20'], label='20-Day SMA', color='red', linewidth=2). - Voeg nu een grid toe voor makkelijker aflezen:
ax.grid(True, linestyle='--', alpha=0.6). - Geef de assen een logische indeling:
ax.set_title('SHEL Koers met 20-Daags Gemiddelde'),ax.set_xlabel('Datum'),ax.set_ylabel('Prijs (USD)'). - Gebruik de legenda:
ax.legend(). - Toon het resultaat:
plt.show().
Denk aan een Figuur als het canvas en Axes als de daadwerkelijke grafiek erop. Wat je nu ziet is een professionelere grafiek.
De rode lijn toont de richting van de trend. Kruist de blauwe lijn de rode lijn?
Dat kan een signaal zijn. Een veelgemaakte fout is het vergeten van .mean() na de rolling window. Dan krijg je een lege lijn of een error. Let ook op dat je de data vanaf het juiste punt plot, want de eerste 19 dagen van de SMA hebben geen data (window van 20). Matplotlib zet deze automatisch op NaN, dus de lijn begint later. Dit is normaal.
Stap 4: Candles toevoegen voor detail (Advanced)
Als je serieus bezig bent met technical analysis, dan wil je candlesticks. Die laten je zien wat de openings- en sluitingsprijzen waren, en of de dag een hogere of lagere prijs had.
Helaas is standaard Matplotlib hier niet super goed in. Je hebt dan een extra library nodig die hier speciaal voor is gebouwd, zoals mplfinance. Dit is een add-on voor Matplotlib die specifiek voor financiële data-analyse in Python is gemaakt.
Je installeert deze met pip install mplfinance. De syntax is anders, want de library doet het meeste werk voor je.
Je geeft simpelweg je DataFrame mee en hij maakt de candlestick chart. Dit bespaart je uren coderen. Deze ene regel code genereert een complete candlestick chart met volume en een 20-daags gemiddelde (mav).
- Installeer mplfinance:
pip install mplfinance. - Importeer de library:
import mplfinance as mpf. - Zorg dat je DataFrame de juiste kolommen heeft (Open, High, Low, Close, Volume). Yfinance geeft dit al.
- Maak de candlestick plot in één regel:
mpf.plot(data, type='candle', style='yahoo', title='SHEL Candlestick Chart', ylabel='Prijs (USD)', volume=True, mav=(20)).
Je ziet nu groene candles voor dagen waar de koers steeg en rode voor dagen waar hij daalde. De 'lonten' (schaduw) laten zien hoe ver de koers bewoog.
Dit is essentieel voor het beoordelen van volatiliteit en het vinden van patronen.
Een veelgemaakte fout is het niet correct inladen van de data. Zorg dat je index een DatetimeIndex is (wat yfinance automatisch doet). Als dit niet het geval is, moet je dat eerst fixen met pd.to_datetime().
Checklist: Is je visualisatie goed?
Voordat je je code in een live trading omgeving gooit, loop je even deze lijst na.
Een verkeerd geplotte grafiek kan leiden tot foute beslissingen. Jouw trading bot is zo goed als de data die hij krijgt, en hoe jij die data interpreteert. Als je op alle vragen 'ja' kunt antwoorden, ben je klaar. Je hebt nu de kracht in handen om je trading data te visualiseren.
- Data geladen? Zijn je data punten aanwezig? Check met
print(data.tail()). Je wilt geen lege grafiek. - Assen duidelijk? Weet je direct wat de eenheden zijn? USD, EUR? En wat de data range is?
- Kleuren logisch? Groen = omhoog, rood = omlaag is een wereldwijde standaard. Houd je hieraan.
- Grafiek leesbaar? Is de titel duidelijk? Zijn de labels niet over elkaar heen gebotst?
- Legenda aanwezig? Weet je welke lijn welke is? Zonder legenda is een grafiek met meerdere lijnen waardeloos.
- Code geoptimaliseerd? Gebruik je de object-oriented interface (
fig, ax) voor complexere plots? Dit maakt je code schaalbaarder.
Vanaf hier kun je doorgaan met complexere analyses, zoals RSI of MACD indicatoren plotten, of je equity curve van je backtest visualiseren. Onthoud: een goede grafiek is het halve werk.
Het maakt complexe markten simpel. En dat is precies wat je nodig hebt in de wereld van algoritmisch traden.
