Ошибка при чтении тиков из bin-хранилища, API 4.2.72

Ошибка при чтении тиков из bin-хранилища, API 4.2.72
Atom
30.03.2015
asuilin


Записал Гидрой данные из источника RTS (всё подряд за несколько лет). Пытаюсь прочитать (без разницы, через API 4.2.72 или самой Гидрой c библиотеками 4.2.71) - время от времени вылезает exception:

Error System.ArgumentException: Decimal byte array constructor requires an array of length four containing valid decimal bytes.
at System.Decimal.SetBits(Int32[] bits)
at StockSharp.Algo.Storages.MarketDataStorageHelper.ReadDecimal(BitArrayReader reader, Decimal prevPrice)
at StockSharp.Algo.Storages.MarketDataStorageHelper.ReadPriceEx[T](BitArrayReader reader, BinaryMetaInfo`1 info)
at StockSharp.Algo.Storages.TradeSerializer.MoveNext(MarketDataEnumerator enumerator)
at StockSharp.Algo.Storages.BinaryMarketDataSerializer`2.MarketDataEnumerator.MoveNext()
at StockSharp.Algo.Storages.StorageHelper.RangeEnumerable`1.RangeEnumerator.System.Collections.IEnumerator.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at StockSharp.Algo.Export.TextExporter.Do[TValue](IEnumerable`1 values, String templateName)
at Ecng.Common.Converter.<>c__DisplayClassf.<DoInCulture>b__e()
at Ecng.Common.Converter.DoInCulture[T](CultureInfo cultureInfo, Func`1 func)
at StockSharp.Algo.Export.BaseExporter.Export(Type dataType, IEnumerable values)
at StockSharp.Hydra.Controls.ExportProgress.<>c__DisplayClass6.<Start>b__4(Object s, DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)

На достаточно активных фьючах (RIZ4) такая ошибка появляется раз в несколько месяцев. В общем, прочитать полностью все сделки по конкретному фьючерсу удается редко.

Еще забавный баг в последней Гидре: почему-то разучилась создавать временные директории вида yyyy_MM_dd внутри \TemporaryFiles во время загрузки данных из RTS. Пишет ошибку "System.IO.DirectoryNotFoundException: Could not find a part of the path 'S:\Hydra\TemporaryFiles\2009_11_02\20091102.zip'". Насоздавал ей директорий вручную под каждую дату - всё завелось, она их даже удалила сама после использования.

Теги:


Спасибо:


< 1 2 3  >
asuilin

Фотография
Дата: 01.04.2015
Ответить


Кажется, мне быстрее будет реализовать собственное хранилище, имплементирующее IMarketDataStorage. Проблема в том, что у него есть свойство IMarketDataDrive Drive, а у него, в свою очередь, есть IMarketDataStorageDrive GetStorageDrive(). А IMarketDataStorageDrive оперирует бинарыми данными и рассчитан на формат StockSharp.
Какой тогда смысл в этих интерфейсах, если ни с чем, кроме закрытого бинарного формата, они работать не могут? Или реализация GetStorageDrive() не обязательна и можно там сделать заглушку?

Спасибо:

Mikhail Sukhov

Фотография
Дата: 01.04.2015
Ответить


asuilin
Mikhail Sukhov

Наверное не поняли. Надо удалить дату. Тоесть не перезаписывать файл, а новый создавать нужно.

Да, конечно я так и делал. Под перезакачкой имелась в виду повторная заливка этой даты в Гидре.


Тоесть ошибка за 2014_12_09 по RIZ4 стабильно воспроизводится?
Спасибо:

asuilin

Фотография
Дата: 01.04.2015
Ответить


Mikhail Sukhov

Тоесть ошибка за 2014_12_09 по RIZ4 стабильно воспроизводится?


Да, у меня цикл удаляем - скачиваем - читаем - получаем ошибку воспроизвёлся раз пять. Вы бы посмотрели файлик то?
Спасибо:

Mikhail Sukhov

Фотография
Дата: 02.04.2015
Ответить


asuilin
Mikhail Sukhov

Тоесть ошибка за 2014_12_09 по RIZ4 стабильно воспроизводится?


Да, у меня цикл удаляем - скачиваем - читаем - получаем ошибку воспроизвёлся раз пять. Вы бы посмотрели файлик то?


Файл смотреть нет смысла. Есть смысл устранить проблему, если она есть. Попробовал Гидрой из Гита скачать за указанную дату. Скачалось и прочиталось. Все Гидрой. Попробуете последней с Гита? Я правильно понимаю, что вы выставили в настройках нужную дату, выбрали нужный инструмент и закачали 1 день? После этого попытались его прочитать.
Спасибо:

asuilin

Фотография
Дата: 02.04.2015
Ответить


Да, всё так и делал.
Написал тест, сгенерировал 1М трейдов, записал и прочитал - все отработало.
Сейчас пробую сделать всё без Гидры, напрямую через RtsHistorySource и запись трейдов в хранилище, вдруг заработает. Заодно это быстрее, чем Гидра, работающая в один поток. Вопрос - при записи/чтении трейды никак не переупорядочиваются по номеру тика? Т.е. если я запишу сначала вечерние трейды за день, а потом утренние, они и читаться будут в том же порядке?

Кстати, посмотрел, что Гидра записала в CSV формат - во всех трейдах пустые даты. Не зря она сыпала ошибками, сама с собой не где то смогла договориться о формате дат в строках.
Спасибо:

Mikhail Sukhov

Фотография
Дата: 02.04.2015
Ответить


Вы не поняли. Надо через гидру.
Спасибо:

asuilin

Фотография
Дата: 02.04.2015
Ответить


Mikhail Sukhov
Вы не поняли. Надо через гидру.


Мне не надо через Гидру, мне надо решить мою простейшую задачу - загрузить и прочитать данные RTS. Через код ее оказалось удобнее и быстрее решать, Гидра дергает за те же классы, какая разница.
Итак, более детальное тестирование показало, что сбой в конкретной дате зависит от того, загружались ли следующие даты. Пример - при загрузке 17 марта 2015 и 18 марта сбоит чтение фьючерса GDM5 за 17 марта. При загрузке только 17 марта все ОК. Возможно, в следующем дне догружаются какие-то хвосты от предыдущего и неудачно дописываются в конец файла.

Тестировалось на версии API 4.2.75, которая датируется в NuGet 1 апреля, т.е. свежак.
Код теста прилагаю, попробуйте запустить у себя. Сначала надо загрузить пакеты из NuGet (Manage Nuget Packages) и поправить в коде пути для загрузки.
StorageTest.zip 9 KB (173)
Спасибо:

Mikhail Sukhov

Фотография
Дата: 02.04.2015
Ответить


asuilin
Mikhail Sukhov
Вы не поняли. Надо через гидру.


Мне не надо через Гидру


Мне надо определить ошибку, если она есть. Если вы хотите получать ответы бесплатно, то лучше вам все же следовать тем предписаниям, что я пишу. Ну или все самостоятельно далее.
Спасибо:

asuilin

Фотография
Дата: 02.04.2015
Ответить


Вот именно, и мне надо определить ошибку, я вам даже тест написал.
Можно сделать то же самое руками через Гидру, если вы настаиваете, но это займет гораздо больше времени.
Спасибо:

Mikhail Sukhov

Фотография
Дата: 02.04.2015
Ответить


Я попробовал ваши шаги. О результатах отписал выше.
Спасибо:
< 1 2 3  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy