Gids voor SQLAlchemy: Koersdata opslaan in een SQL database

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 · 6 min leestijd

Stel je voor: je hebt een prachtige trading bot gebouwd in Python, je backtests draaien soepel via de API van Interactive Brokers of Alpaca, en je risicomanagement is strak geregeld. Maar waar berg je al die koersdata op?

In losse CSV-bestanden die langzaam vollopen en lastig te doorzoeken zijn? Dat is verleden tijd. Met SQLAlchemy zet je al je marktgegevens netjes in een SQL-database, zodat je snel kunt queryen, backtesten en je bot realtime van data kunt voorzien.

Wat is SQLAlchemy eigenlijk?

SQLAlchemy is een Python-bibliotheek die fungeert als een brug tussen je Python-code en een SQL-database.

Je kunt het zien als een vertaler: je schrijft Python, en SQLAlchemy zet het om naar SQL-commando's die je database begrijpt. Het werkt met dialecten voor SQLite, PostgreSQL, MySQL en meer, dus je bent niet gebonden aan één systeem. Voor algoritmische trading is dit essentieel.

Je broker API (zoals die van Kraken of Binance) levert gestreamde koersdata, maar je wilt die data lokaal opslaan voor backtesting en analyse. SQLAlchemy maakt het eenvoudig om tabellen te definieren, data in te voegen en queries uit te voeren zonder dat je rechtstreeks SQL-code hoeft te schrijven.

Een groot voordeel is de ORM (Object-Relational Mapper). Je definieert je data als Python-klasse, en SQLAlchemy zorgt voor de databasestructuur.

Dit houdt je code schoon en leesbaar, wat cruciaal is als je later je risicomanagement-modules uitbreidt of meerdere brokers integreert. SQLAlchemy is open source en gratis te gebruiken. Voor productie-omgevingen met veel data (bijvoorbeeld 10+ jaar tick-data) overweeg je een krachtigere database zoals PostgreSQL (kosten: hosted vanaf €5-10/maand via services zoals DigitalOcean), maar voor starters volstaat SQLite (gratis, lokaal) perfect.

Waarom SQL voor je trading data?

Losse bestanden zoals CSV's zijn handig voor kleine datasets, maar ze worden snel onhandig. Stel je voor dat je 5 jaar aan 1-minuut candles van AAPL wilt analyseren: dat zijn ruim 2,5 miljoen rijen.

Doorzoeken in een CSV is traag, maar een SQL-database indexeert data en haalt informatie in milliseconden op. SQL-databases bieden structuur en integriteit. Je kunt constraints instellen, zoals unieke timestamps voor elke candle, zodat er geen dubbele data ontstaat.

Dit is vital voor backtesting: onjuiste data leidt tot verkeerde beslissingen in je bot, wat direct impact heeft op je risicomanagement.

Denk aan schaalbaarheid. Je begint misschien met data van één broker zoals DEGIRO, maar groei je uit naar meerdere assets of hogere frequenties (tick-data), dan groeit je database mee. SQL ondersteunt complexe queries, zoals het berekenen van een 200-day moving average over je dataset, zonder dat je helemaal opnieuw moet beginnen.

En veiligheid: SQL-databases zijn robuust tegen corruptie. Als je bot crasht tijdens een datalading, herstel je snel via backups. Voor algoritmische trading betekent dit gemoedsrust: je focus blijft op strategie-optimalisatie, niet op het managen van chaos.

De kern: opzetten en werking met specifieke details

Begin met installeren: pip install sqlalchemy. Voor SQLite (gratis, lokaal) heb je niets extra's nodig; voor PostgreSQL pip install psycopg2.

Stel je database in met een engine, bijvoorbeeld: engine = create_engine('sqlite:///trading_data.db'). Een SQLite database koppelen aan je Python trading bot is je entrypoint voor alle operaties.

Definieer je tabellen via de ORM. Maak een klasse voor candles, zoals hieronder. Gebruik specifieke velden voor trading: timestamp (DateTime), symbol (String, bijv.

from sqlalchemy import create_engine, Column, Float, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class Candle(Base):
    __tablename__ = 'candles'
    id = Column(Integer, primary_key=True)
    timestamp = Column(DateTime, index=True) # Index voor snelle queries
    symbol = Column(String(20)) # Bijv. 'ETH-USD' voor Binance
    open = Column(Float)
    high = Column(Float)
    low = Column(Float)
    close = Column(Float)
    volume = Column(Float)

Base.metadata.create_all(engine)

'BTC-EUR'), open, high, low, close (Float), volume (Float). Voor tick-data voeg je nog price en quantity toe. Om data in te voegen, gebruik je een session. Stel je haalt 1-minuut candles op via de API van je broker (bijv. via ccxt voor crypto).

Je voegt ze toe met session.add(Candle(...)) en commit() met session.commit(). Voor bulk-inserts (bijv.

10.000 rijen tegelijk) gebruik je bulk_save_objects voor snelheid — essentieel bij het laden van historische data van 1 jaar. Queries zijn eenvoudig en krachtig.

Haal alle BTC-USDT candles op van een specifieke datum: session.query(Candle).filter(Candle.symbol == 'BTC-USDT', Candle.timestamp >= '2023-01-01').all(). Of bereken een gemiddelde close-prijs: session.query(func.avg(Candle.close)).filter(Candle.symbol == 'AAPL').scalar(). Dit integreert direct met je backtesting-tools zoals Backtrader of Zipline.

Voor risicomanagement kun je extra tabellen toevoegen, zoals een 'positions'-table voor je open posities, met velden als entry_price, stop_loss en size.

SQLAlchemy ondersteunt relaties, dus je linkt candles aan posities voor realtime updates. Denk aan kosten: als je een dedicated PostgreSQL-server nodig hebt voor high-frequency data, budget €10-20/maand, maar SQLite is voldoende voor retail-traders.

Varianten en modellen: wat kies je voor je setup?

Voor beginners is SQLite de makkelijkste keuze. Het is een serverloze database, lokaal opgeslagen als .db-bestand.

Perfect voor backtests op je laptop met Python bots. Geen kosten, geen configuratie. Nadeel: beperkt voor meerdere users of enorme datasets verwerken (boven 10 GB), maar voor 1-5 assets met 1-minuut data gaat het jaren mee.

PostgreSQL is de volgende stap voor serieuze traders. Het is open source, maar hosted opties zoals Heroku (vanaf €7/maand) of AWS RDS (€15-50/maand) maken het betaalbaar.

Ideaal voor distributed setups, zoals meerdere bots die dezelfde database raadplegen. Voeg extensions toe voor time-series data, zoals TimescaleDB (gratis extensie), speciaal voor financiële data met compressie tot 90% op historische candles. MySQL is een alternatief, vergelijkbaar met PostgreSQL, maar iets eenvoudiger voor web-integratie. Kosten vergelijkbaar: hosted vanaf €5/maand.

Kies dit als je al bekend bent met MySQL uit andere projecten. Voor crypto-trading met Binance API, combineer het met SQLAlchemy voor naadloze tick-data opslag.

Modellen voor prijsindicaties: voor een retail-setup met 1-2 brokers (bijv. Interactive Brokers en Binance), SQLite + een lichte VPS (€5-10/maand) volstaat. Voor professioneel risicomanagement met real-time streams en backtesting op 10+ assets, ga voor PostgreSQL op een cloud-server (€20-40/maand). Vermijd dure enterprise-opties zoals Oracle (honderden euros/maand) tenzij je institutional scale hebt — voor Python bots is overkill.

Praktische tips voor integratie in je trading workflow

Combineer SQLAlchemy met je broker API voor automatische datalading. Gebruik ccxt (gratis) om data van exchanges zoals Binance of Coinbase te halen, en schrijf een script dat elke minuut nieuwe candles insert.

Voor historical data: laad 1 jaar terug via de API en vul je database in één sessie — leer SQL query's schrijven voor het filteren van historische koersdata en test eerst op een kleine subset om tijd te besparen.

Optimaliseer voor snelheid: voeg indexes toe op timestamp en symbol voor snelle backtests. Gebruik connection pooling voor meerdere bots die tegelijk queryen, voorkomt vertragingen. Voor risicomanagement, sla ook metadata op zoals spread of slippage per trade, zodat je je bot kunt fine-tunen.

Test je setup grondig: begin met een kleine dataset (bijv. 1 maand EUR/USD data van je broker) en draai een eenvoudige backtest. Meet query-tijden — als het langer dan 100ms duurt, optimaliseer dan je schema. Voor productie, backup je database wekelijks; SQLite-backups zijn simpelweg kopieën van het bestand.

Budget tip: als je net begint, investeer €0 in software (alles open source) en €5-10/maand in een VPS voor 24/7 draaiende bots.

Als je groeit naar professioneel niveau, denk dan aan €50/maand voor een dedicated database en monitoring-tools. Onthoud: goede data-opslag is de basis van winstgevende algoritmische trading — zonder rommel, meer focus op je strategie.

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 →