Austausch historische Kurse
Der Austausch von historischen Kursdaten ermöglicht es, Schlusskurse der Vergangenheit mit anderen GT-Net-Instanzen zu teilen und zu empfangen. Dieser Austausch ist in den regulären Prozess zum Laden historischer Kurse integriert und funktioniert automatisch für Instrumente, bei denen das Flag gtNetHistoricalRecv aktiviert ist.
GT-Net für historische Kurse aktivieren
Um historische Kurse über GT-Net für ein bestimmtes Wertpapier oder Währungspaar zu empfangen, muss das Flag gtNetHistoricalRecv für dieses Instrument aktiviert sein. Dies kann in den Instrumenteinstellungen konfiguriert werden.
Anfrage-Struktur
Bei der Anfrage von historischen Kursen werden folgende Informationen übermittelt:
- Instrumentidentifikation: ISIN + Währung (Wertpapiere) oder Währungspaar
- Datumsbereich: Von-Datum (der letzte lokal vorhandene Kurs + 1 Tag) bis Bis-Datum
Integration in das reguläre Historyquote-Laden
Der GT-Net-Austausch historischer Kurse ist nahtlos in den regulären catchAllUpSecuritycurrencyHistoryquote-Workflow integriert:
flowchart TD
A[Start Laden historischer Kurse] --> B{GT-Net aktiviert?}
B -->|Nein| C[Connector-Fallback für alle]
B -->|Ja| D[Filter nach gtNetHistoricalRecv]
D --> E[Push-Offen-Server abfragen]
E --> F[Offen-Server abfragen]
F --> G[Connector-Fallback für verbleibende]
G --> H{Empfangswunsch-Markierungen?}
H -->|Ja| I[Connector-Daten zurücksenden]
H -->|Nein| J[Fertig]
I --> J
Detaillierter Ablauf
Schritt 1: Filter nach gtNetHistoricalRecv
Nur Instrumente mit aktiviertem gtNetHistoricalRecv-Flag sind Kandidaten für den GT-Net-Austausch. Andere Instrumente springen direkt zum Connector-basierten Laden.
Schritt 2: Push-Offen-Server abfragen
Push-Offen-Server werden zuerst nach Priorität abgefragt (mit Zufallsauswahl innerhalb der gleichen Prioritätsstufe):
- Die Anfrage enthält die Instrumentliste mit gewünschtem Datumsbereich.
- Die Antwort enthält OHLCV-Daten (Eröffnung, Hoch, Tief, Schluss, Volumen) für jeden verfügbaren Tag.
- Instrumente, die Daten erhalten, werden als «gefüllt» markiert.
Schritt 3: Offen-Server abfragen
Für noch nicht gefüllte Instrumente werden die Offen-Server abgefragt. Diese können zusätzlich «Empfangswunsch»-Markierungen zurückgeben.
Schritt 4: Connector-Fallback
Instrumente, die nicht über GT-Net gefüllt wurden, fallen auf das reguläre Connector-basierte Laden zurück (Yahoo, Finnhub, etc.). Dies umfasst:
- Instrumente ohne aktiviertes
gtNetHistoricalRecv - Instrumente, die von keinem GT-Net-Server gefüllt wurden
Schritt 5: Connector-Daten zurücksenden
Nachdem die Connectors Daten geladen haben, werden diese Daten an GT-Net-Server zurückgesendet, die «Empfangswunsch» für diese Instrumente signalisiert haben.
Datenspeicherung
Die Speicherung der empfangenen historischen Kurse hängt davon ab, ob das Instrument lokal existiert:
| Instrumenttyp | Speicherort |
|---|---|
| Lokales Instrument (existiert in der eigenen Datenbank) | Tabelle historyquote |
| Fremdes Instrument (nur im GT-Net-Pool) | Tabelle gt_net_historyquote |
flowchart LR
A[Empfangene Kurse] --> B{Instrument lokal?}
B -->|Ja| C[historyquote-Tabelle]
B -->|Nein| D[gt_net_historyquote-Tabelle]
Der «Empfangswunsch»-Mechanismus
Ein besonderes Merkmal des historischen Kursdatenaustauschs ist der bidirektionale Datenaustausch über den «Empfangswunsch»-Mechanismus.
Funktionsweise
Wenn ein Offen-Server keine Daten für ein angefragtes Instrument bereitstellen kann, aber selbst Daten für dieses Instrument empfangen möchte, sendet er eine «Empfangswunsch»-Markierung zurück:
- Die Markierung enthält das Datum, ab dem Daten gewünscht werden.
- Der anfragende Server prüft, ob er lokale Daten für dieses Instrument hat (einschliesslich über Connectors geladener Daten).
- Falls ja, sendet er diese Daten proaktiv an den interessierten Server.
sequenceDiagram
autonumber
participant A as Anfragender Server
participant B as Offen-Server
participant C as Connector
A->>B: Anfrage: Historische Kurse für Instrument X
Note over B: Hat keine Daten,<br/>möchte aber empfangen
B-->>A: Antwort: Empfangswunsch ab Datum Y
Note over A: Instrument nicht gefüllt
A->>C: Fallback: Vom Connector abrufen
C-->>A: Historische Kurse
Note over A: Speichert Daten lokal
A->>B: Push: Historische Kurse ab Datum Y
Note over B: Speichert empfangene Daten
Vorteile des Mechanismus
- Bidirektionaler Austausch: Beide Server profitieren vom Datenaustausch.
- Connector-Daten teilen: Über Connectors abgerufene Daten können mit der GT-Net-Gemeinschaft geteilt werden.
- Automatische Ergänzung: Server können automatisch Datenlücken schliessen.
- Effizienz: Der Datenaustausch erfolgt gezielt für benötigte Zeiträume.
Unterschiede zum Intraday-Austausch
| Aspekt | Historische Kurse | Intraday-Preise |
|---|---|---|
| Integration | Teil des regulären Historyquote-Ladens | Teil der Watchlist-Aktualisierung |
| Aktivierungs-Flag | gtNetHistoricalRecv | gtNetLastpriceRecv |
| Datenumfang | OHLCV für jeden Tag | Aktueller Preis mit Zeitstempel |
| Speicherung (fremd) | gt_net_historyquote | gt_net_lastprice |
| Empfangswunsch | Ja | Nein |
| Connector-Daten Push-Back | Ja | Nein |
| Rückwirkende Daten | Ja | Nein |
Datenqualität
Beim Speichern empfangener Daten werden Duplikate vermieden:
- Vor dem Speichern wird geprüft, ob für das Datum bereits ein Eintrag existiert.
- Nur neue Datensätze werden gespeichert.
- Bereits vorhandene Daten werden nicht überschrieben.
Anmerkung
Der historische Kursdatenaustausch ergänzt den Intraday-Austausch. Während der Intraday-Austausch für aktuelle Preise optimiert ist, ermöglicht der historische Austausch das Auffüllen von Datenlücken in der Vergangenheit - sowohl von GT-Net-Servern als auch durch das Teilen von Connector-geladenen Daten mit anderen Instanzen.