← Назад

S# 4.0 MQS не перестает работать при превышении лимита счета

Если стратегия задает MQS котировать ордер с количеством контрактов, превышающим лимит счета, начинают очень быстро сыпаться месседжи, что размера счета не хватает и в конечном итоге робот просто вылетает. В ранних версиях помню просто выскакивало всего одно сообщение и котирование просто останавливалось (это в окне мониторинга было видно), и робот не вылетал. Можно сделать как раньше было?

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

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

Mikhail Sukhov
Mikhail Sukhov

dart: Если стратегия задает MQS котировать ордер с количеством контрактов, превышающим лимит счета, начинают очень быстро сыпаться месседжи, что размера счета не хватает и в конечном итоге робот просто вылетает. В ранних версиях помню просто выскакивало всего одно сообщение и котирование просто останавливалось (это в окне мониторинга было видно), и робот не вылетал. Можно сделать как раньше было?

Как стабильного робота в данном случае зависит от MQS?

dart
dart Автор

Mikhail Sukhov: Как стабильного робота в данном случае зависит от MQS? Как стабильность робота зависит? Он просто вылетает весь, со всеми стратегиями, когда кол-во сообщений становится очень большим (подсчитать не представляется возможным). То есть заново приходится его запускать. Кроме того процессор грузится на 100 %

Mikhail Sukhov
Mikhail Sukhov

А чему равно Strategy.MaxErrorCount?

dart
dart Автор

Mikhail Sukhov: А чему равно Strategy.MaxErrorCount? Сорри, не знаю. Надо заново промоделировать ситуацию. В данный момент пока S#4.0 не могу запустить (почему то инструменты не находит). Сейчас опять S#3.1.8 запустил.

Mikhail Sukhov
Mikhail Sukhov

dart: В данный момент пока S#4.0 не могу запустить (почему то инструменты не находит).

ITrader.ProcessDataError

dart
dart Автор

dart: В данный момент пока S#4.0 не могу запустить (почему то инструменты не находит). Сейчас опять S#3.1.8 запустил. Опять не могу подключить S# 4.0. Та же самая ситуация. Робот вылетел, второй раз подключиться не могу. _trader.ProcessDataError += ex => this.GuiAsync(() => MessageBox.Show(this, ex.ToString())) ничего не выдает. В MainWindow выполняется TryCreateStrategy. Внутри неё перед проверкой if (_lkoh != null && _frts != null && _fgazp != null && _micex != null) вывожу в файл:
outStream.WriteLine("Time = {0} test TryCrStr, _lkoh = {1}, _frts = {2}, _fgazp = {3}, _micex = {4}", _trader.MarketTime, _lkoh.ToString(), _frts.ToString(), _fgazp.ToString(), _micex.ToString()); Все бумаги и портфель выводит правильно, но вылетает ошибка, что на этой строке в экземпляре объекта не задана ссылка на объект. Как так может быть, если правильно выводит, то все должно быть задано по идее. 3.1.8 подключается без проблем, да и 4.0 в первый раз подключается без проблем.

Alexander
Alexander

dart:

dart: В данный момент пока S#4.0 не могу запустить (почему то инструменты не находит). Сейчас опять S#3.1.8 запустил. Опять не могу подключить S# 4.0. Та же самая ситуация. Робот вылетел, второй раз подключиться не могу. _trader.ProcessDataError += ex => this.GuiAsync(() => MessageBox.Show(this, ex.ToString())) ничего не выдает. В MainWindow выполняется TryCreateStrategy. Внутри неё перед проверкой if (_lkoh != null && _frts != null && _fgazp != null && _micex != null) вывожу в файл: outStream.WriteLine("Time = {0} test TryCrStr, _lkoh = {1}, _frts = {2}, _fgazp = {3}, _micex = {4}", _trader.MarketTime, _lkoh.ToString(), _frts.ToString(), _fgazp.ToString(), _micex.ToString()); Все бумаги и портфель выводит правильно, но вылетает ошибка, что на этой строке в экземпляре объекта не задана ссылка на объект. Как так может быть, если правильно выводит, то все должно быть задано по идее. 3.1.8 подключается без проблем, да и 4.0 в первый раз подключается без проблем.

посмотрите на LastTrade у инструмента, BestBid, BestAsk у стакана. в новостях писал, что они теперь null по умолчанию.

dart
dart Автор

Alexander Mukhanchikov: посмотрите на LastTrade у инструмента, BestBid, BestAsk у стакана. в новостях писал, что они теперь null по умолчанию. Вывожу так: outStream199.WriteLine("Time = {0} test tryCrstr inside _lkoh = {1}, _frts = {2}, _fgazp = {3}, _micex = {4}", _trader.MarketTime, _lkoh.LastTrade.Price, _frts.LastTrade.Price, _fgazp.LastTrade.Price, 0); Все цены выводятся. Старые цены, правда, сейчас другие, но это наверно из-за того что все сделки ещё не прокачались. Стакан не выводил - я его позже начинаю экспортировать. Ну а как это может повлиять, если инструменты правильно выводятся, значит они есть, нашлись. Значит всё должно работать

Alexander
Alexander

dart:

Alexander Mukhanchikov: посмотрите на LastTrade у инструмента, BestBid, BestAsk у стакана. в новостях писал, что они теперь null по умолчанию. Вывожу так: outStream199.WriteLine("Time = {0} test tryCrstr inside _lkoh = {1}, _frts = {2}, _fgazp = {3}, _micex = {4}", _trader.MarketTime, _lkoh.LastTrade.Price, _frts.LastTrade.Price, _fgazp.LastTrade.Price, 0); Все цены выводятся. Старые цены, правда, сейчас другие, но это наверно из-за того что все сделки ещё не прокачались. Стакан не выводил - я его позже начинаю экспортировать. Ну а как это может повлиять, если инструменты правильно выводятся, значит они есть, нашлись. Значит всё должно работать

У вас "вылетел робот". стэк трэйса нет. у вас возник nre - нулевая ссылка на объект. раз раньше работало - я высказал предположения с какими изменениями в S# это могло быть связано. других изменений больших не было.

без стэк трэйса никак.

dart
dart Автор

а как сделать стэк трэйс? Это он?

Alexander
Alexander

dart: а как сделать стэк трэйс? Это он?

И что на 370 строчке MainWindow.xaml.cs? Для таких окон работает ctr+c, ctr+v - удобнее намного. Версия 4.0.1?

dart
dart Автор

Alexander Mukhanchikov: И что на 370 строчке MainWindow.xaml.cs? Для таких окон работает ctr+c, ctr+v - удобнее намного. Версия 4.0.1? 370 строка и есть та самая где я выводил _frts.ToString() и _frts.LastTrade.Price. 4.0.0

Alexander
Alexander

dart:

Alexander Mukhanchikov: И что на 370 строчке MainWindow.xaml.cs? Для таких окон работает ctr+c, ctr+v - удобнее намного. Версия 4.0.1? 370 строка и есть та самая где я выводил _frts.ToString() и _frts.LastTrade.Price. 4.0.0

Так если падает - значит не выводится однажды. Чудес не бывает :) Сделайте try\catch. Или выведите отдельно по строчке каждый параметр. Но по выводу уже однозначно понятно, что у вас null LastTradePrice у _lkoh или _frts или _fgazp.

dart
dart Автор

Alexander Mukhanchikov: Так если падает - значит не выводится однажды. Чудес не бывает :) Сделайте try\catch. Или выведите отдельно по строчке каждый параметр. Но по выводу уже однозначно понятно, что у вас null LastTradePrice у _lkoh или _frts или _fgazp. Да, проверил, у меня вообще вначале и _lkoh и _frts и _fgazp вначале null. Как сделать чтоб не null было?

Alexander
Alexander

dart:

Alexander Mukhanchikov: Так если падает - значит не выводится однажды. Чудес не бывает :) Сделайте try\catch. Или выведите отдельно по строчке каждый параметр. Но по выводу уже однозначно понятно, что у вас null LastTradePrice у _lkoh или _frts или _fgazp. Да, проверил, у меня вообще вначале и _lkoh и _frts и _fgazp вначале null. Как сделать чтоб не null было?

если сами котировки null - необходимо их получить из Securities. Если LastTrade null - то дождаться первой сделки чтоб проставлялась LastTrade либо инициализировать самому.

dart
dart Автор

Сегодня опять глюк с MQS версии 4.0. Запустил стратегию в пробном режиме одним контрактом. Открыла позицию нормально, а потом при закрытии продала один контракт, но не остановилась а продолжала продавать по одному контракту и так на все депо продало, ну и сообщения сыпались о превышении депо. Хорошо я вернулся, цена не успела далеко уйти.