API の操作
準備
例でヒストリカルデータを扱うために、ヒストリカルデータサンプルを含む NuGet パッケージを使用します。これは NuGet Gallery からインストールできます。このパッケージは、ストレージ操作のデモに使用できるデータセットを提供します。
すべてのコードは StockSharp リポジトリ で入手できます。
ストレージレジストリの作成
StockSharp で市場データストレージを扱うには、StorageRegistry クラスを使用します。このクラスのオブジェクトを作成するときは、StorageRegistry.DefaultDrive プロパティを介して既定ストレージへのパスを設定するか、LocalMarketDataDrive を使用してヒストリカルデータを扱う特定のフォルダーを指定できます。
// 既定パスで StorageRegistry を作成します
var storageRegistry = new StorageRegistry();
// NuGet パッケージのデータへのパスを指定して StorageRegistry を作成します
var pathHistory = Paths.HistoryDataPath; // NuGet パッケージのデータへのパス
var localDrive = new LocalMarketDataDrive(pathHistory);
var storageRegistry = new StorageRegistry()
{
DefaultDrive = localDrive,
};
データの取得
StorageRegistry を通じて、目的の時間範囲に対するさまざまな種類の市場データにアクセスできます。このために使用されるメソッドは次のとおりです。
- StorageRegistry.GetTimeFrameCandleMessageStorage はローソク足用です
- StorageRegistry.GetTickMessageStorage はティック用です
- StorageRegistry.GetQuoteMessageStorage は板情報用です
これらの各メソッドは対応するストレージを返し、開始日と終了日を指定して LoadAsync メソッドを使用することで、そこからデータを読み込めます。
// ローソク足を取得します
var securityId = "AAPL@NASDAQ".ToSecurityId();
var candleStorage = storageRegistry.GetTimeFrameCandleMessageStorage(securityId, TimeSpan.FromMinutes(1), StorageFormats.Binary);
var candles = candleStorage.LoadAsync(new DateTime(2020, 4, 1), new DateTime(2020, 4, 2));
await foreach (var candle in candles)
{
Console.WriteLine(candle);
}
// ティックを取得します
var tradeStorage = storageRegistry.GetTickMessageStorage(securityId, StorageFormats.Binary);
var trades = tradeStorage.LoadAsync(new DateTime(2020, 4, 1), new DateTime(2020, 4, 2));
await foreach (var trade in trades)
{
Console.WriteLine(trade);
}
// 板情報を取得します
var marketDepthStorage = storageRegistry.GetQuoteMessageStorage(securityId, StorageFormats.Binary);
var marketDepths = marketDepthStorage.LoadAsync(new DateTime(2020, 4, 1), new DateTime(2020, 4, 2));
await foreach (var marketDepth in marketDepths)
{
Console.WriteLine(marketDepth);
}
データの保存
既存のストレージに新しいデータを保存するには、対応するストレージの SaveAsync メソッドを使用します。これにより、ヒストリカルデータに新しい値を追加できます。
// 新しいローソク足を保存します
var newCandles = new List<CandleMessage>
{
// ここで新しい CandleMessage オブジェクトを作成します
};
await candleStorage.SaveAsync(newCandles);
// 新しいティックを保存します
var newTrades = new List<ExecutionMessage>
{
// ここでティック用の新しい ExecutionMessage オブジェクトを作成します
};
await tradeStorage.SaveAsync(newTrades);
// 新しい板情報を保存します
var newMarketDepths = new List<QuoteChangeMessage>
{
// ここで板情報用の新しい QuoteChangeMessage オブジェクトを作成します
};
await marketDepthStorage.SaveAsync(newMarketDepths);
データの削除
特定期間のデータを削除するには、対応するストレージの DeleteAsync メソッドを使用します。サンプルパッケージからデータを削除するときは注意してください。
// 指定した期間のローソク足を削除します
await candleStorage.DeleteAsync(new DateTime(2020, 4, 1), new DateTime(2020, 4, 2));
// 指定した期間のティックを削除します
await tradeStorage.DeleteAsync(new DateTime(2020, 4, 1), new DateTime(2020, 4, 2));
// 指定した期間の板情報を削除します
await marketDepthStorage.DeleteAsync(new DateTime(2020, 4, 1), new DateTime(2020, 4, 2));
これらの操作により、Hydra を通じて読み込まれたもの、NuGet パッケージで提供されたもの、またはアプリケーションの動作中に作成されたもののいずれであっても、ヒストリカルデータを効率的に管理できます。