Quik 13:56:10.7069351 System.ArgumentException: Лучший бид 157985 больше или равен лучшему офферу 157980. Имя параметра: depths в #=qw1XTJ7dV75pMzOz0hBo$siihDG5OZdJczlcSqCrqHeW9oeTyyyg2z_7_I_sdd8zP.OnSave(List
1 #=qHt7Kciyn5dIQU9bM1p8X6A==, IEnumerable1 #=qWN5vLK9lgnuirNLbwKPXEQ==, DateTime #=qKKv4d0DmzYEe_LwI_ZTphg==, #=qgSOV1vXH9QyFDywKzjytlUKtRfBvlDa$lfa1pqF_C53vfXDOQ1XxQKKwFTI8v3b1 #=qZLgnP865s$8zaZAaVaUHkw==) в #=qYHpTVY2S45tYaMYO2yPLP0Kwx4gEDfz9gCrc15vsqp2yDFNlUoPV9z$CnkxhiFm_.#=qLylBwxWKZJxUOHK9AhQfJg==(DateTime #=qYJ4ET8pqjhGXfYJzJxL7WA==, IEnumerable1 #=qc5Kcj8dkw_HrZhkiXNAARw==, Boolean #=qCYaiWtpxLFpeKOuk9WIa0g==) в #=qYHpTVY2S45tYaMYO2yPLP0Kwx4gEDfz9gCrc15vsqp2yDFNlUoPV9z$CnkxhiFm_.Save(IEnumerable1 #=qWRtxCXnEO09I0nh9jQVyCg==) в StockSharp.Hydra.Worker.<>c__DisplayClass16.<Download>b__10(IMarketDataSource source) в E:\StockSharpReleases\StockSharp_3.2.11\Hydra\Hydra\Worker.cs:строка 210 Начало периодически выскакивать в 3.2.11...
← Back
Comments (33)
Login or Create account, Log in or register to leave a comment
А чем стаканы пишите?
Гидрой.. только что заметил, что у меня экспорт остановился после этой ошибки.. теперь дыра будет.. как попроще сделать чтоб гидра сигнализировала(отправляла sms,email или пищала хотя бы) в такой ситуации?
Гидра данные откуда берет?
Написать код в Гидре?
Нашли одно место, где может произойти рассинхронизация, будет в 3.2.12 (выложим вначале на КодеПлекс).
Мигрировал на 4.0.3 - ошибка сохранилась...
свежая версия (билд 17554 на CodePlex) снова стала выбрасывать исключения:
18:45:13.1963215 Quik System.ArgumentException: Лучший бид 75 больше или равен лучшему офферу 74,7. Parameter name: depths at #=qOxrUlg4OPs6kyO$Tb$fK_AsvLvpbniHqbem3XR0IqYJ$YHh_unxSb72o8Lx33ST2.OnSave(List
1 #=qdG9D7o0S$VLm$p1X5mJGDg==, IEnumerable1 #=qI8Yrjw3FSlsTGXzrB2G6Wg==, DateTime #=qglhOpOJV3Eak7bWImN1qFw==, #=qIq66bh$3sZ3H5Qsg8wylKQnhWDKIGWVQ4Kzav3bBjbTuEYdOmqUGMB8pZP7nVXWY #=qzo2XbdxQdj2YpWFIs1luwA==) at #=qd51RpYzKvk8ZoX3tAE27Pv5dvwlvJ4cd9LHaruSH2tUb7IGlUdMBGa$XKsHI6h7y.#=qjzjdD5iOFmlnVM$CIAaWbg==(DateTime #=qVEeOLCMkwYeCQLpKOSch0w==, #=qIh_krYypcNrIs_TevJuc9w==[] #=qtnbKHRwSl2jMCyY0PYan3Q==, Boolean #=qm2cMzNZ$AhLbKVjYs1uVcw==) at #=qd51RpYzKvk8ZoX3tAE27Pv5dvwlvJ4cd9LHaruSH2tUb7IGlUdMBGa$XKsHI6h7y.#=qG1RUXoghWzAcXUcOT9wvpc_mdO__lonqO_9aIcpIBx4PoFa9OeOonJ6KslJhoXMc_QLR7RRDGkUG0XQy2cwZOw==(IEnumerable1 #=qLhXPr$anHsDxuqWw0hZPdg==) at StockSharp.Hydra.Core.BaseMarketDataSource.SaveDepths(Security security, IEnumerable1 depths, Boolean raiseDataLoadedEvent) in D:\svalka\invest_info_sSharp\lib\stocksharp-17554\dev\Hydra\Core\BaseMarketDataSource.cs:line 209 at StockSharp.Hydra.Core.TraderMarketDataSource.Load() in D:\svalka\invest_info_sSharp\lib\stocksharp-17554\dev\Hydra\Core\TraderMarketDataSource.cs:line 101 at StockSharp.Hydra.Worker.WorkerProcess.<Download>b__18(IMarketDataSource source) in D:\svalka\invest_info_sSharp\lib\stocksharp-17554\dev\Hydra\Hydra\Worker.cs:line 124 18:45:14.2103233 Quik System.ArgumentException: Лучший бид 150,47 больше или равен лучшему офферу 150,31.Можете проверку в MarketDataTrader.OnMarketDepthsChanged вставить? Пока не понятно, на каком участке стакан приходит плохой.
этот код ничего в лог не пишет, когда ошибки продолжают валиться.
Я имел ввиду что-то типа такого:
да, в моем варианте валились ошибки NullReferenceException. но все равно в логе видно, что уже в этот метод приходит плохой стакан
запустил Гидру с Вашим кодом, отпишусь позже.
17:51:22.3118925 Quik Error 1 17:51:22.3118925 Quik Error 2 17:51:30.3495156 Quik System.ArgumentException: Лучший бид 131660 больше или равен лучшему офферу 131655. Имя параметра: depths ...
да, в этот метод стакан уже приходит неправильный.
Получается, что то, что вы отписали здесь, неправильно?
Выведите, пожалуйста, вместе с Error1 и Error2 d.BestAsk.Volume и d.BestBid.Volume
13:43:42.8640657 Quik Error 1. 'VBM2': bestAsk (Price=5447, volume=49); bestBid (Price=5448, volume=1) 13:43:42.8640657 Quik Error 2. 'VBM2': bestAsk (Price=5447, volume=49); bestBid (Price=5448, volume=1) 13:43:56.3298895 Quik System.ArgumentException: Лучший бид 5448 больше или равен лучшему офферу 5447. Parameter name: depths at #=qOxrUlg4OPs6kyO$Tb$fK_AsvLvpbniHqbem3XR0IqYJ$YHh_unxSb72o8Lx33ST2.OnSave(List
1 #=qdG9D7o0S$VLm$p1X5mJGDg==, IEnumerable1 #=qI8Yrjw3FSlsTGXzrB2G6Wg==, DateTime #=qglhOpOJV3Eak7bWImN1qFw==, #=qIq66bh$3sZ3H5Qsg8wylKQnhWDKIGWVQ4Kzav3bBjbTuEYdOmqUGMB8pZP7nVXWY #=qzo2XbdxQdj2YpWFIs1luwA==) at #=qd51RpYzKvk8ZoX3tAE27Pv5dvwlvJ4cd9LHaruSH2tUb7IGlUdMBGa$XKsHI6h7y.#=qjzjdD5iOFmlnVM$CIAaWbg==(DateTime #=qVEeOLCMkwYeCQLpKOSch0w==, #=qIh_krYypcNrIs_TevJuc9w==[] #=qtnbKHRwSl2jMCyY0PYan3Q==, Boolean #=qm2cMzNZ$AhLbKVjYs1uVcw==) at #=qd51RpYzKvk8ZoX3tAE27Pv5dvwlvJ4cd9LHaruSH2tUb7IGlUdMBGa$XKsHI6h7y.#=qG1RUXoghWzAcXUcOT9wvpc_mdO__lonqO_9aIcpIBx4PoFa9OeOonJ6KslJhoXMc_QLR7RRDGkUG0XQy2cwZOw==(IEnumerable1 #=qLhXPr$anHsDxuqWw0hZPdg==) at StockSharp.Hydra.Core.BaseMarketDataSource.SaveDepths(Security security, IEnumerable1 depths, Boolean raiseDataLoadedEvent) in D:\svalka\invest_info_sSharp\lib\stocksharp-17554\dev\Hydra\Core\BaseMarketDataSource.cs:line 209 at StockSharp.Hydra.Core.TraderMarketDataSource.Load() in D:\svalka\invest_info_sSharp\lib\stocksharp-17554\dev\Hydra\Core\TraderMarketDataSource.cs:line 0 at StockSharp.Hydra.Worker.WorkerProcess.<Download>b__18(IMarketDataSource source) in D:\svalka\invest_info_sSharp\lib\stocksharp-17554\dev\Hydra\Hydra\Worker.cs:line 124Можете проверить не Гидру, а в отдельной консольной программе написать такой код:
Это покажет, приходят ли данные уже испорченные из Квика.
да. конечно. я отпишусь.
Получилось ли у вас в какой момент данные уже испорченные приходят?
вообще что-то руки до стокшарпа не доходят последнее время, ничего не делал пока. выставил только maxErrorCount в значение побольше ) может, через недельку посмотрю... (от своего обещания не отказываюсь =) )
Судя по всему ошибка локальная, и только у вашего брокера. Так что можете не торопится. В любом случае ее устранение от нас вряд ли будет зависеть. Да и стаканы через квик - это та еще дезинформация.
В 4.1.3 при экспорте из квика с 18:45 до 18:50 вылетает каждую секунду.. ну и до этого пару раз...
в #=qBqzAfx4eX6jbAhjwSd62HDxRx7KjXUhZdaqXaKrbhWNK89$cczN7Ybo1P582C383.#=qPNbrzoo63qiPKAB3RxCH5A==(List
1 #=qHaHP4WZSVdKz53Hwzy$ekw==, IEnumerable1 #=qASUWOKDOCFZ2Wu9LWXkBtQ==, #=qvs0CsnLs_Ss1esfBSm5zwBJaDoBW$uY3FBMC6svegSZeQ2rqGZkXJaXHGH7s1irW #=qMfciDzi6G743_rIzu43_Aw==) в #=qz04YdXG2$YAOxeHvpD93kpzjtGGmn$CBMgLGYgYx3D5hyvyfpJ92$IJuzvbahT9DbHGoXECLGq73jVeWqoM7WA==.#=qhS5pEqj0jxrC3EkM2L2ByLP81D1u7MoFLP3gC9SmO2Ha62X2cRDXdnIw_qFSrI0yPZNVSXkqSrWbXB_ShwaNMF27KENqU9n7vKpFW$rzX$w=(IEnumerable1 #=qVh5t1g33tQf$GUY1wukgfA==, #=qT_JKyf8jvmdh8CnDd2erv404Kgk89rxorXnimUV3J5ygkrYMLo9XjjmlV7xs65$6 #=qSWB2y1ELx12TguZDCS1CWQ==) в #=qh2YSDa39RBEjCcO4rb2nambbPWQx618j_mhbAjIJkMVjnwGRGU3KGJb5NYvLGTBn.#=qteF9LpJJBLkC9LySoZdzwA==(DateTime #=qZ5Kd0lhJbrY2DbBE04yF9Q==, #=qZHHnzqkYDg7xCyaxj6PR9A==[] #=qh5tCqhElr2D_oYbBKomIaQ==, Boolean #=qSVNcMUfTvym2UYUPwu0xcQ==) в #=qh2YSDa39RBEjCcO4rb2nambbPWQx618j_mhbAjIJkMVjnwGRGU3KGJb5NYvLGTBn.Save(IEnumerable1 #=qDijncmxOZuMVXEQZJ6Gg9w==) в StockSharp.Hydra.Core.BaseMarketDataSource.SaveDepths(Security security, IEnumerable`1 depths, Boolean raiseDataLoadedEvent) в C:\StockSharp_4.1.3_Sources\Hydra\Core\BaseMarketDataSource.cs:строка 284 в StockSharp.Hydra.Core.TraderMarketDataSource.ProcessNewData() в C:\StockSharp_4.1.3_Sources\Hydra\Core\TraderMarketDataSource.cs:строка 128 в StockSharp.Hydra.Core.TraderMarketDataSource.Load() в C:\StockSharp_4.1.3_Sources\Hydra\Core\TraderMarketDataSource.cs:строка 108 в StockSharp.Hydra.Worker.WorkerProcess.<Download>b__1a(IMarketDataSource source)Можно что-то сделать? Брокер Финам...
В клиринг не надо сохранять стаканы.
А в остальное время? Может можно хотя бы как-то эти сообщения перехватить.. чтоб лог не засирать.. хотел вставить пустой обработчик в BaseMarketDataSource.. но боюсь какую-нибудь серьёзную ошибку пропустить.. а откуда конкретно это сообщение в лог заносится найти не могу...
Лучше в Квик написать, с вопросом, а почему это в клиринг стакан пляшет.😳
Переопределить RaiseProcessDataError. Там фильтровать. Только если так. Это приходит по идее туда и пишется через this.AddErrorLog
18:45:00.020| |Quik |Останавливается. 18:45:00.241| |Quik |Для GDU3@RTS загружено 18 стаканов. 18:45:00.450| |Quik |Для GDM3@RTS загружено 28 стаканов. 18:45:00.656| |Quik |Для CHMF@EQNL загружено 65 стаканов. 18:45:00.941| |Quik |Для SRU3@RTS загружено 13 стаканов. 18:45:01.141| |Quik |Для VTBR@SMAL загружено 5 стаканов. 18:45:01.358| |Quik |Для AKRN@EQNL загружено 9 стаканов. 18:45:01.557| |Quik |Для RI135000BP3@RTS загружено 51 стаканов. 18:45:01.757| |Quik |Для RI150000BE3@RTS загружено 1 стаканов. 18:45:01.948| |Quik |Для RIU3@RTS загружено 46 стаканов. 18:45:02.159| |Quik |Для TNBP@EQNE загружено 3 стаканов. 18:45:02.385| |Quik |Для SVM3@RTS загружено 11 стаканов. 18:45:02.592| |Quik |Для MFGSP@EQNE загружено 1 стаканов. 18:45:02.804| |Quik |Для MTLRP@EQBR загружено 70 стаканов. 18:45:03.004| |Quik |Для AVAZ@EQNL загружено 15 стаканов. 18:45:03.224| |Quik |Для MSNG@EQBR загружено 87 стаканов. 18:45:03.447| |Quik |Для GRAZ@EQNL загружено 8 стаканов. 18:45:03.730| |Quik |Для MRSB@EQNE загружено 1 стаканов. 18:45:03.933| |Quik |Для ODVA@EQNE загружено 1 стаканов. 18:45:04.298| |Quik |Для SNGS@TQNL загружено 3 стаканов. 18:45:04.501| |Quik |Для RI150000BD3@RTS загружено 4 стаканов. 18:45:04.706| |Quik |Для TGKD@EQBS загружено 8 стаканов. 18:45:04.940| |Quik |Для RI130000BQ3@RTS загружено 13 стаканов. 18:45:05.165| |Quik |Для ROSN@TQNL загружено 2 стаканов. 18:45:05.381| |Quik |Для RBCM@EQNL загружено 12 стаканов. 18:45:05.576| |Quik |Для RI145000BD3@RTS загружено 8 стаканов. 18:45:05.783| |Quik |Для RTKMP@EQBR загружено 5 стаканов. 18:45:06.007| |Quik |Для MGVM@EQNE загружено 16 стаканов. 18:45:06.206| |Quik |Для RI145000BF3@RTS загружено 5 стаканов. 18:45:06.476| |Quik |Для AFKS@EQNL загружено 11 стаканов. 18:45:06.710| |Quik |Для BANE@EQNE загружено 7 стаканов. 18:45:06.923| |Quik |Для BANEP@EQNE загружено 10 стаканов. 18:45:07.161| |Quik |Для TRNFP@EQNL загружено 19 стаканов. 18:45:07.364| |Quik |Для DIXY@EQNL загружено 1 стаканов. 18:45:07.581| |Quik |Для REBR@EQNE загружено 2 стаканов. 18:45:07.837| |Quik |Для MOEX@EQLV загружено 3 стаканов. 18:45:08.058| |Quik |Для MSTT@EQNL загружено 6 стаканов. 18:45:08.281| |Quik |Для MVID@EQNL загружено 4 стаканов. 18:45:08.523| |Quik |Для NMTP@EQNL загружено 26 стаканов. 18:45:08.742| |Quik |Для PHOR@EQBR загружено 10 стаканов. 18:45:08.987| |Quik |Для PIKK@EQBR загружено 12 стаканов. 18:45:09.217| |Quik |Для RUALR@EQBR загружено 12 стаканов. 18:45:34.073| |Quik |Сохранение стаканов для SNGSP@EQNL. 18:45:34.790| |Quik |Сохранение стаканов для SiU3@RTS. 18:45:34.795| |Quik |Сохранение стаканов для RI135000BP3@RTS. 18:45:34.870| |Quik |Сохранение стаканов для LKM3@RTS. 18:45:35.011| |Quik |Сохранение стаканов для RIM3@RTS. 18:45:35.089| |Quik |Сохранение стаканов для FEES@EQNL. 18:45:35.104| |Quik |Сохранение стаканов для GAZP@EQNE. 18:45:35.179|Error |Unhandled Exception|System.ArgumentException: Лучший бид 130,38 больше или равен лучшему офферу 128,35 во время 03.04.2013 18:44:57. Parameter name: depths at #=qhBqOxQ5SIAbyY2y6N4BACFDFlQ_j1Q8yNEtvBOYqije_f5J8ROizhDxiO305Qb7J.#=qr_KzM1xL4C_LNzBQG0cU1w==(List
1 #=qtNWXcGR9OrC167LNZ6sqwA==, IEnumerable1 #=qSHBGsvI2XWoCf1iMdzkfkQ==, #=qE5zo4_Ejp278xyk1AZp_K4lW5e2aEbLnSXrHx0bkG0IPV$BZ64GnXHWVHNZJ$akP #=qxK5OV7scqRijV8foIwhTOg==) at #=qUIMgopRPM50_snA_IW7lP5vnYLX4Ycjk3tlkUJmO$df$BhOICeXYRcKE6VPTBUvWor_HO$pMaUHIccrT1sunXQ==.#=qtPi_jCcTQy54OokHmjQzTrWtsFtcY3JYPA5Pimp6VuHCD0uL37gJzv$_$IzMNYh_eeJNWPUUDx9E2sMiBuYQgLprnVeNO_L1hHWagWtxbeo=(IEnumerable1 #=qWIwOd8WCA_EX_3JPloWbeQ==, #=q9h_Acx51llzEuCgXXohQKifmacT4UQOfLLvGdIR0x1XzExFE4ZUGkV6nMHXy$6I4 #=q1bBiLtrF41cu9bGzzYSWkA==) at #=qJM9xtd9HT4k2cHOn7Ak7RSOm$uYCug_vtlSEqSqyO5XEdM3kbiV34ZAsRb1B0dzg.#=q1Mggw99G5hfFdA9JpoWTIQ==(DateTime #=qZGVM4ZzDSX8cnal_sirMTA==, #=qJKlgmjPaEu7aOWykYJHW0w==[] #=qIsf10FO4RN0C3UDhi1Bpbw==, Boolean #=qg58umgjgqmnnboxFNnaEVQ==) at #=qJM9xtd9HT4k2cHOn7Ak7RSOm$uYCug_vtlSEqSqyO5XEdM3kbiV34ZAsRb1B0dzg.Save(IEnumerable1 #=qlKNnsuKM7O8284FGVcOKnA==) at StockSharp.Hydra.Core.BaseMarketDataSource.SaveDepths(Security security, IEnumerable1 depths, Boolean raiseDataLoadedEvent) in c:\Dropbox\CODING\StockSharp\StockSharp\trunk\Hydra\Core\BaseMarketDataSource.cs:line 264 at StockSharp.Hydra.Core.TraderMarketDataSource1.SaveValues(IDictionary2 data, Func1 getNewValues, Func4 saveValues) in c:\Dropbox\CODING\StockSharp\StockSharp\trunk\Hydra\Core\TraderMarketDataSource.cs:line 111 at StockSharp.Hydra.Core.TraderMarketDataSource1.ProcessNewData() in c:\Dropbox\CODING\StockSharp\StockSharp\trunk\Hydra\Core\TraderMarketDataSource.cs:line 120 at StockSharp.Hydra.Core.TraderMarketDataSource`1.Stop() in c:\Dropbox\CODING\StockSharp\StockSharp\trunk\Hydra\Core\TraderMarketDataSource.cs:line 85 at StockSharp.Hydra.Worker.Downloader.Finish() in c:\Dropbox\CODING\StockSharp\StockSharp\trunk\Hydra\Hydra\Worker.cs:line 252 at StockSharp.Hydra.Worker.Downloader.Download() in c:\Dropbox\CODING\StockSharp\StockSharp\trunk\Hydra\Hydra\Worker.cs:line 216 at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.TimerQueueTimer.CallCallback() at System.Threading.TimerQueueTimer.Fire() at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() at System.Threading.ThreadPoolWorkQueue.Dispatch()И так каждый день...
та же проблема.
Аналогично, в 18:45 Гидра вылетает после того как несколько раз приходят ошибки, что бид больше оффера. Вообще, не знаю, рассматривали ли вы такой вариант, но это можно вынести в настройки, пусть пользователь сам решает останавливать ли закачку или нет. В том, что бид больше оффера не всегда есть проблема. Например, в пред.торговые полчаса на споте все трейдеры ставят заявки, а сделки еще не проходят. Там бид больше оффера может быть спокойно, это не ошибка. К тому же, пользователь сам может выбирать что он потом с этими стаканами будет делать. Их можно чистить самому или алгоритм обработки данных строить так, чтобы обходить такие вещи. А так получается, данных совсем нет, что есть грустно.
Вы постоянно модифицируете работу с данными, уже очень много сделали, молодцы. К сожалению, я .NET только осваиваю, надеюсь выйти на хороший уровень и помочь. Из тех идей, которые есть по обработке данных по мимо инструмента чистки стаканов от ситуаций "оффер ниже бида", есть следующие (возможно, у кого-то дойдут руки и желание их сделать):
Так образом, блок с манипуляциями будет, на мой взгляд достаточно полным и проведя их можно подойти к тестированию стратегий, будучи уверенным, что данные корректные, полные, время различных видов данных совпадает со временем сервера. Хотя насчет последнего не так все просто, ведь мы видим стакан уже с задержкой и когда он был на сервере биржи мы не знаем точно, а вот время сделки у нас серверное.
Конкретно в этом случае - это косяк Квика, 100%. Судя по всему, это РТС, и неправильно собирается стакан. Не уверен, стоит ли вообще писать кривые данные.
Если мы говорим про Квик, то да, данные без метки времени. Если брать от биржи, то конечно же с меткой.
Скажем так, стоит или не стоит, это все же, на мой взгляд, вопрос индивидуальный. Тем более, что из-за этой ошибки не записываются ВСЕ данные после этого. К тому же трейдер знает, что там есть косяк, и готов к этому, тем более что это косяк во время клиринга. Возьмем классику - Каца и Маккормика, сколько времени в книге они уделяют корректным данным их очистке, полноте и т.д. Из того что он описывает, далеко не все вендоры дают полностью корректные данные, так это США, где все за деньги и должно быть вылезано. Да и бизнес-аналитику возьмите, данные и дублированные попадаются и неполные и некорректные, но борются с этим же. А если их нет совсем, то что анализировать тогда? Вы часто грешите на Квик, у них есть косяки, не спорю, но очень редко. Он транслируют данные из шлюза - это раз, два - я никогда визуально не видел в сессионное время кривых стаканов от Квика. Возможно дело не в Квике, а в "парсинге"? Как-то я проверял тиковые сделки от биржи, думаете там не было косяков? ) Так это первоисточник!
Биржевые стаканы приходят из шлюза с меткой времени, честно?
Я конечно понимаю, что кривые стаканы это не гидрин косяк.. но может всё-таки можно научить её их игнорить или хотя бы увеличить maxErrorCount, чтоб из-за них экспорт не вставал? Только из-за этой фигни приходится сидеть на старой версии...
В план поставили задачу по изменению поведения.