GBoarse
Eine Börsensimulation.
Märkte sind eines der drei Dinge, zu denen ich immer wieder zurückkomme. Das ist dieses Interesse, in eine Simulation überführt.
Was es ist
Eine vollständige Nachbildung einer Börse, gebaut für eine Handvoll Menschen und bis zu etwa fünfzig Bots, ohne Abstriche an der Detailtreue.
Märkte sind eines der drei Dinge, zu denen ich immer wieder zurückkomme. Das ist dieses Interesse, in eine Simulation überführt.
Was „vollständig" heißt
Ein Central Limit Order Book mit Preis-Zeit-Priorität, Teilausführungen und Auktionen. Sämtliche Ordertypen: Market, Limit, Stop, Stop-Limit, Trailing Stop, Iceberg und OCO, über GTC, DAY, IOC und FOK.
Instrumente sind nicht nur Aktien. Aktien mit Gattungen, ETFs, Anleihen, Optionen amerikanischer wie europäischer Art, Futures, FX-Paare und Indizes. Mehrere Währungen, jede mit einer eigenen Zentralbank, die Leitzinsen setzt und Geld schöpft oder vernichtet.
Kapitalmaßnahmen sind modelliert statt weggewunken: Dividenden, Splits, Börsengänge, Kapitalerhöhungen, Rückkäufe, Fusionen und Delistings. Ebenso Margin, Leerverkäufe mit Wertpapierleihe und Locate, und Abwicklungszyklen mit T+0, T+1 und T+2.
Darunter liegt eine Wirtschaftssimulation mit Branchen, Unternehmenskennzahlen, Ergebnissen gemessen an der Analystenerwartung, und Nachrichten mit Stimmungsgehalt. Strategie-Bots sind eingebaut, und es gibt eine externe Bot-API über WebSocket und REST, um eigene zu schreiben.
Die zwei Regeln, aus denen alles Weitere folgt
Geld ist doppelte Buchführung, in bigint. Jede Änderung ist eine ausgeglichene Buchung. Jede Vermögenssumme ergibt null, und kein Konto wird negativ außer der Zentralbank und dem Manipulationskonto. Jede Änderung, die Geld bewegt, braucht einen Test, der belegt, dass die Bücher weiterhin aufgehen. Gleitkommageld und einfache Buchführung scheitern auf dieselbe Weise: leise und spät.
Der wiederholbare Kern ist deterministisch. Nur gesäter Zufall. Keine Wanduhr und kein ungesäter Zufall irgendwo in Befehls- oder Handler-Logik. Kennungen kommen aus Sequenzzuständen. Iteration ist sortiert, damit nichts Finanzielles je von der Einfügereihenfolge einer Map abhängt.
Determinismus ist das, was den Rest untersuchbar macht. Ein Markt, der sich nicht exakt wiederholen lässt, ist ein Markt, in dem „das hätte nicht passieren dürfen" unbeantwortbar ist.
Wie es läuft
Die Engine ist ein Fastify- und WebSocket-Dienst mit einem einzelnen serialisierten Sequencer: prüfen, im Speicher anwenden, in einer Datenbanktransaktion journalisieren, dann veröffentlichen. Ein Projektor macht aus Ereignissen Lesemodell-Zeilen innerhalb derselben Transaktion.
Der Zustand liegt im Speicher. PostgreSQL ist das dauerhafte Journal und die Projektion, nicht der Arbeitsbestand.
Die Webanwendung berührt PostgreSQL nie. Alles, was sie zeigt, kommt über die HTTP- und WebSocket-API der Engine — es gibt also eine Stelle, an der Marktzustand ausgelegt wird, und nicht zwei.
Modi
Jedes Instrument läuft in einem von vier Modi. Study erlaubt volle administrative Manipulation. Basic und Standard liegen dazwischen. Production erlaubt gar keine.
Der Punkt ist, mit derselben Engine lehren zu können, die auch sauber läuft, ohne dafür eine zweite, unehrliche Kopie für Vorführungen zu pflegen.
Stack
pnpm und Turborepo, TypeScript im Strict-Modus. Next.js für die Webanwendung, Fastify und WebSockets für die Engine, dahinter PostgreSQL und Redis. Die gemeinsame Oberfläche ist von Hand gebaut statt aus einer Komponentenbibliothek gezogen.
Status
Im Bau. Engine, Buchhaltung und Orderbuch laufen und stehen unter Test.
Rechtliches: Terms · Privacy notice · Processing agreement