Drives de Armazenamento

Os drives de armazenamento no StockSharp são responsáveis pela colocação física dos dados de mercado — num disco local ou num servidor remoto. A interface base IMarketDataDrive define o contrato comum para todas as implementações.

IMarketDataDrive — Interface Base

A interface IMarketDataDrive fornece as seguintes capacidades principais:

  • Path — caminho para o armazenamento de dados.
  • GetAvailableSecuritiesAsync() — obter uma lista de todos os instrumentos disponíveis no armazenamento.
  • GetAvailableDataTypesAsync() — obter uma lista de tipos de dados disponíveis para um instrumento específico.
  • GetStorageDrive() — obter um drive de armazenamento para um instrumento e tipo de dados específicos.
  • VerifyAsync() — verificar a integridade do armazenamento.
  • LookupSecuritiesAsync() — pesquisar instrumentos por critérios especificados.

LocalMarketDataDrive — Armazenamento Local em Ficheiros

A classe LocalMarketDataDrive é a implementação principal de drive que armazena dados no disco local no sistema de ficheiros.

Funcionalidades Principais

  • Sistema de ficheiros — os dados são organizados numa estrutura hierárquica de directórios por instrumentos e datas.
  • Sistema de índice — a classe interna Index fornece acesso rápido aos dados sem analisar o sistema de ficheiros. Os ficheiros de índice são armazenados no formato {instrument_path}{file_name}Dates2.bin.
  • Segurança de threads — o acesso aos dados é protegido por mecanismos de bloqueio para funcionamento correcto em aplicações multithread.
  • Construção de índice — o método BuildIndexAsync() permite reconstruir índices para melhorar o desempenho após operações de dados em massa.

Exemplo de Utilização

// Criar um drive local com um caminho especificado
var localDrive = new LocalMarketDataDrive(Path.Combine(
    Directory.GetCurrentDirectory(), "Storage"));

// Utilizar com o registo de armazenamento
var storageRegistry = new StorageRegistry
{
    DefaultDrive = localDrive,
};

// Obter a lista de instrumentos disponíveis
await foreach (var secId in localDrive.GetAvailableSecuritiesAsync())
{
    Console.WriteLine(secId);
}

RemoteMarketDataDrive — Armazenamento Remoto

A classe RemoteMarketDataDrive permite ligar a um servidor Hydra remoto para aceder a dados de mercado através da rede.

Definições de Ligação

  • endereço — endereço do servidor remoto. O valor predefinido é 127.0.0.1:5002.
  • Credentials — credenciais de autenticação (Email e Password).
  • TargetCompId — identificador do componente de destino, predefinido como "StockSharpHydraMD".
  • SecurityBatchSize — tamanho do lote ao carregar instrumentos, predefinido como 1000.
  • Timeout — tempo limite de ligação, predefinido como 2 minutos.

Exemplo de Utilização

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

// Obter tipos de dados disponíveis para um instrumento
var secId = "AAPL@NASDAQ".ToSecurityId();
await foreach (var dataType in remoteDrive.GetAvailableDataTypesAsync(secId, StorageFormats.Binary))
{
    Console.WriteLine(dataType);
}

Para mais detalhes sobre o trabalho com armazenamento remoto, consulte a secção Trabalhar com Armazenamento Remoto.

DriveCache — Gestão de Drives

A classe DriveCache gere uma colecção de drives de armazenamento e fornece cache para reutilização.

Métodos e Propriedades Principais

  • GetDrive(path) — obter um drive existente por caminho ou criar um novo.
  • DeleteDrive(drive) — remover um drive da cache.
  • TryDefaultDrive — o primeiro LocalMarketDataDrive disponível.
  • NewDriveCreated — evento para criação de novo drive.
  • DriveDeleted — evento para eliminação de drive.
  • Changed — evento para alterações na colecção de drives.

A classe implementa a interface IPersistable, que permite guardar e carregar configurações de drives.

Exemplo de Utilização

// Criar uma cache com um drive local predefinido
var defaultDrive = new LocalMarketDataDrive(Path.Combine(
    Directory.GetCurrentDirectory(), "Storage"));
var driveCache = new DriveCache(defaultDrive);

// Obter ou criar um drive por caminho
var anotherDrive = driveCache.GetDrive(@"D:\MarketData");

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

Ver Também