Построение свечей из хранимых тиков в версии 4.3.25.2

Построение свечей из хранимых тиков в версии 4.3.25.2
Atom
7/12/2017
Evgeny


Скажите, пожалуйста, каким образом в текущей версии стокшарпа можно строить свечи сначала из хранимых тиков, а затем из поступающих онлайн? После обновления до текущей версии свечи онлайн строятся из тиков нормально, но не строятся из хранящихся на диске тиков.
Нигде не нашел примера для текущей версии.



Thanks:


1 2  >
Support

Avatar
Date: 7/12/2017
Reply


Вот так попробуйте. 1. Инициализируем объект хранилища в коннекторе. var storage = new StorageRegistry() { DefaultDrive = new LocalMarketDataDrive() { Path = "datapath" } };
connector.InitializeStorage( new EntityRegistry(), storage );
2. Дальше коннектор должен сам склеивать свечи...
Thanks:

Evgeny

Avatar
Date: 7/14/2017
Reply


Нет, не помогает.
Я коннектор изначально создаю так:
Connector connector = new Connector(entityRegistry, storageRegistry);
Потом добавляю в него адаптеры сообщений для квика.
Поэтому метод InitializeStorage запускается и без его прямого вызова. Хотя и если дополнительно вызвать, то все равно, свечи из сохраненных ранее тиков не строятся. Только из поступающих онлайн.
Он даже файлы с тиками из хранилища не подгружает (в окне output нет соответствующего сообщения).
Хотя при этом поступающие онлайн тики он в то же самое хранилище записывает успешно.

Может быть есть работающий пример?
Thanks:

Support

Avatar
Date: 7/14/2017
Reply


Привет будет после обновления документации.

А как вы подписываетесь на свечи?
Thanks:

Evgeny

Avatar
Date: 7/14/2017
Reply


После соединения коннектора подписываюсь на свечи в стратегии так:
CandleManager candleManager = new CandleManager(connector);
CandleSeries candleSeries = new CandleSeries(typeof(TimeframeCandle, security, period);
candleSeries.BuildCandlesMode = BuildCandlesModes.Build;// LoadAndBuild я тоже пробовал
candleSeries.From = from;
candleSeries.To = DateTimeOffset.MaxValue;
candleManager.Start(candleSeries, from, DateTimeOffset.MaxValue);
strategy.Start();

А в методе OnStarted() стратегии выполняю:
candleManager.WhenCandlesFinished(candleSeries).Do(ProcessFinishedCandle).Apply(this);
Thanks:

Evgeny

Avatar
Date: 7/17/2017
Reply


Попробовал добавить склеивание исторических и онлайн свечей по Вашему совету в стандартный пример SampleQuikCandles.
Ничего также не получилось.
Если в качестве коннектора использовать QuikTrader и потом вызывать InitializeStorage, передавая в него EntityRegistry и StorageRegistry, то в момент попытки коннекта появляется вот такая ошибка:
System.InvalidOperationException: Сообщение 'Connect,T(L)=2017/07/17 07:01:56.221,Error=Необходимо создать хотя бы одно подключение.' привело к ошибке обработки. ---> System.Collections.Generic.KeyNotFoundException: Данный ключ отсутствует в словаре.

Если же в качестве коннектора использовать Connector и передавать EntityRegistry и StorageRegistry в его конструктор, потом вручную добавлять квиковские адаптеры сообщений, то коннект проходит нормально, но свечи строятся только из поступающих онлайн тиков. Из хранилища никакой подгрузки данных не происходит.
Thanks:

Evgeny

Avatar
Date: 8/8/2017
Reply


Обновился до версии 4.3.26.
Проблема со склеиванием свечей из хранимых тиков и онлайн тиков исчезла. То есть свечи стали строиться.
Однако я заметил, что теперь, пока свечи строятся из хранимых тиков, возникает рассинхронизация в поступающих данных по правилу CandleManager.WhenCandlesFinished и по правилу Security.WhenNewTrade. То есть, например, срабатывает правило CandleManager.WhenCandlesFinished при закрытии свечи с 10 до 11 часов, а после этого еще продолжают срабатывать правила Security.WhenNewTrade с тиками с 10 до 11 часов. Причем такая расснихронизация по хранимым тикам может достигать нескольких дней. Срабатывает правило завершения свечи где-нибудь в середине дня 03.08.2017, а в это время еще продолжают срабатывать правила новых сделок за 02.08.2017.
Раньше такого не было.
По поступающим онлайн тикам и сейчас такого не наблюдается.
Скажите, пожалуйста, такая рассинхронизация поступающих данных - это какая-то ошибка или теперь нельзя рассчитывать на то, что данные поступающих сделок и свечей синхронизированы?
Thanks:

Support

Avatar
Date: 8/8/2017
Reply


Могли бы вы прислать пример для воспроизведения ошибки?
Thanks:

Evgeny

Avatar
Date: 8/8/2017
Reply


Да, могу.
В аттаче доработанный исходный код для примера SampleQuikCandles. Соответственно этим файлом нужно заменить аналогичный в папке с этим примером.
Для воспроизведения в строках 120 и 121 нужно заменить пути к папкам с хранилищем EntityRegistry и StorageRegistry на Ваши.
Я тестировал на часовых данных SBER@TQBR.
Воспроизвести можно так:
1. Поставить точку прерывания на срабатывание правила WhenCandlesFinished (строка 215)
2. После того, как точка прерывания сработает, запомнить время окончания свечи, которая пришла, и поставить точку прерывания на срабатывание правила WhenNewTrade (строка 211).
3. После того как правило WhenNewTrade сработает, убедиться, что время пришедшей сделки меньше времени пришедшей ранее свечи.
MainWindow.xaml.cs 7 KB (390)
Thanks: Support

Evgeny

Avatar
Date: 9/13/2017
Reply


Коллеги, подскажите, пожалуйста, по описанной выше проблеме рассинхронизации поступающих данных тиков и свечей (при их построении из тиков) - вы считаете это ошибкой, которая будет исправлена? Или все-таки теперь необходимо самостоятельно в каждой стратегии заботиться о синхронизации этих данных?
Thanks:

Support

Avatar
Date: 9/14/2017
Reply


Пока не было времени. Задача стоит в списке.
Thanks:
1 2  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy