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:

InstrumenttypSpeicherort
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

AspektHistorische KurseIntraday-Preise
IntegrationTeil des regulären Historyquote-LadensTeil der Watchlist-Aktualisierung
Aktivierungs-FlaggtNetHistoricalRecvgtNetLastpriceRecv
DatenumfangOHLCV für jeden TagAktueller Preis mit Zeitstempel
Speicherung (fremd)gt_net_historyquotegt_net_lastprice
EmpfangswunschJaNein
Connector-Daten Push-BackJaNein
Rückwirkende DatenJaNein

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.