Ho_Chu
Ho_Chu личный блог
25 ноября 2022, 07:00

Создадим идеального робота вместе - 2?

В прошлой теме о решении проблем с каналами связи, один из пользователей отлично резюмировал в нескольких строках. Вот они:

Если вкратце, то все проблемы каналов связи решаются так:

  1. Мало денег — домашний сервер, резервный канал. Мониторим руками, можно какую-нибудь пищалку прикрутить на обрывы. Если сломался внешний контур — значит сидим и ждём пока починят.
  2. Есть чутка денег — выносим сервер наружу. Получаем алерты в телегу, реагируем руками.
  3. Есть ещё чутка денег — дублирующий сервер к варианту 2, пингуем друг-друга, пингуем из третьего места, пингуем пинговалку, обрабатываем результаты.
  4. Есть еще больше денег — всё тоже что и п.2. п.3, но только в биржевой стойке.
  5. Проблемы связи с торговой системой к пунктам 1-3: Мониторим коннект, переподключаемся, если есть альтернативные сервера.  Если всё завалилось, то используем альтернативные терминалы, звоним брокеру.
  6. Проблемы связи с торговой системой, если завалилась биржа — сидим и смотрим.

Перейдем ко второй теме. В данном случае предлагаю разрешить проблему внезапного объявления о прекращении торгов по какому-либо инструменту, либо по группе инструментов. Такое случилось, например, 5 сентября 2022 года, когда Мосбиржа объявила об остановке торгов на валютном рынке и рынке драг.металлов через какое-то время, кажется через 5 или через 10 минут. С чем это могло быть связано? С объявлением об окончании хождения валюты на территории РФ? Все возможно. Потом, конечно, все разрешилось, но осадочек остался https://www.moex.com/n51175 .

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

Но как на уровне алгоритма отличить остановку торгов на неопределенное время от приостановки торгов из-за вылета цены за границы ранее установленного диапазона на какое-то время? Надо уметь анализировать сообщения с биржи? Там приходят сообщения о приостановке торгов на время по тем или иным инструментам.

Когда вечером 30 августа 2022 года Газпром объявил о новой рекордной выплате дивидендов, то в результате, утром 31 августа, на торгах акциями Газпрома было минимум 10 приостановок торгов.

Может быть надо научиться читать сообщения с биржи? И если в сообщении встречаются ключевые слова, то немедленно оповещать Клиента об этой ситуации? Можно сделать наоборот, создать БД исключительно рыночных сообщения и их не присылать, а слать только те, которые не соответствуют стандартам? В конце концов, там тоже робот шлет стандартизованные сообщения. И только нестандартные могут вводиться руками. Вероятно, надо добавить возможность сохранения в какой-нибудь лог-файл списка стандартных сообщений с биржи, чтобы время от времени можно было бы анализировать его на предмет появления новых типов сообщений и расширять известный список сообщений, которые мы будем признавать рыночными и не требующими вмешательства. Тогда программа сможет нас оповещать о любых незапланированных сообщениях и мы сможем оперативно реагировать на все новые сообщения.

Если мы, не находясь перед терминалом, узнаем о таком событии, то мы сможем попытаться предпринять какие-то разумные меры, например, закрыть позиции.

Или мы можем просто настроить робота слать все сообщения, касающиеся интересующих тебя инструментов. Но если сделать только такую краткую штуку, то можно пропустить объявление о прекращении хождения валюты, например.

Мнения? Как лучше решить данную проблему?

78 Комментариев
  • bozon
    25 ноября 2022, 07:13
    Никак. В финансовых отношениях главное это доверие, а какое тут может быть доверие, если Московская биржа отказывается брать на себя ответственность за срыв торгов и связанные с этим убытки резидентов.
  • Vkt
    25 ноября 2022, 07:35
    На сколько я понял из форума Квика, они так и не сделали возможность чтения сообщений из скрипта.
    Из Квика можно узнать состояние торгов через запросы getParamEx2 — «TRADINGSTATUS», «STATUS» или «TRADINGPHASE». Но они меняются через несколько секунд после события.
    Так что заранее подстелить соломку не получится.
  • Sprite
    25 ноября 2022, 08:09
    Если ваш робот умеет подключаться/читать биржевые сообщения из потока NEWS, то вы можете сравнивать тикер инструмента в новостном сообщении с тикерами инструментов по которым есть позиции. Если они совпадают — как-то реагировать.

    onExchangeNewsMessage = (message) =>
        foreach position in MyPositions
            if (message.Contains(position.securityId))
                SendMeAlertAndCloseMyPositions(position.securityId)

    Ещё вы можете парсить новостной раздел сайта биржи.

    Переходим к 3-ей проблеме? )
  • Union_Jack
    25 ноября 2022, 10:34
    А в чем проблема смотреть непосредственно сетевой трафик, идущий с биржи. И контролировать его наличие или отсутствие?

    Ps. точнее не от биржи, а от брокера

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн