5.6 KiB
Projektplan: Meilenstein Daten-Infrastruktur
Datum: 13. Juni 2025
Status: Design-Phase abgeschlossen, Basis-Implementierung erfolgt
Stufe 1: Asynchrone Datenstrom-Schnittstelle (IDataStream<T>) - ABGESCHLOSSEN
-
Motivation: Das ursprüngliche, zustandsbehaftete Design war für die Verarbeitung asynchron eintreffender Daten (z.B. von
TFuture-Objekten) zu komplex und fehleranfällig. -
Ziel: Die Schaffung eines robusten, ereignisgesteuerten und non-blocking Modells, das den Datenproduzenten sauber vom Konsumenten entkoppelt.
-
Ergebnis:
- Die
IDataStream<T>-Schnittstelle wurde überarbeitet. DieHasData-Eigenschaft liefert nun einTSignal, das Konsumenten aktiv über potenziell neue Daten informiert. - Die Referenzimplementierung
TAuraFileStream<T>wurde erfolgreich angepasst und nutzt eine saubere Ereignis-Kopplung (Subscribe) für eine robuste und wartungsarme Logik. - Die korrekte Funktionalität wurde durch eine angepasste DUnitX-Test-Suite verifiziert.
- Die
Stufe 2: Abstraktion für Handelssysteme (IDataSeriesProvider) - ENTWORFEN
-
Motivation: Ein Handelssystem benötigt einen stets validen und kontinuierlichen Daten-Lookback. Ein roher
IDataStream<T>kann dies nicht garantieren, da Lücken in den Daten auftreten können (z.B. beim Übergang von Historie zu Live). -
Ziel: Die Konzeption einer übergeordneten Abstraktionsschicht, die diese komplexe Anforderung kapselt, die Datenintegrität sicherstellt und dem Handelssystem eine einfache, sichere Schnittstelle bietet.
-
Ergebnis: Entworfen wurde der
IDataSeriesProvider, der als "Black Box" für das Handelssystem fungiert und die Komplexität der Datenbeschaffung vollständig verbirgt. Er wurde mit zwei unterschiedlichen, vom Anwender wählbaren Betriebsmodi konzipiert:Modus 1: "Live-Handel"
- Motivation: Um einen echten "Sofort-Start" im Live-Handel zu ermöglichen, muss die Lücke zwischen den statischen, lokalen Historiendaten und dem aktuellen Zeitpunkt geschlossen werden.
- Ziel: Ein lückenloser, tagesaktueller Start des Handelssystems ohne manuelles Eingreifen oder lange Wartezeiten für den Nutzer.
- Ergebnis: Das Design einer Drei-Phasen-Synchronisation: (1) Lokale History laden, (2) "Catch-up"-Daten vom Broker holen, (3) auf den Live-Stream umschalten.
Modus 2: "Simulation & Backtest"
- Motivation: Für Entwicklung, Test und Analyse muss die Software völlig autonom und ohne Abhängigkeit von einer externen, potenziell nicht verfügbaren Broker-API lauffähig sein.
- Ziel: Einen "Sofort-Start" für Backtests zu jedem beliebigen Zeitpunkt in der Vergangenheit zu ermöglichen, der rein auf lokalen Dateien basiert.
- Ergebnis: Ein Design, bei dem der relevante Datenkontext in den Speicher geladen wird, um von dort aus einen schnellen Start und ein "Playback" der Daten zu ermöglichen.
TODO-Einträge: Dateninfrastruktur
Stufe 2: IDataSeriesProvider
-
Interface und Basis-Implementierung erstellen
- Definiere das
IDataSeriesProvider<T>-Interface. - Definiere die
TProviderStatus-Enumeration (psInitializing,psReadyContinuous,psReadyWithGap,psFaulted). - Implementiere eine abstrakte Basisklasse
TDataSeriesProvider<T>, die die grundlegenden Felder (z.B. für die interneTDataSeries) und Methoden bereitstellt.
- Definiere das
-
Simulations-Modus implementieren
- Erstelle eine konkrete Implementierung (z.B.
TSimulationSeriesProvider<T>). - Implementiere die Start-Logik:
- Laden des gesamten relevanten Datenkontexts via
TAuraDataServer.LoadDataSeries. - Positionierung auf einen wählbaren Startzeitpunkt via
TDataSeries.IndexOf. - Extrahieren des initialen Lookback-Puffers.
- Laden des gesamten relevanten Datenkontexts via
- Implementiere das "Playback" der nachfolgenden Datenpunkte aus der im Speicher gehaltenen Serie.
- Setze den
Statuskorrekt aufpsReadyContinuous, da im Simulationsmodus per Definition keine Lücke zur "Gegenwart" existiert.
- Erstelle eine konkrete Implementierung (z.B.
-
Live-Handel Modus implementieren
- Voraussetzung: Definiere eine Schnittstelle für Live-Datenquellen (z.B.
ILiveDataSource<T>), die eine Methode zur Abfrage rezenter historischer Daten (GetCatchUpData) enthält. - Start-Logik (Drei-Phasen-Synchronisation):
- Implementiere den parallelen Start der asynchronen Operationen:
- Laden der lokalen Historie.
- Herstellen der Broker-Verbindung und Abrufen der "Catch-up"-Daten.
- Implementiere die "Splicing"-Logik, die beide Datenquellen zu einem nahtlosen Lookback-Puffer verbindet.
- Implementiere die Prüfung auf ein "Markt-Gap" beim Übergang, um den initialen Status korrekt auf
psReadyContinuousoderpsReadyWithGapzu setzen.
- Implementiere den parallelen Start der asynchronen Operationen:
- Laufzeit-Logik:
- Implementiere das kontinuierliche Verarbeiten des Live-Streams.
- Implementiere die Fehlerbehandlung für Laufzeit-Unterbrechungen (Verbindungsverlust), inklusive des Wechsels in den
psFaulted-Status und des sicheren "Re-Priming".
- Voraussetzung: Definiere eine Schnittstelle für Live-Datenquellen (z.B.
-
Session-Kalender entwerfen und implementieren
- Motivation: Notwendig für die Unterscheidung zwischen "Markt-Gaps" (natürlich) und "Daten-Lücken" (Fehler) im Live-Betrieb.
- Anforderung: Muss pro Asset konfigurierbar sein (Handelszeiten, Feiertage).
- Implementierung: Erstelle eine Klasse, die für ein gegebenes Zeitintervall prüfen kann, ob der Markt geöffnet oder geschlossen war. Integriere diese Prüfung in die Laufzeit-Logik des
TDataSeriesProviderim Live-Modus.