Ошибка при чтении тиков из 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

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


В дополнение, если сохранять не в bin а в CSV, Гидра сыплет такими ошибками в процессе скачивания RTS:

RTS-CSV 31.03.2015 8:46:51 +03:00 Info Старт загрузки сделок за 24.05.2011.
RTS-CSV 31.03.2015 8:47:26 +03:00 Error System.InvalidCastException: Cannot convert with format HH:mm:ss.FFFFFF zzz to TimeSpan. ---> System.FormatException: String was not recognized as a valid DateTime.
at System.DateTimeOffset.ParseExact(String input, String format, IFormatProvider formatProvider, DateTimeStyles styles)
at Ecng.Common.TimeHelper.ToDateTimeOffset(String value, String format)
--- End of inner exception stack trace ---
at Ecng.Common.TimeHelper.ToDateTimeOffset(String value, String format)
at StockSharp.Algo.Storages.CsvMarketDataSerializer`1.ParseTime(String str, DateTime date)
at StockSharp.Algo.Storages.CsvMarketDataSerializer`1.CsvMetaInfo.<>c__DisplayClass15.<Read>b__14()
at Ecng.Common.Converter.<>c__DisplayClassf.<DoInCulture>b__e()
at Ecng.Common.Converter.DoInCulture[T](CultureInfo cultureInfo, Func`1 func)
at StockSharp.Algo.Storages.MarketDataStorage`2.GetInfo(Stream stream, DateTime date)
at StockSharp.Algo.Storages.MarketDataStorage`2.Save(IEnumerable`1 data)
at StockSharp.Hydra.Core.BaseHydraTask.SafeSave[T](Security security, Type messageType, Object arg, IEnumerable`1 values, Func`2 getTime, IEnumerable`1 getErrors, Func`4 getStorage)
RTS-CSV 31.03.2015 8:47:26 +03:00 Info Для SVM1@FORTS загружено 4019 ExecutionMessage (Tick).

Ошибок много, в среднем одна ошибка на 5 скачанных инструментов.

Следующим шагом попробую отказаться от Гидры и напрямую дергать за RtsHistorySource.LoadTrades, с собственными хранилищами. Открытый код в Algo.History облегчил бы задачу.
Спасибо:

Mikhail Sukhov

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


1. Какая версия Гидры.
2. Если битый файл удалить и повторно перезакачать, будет ли ошибка? Если да, то скажите дату и инструмент.
Спасибо:

asuilin

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


Mikhail Sukhov
1. Какая версия Гидры.
2. Если битый файл удалить и повторно перезакачать, будет ли ошибка? Если да, то скажите дату и инструмент.


1. 4.2.71
2. Ошибка возникает на любом инструменте с достаточно большим количеством трейдов. На RI/SI, например, мне редко удавалось прочитать без ошибки тиковую историю любого фьючерса за три месяца. С перезакачкой не очень понятно, Гидра же хранит где-то в недрах метаинформацию о том, что скачалось? Если просто удалить файлы и закачать заново, ничего не сломается?

Через RtsHistorySource вроде бы нормально заливается в память, т.е. проблема в хранилище.
Спасибо:

Mikhail Sukhov

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


asuilin
С перезакачкой не очень понятно, Гидра же хранит где-то в недрах метаинформацию о том, что скачалось? Если просто удалить файлы и закачать заново, ничего не сломается?


Можно просто удалить битые даты и сбросить кэш дат в Гидре. Или удалить этот файл вручную.
Спасибо:

asuilin

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


Кеш дат это tradesDates.bin?
Спасибо:

Mikhail Sukhov

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


Да
Спасибо:

asuilin

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


Михаил, а не могли бы вы публиковать отладочную информацию в NuGet? Хрен ведь поймешь, на какой конкретной дате оно спотыкается внутри итератора.
См. http://www.arturdr.ru/ne...-av-infrastructure-web/ и https://docs.nuget.org/c...ishing-a-symbol-package
Спасибо:

asuilin

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


Перезакачка полечила одну битую дату, но не полечила другую. На RIZ4@FORTS для 2014_12_09 (9 декабря) данные остаются битыми после нескольких перезакачек. Файл приложу, если найду как это сделать.
Спасибо:

Mikhail Sukhov

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


asuilin
Перезакачка полечила одну битую дату, но не полечила другую. На RIZ4@FORTS для 2014_12_09 (9 декабря) данные остаются битыми после нескольких перезакачек. Файл приложу, если найду как это сделать.


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

asuilin

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


Mikhail Sukhov

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

Да, конечно я так и делал. Под перезакачкой имелась в виду повторная заливка этой даты в Гидре.
Спасибо:
1 2 3  >

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

loading
clippy