Support
|
Дата: 12.07.2017
Вот так попробуйте. 1. Инициализируем объект хранилища в коннекторе. var storage = new StorageRegistry() { DefaultDrive = new LocalMarketDataDrive() };
connector.InitializeStorage( new EntityRegistry(), storage );
2. Дальше коннектор должен сам склеивать свечи...
|
|
|
|
Спасибо:
|
|
|
|
|
|
Evgeny
|
Дата: 14.07.2017
Нет, не помогает.
Я коннектор изначально создаю так:
Connector connector = new Connector(entityRegistry, storageRegistry);
Потом добавляю в него адаптеры сообщений для квика.
Поэтому метод InitializeStorage запускается и без его прямого вызова. Хотя и если дополнительно вызвать, то все равно, свечи из сохраненных ранее тиков не строятся. Только из поступающих онлайн.
Он даже файлы с тиками из хранилища не подгружает (в окне output нет соответствующего сообщения).
Хотя при этом поступающие онлайн тики он в то же самое хранилище записывает успешно.
Может быть есть работающий пример?
|
|
|
|
Спасибо:
|
|
|
|
|
|
Support
|
Дата: 14.07.2017
Привет будет после обновления документации.
А как вы подписываетесь на свечи?
|
|
|
|
Спасибо:
|
|
|
|
|
|
Evgeny
|
Дата: 14.07.2017
После соединения коннектора подписываюсь на свечи в стратегии так:
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);
|
|
|
|
Спасибо:
|
|
|
|
|
|
Evgeny
|
Дата: 17.07.2017
Попробовал добавить склеивание исторических и онлайн свечей по Вашему совету в стандартный пример 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 в его конструктор, потом вручную добавлять квиковские адаптеры сообщений, то коннект проходит нормально, но свечи строятся только из поступающих онлайн тиков. Из хранилища никакой подгрузки данных не происходит.
|
|
|
|
Спасибо:
|
|
|
|
|
|
Evgeny
|
Дата: 08.08.2017
|
|
|
|
|
Обновился до версии 4.3.26.
Проблема со склеиванием свечей из хранимых тиков и онлайн тиков исчезла. То есть свечи стали строиться.
Однако я заметил, что теперь, пока свечи строятся из хранимых тиков, возникает рассинхронизация в поступающих данных по правилу CandleManager.WhenCandlesFinished и по правилу Security.WhenNewTrade. То есть, например, срабатывает правило CandleManager.WhenCandlesFinished при закрытии свечи с 10 до 11 часов, а после этого еще продолжают срабатывать правила Security.WhenNewTrade с тиками с 10 до 11 часов. Причем такая расснихронизация по хранимым тикам может достигать нескольких дней. Срабатывает правило завершения свечи где-нибудь в середине дня 03.08.2017, а в это время еще продолжают срабатывать правила новых сделок за 02.08.2017.
Раньше такого не было.
По поступающим онлайн тикам и сейчас такого не наблюдается.
Скажите, пожалуйста, такая рассинхронизация поступающих данных - это какая-то ошибка или теперь нельзя рассчитывать на то, что данные поступающих сделок и свечей синхронизированы?
|
|
|
|
Спасибо:
|
|
|
|
|
|
Support
|
Дата: 08.08.2017
Могли бы вы прислать пример для воспроизведения ошибки?
|
|
|
|
Спасибо:
|
|
|
|
|
|
Evgeny
|
Дата: 08.08.2017
Да, могу.
В аттаче доработанный исходный код для примера SampleQuikCandles. Соответственно этим файлом нужно заменить аналогичный в папке с этим примером.
Для воспроизведения в строках 120 и 121 нужно заменить пути к папкам с хранилищем EntityRegistry и StorageRegistry на Ваши.
Я тестировал на часовых данных SBER@TQBR.
Воспроизвести можно так:
- Поставить точку прерывания на срабатывание правила WhenCandlesFinished (строка 215)
- После того, как точка прерывания сработает, запомнить время окончания свечи, которая пришла, и поставить точку прерывания на срабатывание правила WhenNewTrade (строка 211).
- После того как правило WhenNewTrade сработает, убедиться, что время пришедшей сделки меньше времени пришедшей ранее свечи.
|
|
|
|
|
|
|
Evgeny
|
Дата: 13.09.2017
Коллеги, подскажите, пожалуйста, по описанной выше проблеме рассинхронизации поступающих данных тиков и свечей (при их построении из тиков) - вы считаете это ошибкой, которая будет исправлена? Или все-таки теперь необходимо самостоятельно в каждой стратегии заботиться о синхронизации этих данных?
|
|
|
|
Спасибо:
|
|
|
|
|
|
Support
|
Дата: 14.09.2017
Пока не было времени. Задача стоит в списке.
|
|
|
|
Спасибо:
|
|
|
|
|