← Zurück

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

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (16)

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

Mikhail Sukhov
Mikhail Sukhov

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

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

dart
dart Autor

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

Mikhail Sukhov
Mikhail Sukhov

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

dart
dart Autor

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

Mikhail Sukhov
Mikhail Sukhov

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

ITrader.ProcessDataError

dart
dart Autor

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 Autor

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 Autor

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

Alexander
Alexander

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

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

dart
dart Autor

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 Autor

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 Autor

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