Ошибка при чтении тиков из 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(BitArrayReader reader, BinaryMetaInfo1 info) at StockSharp.Algo.Storages.TradeSerializer.MoveNext(MarketDataEnumerator enumerator) at StockSharp.Algo.Storages.BinaryMarketDataSerializer2.MarketDataEnumerator.MoveNext() at StockSharp.Algo.Storages.StorageHelper.RangeEnumerable1.RangeEnumerator.System.Collections.IEnumerator.MoveNext() at System.Linq.Enumerable.WhereEnumerableIterator1.MoveNext() at StockSharp.Algo.Export.TextExporter.Do[TValue](IEnumerable1 values, String templateName) at Ecng.Common.Converter.<>c__DisplayClassf.<DoInCulture>b__e() at Ecng.Common.Converter.DoInCulture(CultureInfo cultureInfo, Func1 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/2/2015
Reply


Mikhail Sukhov: Я попробовал ваши шаги. О результатах отписал выше. Именно поэтому я сделал тест, работающий в изолированных стерильных условиях, чтобы ошибка была более воспроизводимой. Ошибка ведь в хранилище, а не в Гидре, значит хранилище и надо тестировать, без десятка дополнительных слоёв кода вокруг.

Вообще, по всем правилам здравого смысла продукт уровня StockSharp, тем более работающий с крупными деньгами, должен быть покрыт функциональными и unit тестами вдоль и поперёк. Их абсолютное отсутствие на GitHub и стремление искать ошибки вручную через интерфейс Гидры порождает вопросы...

Thanks:

asuilin

Avatar
Date: 4/2/2015
Reply


Моя версия с багом дозаписи в .bin файл подтвердилась. RTSHistorySource возвращает сделки не только за заданный день, но и небольшой хвост от предыдущего дня - не разбирался почему, возможно так устроены данные FORTS. Этот хвост дописывается в хранилище предыдущего дня, в котором уже есть данные, и где-то в этом месте нарушается структура хранилища. Если перед записью отфильтровать этот хвост, т.е. записывать за один раз данные строго одного дня, то все работает. Все фьючерсы RTS за месяц прекрасно записались и прочитались. Михаил, все вводные данные у вас есть, можете исправлять баг, можете нет, дело ваше. Я буду делать свой сторадж на SQLite, так надёжнее и проще в поддержке.

Thanks:

Mikhail Sukhov

Avatar
Date: 4/3/2015
Reply


asuilin: должен быть покрыт функциональными и unit тестами вдоль и поперёк. Их абсолютное отсутствие на GitHub и стремление искать ошибки вручную через интерфейс Гидры порождает вопросы...

Вас кто-то останавливает? http://stocksharp.com/forum/4893/Sovmiestnaia-rabota-v-GitHub/

Thanks:
< 1 2 3 

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

loading
clippy