Realtidssystem för automatisk handel på Stockholmsbörsen

En kapitalmarknadsaktör specialiserad på kvantitativa strategier ville automatisera en handelsstrategi baserad på orderflödesanalys. Vi byggde ett system som processar tusentals börshändelser per sekund, identifierar statistiska anomalier i realtid och genomför affärer automatiskt med mycket låg latens – helt utan mänsklig inblandning.

Kund Kapitalmarknadsaktör
Marknad Stockholmsbörsen (XSTO)
Typ Realtidssystem, kvant-trading
Levererat 2022
Kund
Kapitalmarknadsaktör specialiserad på kvantitativa strategier
Uppdrag
Systemdesign, dataingestion, signalmodell, positionshantering, övervakning
Status
Levererat och i drift – förvaltning och vidareutveckling pågår
Python 3.12 asyncio NumPy Numba
FIX Protocol WebSocket L2-orderbok ITCH
PostgreSQL Redis Telegram API Linux / systemd

En handlare med ett system i huvudet – men inget i datorn

Uppdragsgivaren hade under flera år utvecklat och utvärderat en handelsstrategi baserad på återkommande mönster i börsens orderflöden. Analysmodellen var väldokumenterad och statistiskt verifierad, men stora delar av arbetet utfördes fortfarande manuellt. Det begränsade både hur snabbt signalerna kunde identifieras och hur konsekvent strategin kunde tillämpas.

På en marknad där automatiserade aktörer reagerar inom bråkdelar av en sekund innebär varje manuell bedömning ett strukturellt underläge. Signalerna fanns redan. Det som saknades var en teknisk plattform som kunde identifiera dem, värdera dem och agera i realtid.

Uppdraget var att omvandla en etablerad analys- och handelsmodell till ett deterministiskt, automatiserat system. Strategins regler behövde formaliseras, datakällorna integreras och hela beslutsflödet byggas för kontinuerlig drift utan löpande mänsklig handpåläggning.

aqs-engine · signal_feed.log · LIVE
14:09:14.381 GOING LONG ERIC B · 5 000 @ 73.59 · σ=+2.47 · book 68% bid +LONG
14:08:40.022 SIGNAL ERIC B · momentum σ=+2.47 · tick cluster pos · confirm
14:07:55.814 FILTER INVE B · volume thin · avg trade 340 shares · skip
14:04:29.440 CLOSED VOLV B · exit 271.80 · held 22m 14s · target hit +11 600 kr
13:41:12.209 GOING SHORT VOLV B · 2 000 @ 269.70 · σ=−2.14 · book 71% ask −SHORT
13:39:22.881 INFO Heartbeat · 10 instruments · 1 247 events/s · latency 0.8ms

Från rådata till handelsbeslut på millisekunder

01 · Feed
Datainhämtning
Realtidsdata tas emot från marknads- och handelsplattformar via WebSocket och ITCH. Varje avslut, ny order, förändring och annullering avkodas och förs omedelbart vidare genom systemets händelseflöde.
02 · State
Orderboksrekonstruktion
En komplett L2-orderbok hålls i minnet för varje instrument och uppdateras vid varje ny marknadshändelse. Spread, marknadsdjup, orderflöde och obalans mellan köp- och säljsidan beräknas kontinuerligt.
03 · Signal
Signalmodell
Den statistiska modellen kombinerar orderflödesobalans, tickriktning, marknadsdjup och avvikelse från VWAP. En handelssignal skapas när modellens z-värde passerar den definierade tröskeln och systemets övriga riskvillkor är uppfyllda.
04 · Exec
Orderexekvering
Godkända order skickas automatiskt via mäklarens handels-API. Ordertyp, positionsstorlek, stoppnivå och vinstmål bestäms utifrån aktuell likviditet, volatilitet och strategi. Positionen stängs när en definierad nivå eller motsatt signal utlöses.
05 · Log
Loggning & övervakning
Marknadshändelser, signaler, order och exekveringar loggas asynkront i PostgreSQL utan att bromsa den tidskritiska handelsmotorn. Systemet skickar realtidsnotiser via Telegram, sammanställer dagens resultat och larmar automatiskt vid tekniska eller handelsrelaterade avvikelser.

Konsistens och latens – i den ordningen

Den tekniska kärnutmaningen var inte att skriva kod som kunde lägga en order. Det var att bygga ett system som fattade samma beslut på samma underlag, även när marknadsaktiviteten ökade kraftigt. En strategi som fungerar väl i historiska tester kan snabbt förlora sin fördel om data behandlas för sent, signaler beräknas inkonsekvent eller ovanliga marknadshändelser hanteras fel.

Under aktiva perioder behöver systemet hantera tusentals orderboksförändringar per sekund. Samtidigt ska det rekonstruera och hålla korrekta orderböcker för flera instrument, uppdatera analysmodellen och bedöma nya handelssignaler utan att köer växer eller händelser går förlorade.

Vi byggde kärnan med Python och asyncio och separerade nätverkskommunikation, signalberäkning och lagring i tydliga, oberoende flöden. Den aktuella orderboken hålls i minnet, medan Redis används för snabb åtkomst till kortlivad systemstatus. Latenstester visar en stabil behandlingstid på millisekundnivå från mottagen marknadshändelse till färdigt handelsbeslut.

Systemet arbetar med positioner som normalt hålls från några minuter upp till delar av en handelsdag. Hålltiden är inte förutbestämd utan styrs av marknadens fortsatta utveckling, motsatta signaler och definierade risknivåer. Det gör att strategin kan anpassa sig efter rådande marknadsläge, med kortare positioner under snabba rörelser och längre innehav när signalen består.

Riskstyrningen är integrerad i hela beslutsflödet. Positionsstorlek, stoppnivå och tillåten exponering beräknas utifrån aktuell volatilitet, likviditet och marknadsrisk. Exponeringen begränsas både per instrument och för portföljen som helhet. Om dagens förlust överstiger ett definierat gränsvärde stoppas all ny handel automatiskt och systemet kräver ett manuellt godkännande innan det återaktiveras.

Marknadsdata, signaler, riskbeslut, order och exekveringar loggas med högupplösta tidsstämplar. Det gör det möjligt att i efterhand rekonstruera beslutsförloppet, analysera avvikelser och utvärdera hur modellen fungerade under olika marknadsförhållanden.

Vyer från övervakningssystemet

Handelsmotorn arbetar automatiskt i bakgrunden, medan det tillhörande övervakningsgränssnittet ger full insyn i marknadsdata, signaler, positioner, exekveringar och systemstatus i realtid.

Övervakningsvy för automatiserad handel
Liveöversikt – prisutveckling, aktiva positioner, orealiserat resultat, orderboksöversikt och en löpande logg över de senaste signalerna, orderbesluten och exekveringarna.
L2-orderbok och marknadsdjup
Orderbok & marknadsdjup – L2-orderbok med tio prisnivåer på köp- och säljsidan, visualisering av det kumulativa marknadsdjupet och ett löpande flöde av genomförda avslut.
Logg över handelssignaler
Signallogg – realtidsflöde över identifierade och bortfiltrerade signaler, öppnade långa och korta positioner, stängda affärer och realiserat resultat per position.
Översikt över öppna och stängda positioner
Positionsöversikt – öppna och avslutade positioner med ingångskurs, utgångskurs, hålltid och resultat, tillsammans med dagens kumulativa resultatkurva och fördelning per instrument.

Behöver ni också ett specialbyggt system?

Vi bygger realtidssystem, datadriven automation och skräddarsydda tekniska lösningar för komplexa domäner. Berätta om ditt projekt.

Har du ett liknande systemprojekt?

Vi tar oss an tekniskt komplexa uppdrag inom systemutveckling, realtidsdata och automation. Hör av dig för en förutsättningslös diskussion.