Table of Contents

Data Export

S# implements a market data export subsystem supporting various formats. All exporters inherit from the base class BaseExporter and support a unified asynchronous interface.

BaseExporter

The base abstract class BaseExporter defines the common contract for all exporters:

  • DataType — the type of data being exported (ticks, candles, order book, etc.).
  • Encoding — encoding (UTF-8 by default).
  • Export<T>(IAsyncEnumerable<T>, CancellationToken) — the main export method. Returns Task<(int count, DateTime? lastTime)> — the number of exported records and the time of the last record.

The method automatically routes data to type-specific handlers for: QuoteChangeMessage, Level1ChangeMessage, ExecutionMessage (ticks, order log, transactions), CandleMessage, NewsMessage, SecurityMessage, PositionChangeMessage, IndicatorValue, and BoardStateMessage.

Exporter Types

1. TextExporter — CSV/Text Export

TextExporter exports data to text format using SmartFormat templates.

  • Constructor: (DataType dataType, Stream stream, string template, string header)
  • Templates use SmartFormat syntax, for example: {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}",
    "Date;Price;Volume");

var (count, lastTime) = await exporter.Export(tickMessages, token);

2. JsonExporter — JSON Export

JsonExporter saves data in JSON format.

  • Constructor: (DataType dataType, Stream stream)
  • Indent — indented formatting (default 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 — XML Export

XmlExporter saves data in XML format.

  • Constructor: (DataType dataType, Stream stream)
  • Indent — indented formatting (default 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 — Excel Export

ExcelExporter exports data to Excel spreadsheets.

  • Constructor: (IExcelWorkerProvider provider, DataType dataType, Stream stream, Action breaked)
  • Maximum row count: 1,048,576 (Excel format limitation).
await using var stream = File.Create("data.xlsx");
var exporter = new ExcelExporter(excelProvider, DataType.Ticks, stream,
    () => { /* handle interruption */ });
await exporter.Export(tickMessages, token);

5. DatabaseExporter — Database Export

DatabaseExporter saves data to a database via LinqToDB.

  • Constructor: (IDatabaseProvider dbProvider, DataType dataType, DatabaseConnectionPair connection, decimal? priceStep, decimal? volumeStep)
  • BatchSize — batch size for records (default 50).
  • CheckUnique — check record uniqueness (default false).
  • DropExisting — delete existing data before export (default false).
var exporter = new DatabaseExporter(
    dbProvider, DataType.Ticks, dbConnection)
{
    BatchSize = 100,
    CheckUnique = true
};
await exporter.Export(tickMessages, token);

6. StockSharpExporter — StockSharp Native Format

StockSharpExporter saves data in the internal StockSharp storage format.

  • Constructor: (DataType dataType, IStorageRegistry storageRegistry, IMarketDataDrive drive, StorageFormats format)
  • BatchSize — batch size for records (default 50).
var exporter = new StockSharpExporter(
    DataType.Ticks, storageRegistry, drive, StorageFormats.Binary);
await exporter.Export(tickMessages, token);

TemplateTxtRegistry — Text Template Registry

The TemplateTxtRegistry class contains predefined templates for exporting various data types via TextExporter:

  • TemplateTxtTick — template for tick data.
  • TemplateTxtDepth — template for order books.
  • TemplateTxtCandle — template for candles.
  • TemplateTxtLevel1 — template for Level1 data.
  • TemplateTxtOrderLog — template for order log.
  • TemplateTxtTransaction — template for transactions.
  • TemplateTxtSecurity — template for instruments.
  • TemplateTxtNews — template for news.

Templates can be customized or replaced as needed. The registry implements IPersistable and can be saved/loaded from settings.

See Also

Data Import

Data Storage