Wat is 'Redis' en hoe gebruik je het voor ultra-snelle data caching?
Stel je voor: je hebt een prachtige Python trading bot die op basis van een Alpaca of Interactive Brokers API perfecte backtests draait.
Je zit op het puntje van je stoel, want de live-marktdata stroomt binnen. Maar dan... je script hapert. Het duurt seconden voordat een prijs wordt opgehaald, en je mist die ene perfecte entry. Het probleem?
Je database of API moet steeds opnieuw hetzelfde werk doen. Dat is als een Formule 1-coureur die bij elke pitstop eerst zelf zijn banden moet gaan plakken.
Het is tijd voor een versnelling. Het is tijd voor Redis.
Redis is de Ferrari onder de data-opslag. Het is een in-memory key-value store die je data opslaat in het RAM-geheugen van je server, in plaats van op een trage harde schijf. Het is razendsnel, extreem lichtgewicht, en een absolute game-changer voor traders die milliseconden nodig hebben. In deze handleiding bouwen we een simpele, maar krachtige cache voor je trading data.
Waarom Redis voor jouw trading-setup?
Voor een algoritmische trader is snelheid geld. Elke milliseconde vertraging bij het ophalen van historische data of live koersen via een API is potentieel verlies.
Stel je voor dat je een backtesting script draait dat 100.000 data punten nodig heeft.
Zonder Redis moet je broker dit elke keer opnieuw sturen of je lokale database dit uitrekennen. Met Redis sla je deze berekeningen of data punten tijdelijk op. De volgende keer dat je ze nodig hebt, pakt Redis ze in 0,2 milliseconden uit het RAM.
Je API-limit wordt niet gespoten, en je bot reageert als een cheetah. Het is niet alleen voor snelheid. Het is ook voor het delen van data tussen scripts. Je Python script voor 'Signalen' kan een koers in Redis zetten, en je 'Order Execution' script kan die direct uitlezen zonder dat ze direct met elkaar praten. Het is de lijm in je infrastructuur.
Wat je nodig hebt (Voorbereiding)
Je hebt geen supercomputer nodig. Een simpele VPS (Virtual Private Server) van DigitalOcean of Vultr met 1GB RAM is meer dan genoeg om te beginnen.
Reken op een prijs vanaf €5-6 per maand. Als je al een server draait voor je trading bot, dan kun je die waarschijnlijk direct gebruiken. Kies voor het beste operating system voor trading en je hebt verder nodig:
- Root-toegang tot je Linux-server (meestal Ubuntu 22.04).
- Python 3.8+ geïnstalleerd.
- Een terminal (SSH client) om commando's uit te voeren.
- Je favoriete code editor (VS Code, PyCharm).
Stap 1: Installeer Redis op je server
We beginnen met de basis. Redis moet op je server draaien.
- Update je package manager:
sudo apt update && sudo apt upgrade -y
Veelgemaakte fout: Vergeet de-yniet, anders moet je bij elke update 'ja' typen. - Installeer Redis:
sudo apt install redis-server -y
Dit haalt de nieuwste versie uit de Ubuntu repositories. Meestal versie 6.x of 7.x. - Start en Enable de service:
sudo systemctl enable redis-server
sudo systemctl start redis-server
Zorg ervoor dat Redis automatisch opstart als je server reboot.
Log in via SSH en gebruik Tmux om je bot-sessies actief te houden. Dit duurt ongeveer 2 minuten.
Check even of het werkt. Typ: redis-cli ping. Als je PONG terugkrijgt, ben je er bijna.
Stap 2: De Python-omgeving opzetten
Nu gaan we de brug slaan tussen Redis en je trading bots. We gebruiken de redis-py library.
Het is het meest stabiele commando-pakket voor Python. Maak een nieuwe map aan voor je project of gebruik je bestaande bot-omgeving.
- Maak een virtuele omgeving (aanbevolen):
python3 -m venv redis_env
source redis_env/bin/activate
Dit houdt je dependencies schoon en gescheiden van je systeem. - Installeer de Redis library:
pip install redis
Dit is een lichte library (ongeveer 50KB). Hij is geoptimaliseerd voor snelheid. - Maak je script:
Maak een bestand genaamdtrade_cache.py.
Stap 3: De basiscode voor caching (Praktijk)
Hieronder zie je een typisch scenario. We halen een 'fictieve' koers op via een broker API, maar we willen niet elke seconde de API lastigvallen.
We gebruiken Redis als buffer. Loop dit script. De eerste keer zie je "[API] Cache leeg...".
import redis
import time
# Verbinding maken met Redis op localhost
r = redis.Redis(host='localhost', port=6379, db=0)
def get_bitcoin_price():
# 1. Kijk eerst in de cache (Redis)
cached_price = r.get("BTC_EUR")
if cached_price:
print(f"[CACHE] Opgeslagen prijs gevonden: {cached_price.decode('utf-8')}")
return float(cached_price)
# 2. Als cache leeg is, simuleer een langzame API-call
print("[API] Cache leeg, ophalen van broker API...")
time.sleep(1) # Simuleert 1 seconde vertraging
real_price = 45000.50 # Dit zou je echte API call zijn
# 3. Sla de nieuwe waarde op in Redis met een TTL (Time To Live)
# We zetten hem op 10 seconden. Daarna is hij weer "oud".
r.setex("BTC_EUR", 10, real_price)
return real_price
# Test loop
while True:
price = get_bitcoin_price()
time.sleep(2) # Wacht 2 seconden voor de volgende ronde
De keren erna zie je "[CACHE] Opgeslagen prijs...". Na 10 seconden is de cache verlopen en moet de API weer aangesproken worden.
Dit bespaart je honderden API calls per uur.
Stap 4: Geavanceerd gebruik voor backtesting
Voor backtesting wil je soms grote datasets bewaren, zoals een 'Pandas DataFrame' van de afgelopen 30 dagen. Redis kan niet direct een DataFrame opslaan, maar wel JSON.
- Importeer json en pandas:
Je hebtimport jsonenimport pandas as pdnodig. - Data opslaan:
Gebruikr.set("key", json.dumps(data)). Dit zet je dataframe om naar een tekst string die Redis snapt. - Data uitlezen:
Gebruikpd.DataFrame(json.loads(r.get("key"))). Dit bouwt je DataFrame in een fractie van een seconde terug.
Dit is hoe je het doet zonder snelheid te verliezen. Pro Tip: Als je grote datasets (meer dan 10MB) in Redis moet stoppen, overweeg dan RedisJSON (een module). Voor de meeste trading data is de standaard JSON-serialisatie echter sneller genoeg, mits je rekening houdt met de stabiliteit van je verbinding.
Veelgemaakte fouten bij traders
Er zijn een paar valkuilen waar beginnende traders intrappen. Pas hier goed op.
- Cache Invalidation: Je haalt een prijs op, maar de markt verandert. Je vergeet de TTL (Time To Live) in te stellen. Je bot handelt op basis van oude data.
Fix: Gebruik altijdr.setex(key, time, value). Zet de tijd op een logische waarde (bijv. 5 seconden voor HFT, 1 uur voor fundamentele data). - Geheugenlekken: Je slaat unieke keys op voor elke seconde of elke tick (bijv. "BTC_12:00:01", "BTC_12:00:02"). Je RAM loopt vol en je server crasht.
Fix: Hergebruik vaste keys voor dezelfde data (bijv. "BTC_LIVE_PRICE"). Of zet een maximum geheugenlimiet in je Redis config. - Geen error handling: Als Redis down gaat, crasht je bot omdat hij niet weet hoe hij zonder cache moet werken.
Fix: Wrap je Redis calls in eentry...except redis.ConnectionErrorblok. Als het misgaat, moet je bot gewoon doorschakelen naar de langzame API.
Checklist: Is je Redis caching klaar voor de markt?
Voordat je live gaat met je bot, loop deze lijst even na. Het duurt maar 2 minuten en het voorkomt dat je op een maandagochtend je positie mist.
- ✅ Service actief: Draait Redis? (Check met
redis-cli ping). - ✅ Python lib geinstalleerd: Werkt
import rediszonder errors? - ✅ TTL ingesteld: Verloopt data automatisch?
- ✅ Fallback logica: Wat doet je bot als Redis offline is?
- ✅ Snelle check: Zie je de snelheidswinst?
Als je alle vinkjes hebt, draai je script. Je voelt nu hoe je bot ineens vloeiend loopt. Je API-limit blijft intact en je data is sneller dan je concurrenten. Welkom in de wereld van professionele infrastructuur.
