データエクスポート
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/Text エクスポート
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}",
"日付;価格;出来高");
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 を実装し、設定から保存および読み込みできます。