Speicherformate
StockSharp unterstützt zwei Marktdatenspeicherformate, die durch die Enumeration StorageFormats definiert werden: Binary und CSV. Jedes Format hat eigene Vorteile und eignet sich für unterschiedliche Anwendungsfälle.
Binärformat
Das Binärformat ist das primäre Hochleistungsformat zur Speicherung von Daten in StockSharp. Die Implementierung befindet sich in der Klasse BinaryMarketDataSerializer innerhalb von Algo/Storages/Binary/.
Eigenschaften
- Kompaktheit - Daten werden binär mit Komprimierung serialisiert, wodurch minimale Dateigrößen erreicht werden.
- Performance - Lesen und Schreiben sind deutlich schneller als bei Textformaten.
- Metadaten - die Klasse
BinaryMetaInfospeichert Hilfsinformationen: erste und letzte Preise, Bruchteilswerte, Zeitstempel. Dadurch können allgemeine Dateninformationen schnell abgerufen werden, ohne die Datei vollständig zu lesen. - Kompressionsfähige Architektur - das Format ist von Grund auf für effiziente Streaming-Komprimierung ausgelegt.
Binärdateien haben die Erweiterung .bin.
Unterstützte Datentypen
Das Binärformat unterstützt die Serialisierung aller wichtigen Marktdatentypen: Candles, Ticks (Trades), Orderbücher (Level2), Level1-Daten, Orders und eigene Trades. Jeder Typ besitzt einen spezialisierten Serializer, der für die Struktur der jeweiligen Daten optimiert ist.
CSV-Format
Das Textformat CSV (Comma-Separated Values) ist in der Klasse CsvMarketDataSerializer implementiert, die sich in Algo/Storages/Csv/ befindet.
Eigenschaften
- Lesbarkeit - Dateien können in jedem Texteditor oder in Excel zur visuellen Datenanalyse geöffnet werden.
- Bearbeitbarkeit - Daten können bei Bedarf manuell korrigiert werden.
- Metadaten - die Klasse
CsvMetaInfostellt Metadatenspeicherung mit Encoding-Unterstützung bereit. Sie enthält die EigenschaftIncrementalOnly(Unterstützung inkrementeller Daten) undLastId(letzter Datensatzbezeichner). - Größere Dateigröße - die Textdarstellung benötigt deutlich mehr Speicherplatz.
- Langsamere Verarbeitung - das Parsen von Textdaten erfordert zusätzliche Rechenressourcen.
CSV-Dateien haben die Erweiterung .csv.
Wann welches Format verwendet werden sollte
| Szenario | Empfohlenes Format |
|---|---|
| Produktionseinsatz | Binary |
| Große Datenmengen | Binary |
| Performance-kritisch | Binary |
| Debugging und Diagnose | CSV |
| Visuelle Datenanalyse | CSV |
| Integration mit externen Tools | CSV |
| Manuelle Datenkorrektur | CSV |
Dateiorganisation auf dem Datenträger
Daten werden auf dem Datenträger gemäß folgender Pfadstruktur organisiert:
{root_folder}/{first_letter}/{instrument_identifier}/{yyyy_MM_dd}/{file_name}.{extension}
Die Erweiterung ist .bin für das Binärformat oder .csv für das Textformat. Diese hierarchische Organisation ermöglicht eine schnelle Datensuche nach Instrument und Datum.
Zum Beispiel würden 5-Minuten-Candles für das Instrument AAPL@NASDAQ am 1. April 2024 im Binärformat unter einem Pfad wie diesem liegen:
Storage/S/AAPL@NASDAQ/2024_04_01/candles_5m.bin
Konvertierung zwischen Formaten
StockSharp ermöglicht es, Daten in einem Format zu laden und in einem anderen zu speichern. Das kann beispielsweise nützlich sein, um Binärdaten als CSV für die Analyse in externen Tools zu exportieren:
// Aus Binärspeicher laden
var binaryStorage = storageRegistry.GetTimeFrameCandleMessageStorage(
securityId, TimeSpan.FromMinutes(5), StorageFormats.Binary);
var candles = await binaryStorage.LoadAsync(from, to).ToArrayAsync();
// In CSV-Speicher speichern
var csvStorage = storageRegistry.GetTimeFrameCandleMessageStorage(
securityId, TimeSpan.FromMinutes(5), StorageFormats.Csv);
await csvStorage.SaveAsync(candles);
Codebeispiel
Das Format wird beim Erstellen eines Speichers über StorageRegistry ausgewählt:
var storageRegistry = new StorageRegistry();
// Candle-Speicher im Binärformat erstellen
var binaryStorage = storageRegistry.GetTimeFrameCandleMessageStorage(
securityId,
TimeSpan.FromMinutes(5),
StorageFormats.Binary);
// Candle-Speicher im CSV-Format erstellen
var csvStorage = storageRegistry.GetTimeFrameCandleMessageStorage(
securityId,
TimeSpan.FromMinutes(5),
StorageFormats.Csv);
// Daten laden
var from = new DateTime(2024, 1, 1);
var to = new DateTime(2024, 1, 31);
var candles = await binaryStorage.LoadAsync(from, to).ToArrayAsync();
Das Speicherformat kann auch bei der Arbeit mit Tick-Daten und Orderbüchern angegeben werden:
// Ticks im Binärformat
var tickStorage = storageRegistry.GetTickMessageStorage(
securityId, StorageFormats.Binary);
// Orderbücher im CSV-Format
var depthStorage = storageRegistry.GetQuoteMessageStorage(
securityId, StorageFormats.Csv);