Баги с MarketTime
Atom
29.12.2010
Alter


Квик 5.17, демо от финама и цериха, S# 2.6.2, виндус 7.

  1. Периодически при запуске экспорта до начала дневной сессии вылетает следующее исключение:
System.ArgumentOutOfRangeException: Length cannot be less than zero.
Parameter name: length
   at System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)
   at Ecng.Trading.Quik.QuikTerminal.get_ServerTime()
   at Ecng.Trading.Quik.QuikTrader.get_MarketTime()

Запуск экспорта при этом останавливается. Я так понимаю, исключение из-за того, что в квике до начала сессии в строке состояния не отображается время сервера. Однажды после "Length cannot be less than zero" приложение вылетело с исключением "Invalid window handle" со стеком

   at ManagedWinapi.ApiHelper.FailIfZero(Int32 returnValue)
   at ManagedWinapi.Windows.SystemWindow.get_ClassName()
   at Ecng.Trading.Quik.QuikTerminal.#=qcXb0wX1GPQdWGUrbevouvAK8mGq_ZX7KePQhng707pY=(SystemWindow #=qG0Xlt4ny5EAScYg7lccmqQ==)
   at System.Linq.Enumerable.<>c__DisplayClassf`1.<CombinePredicates>b__e(TSource x)
   at System.Linq.Enumerable.<>c__DisplayClassf`1.<CombinePredicates>b__e(TSource x)
   at System.Linq.Enumerable.WhereArrayIterator`1.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at Ecng.Trading.Quik.QuikTerminal.#=qamfRCc20wzNF9qUIUdCLjw==()
   at Ecng.Trading.Quik.QuikTerminal.#=qql8kmexb9weYKGtc_Ek1tK_1CSd3q5TCKaR0ygbS2tg=()
   at Ecng.Trading.Quik.QuikTerminal.#=q_lLubITNoaw1eEj2RyjWrL6fPHNnQvwlZk8iZRaC5_U=.#=qPxKjanm0K1_jwKHEEU6x$Lgud7LdKO06j2l5DeimLBs=()
   at Ecng.Trading.Quik.QuikTerminal.#=qoXV4QEM_G1YonOjwwNKmQw==(Func`1 #=qD9Z_f5aw8cHk3v4kR8Tc2Q==, String #=qlAVSNw2aXxBrCQuSzMRn7Q==, Int32 #=qTZICHcGD_nZxYj0durmu1w==)
   at Ecng.Trading.Quik.QuikTerminal.#=qs0x1wp4BQfVFbNqH4twdig==(Func`1 #=qn8XD$TEMuAA2cdPOT4AwnA==, String #=qm53EkQ$FmOHt8W3Ilw_ixA==)
   at Ecng.Trading.Quik.QuikTerminal.#=q1nY_TDv5z4$zgSjRjMbMbQ==(#=q$aqcBec_FkKr5WeVX3nTzxDxX_Hd0f61IkNPxLTqPYE= #=qNirypqSKGZrg3AUbX_rooA==)
   at Ecng.Trading.Quik.QuikTerminal.#=qPnw1sKXTdcVcr_x$fqgnYg==(#=q$aqcBec_FkKr5WeVX3nTzxDxX_Hd0f61IkNPxLTqPYE= #=qyLTc$cDFRn1maT$ee$2hdA==)
   at Ecng.Trading.Quik.QuikTerminal.StartDde(String caption)
   at Ecng.Trading.Quik.QuikTerminal.#=q0uBotj_32cN2RsRalTUJ0g==(IEnumerable`1 #=qI5INwD8rV7E8FrjZfrBpag==)
   at Ecng.Trading.Quik.QuikTerminal.#=q$mY6xOgWiR6d5FoJEIxsuDutXikuujvQPPOYZQ$pyuo=(SynchronizedMultiDictionary`2 #=qsvevh4wpjDS8xolIi$hNDw==)
   at Ecng.Collections.CollectionHelper.SyncDo[TCollection](TCollection collection, Action`1 action)
   at Ecng.Trading.Quik.QuikTerminal.ReStartDde()
   at Ecng.Trading.Quik.QuikTrader.ReStartExport()
   at #=qCM88e9F2z6ySIFif3PFU60Wtx52dpExQh_MYocmJjXH851AppX8z40RLoPgPXV07.#=q58dzQUueKRlLgxEyABuSG3i5qQAHm54ZBVKojMghuV4=.#=q3ZZ2iYrOGZh_1bYY3etOSOOxiS3RPvffjOq8ETnvRY8=()
   at Ecng.Common.ThreadHelper.<>c__DisplayClass1.<CreateTimer>b__0(Object )
   at System.Threading._TimerCallback.TimerCallback_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading._TimerCallback.PerformTimerCallback(Object state)
  1. Ночью, в промежутке между сессиями, время сервера в квике не меняется, застывая на времени окончания вечерней сессии. Поэтому каждые ExportTimeOutInterval всю ночь вызывается перезапуск экспорта. Несмертельно конечно, но некрасиво.

Теги:


Спасибо:


Alexander

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


Я уже это в своё время описывал. Решение - перегружать стандартный QuikTrader и свойство MarketTime.

Я, к примеру, использую стандартное DateTime.Now

Спасибо:

Mikhail Sukhov

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


  1. Для ArgumentOutOfRangeException cделал проверку. Но все равно не понятно, почему такое появляется. Что пишется в статус баре до сессии у Вас? С "Invalid window handle" причину нашел. Пока не уверен, можно ли исправить. Как часто возникает ошибка?
  2. Выключайте на ночь механизм отслеживания тайм аутов.
Спасибо:

Mikhail Sukhov

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


Alexander: Я уже это в своё время описывал. Решение - перегружать стандартный QuikTrader и свойство MarketTime.

Можете ссылки дать?

Спасибо:

Alter

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


Mikhail Sukhov:

  1. Для ArgumentOutOfRangeException cделал проверку. Но все равно не понятно, почему такое появляется. Что пишется в статус баре до сессии у Вас? С "Invalid window handle" причину нашел. Пока не уверен, можно ли исправить. Как часто возникает ошибка? В статус-баре до сессии пишется либо какое-то время меньше текущего, либо просто ничего нет. Что там было именно в момент ArgumentOutOfRangeException не знаю. Invalid window handle валилось 2 или 3 дня подряд на этой неделе, до этого ни разу такого не было.
Спасибо:

Maxim

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


Получил подобную ошибку.

Quik ProcessDataError.

System.ArgumentOutOfRangeException: Length cannot be less than zero. Parameter name: length

at System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy) at System.String.Substring(Int32 startIndex, Int32 length) at Ecng.Trading.Quik.QuikTerminal.get_ServerTime() at Ecng.Trading.Quik.QuikTrader.get_MarketTime()

Exception message: Length cannot be less than zero. Parameter name: length.

Ошибка появилась когда Квик остался запущенным в субботу. Стоит отметить, что ошибка появилась в квике первого брокера. В Квике другого брокера такой ошибки ни разу не было.

UPD Забыл уточнить. Версия S# 2.5.1.0 После того, как запостил комментарий, увидел, что в Stock# 3.0 Beta эта бага уже исправлена.

Спасибо:


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

loading
clippy