Exportación de datos
S# implementa un subsistema de exportación de datos de mercado con soporte para varios formatos. Todos los exportadores heredan de la clase base BaseExporter y admiten una interfaz asíncrona unificada.
BaseExporter
La clase abstracta base BaseExporter define el contrato común para todos los exportadores:
- DataType — tipo de datos que se exportan (ticks, velas, libro de órdenes, etc.).
- Encoding — codificación (UTF-8 por defecto).
- Export<T>(IAsyncEnumerable<T>, CancellationToken) — método principal de exportación. Devuelve
Task<(int count, DateTime? lastTime)>— el número de registros exportados y la hora del último registro.
El método enruta automáticamente los datos a manejadores específicos por tipo para: QuoteChangeMessage, Level1ChangeMessage, ExecutionMessage (ticks, order log, transacciones), CandleMessage, NewsMessage, SecurityMessage, PositionChangeMessage, IndicatorValue y BoardStateMessage.
Tipos de exportadores
1. TextExporter — exportación CSV/texto
TextExporter exporta datos a formato de texto usando plantillas SmartFormat.
- Constructor:
(DataType dataType, Stream stream, string template, string header) - Las plantillas usan sintaxis SmartFormat, por ejemplo:
{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}",
"Fecha;Precio;Volumen");
var (count, lastTime) = await exporter.Export(tickMessages, token);
2. JsonExporter — exportación JSON
JsonExporter guarda datos en formato JSON.
- Constructor:
(DataType dataType, Stream stream) - Indent — formato con sangría (por defecto
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 — exportación XML
XmlExporter guarda datos en formato XML.
- Constructor:
(DataType dataType, Stream stream) - Indent — formato con sangría (por defecto
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 — exportación Excel
ExcelExporter exporta datos a hojas de cálculo Excel.
- Constructor:
(IExcelWorkerProvider provider, DataType dataType, Stream stream, Action breaked) - Número máximo de filas: 1.048.576 (limitación del formato Excel).
await using var stream = File.Create("data.xlsx");
var exporter = new ExcelExporter(excelProvider, DataType.Ticks, stream,
() => { /* gestionar la interrupción */ });
await exporter.Export(tickMessages, token);
5. DatabaseExporter — exportación a base de datos
DatabaseExporter guarda datos en una base de datos mediante LinqToDB.
- Constructor:
(IDatabaseProvider dbProvider, DataType dataType, DatabaseConnectionPair connection, decimal? priceStep, decimal? volumeStep) - BatchSize — tamaño del lote para registros (por defecto 50).
- CheckUnique — comprobar unicidad de registros (por defecto
false). - DropExisting — eliminar datos existentes antes de exportar (por defecto
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 datos en el formato interno de almacenamiento StockSharp.
- Constructor:
(DataType dataType, IStorageRegistry storageRegistry, IMarketDataDrive drive, StorageFormats format) - BatchSize — tamaño del lote para registros (por defecto 50).
var exporter = new StockSharpExporter(
DataType.Ticks, storageRegistry, drive, StorageFormats.Binary);
await exporter.Export(tickMessages, token);
TemplateTxtRegistry — registro de plantillas de texto
La clase TemplateTxtRegistry contiene plantillas predefinidas para exportar varios tipos de datos mediante TextExporter:
- TemplateTxtTick — plantilla para datos de ticks.
- TemplateTxtDepth — plantilla para libros de órdenes.
- TemplateTxtCandle — plantilla para velas.
- TemplateTxtLevel1 — plantilla para datos Level1.
- TemplateTxtOrderLog — plantilla para order log.
- TemplateTxtTransaction — plantilla para transacciones.
- TemplateTxtSecurity — plantilla para instrumentos.
- TemplateTxtNews — plantilla para noticias.
Las plantillas pueden personalizarse o reemplazarse según sea necesario. El registro implementa IPersistable y puede guardarse/cargarse desde configuraciones.