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

Ошибка при чтении тиков из bin-хранилища, API 4.2.72
Atom
3/30/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'". Насоздавал ей директорий вручную под каждую дату - всё завелось, она их даже удалила сама после использования.

Tags:


Thanks:


< 1 2 3  >
asuilin

Avatar
Date: 4/1/2015
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 4/1/2015
Reply


asuilin
Mikhail Sukhov

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

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


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

asuilin

Avatar
Date: 4/1/2015
Reply


Mikhail Sukhov

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


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

Mikhail Sukhov

Avatar
Date: 4/2/2015
Reply


asuilin
Mikhail Sukhov

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


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


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

asuilin

Avatar
Date: 4/2/2015
Reply


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

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

Mikhail Sukhov

Avatar
Date: 4/2/2015
Reply


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

asuilin

Avatar
Date: 4/2/2015
Reply


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


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

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

Mikhail Sukhov

Avatar
Date: 4/2/2015
Reply


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


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


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

asuilin

Avatar
Date: 4/2/2015
Reply


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

Mikhail Sukhov

Avatar
Date: 4/2/2015
Reply


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

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

loading
clippy