Datenexport
S# implementiert ein Subsystem für den Export von Marktdaten in verschiedene Formate. Alle Exporter erben von der Basisklasse BaseExporter und unterstützen eine einheitliche asynchrone Schnittstelle.
BaseExporter
Die abstrakte Basisklasse BaseExporter definiert den gemeinsamen Vertrag für alle Exporter:
- DataType - Typ der exportierten Daten (Ticks, Kerzen, Orderbuch usw.).
- Encoding - Kodierung (standardmäßig UTF-8).
- Export<T>(IAsyncEnumerable<T>, CancellationToken) - die zentrale Exportmethode. Gibt
Task<(int count, DateTime? lastTime)>zurück - die Anzahl der exportierten Datensätze und die Zeit des letzten Datensatzes.
Die Methode leitet Daten automatisch an typspezifische Handler weiter für: QuoteChangeMessage, Level1ChangeMessage, ExecutionMessage (Ticks, Orderlog, Transaktionen), CandleMessage, NewsMessage, SecurityMessage, PositionChangeMessage, IndicatorValue und BoardStateMessage.
Exporter-Typen
1. TextExporter - CSV-/Textexport
TextExporter exportiert Daten mit SmartFormat-Vorlagen in ein Textformat.
- Konstruktor:
(DataType dataType, Stream stream, string template, string header) - Vorlagen verwenden die SmartFormat-Syntax, zum Beispiel:
{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}",
"Datum;Preis;Volumen");
var (count, lastTime) = await exporter.Export(tickMessages, token);
2. JsonExporter - JSON-Export
JsonExporter speichert Daten im JSON-Format.
- Konstruktor:
(DataType dataType, Stream stream) - Indent - eingerückte Formatierung (standardmäßig
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 speichert Daten im XML-Format.
- Konstruktor:
(DataType dataType, Stream stream) - Indent - eingerückte Formatierung (standardmäßig
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 exportiert Daten in Excel-Tabellen.
- Konstruktor:
(IExcelWorkerProvider provider, DataType dataType, Stream stream, Action breaked) - Maximale Zeilenanzahl: 1.048.576 (Beschränkung des Excel-Formats).
await using var stream = File.Create("data.xlsx");
var exporter = new ExcelExporter(excelProvider, DataType.Ticks, stream,
() => { /* Unterbrechung behandeln */ });
await exporter.Export(tickMessages, token);
5. DatabaseExporter - Datenbankexport
DatabaseExporter speichert Daten über LinqToDB in einer Datenbank.
- Konstruktor:
(IDatabaseProvider dbProvider, DataType dataType, DatabaseConnectionPair connection, decimal? priceStep, decimal? volumeStep) - BatchSize - Batchgröße für Datensätze (standardmäßig 50).
- CheckUnique - Datensatz-Eindeutigkeit prüfen (standardmäßig
false). - DropExisting - vorhandene Daten vor dem Export löschen (standardmäßig
false).
var exporter = new DatabaseExporter(
dbProvider, DataType.Ticks, dbConnection)
{
BatchSize = 100,
CheckUnique = true
};
await exporter.Export(tickMessages, token);
6. StockSharpExporter - natives StockSharp-Format
StockSharpExporter speichert Daten im internen StockSharp-Speicherformat.
- Konstruktor:
(DataType dataType, IStorageRegistry storageRegistry, IMarketDataDrive drive, StorageFormats format) - BatchSize - Batchgröße für Datensätze (standardmäßig 50).
var exporter = new StockSharpExporter(
DataType.Ticks, storageRegistry, drive, StorageFormats.Binary);
await exporter.Export(tickMessages, token);
TemplateTxtRegistry - Registry für Textvorlagen
Die Klasse TemplateTxtRegistry enthält vordefinierte Vorlagen für den Export verschiedener Datentypen über TextExporter:
- TemplateTxtTick - Vorlage für Tick-Daten.
- TemplateTxtDepth - Vorlage für Orderbücher.
- TemplateTxtCandle - Vorlage für Kerzen.
- TemplateTxtLevel1 - Vorlage für Level1-Daten.
- TemplateTxtOrderLog - Vorlage für Orderlog.
- TemplateTxtTransaction - Vorlage für Transaktionen.
- TemplateTxtSecurity - Vorlage für Instrumente.
- TemplateTxtNews - Vorlage für Nachrichten.
Vorlagen können bei Bedarf angepasst oder ersetzt werden. Die Registry implementiert IPersistable und kann aus Einstellungen gespeichert bzw. geladen werden.