Баги с MarketTime
Atom Ответить
29.12.2010


Квик 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)


2. Ночью, в промежутке между сессиями, время сервера в квике не меняется, застывая на времени окончания вечерней сессии. Поэтому каждые ExportTimeOutInterval всю ночь вызывается перезапуск экспорта. Несмертельно конечно, но некрасиво.

Теги:


Спасибо:




5 Ответов
Alexander

Фотография
Дата: 29.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