Formatos de Armazenamento
O StockSharp suporta dois formatos de armazenamento de dados de mercado definidos pela enumeração StorageFormats: Binary e CSV. Cada formato tem as suas próprias vantagens e é adequado para diferentes cenários de utilização.
Formato Binário
O formato binário é o principal formato de armazenamento de dados de alto desempenho no StockSharp. A implementação encontra-se na classe BinaryMarketDataSerializer, em Algo/Storages/Binary/.
Funcionalidades
- Compactação -- os dados são serializados em forma binária com compressão, garantindo tamanhos de ficheiro mínimos.
- Desempenho -- a leitura e a escrita são significativamente mais rápidas em comparação com formatos de texto.
- Metadados -- a classe
BinaryMetaInfoarmazena informação auxiliar: primeiros e últimos preços, valores fracionários e carimbos de data/hora. Isto permite obter rapidamente informação geral sobre os dados sem ler o ficheiro completo. - Arquitetura preparada para compressão -- o formato foi concebido de raiz para compressão eficiente em streaming.
Os ficheiros binários têm a extensão .bin.
Tipos de Dados Suportados
O formato binário suporta a serialização de todos os principais tipos de dados de mercado: candles, ticks (negócios), livros de ofertas (Level2), dados Level1, ordens e negócios próprios. Cada tipo tem um serializador especializado otimizado para a estrutura dos dados específicos.
Formato CSV
O formato de texto CSV (Comma-Separated Values) é implementado na classe CsvMarketDataSerializer, localizada em Algo/Storages/Csv/.
Funcionalidades
- Legibilidade -- os ficheiros podem ser abertos em qualquer editor de texto ou no Excel para análise visual dos dados.
- Editabilidade -- os dados podem ser corrigidos manualmente quando necessário.
- Metadados -- a classe
CsvMetaInfodisponibiliza armazenamento de metadados com suporte de codificação. Contém a propriedadeIncrementalOnly(suporte de dados incrementais) eLastId(identificador do último registo). - Maior tamanho de ficheiro -- a representação em texto ocupa significativamente mais espaço em disco.
- Processamento mais lento -- a análise de dados em texto requer recursos computacionais adicionais.
Os ficheiros CSV têm a extensão .csv.
Quando Usar Cada Formato
| Cenário | Formato Recomendado |
|---|---|
| Utilização em produção | Binary |
| Grandes volumes de dados | Binary |
| Crítico para desempenho | Binary |
| Depuração e diagnósticos | CSV |
| Análise visual de dados | CSV |
| Integração com ferramentas externas | CSV |
| Correção manual de dados | CSV |
Organização dos Ficheiros em Disco
Os dados em disco são organizados de acordo com a seguinte estrutura de caminhos:
{root_folder}/{first_letter}/{instrument_identifier}/{yyyy_MM_dd}/{file_name}.{extension}
Em que a extensão é .bin para o formato binário ou .csv para o formato de texto. Esta organização hierárquica garante uma pesquisa rápida dos dados por instrumento e data.
Por exemplo, candles de 5 minutos para o instrumento AAPL@NASDAQ em 1 de abril de 2024, no formato binário, ficariam localizados num caminho como:
Storage/S/AAPL@NASDAQ/2024_04_01/candles_5m.bin
Conversão Entre Formatos
O StockSharp permite carregar dados num formato e guardá-los noutro. Isto pode ser útil, por exemplo, para exportar dados binários para CSV para análise em ferramentas externas:
// Carregar do armazenamento binário
var binaryStorage = storageRegistry.GetTimeFrameCandleMessageStorage(
securityId, TimeSpan.FromMinutes(5), StorageFormats.Binary);
var candles = await binaryStorage.LoadAsync(from, to).ToArrayAsync();
// Salvar no armazenamento CSV
var csvStorage = storageRegistry.GetTimeFrameCandleMessageStorage(
securityId, TimeSpan.FromMinutes(5), StorageFormats.Csv);
await csvStorage.SaveAsync(candles);
Exemplo de Código
O formato é selecionado ao criar um armazenamento através de StorageRegistry:
var storageRegistry = new StorageRegistry();
// Criar armazenamento de velas em formato binário
var binaryStorage = storageRegistry.GetTimeFrameCandleMessageStorage(
securityId,
TimeSpan.FromMinutes(5),
StorageFormats.Binary);
// Criar armazenamento de velas em formato CSV
var csvStorage = storageRegistry.GetTimeFrameCandleMessageStorage(
securityId,
TimeSpan.FromMinutes(5),
StorageFormats.Csv);
// Carregar dados
var from = new DateTime(2024, 1, 1);
var to = new DateTime(2024, 1, 31);
var candles = await binaryStorage.LoadAsync(from, to).ToArrayAsync();
O formato de armazenamento também pode ser especificado ao trabalhar com dados de ticks e livros de ofertas:
// Ticks em formato binário
var tickStorage = storageRegistry.GetTickMessageStorage(
securityId, StorageFormats.Binary);
// Livros de ofertas em formato CSV
var depthStorage = storageRegistry.GetQuoteMessageStorage(
securityId, StorageFormats.Csv);