Gids voor SQLAlchemy: Koersdata opslaan in een SQL database
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.
