Speicherlaufwerke

Speicherlaufwerke in StockSharp sind für die physische Ablage von Marktdaten verantwortlich - auf einer lokalen Festplatte oder auf einem entfernten Server. Das Basisinterface IMarketDataDrive definiert den gemeinsamen Vertrag für alle Implementierungen.

IMarketDataDrive - Basisinterface

Das Interface IMarketDataDrive stellt folgende Kernfunktionen bereit:

  • Path - Pfad zum Datenspeicher.
  • GetAvailableSecuritiesAsync() - Liste aller verfügbaren Instrumente im Speicher abrufen.
  • GetAvailableDataTypesAsync() - Liste der für ein bestimmtes Instrument verfügbaren Datentypen abrufen.
  • GetStorageDrive() - Speicherlaufwerk für ein bestimmtes Instrument und einen bestimmten Datentyp erhalten.
  • VerifyAsync() - Integrität des Speichers prüfen.
  • LookupSecuritiesAsync() - Instrumente nach angegebenen Kriterien suchen.

LocalMarketDataDrive - Lokaler Dateispeicher

Die Klasse LocalMarketDataDrive ist die primäre Laufwerksimplementierung und speichert Daten auf der lokalen Festplatte im Dateisystem.

Wichtige Eigenschaften

  • Dateisystem - Daten werden in einer hierarchischen Verzeichnisstruktur nach Instrumenten und Daten organisiert.
  • Indexsystem - die interne Klasse Index ermöglicht schnellen Datenzugriff ohne Scannen des Dateisystems. Indexdateien werden im Format {instrument_path}{file_name}Dates2.bin gespeichert.
  • Threadsicherheit - der Datenzugriff wird durch Sperrmechanismen geschützt, damit mehrthreadige Anwendungen korrekt arbeiten.
  • Indexerstellung - die Methode BuildIndexAsync() ermöglicht den Neuaufbau von Indizes zur Verbesserung der Performance nach Massenoperationen mit Daten.

Verwendungsbeispiel

// Lokales Laufwerk mit angegebenem Pfad erstellen
var localDrive = new LocalMarketDataDrive(Path.Combine(
    Directory.GetCurrentDirectory(), "Storage"));

// Mit der Storage Registry verwenden
var storageRegistry = new StorageRegistry
{
    DefaultDrive = localDrive,
};

// Liste verfügbarer Instrumente abrufen
await foreach (var secId in localDrive.GetAvailableSecuritiesAsync())
{
    Console.WriteLine(secId);
}

RemoteMarketDataDrive - Entfernter Speicher

Die Klasse RemoteMarketDataDrive ermöglicht die Verbindung zu einem entfernten Hydra-Server, um über das Netzwerk auf Marktdaten zuzugreifen.

Verbindungseinstellungen

  • Adresse - Adresse des entfernten Servers. Standard ist 127.0.0.1:5002.
  • Credentials - Anmeldedaten (Email und Password).
  • TargetCompId - Ziel-Komponentenbezeichner, standardmäßig "StockSharpHydraMD".
  • SecurityBatchSize - Batchgröße beim Laden von Instrumenten, standardmäßig 1000.
  • Timeout - Verbindungs-Timeout, standardmäßig 2 Minuten.

Verwendungsbeispiel

// Entferntes Laufwerk erstellen
var remoteDrive = new RemoteMarketDataDrive
{
    Address = "192.168.1.100:5002".To<EndPoint>(),
    Credentials = { Email = "user", Password = "pass".Secure() }
};

// Verfügbare Datentypen für ein Instrument abrufen
var secId = "AAPL@NASDAQ".ToSecurityId();
await foreach (var dataType in remoteDrive.GetAvailableDataTypesAsync(secId, StorageFormats.Binary))
{
    Console.WriteLine(dataType);
}

Weitere Details zur Arbeit mit entferntem Speicher finden Sie im Abschnitt Arbeiten mit Remote Storage.

DriveCache - Laufwerksverwaltung

Die Klasse DriveCache verwaltet eine Sammlung von Speicherlaufwerken und stellt Caching zur Wiederverwendung bereit.

Wichtige Methoden und Eigenschaften

  • GetDrive(path) - vorhandenes Laufwerk nach Pfad abrufen oder ein neues erstellen.
  • DeleteDrive(drive) - Laufwerk aus dem Cache entfernen.
  • TryDefaultDrive - das erste verfügbare LocalMarketDataDrive.
  • NewDriveCreated - Ereignis beim Erstellen eines neuen Laufwerks.
  • DriveDeleted - Ereignis beim Löschen eines Laufwerks.
  • Changed - Ereignis bei Änderungen an der Laufwerkssammlung.

Die Klasse implementiert das Interface IPersistable, wodurch Laufwerkskonfigurationen gespeichert und geladen werden können.

Verwendungsbeispiel

// Cache mit einem lokalen Standardlaufwerk erstellen
var defaultDrive = new LocalMarketDataDrive(Path.Combine(
    Directory.GetCurrentDirectory(), "Storage"));
var driveCache = new DriveCache(defaultDrive);

// Laufwerk nach Pfad abrufen oder erstellen
var anotherDrive = driveCache.GetDrive(@"D:\MarketData");

// Ereignisse abonnieren
driveCache.NewDriveCreated += drive =>
    Console.WriteLine($"Drive created: {drive.Path}");

Siehe auch