Exportação de dados
S# implementa um subsistema de exportação de dados de mercado que suporta vários formatos. Todos os exportadores herdam da classe base BaseExporter e suportam uma interface assíncrona unificada.
BaseExporter
A classe abstrata base BaseExporter define o contrato comum para todos os exportadores:
- DataType - o tipo de dados a exportar (ticks, velas, livro de ordens, etc.).
- Encoding - codificação (UTF-8 por predefinição).
- Export<T>(IAsyncEnumerable<T>, CancellationToken) - o método principal de exportação. Devolve
Task<(int count, DateTime? lastTime)>- o número de registos exportados e a hora do último registo.
O método encaminha automaticamente os dados para manipuladores específicos por tipo para: QuoteChangeMessage, Level1ChangeMessage, ExecutionMessage (ticks, log de ordens, transações), CandleMessage, NewsMessage, SecurityMessage, PositionChangeMessage, IndicatorValue e BoardStateMessage.
Tipos de exportadores
1. TextExporter - Exportação CSV/texto
TextExporter exporta dados para formato de texto utilizando modelos SmartFormat.
- Construtor:
(DataType dataType, Stream stream, string template, string header) - Os modelos utilizam a sintaxe SmartFormat, por exemplo:
{ServerTime:default:yyyyMMdd};{TradePrice};{TradeVolume}
await using var stream = File.Create("trades.csv");
var exporter = new TextExporter(DataType.Ticks, stream,
"{ServerTime:default:yyyyMMdd};{TradePrice};{TradeVolume}",
"Data;Preço;Volume");
var (count, lastTime) = await exporter.Export(tickMessages, token);
2. JsonExporter - Exportação JSON
JsonExporter guarda dados em formato JSON.
- Construtor:
(DataType dataType, Stream stream) - Indent - formatação com indentação (predefinição
true).
await using var stream = File.Create("candles.json");
var exporter = new JsonExporter(
DataType.CandleTimeFrame(TimeSpan.FromMinutes(5)), stream);
await exporter.Export(candleMessages, token);
3. XmlExporter - Exportação XML
XmlExporter guarda dados em formato XML.
- Construtor:
(DataType dataType, Stream stream) - Indent - formatação com indentação (predefinição
true).
await using var stream = File.Create("candles.xml");
var exporter = new XmlExporter(
DataType.CandleTimeFrame(TimeSpan.FromMinutes(5)), stream);
await exporter.Export(candleMessages, token);
4. ExcelExporter - Exportação Excel
ExcelExporter exporta dados para folhas de cálculo Excel.
- Construtor:
(IExcelWorkerProvider provider, DataType dataType, Stream stream, Action breaked) - Número máximo de linhas: 1.048.576 (limitação do formato Excel).
await using var stream = File.Create("data.xlsx");
var exporter = new ExcelExporter(excelProvider, DataType.Ticks, stream,
() => { /* tratar interrupção */ });
await exporter.Export(tickMessages, token);
5. DatabaseExporter - Exportação para base de dados
DatabaseExporter guarda dados numa base de dados através de LinqToDB.
- Construtor:
(IDatabaseProvider dbProvider, DataType dataType, DatabaseConnectionPair connection, decimal? priceStep, decimal? volumeStep) - BatchSize - tamanho do lote para registos (predefinição 50).
- CheckUnique - verificar unicidade dos registos (predefinição
false). - DropExisting - eliminar dados existentes antes da exportação (predefinição
false).
var exporter = new DatabaseExporter(
dbProvider, DataType.Ticks, dbConnection)
{
BatchSize = 100,
CheckUnique = true
};
await exporter.Export(tickMessages, token);
6. StockSharpExporter - Formato nativo StockSharp
StockSharpExporter guarda dados no formato interno de armazenamento StockSharp.
- Construtor:
(DataType dataType, IStorageRegistry storageRegistry, IMarketDataDrive drive, StorageFormats format) - BatchSize - tamanho do lote para registos (predefinição 50).
var exporter = new StockSharpExporter(
DataType.Ticks, storageRegistry, drive, StorageFormats.Binary);
await exporter.Export(tickMessages, token);
TemplateTxtRegistry - Registo de modelos de texto
A classe TemplateTxtRegistry contém modelos predefinidos para exportar vários tipos de dados através de TextExporter:
- TemplateTxtTick - modelo para dados de ticks.
- TemplateTxtDepth - modelo para livros de ordens.
- TemplateTxtCandle - modelo para velas.
- TemplateTxtLevel1 - modelo para dados Level1.
- TemplateTxtOrderLog - modelo para log de ordens.
- TemplateTxtTransaction - modelo para transações.
- TemplateTxtSecurity - modelo para instrumentos.
- TemplateTxtNews - modelo para notícias.
Os modelos podem ser personalizados ou substituídos conforme necessário. O registo implementa IPersistable e pode ser guardado/carregado a partir das definições.