← Zurück

Баги с MarketTime

Квик 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 всю ночь вызывается перезапуск экспорта. Несмертельно конечно, но некрасиво.

War dieses Thema hilfreich?

Thema teilen

Kommentare (5)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Alexander
Alexander

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

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

Mikhail Sukhov:

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

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

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 эта бага уже исправлена.