Экспорт данных
В S# реализована подсистема экспорта маркет-данных в различные форматы. Все экспортёры наследуются от базового класса BaseExporter и поддерживают единый асинхронный интерфейс.
BaseExporter
Базовый абстрактный класс BaseExporter определяет общий контракт для всех экспортёров:
- DataType — тип экспортируемых данных (тики, свечи, стакан и т.д.).
- Encoding — кодировка (по умолчанию UTF-8).
- Export<T>(IAsyncEnumerable<T>, CancellationToken) — основной метод экспорта. Возвращает
Task<(int count, DateTime? lastTime)>— количество экспортированных записей и время последней записи.
Метод автоматически маршрутизирует данные к типоспецифичным обработчикам для: QuoteChangeMessage, Level1ChangeMessage, ExecutionMessage (тики, лог заявок, транзакции), CandleMessage, NewsMessage, SecurityMessage, PositionChangeMessage, IndicatorValue и BoardStateMessage.
Типы экспортёров
1. TextExporter — CSV/текстовый экспорт
TextExporter выполняет экспорт данных в текстовый формат с использованием шаблонов SmartFormat.
- Конструктор:
(DataType dataType, Stream stream, string template, string header) - Шаблоны используют синтаксис SmartFormat, например:
{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
JsonExporter сохраняет данные в формате JSON.
- Конструктор:
(DataType dataType, Stream stream) - Indent — форматирование с отступами (по умолчанию
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
XmlExporter сохраняет данные в формате XML.
- Конструктор:
(DataType dataType, Stream stream) - Indent — форматирование с отступами (по умолчанию
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
ExcelExporter выполняет экспорт в электронные таблицы Excel.
- Конструктор:
(IExcelWorkerProvider provider, DataType dataType, Stream stream, Action breaked) - Максимальное количество строк: 1 048 576 (ограничение формата Excel).
await using var stream = File.Create("data.xlsx");
var exporter = new ExcelExporter(excelProvider, DataType.Ticks, stream,
() => { /* обработка прерывания */ });
await exporter.Export(tickMessages, token);
5. DatabaseExporter — экспорт в базу данных
DatabaseExporter сохраняет данные в базу данных через LinqToDB.
- Конструктор:
(IDatabaseProvider dbProvider, DataType dataType, DatabaseConnectionPair connection, decimal? priceStep, decimal? volumeStep) - BatchSize — размер пакета записей (по умолчанию 50).
- CheckUnique — проверка уникальности записей (по умолчанию
false). - DropExisting — удалить существующие данные перед экспортом (по умолчанию
false).
var exporter = new DatabaseExporter(
dbProvider, DataType.Ticks, dbConnection)
{
BatchSize = 100,
CheckUnique = true
};
await exporter.Export(tickMessages, token);
6. StockSharpExporter — нативный формат StockSharp
StockSharpExporter сохраняет данные во внутренний формат хранилища StockSharp.
- Конструктор:
(DataType dataType, IStorageRegistry storageRegistry, IMarketDataDrive drive, StorageFormats format) - BatchSize — размер пакета записей (по умолчанию 50).
var exporter = new StockSharpExporter(
DataType.Ticks, storageRegistry, drive, StorageFormats.Binary);
await exporter.Export(tickMessages, token);
TemplateTxtRegistry — реестр текстовых шаблонов
Класс TemplateTxtRegistry содержит предопределённые шаблоны для экспорта различных типов данных через TextExporter:
- TemplateTxtTick — шаблон для тиковых данных.
- TemplateTxtDepth — шаблон для стаканов.
- TemplateTxtCandle — шаблон для свечей.
- TemplateTxtLevel1 — шаблон для данных Level1.
- TemplateTxtOrderLog — шаблон для лога заявок.
- TemplateTxtTransaction — шаблон для транзакций.
- TemplateTxtSecurity — шаблон для инструментов.
- TemplateTxtNews — шаблон для новостей.
Шаблоны можно настроить или заменить при необходимости. Реестр реализует IPersistable и может сохраняться/загружаться из настроек.