Beveiliging van je API keys in Python scripts
Je API key is je digitale autosleutel. Geef je die zomaar aan iedereen, dan staat je auto snel op een vreemde plek.
Bij algoritmische trading betekent een gelekte key dat iemand toegang krijgt tot je broker en zomaar orders kan plaatsen.
Dat wil je niet. Je wilt je bot laten werken, maar je geld beschermen. We gaan kijken hoe je je keys veilig houdt in Python scripts, zonder dat je een PhD in cybersecurity nodig hebt.
Wat zijn API keys en waarom zijn ze zo gevoelig?
Een API key is een unieke code die je broker geeft om je account te identificeren.
Denk aan een combinatie van een publieke identifier en een geheime sleutel. Bij brokers als Interactive Brokers, Alpaca, Binance of Kraken vraag je deze aan via je accountinstellingen.
Ze geven je script toegang tot marktdata, order placement en accountinfo. Zonder key geen verbinding, maar met een key die uitlekt, heb je een serieus probleem. Stel je voor: je hebt een Python bot die elke seconde naar data kijkt en trades plaatst via de API van je broker. Als je de key hardcoded in je script zet en per ongeluk de code deelt op GitHub, staat die key binnen minuten op straat.
Bots kunnen dan orders plaatsen zonder dat jij het wilt, tot je account leeg is.
Het gebeurt vaker dan je denkt, vooral bij beginnende traders die snel willen starten. API keys zijn gevoelig omdat ze niet alleen lezen, maar ook schrijven. Ze kunnen posities openen, sluiten, stoplosses aanpassen en soms zelfs geld overboeken.
Daarom moet je ze behandelen als wachtwoorden: nooit delen, nooit hardcoden, altijd beveiligen. Het goede nieuws: met een paar simpele stappen in Python maak je het leven van een eventuele aanvaller flink moeilijker.
Hoe je keys veilig opslaat: .env en python-dotenv
De makkelijkste en meest effectieve manier is om je keys buiten je code te bewaren.
ALPACA_KEY=PK1234567890abcdef
ALPACA_SECRET=shh_its_a_secret_0987654321
Gebruik een .env bestand. Dat is een simpel tekstbestandje waarin je je keys zet, zonder dat het in je Python script staat. Installeer python-dotenv via pip: pip install python-dotenv. Maak een bestand .env in je projectmap en vul het aan met je keys. Bijvoorbeeld:
from dotenv import load_dotenv
import os
load_dotenv()
key = os.getenv('ALPACA_KEY')
secret = os.getenv('ALPACA_SECRET')
Vervolgens laad je die variabelen in je Python script met: Het .env bestand voeg je toe aan je .gitignore, zodat het niet per ongeluk in Git belandt.
Zo blijft je key lokaal op je eigen machine. Als je bot op een server draait, zet je .env daar neer en bewaar je het niet in je repository.
Voorbeeld: een backtesting script voor Binance futures kan zo veilig je keys laden zonder dat je ze hardcoded. Er zijn alternatieven voor .env, zoals config.ini of JSON bestanden, maar .env is licht en breed ondersteund. Als je meerdere omgevingen hebt (ontwikkeling, test, productie), kun je per map een eigen .env maken. Zo hou je je productiekeys gescheiden van je testkeys. Simpel en effectief.
Versleuteling en omgevingsvariabelen voor extra veiligheid
Soms wil je meer dan alleen .env, bijvoorbeeld als je code op een gedeelde machine staat.
import keyring
keyring.set_password('trading_bot', 'alpaca_key', 'PK1234567890abcdef')
key = keyring.get_password('trading_bot', 'alpaca_key')
Dan kun je je keys versleutelen met een tool als python-keyring. Installeer met pip install keyring. Je slaat je key op in je systeemkeyring en haalt hem op in je script. Bijvoorbeeld:
Op Linux werkt dit met Secret Service, op macOS met Keychain en op Windows met Credential Locker. Je key zit dan versleuteld in je besturingssysteem, niet in een los bestand.
Handig als je je bot op een eigen laptop draait en je geen zin hebt in losse bestanden.
Een andere optie is om je keys als omgevingsvariabelen te zetten, zonder .env. Op Linux/macOS: export ALPACA_KEY='PK1234567890abcdef' in je terminal of shell profile. In Python haal je ze op met os.environ['ALPACA_KEY']. Op Windows kun je ze instellen via het configuratiescherm of PowerShell.
Dit is handig voor productieomgevingen waar je geen .env wilt bijhouden. Voor cloud servers zoals AWS of Google Cloud kun je je keys opslaan in hun secrets managers.
Bij AWS Secrets Manager betaal je ongeveer €0,40 per secret per maand, plus kosten voor API calls. Voor een enkele bot is dat goedkoop. Je haalt de secret op met de AWS SDK in Python. Zo blijven je keys centraal beveiligd en makkelijk te roteren.
Veilig gebruik van je keys in Python scripts
Je key is veilig opgeslagen, maar hoe gebruik je ze zonder risico?
Deel je code nooit met je keys erin. Gebruik een template-bestand, bijvoorbeeld config_template.py, met placeholders als 'VUL_HIER JE_KEY_IN'. De echte config.py voeg je toe aan .gitignore.
Zo deel je je bot-code met anderen zonder je keys te laten zien. Gebruik altijd de minimale rechten voor je API key.
Bij brokers als Alpaca of Interactive Brokers kun je keys maken met alleen leesrechten voor data, of alleen schrijfrechten voor orders.
Kies wat je bot nodig heeft. Bij Binance kun je futures-keys apart aanmaken met restricties. Dat beperkt de schade als een key toch uitlekt. Test je bot in een sandboxomgeving voordat je live gaat.
Brokers als Alpaca bieden een paper trading account met dezelfde API, maar vals geld. Zo check je of je keys goed laden en je bot werkt, zonder echt risico.
Voor backtesting met Python libraries als backtrader of zipline kun je historical data gebruiken zonder live keys. Optimaliseer je berekeningen en roteer je keys regelmatig. Bij de meeste brokers kun je een oude key intrekken en een nieuwe aanmaken via je accountinstellingen.
Doe dit elke 3 tot 6 maanden, of als je vermoedt dat er iets mis is.
Update je .env of secrets manager dan direct. Zo hou je je beveiliging fris.
Praktische tips voor algoritmische trading bots
Kies een broker die goede API-ondersteuning biedt en duidelijke documentatie heeft. Alpaca is populair voor beginners, met gratis market data en lage kosten.
Een API key aanmaken kost niks. Voor Binance futures betaal je geen extra’s voor keys, maar let op handelskosten (taker fee rond 0,04%). Interactive Brokers vraagt een maandelijks abonnement van €10-€20 voor API-toegang, afhankelijk van je volume.
Gebruik libraries die goed samenwerken met je broker. Voor Alpaca: pip install alpaca-trade-api. Voor Binance: python-binance, of leer zelf REST API trading calls maken.
Deze libraries helpen je keys veilig te laden via environment variables. Voor backtesting met Python kun je backtrader of vectorbt gebruiken, waarbij je 80+ technische indicatoren met FinTA kunt toepassen; die werken zonder live keys, ideaal voor testen.
Hou rekening met risicomanagement naast key-beveiliging. Zet stoplosses in je bot, limiet aan open posities (bijvoorbeeld max 5% van je portfolio per trade) en gebruik rate limits van je broker. Als je key uitlekt, beperk dan je exposure door lage limieten in te stellen via je broker dashboard. Bij Binance kun je IP-whitelisting activeren, zodat je key alleen werkt vanaf je vaste IP-adres.
Check je logs regelmatig. Gebruik de logging-module in Python om API-aanroepen te loggen, maar log nooit je keys.
Als je verdachte activiteit ziet, zoals onverwachte orders, trek dan direct je key in. Voor productiebots op een server: draai ze in een Docker-container met een eigen .env, en zet de container achter een firewall. Zo hou je controle over je toegang.
Begin klein en leer stap voor stap. Start met een simpele bot die alleen data ophaalt, bouw uit naar order placement, en test alles in paper trading.
Met deze aanpak blijven je API keys veilig en je trades onder controle. Zo bouw je een sterke basis voor algoritmische trading, zonder slapeloze nachten.
