В прошлой теме о решении проблем с каналами связи, один из пользователей отлично резюмировал в нескольких строках. Вот они:
Если вкратце, то все проблемы каналов связи решаются так:
Перейдем ко второй теме. В данном случае предлагаю разрешить проблему внезапного объявления о прекращении торгов по какому-либо инструменту, либо по группе инструментов. Такое случилось, например, 5 сентября 2022 года, когда Мосбиржа объявила об остановке торгов на валютном рынке и рынке драг.металлов через какое-то время, кажется через 5 или через 10 минут. С чем это могло быть связано? С объявлением об окончании хождения валюты на территории РФ? Все возможно. Потом, конечно, все разрешилось, но осадочек остался https://www.moex.com/n51175 .
При наступлении такого события, не зная заранее его последствий, лучше не иметь открытых позиций после остановки торгов и необходима опция, которая, во-первых распознает это событие, а во-вторых, заставит, условно мгновенно, закрыть все позиции и не открывать новых впредь до особого разрешения.
Но как на уровне алгоритма отличить остановку торгов на неопределенное время от приостановки торгов из-за вылета цены за границы ранее установленного диапазона на какое-то время? Надо уметь анализировать сообщения с биржи? Там приходят сообщения о приостановке торгов на время по тем или иным инструментам.
Когда вечером 30 августа 2022 года Газпром объявил о новой рекордной выплате дивидендов, то в результате, утром 31 августа, на торгах акциями Газпрома было минимум 10 приостановок торгов.
Может быть надо научиться читать сообщения с биржи? И если в сообщении встречаются ключевые слова, то немедленно оповещать Клиента об этой ситуации? Можно сделать наоборот, создать БД исключительно рыночных сообщения и их не присылать, а слать только те, которые не соответствуют стандартам? В конце концов, там тоже робот шлет стандартизованные сообщения. И только нестандартные могут вводиться руками. Вероятно, надо добавить возможность сохранения в какой-нибудь лог-файл списка стандартных сообщений с биржи, чтобы время от времени можно было бы анализировать его на предмет появления новых типов сообщений и расширять известный список сообщений, которые мы будем признавать рыночными и не требующими вмешательства. Тогда программа сможет нас оповещать о любых незапланированных сообщениях и мы сможем оперативно реагировать на все новые сообщения.
Если мы, не находясь перед терминалом, узнаем о таком событии, то мы сможем попытаться предпринять какие-то разумные меры, например, закрыть позиции.
Или мы можем просто настроить робота слать все сообщения, касающиеся интересующих тебя инструментов. Но если сделать только такую краткую штуку, то можно пропустить объявление о прекращении хождения валюты, например.
Мнения? Как лучше решить данную проблему?
Из Квика можно узнать состояние торгов через запросы getParamEx2 — «TRADINGSTATUS», «STATUS» или «TRADINGPHASE». Но они меняются через несколько секунд после события.
Так что заранее подстелить соломку не получится.
onExchangeNewsMessage = (message) =>
foreach position in MyPositions
if (message.Contains(position.securityId))
SendMeAlertAndCloseMyPositions(position.securityId)
Ещё вы можете парсить новостной раздел сайта биржи.
Переходим к 3-ей проблеме? )
Ps. точнее не от биржи, а от брокера