Склеивание свечей, история + реал-тайм
Для того, чтобы склеить исторические свечи с реал-тайм, надо инициализировать соответствующие хранилище торговых объектов CsvEntityRegistry, хранилище маркет-данных StorageRegistry и реестр хранилищ-снэпшотов SnapshotRegistry.
Рассмотрим склеивание на примере TimeFrameCandle с использованием тиковых данных, сохраненных с помощью Hydra:
private Connector _connector;
private Security security;
private CandleSeries _series;
//объявляем хранилище торговых объектов CsvEntityRegistry и хранилище маркет-данных StorageRegistry
private readonly CsvEntityRegistry _csvEntityRegistry;
private readonly StorageRegistry _storageRegistry;
private readonly SnapshotRegistry _snapshotRegistry;
// Путь к данным истории
private const string _historyPath = @"e:\DataServer\";
...
public MainWindow()
{
InitializeComponent();
....
_csvEntityRegistry = new CsvEntityRegistry(_historyPath);
_storageRegistry = new StorageRegistry
{
DefaultDrive = new LocalMarketDataDrive(_historyPath),
};
_snapshotRegistry = new SnapshotRegistry("Snapshots");
_connector.InitializeStorage(_entityRegistry, _storageRegistry, _snapshotRegistry);
//Устанавливаем количество дней для загрузки данных.
_connector.StorageAdapter.DaysLoad = TimeSpan.FromDays(30);
}
...
_connector.CandleSeriesProcessing += Connector_CandleSeriesProcessing;
...
_candleSeries =
new CandleSeries(CandleSettingsEditor.Settings.CandleType, security, CandleSettingsEditor.Settings.Arg)
{
BuildCandlesMode = MarketDataBuildModes.Build,
BuildCandlesFrom = MarketDataTypes.Trades,
IsCalcVolumeProfile = true,
};
_connector.SubscribeCandles(_candleSeries, DateTime.Today.Subtract(TimeSpan.FromDays(30)), DateTime.Now);
После этого, в обработчик события CandleSeriesProcessing начнут поступать свечи, начиная с первой исторической и по текущую реал-тайм:
private void Connector_CandleSeriesProcessing(CandleSeries candleSeries, Candle candle)
{
Chart.Draw(_candleElement, candle);
}
Если изначально создаётся Connector, то в инициализации StorageAdapter нет необходимости, достаточно передать хранилище торговых объектов CsvEntityRegistry, хранилище маркет-данных StorageRegistry и реестр хранилищ-снэпшотов SnapshotRegistry в конструктор Connector
...
_csvEntityRegistry = new CsvEntityRegistry(_historyPath);
_storageRegistry = new StorageRegistry
{
DefaultDrive = new LocalMarketDataDrive(_historyPath),
};
_snapshotRegistry = new SnapshotRegistry("Snapshots");
_connector = new Connector(_entityRegistry, _storageRegistry, _snapshotRegistry, supportOffline: true, supportSubscriptionTracking: true);
_connector.StorageAdapter.DaysLoad = TimeSpan.FromDays(3);
...