← Назад

MarketDepth.QuotesChanged в 3.0.2

Михаил, а какая альтернатива MarketDepth.QuotesChanged в новой версии S#? Как узнать, что стакан изменился?

Комментарии (29)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Mikhail Sukhov
Mikhail Sukhov

Maxim: Михаил, а какая альтернатива MarketDepth.QuotesChanged в новой версии S#? Как узнать, что стакан изменился?

Как и всегда, через ITrader.QuotesChanged.

Maxim
Maxim Автор

В новой версии стало немного неудобно.

Раньше можно было подписаться на изменение стакана именно для конкретной бумаги: GetMarketDepth(Security).QuotesChanged

А теперь надо подписываться на изменение любого стакана и проверять тот ли стакан изменился.

Старый вариант случаем не вернете?

Mikhail Sukhov
Mikhail Sukhov

Maxim: Старый вариант случаем не вернете?

Вернуть можно. Но будет только Action.

Maxim
Maxim Автор

Mikhail Sukhov:

Maxim: Старый вариант случаем не вернете?

Вернуть можно. Но будет только Action.

Да, это будет гуд. Я это событие только как экшен и использую. Хотя может быть, кто нибудь и использует полные возможности.

Maxim
Maxim Автор

Не знаю, стоит ли создавать новый пост. Напишу ка сюда.

Обновил библиотеку до 3.0.2 Загрузил настройки Квика из файла. Verifaer говорит что все хорошо. Как обычно, подписан на событие Quik.NewPortfolios.

Но по этому событию не приходят ни одного события.

В чем может быть проблема?

Mikhail Sukhov
Mikhail Sukhov

Maxim: Не знаю, стоит ли создавать новый пост. Напишу ка сюда.

Обновил библиотеку до 3.0.2 Загрузил настройки Квика из файла. Verifaer говорит что все хорошо. Как обычно, подписан на событие Quik.NewPortfolios.

Но по этому событию не приходят ни одного события.

В чем может быть проблема?

Sample запускали? Портфели выводятся?

Maxim
Maxim Автор
  1. Действительно, с запуском примеров ситуация немного прояснилась. Наверно надо сделать на форуме красную надпись: «Сначала проверь Verifaer и Sample, после пиши вопрос».

  2. Как оказалось, раньше событие Quik.NewPortfolios выводился до до запуска QuikTrader.StartExport(). В новой версии это событие выводится после запуска DDE.

  3. В старой версии поле Portfolio.Name содержало значение «Счет депо». Теперь в новой версии это поле содержит значение «Фирма». Это баг или фича?

Mikhail Sukhov
Mikhail Sukhov

Maxim: 3) В старой версии поле Portfolio.Name содержало значение «Счет депо». Теперь в новой версии это поле содержит значение «Фирма». Это баг или фича?

Должно быть и так и так.

Maxim
Maxim Автор

Mikhail Sukhov:

Maxim: 3) В старой версии поле Portfolio.Name содержало значение «Счет депо». Теперь в новой версии это поле содержит значение «Фирма». Это баг или фича?

Должно быть и так и так.

Немного не понял ответ?

Теперь в этом поле всегда будет значение «Фирма»?

Mikhail Sukhov
Mikhail Sukhov

Maxim:

Mikhail Sukhov:

Maxim: 3) В старой версии поле Portfolio.Name содержало значение «Счет депо». Теперь в новой версии это поле содержит значение «Фирма». Это баг или фича?

Должно быть и так и так.

Немного не понял ответ?

Теперь в этом поле всегда будет значение «Фирма»?

Должно быть несколько объектов Portfolio.

Maxim
Maxim Автор

Михаил, добрый день.

Все же ситуацию с Portfolio либо я неправильно понимаю, либо происходит что-то неправильно.

Ситуация:

  1. Есть тестовый Квик. В нем есть один «Счет депо» равный NL0011100043. Есть «Фирма» равная NC0011100000.
  2. В старой версии S# я ожидал появления портфеля с значением Portfolio.Name равным NL0011100043 и в дальнейшем использовал этот портфель для сделок.
  3. В новой версии S# по событию Quik.NewPortfolios приходит только один портфель с значением Portfolio.Name равным NC0011100000. Но его использовать для сделок нельзя, так как происходит ошибка (описана ниже).
  4. При тестировании работы с помощью Sample в окошке Заявки можно выбрать только один счет равный NC0011100000. Если после этого выставить заявку, то происходит ошибка. Скриншот ошибки можно посмотреть у меня в Альбоме. Файл №2.

Описание ошибки:

{"Код ошибки WrongSyntax Сообщение ACCOUNT=NC0011100000; CLIENT_CODE=S#; TRANS_ID=36591485; CLASSCODE=QJSIM; SECCODE=SBER03; QUANTITY=1; OPERATION=B; TYPE=L; ACTION=NEW_ORDER; PRICE=100; EXECUTION_CONDITION=PUT_IN_QUEUE;"} at #=qA98JTuuXq7lQ1aQZLPVJbm1DLeYGJboi9O5tmeDP5icpuuPWnrW$9GsEgfGOuA1T.#=qaFmuGlzpTWbzFNFkL0XYVQ==(Int32 #=qZCQKdnf0Eit0Hbg_$IIcOQ==, StringBuilder #=qSQZByV6eDw7sBRxErYGOvw==) at #=qG5gG25DHYRUxdLhMUitTs6EIadvuLRVfOzcbYiyI9KE=.#=qg0rp1ZKu$tTM6_A7eFso8V3Z3ETsOl_OWvKzbqVwiZI=(String #=qG3qYfxe9sl6d1pdF4HEolg==, OrderStatus& #=qx4OWjbTahJUf3bAvBiKKyw==, UInt32& #=q51qp_50TxygxuDg7tdO4Cw==, Int64& #=qb$zRH_BdRoces20Fe447gA==, String& #=qvUT4N_bmixloSEM2gS_nGQ==) at Ecng.Trading.Quik.QuikTrader.#=qfn5G4xBeYxS5OnUENPG745dGCKCJ2O8ebk8iOGORmhw=(Order #=qYmy3yYh9EW4qxAb6NWzgdg==, TransactionBuilder #=qj3wCZJSihKRZQ4GCKll9QA==) at Ecng.Trading.Quik.QuikTrader.OnRegisterOrder(Order order) at Ecng.Trading.Algo.BaseTrader.RegisterOrder(Order order) at Sample.NewOrderWindow.Send_Click(Object sender, RoutedEventArgs e) in G:\C\Tools\StockSharp\StockSharp_3.0.2\Sources\Sample\NewOrderWindow.xaml.cs:line 29 at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs) at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised) at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args) at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e) at System.Windows.Controls.Primitives.ButtonBase.OnClick() at System.Windows.Controls.Button.OnClick() at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e) at System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e) at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget) at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target) at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs) at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised) at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent) at System.Windows.UIElement.CrackMouseButtonEventAndReRaiseEvent(DependencyObject sender, MouseButtonEventArgs e) at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e) at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget) at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target) at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs) at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised) at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args) at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted) at System.Windows.Input.InputManager.ProcessStagingArea() at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input) at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport) at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel) at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)

  1. Verifaer говорит, что все ок. Скриншот настроек можно посмотреть в фйле №3.

Михаил, можете более подробно описать логику Портфелей. Что откуда берется? Уверен, что где-то все таки баг присутствует.

Mikhail Sukhov
Mikhail Sukhov

В таблице позиции по бумагам сколько строчек?

Maxim
Maxim Автор
Mikhail Sukhov
Mikhail Sukhov

Maxim: Восемь строчек.

http://stocksharp.com/forum/resource.ashx?image=5

Значит у вас должно быть 3 портфеля (фирма, клиентский на мамбу и на фортс). Sample сколько выводит портфелей?

Maxim
Maxim Автор

В Sample только два портфеля: фирма и фортс.

http://stocksharp.com/forum/resource.ashx?image=6

Mikhail Sukhov
Mikhail Sukhov

Maxim: В Sample только два портфеля: фирма и фортс.

http://stocksharp.com/forum/resource.ashx?image=6

А сами позиции выводятся? + скрин как то странно сделан. Как раз в момент старта ДДЕ по позициям.

Maxim
Maxim Автор

Это я не во время старта сделал скрин. Специально открыл настройки DDE, что бы было видно, что DDE подключено.

Позиции чего и куда выводятся?

Стакан, инструменты, сделки выводятся из Квика в Sample.

Mikhail Sukhov
Mikhail Sukhov

Maxim: Это я не во время старта сделал скрин. Специально открыл настройки DDE, что бы было видно, что DDE подключено.

Позиции чего и куда выводятся?

Стакан, инструменты, сделки выводятся из Квика в Sample.

Позиции + портфели. Два разных окна. Открываются по одной кнопке - Портфели.

Maxim
Maxim Автор

Mikhail Sukhov:

Maxim: Это я не во время старта сделал скрин. Специально открыл настройки DDE, что бы было видно, что DDE подключено.

Позиции чего и куда выводятся?

Стакан, инструменты, сделки выводятся из Квика в Sample.

Позиции + портфели. Два разных окна. Открываются по одной кнопке - Портфели.

Окно с позициями пустое.

Mikhail Sukhov
Mikhail Sukhov

Maxim: Окно с позициями пустое.

Значит с ними что-то не так. ProcessDataError что-нибудь выводит?

Maxim
Maxim Автор

Стоит заметить, что вчера после обновления был аналогичный глюк. Не было третьего портфеля. В частности по этой причине я вчера начал спрашивать насчет портфелей. Но потом как-то он появился. Что произошло я не заметил.

Сегодня вот опять два портфеля.

Maxim
Maxim Автор

Ошибки есть две.

Quik ProcessDataError.  System.InvalidOperationException: Инструмент с кодом RIH1 для деривативной позиции не найден.     at Ecng.Trading.Quik.QuikTrader.#=qwzmGrKnG$0lhDHOD3BPyMF9RowzqQXE4dzlPAS2KUE0=.#=qFPbdj1BEzGKlTCos4uLnaA==(IList`1 #=qNMJMBPSWc2scH2IzDV$7Zw==, Func`2 #=qCzadsfi6dy6lGU_mAdN9Xw==)     at #=quGTwhwLIWW3DtBfyW1Jtuo1ONbAVvlrV$5Jjz2zHEHkmG__tqFLh5lErByaGw7xU.#=quyKfkQHGrEIgN80amJTeBg==(DdeTable #=qdxa_dOa3udVBc9Yn6gToJA==, IList`1 #=qKeABQb4HcqtH1$oTS7dhnw==, Action`2 #=q$h2T27S4_vZFd1K7JvgEsA==, Action`1 #=qDbuaOSYxrwzd6fSsZ9aWtA==)Exception message: Инструмент с кодом RIH1 для деривативной позиции не найден..  
Quik ProcessDataError.  System.InvalidOperationException: Инструмент с кодом MSNG для бумажной позиции не найден.     at Ecng.Trading.Quik.QuikTrader.#=qwzmGrKnG$0lhDHOD3BPyMF9RowzqQXE4dzlPAS2KUE0=.#=qIOJE0tFePpVNlJhutSlRPA==(IList`1 #=qets5mJxCNVFW$6DZMeDYew==, Func`2 #=qpyv1AvZMRROSaOKUf3OQFw==)     at #=quGTwhwLIWW3DtBfyW1Jtuo1ONbAVvlrV$5Jjz2zHEHkmG__tqFLh5lErByaGw7xU.#=quyKfkQHGrEIgN80amJTeBg==(DdeTable #=qdxa_dOa3udVBc9Yn6gToJA==, IList`1 #=qKeABQb4HcqtH1$oTS7dhnw==, Action`2 #=q$h2T27S4_vZFd1K7JvgEsA==, Action`1 #=qDbuaOSYxrwzd6fSsZ9aWtA==)Exception message: Инструмент с кодом MSNG для бумажной позиции не найден..  
Maxim
Maxim Автор

Михаил, как еще я могу помочь для ускорения поиска бага и его исправления?

Mikhail Sukhov
Mikhail Sukhov

Maxim: Михаил, как еще я могу помочь для ускорения поиска бага и его исправления?

Так мы же его нашли. Исправлять надо в Квике. "Инструмент с кодом RIH1 для деривативной позиции не найден."

Maxim
Maxim Автор

Я не думал, что эти ошибки связаны. В старой версии подобные ошибки я просто игнорировал и все работало.

Правильно ли я понимаю, что мне необходимо добавить RIH1 в инструменты? А если я не использую деривативы в своей работе, как мне обойти добавление лишних бумаг в таблицу Инструменты? Для этого надо настраивать фильтры на какие-то таблицы? На какие именно?

Mikhail Sukhov
Mikhail Sukhov

Maxim: А если я не использую деривативы в своей работе, как мне обойти добавление лишних бумаг в таблицу Инструменты? Для этого надо настраивать фильтры на какие-то таблицы? На какие именно?

На таблицы с позициями.

Maxim
Maxim Автор

Спасибо, Михаил. Вроде разобрался.

Возможно, в документацию стоит добавить какие бумаги необходимы в таблице Инструменты.

Maxim
Maxim Автор

Так же, возможно стоит рассмотреть старый вариант, когда подобные исключения не влияли на работу экспорта. Подозреваю, что если во время работы экспорта сделать вручную сделку с бумагой, которой нет в Инструментах, то экспорт остановится.

Хотя можно более детально настраивать фильтры.

Mikhail Sukhov
Mikhail Sukhov

Maxim: Так же, возможно стоит рассмотреть старый вариант, когда подобные исключения не влияли на работу экспорта.

Они и в прошлой версии влияли на экспорт. Просто Вы этого не замечали.🙂