декабря 2011 года было частью биржевой группы РТС. Члены НП РТС – более 100 компаний, в том числе ведущих брокеров и дилеров на российском рынке. НП РТС ставит своей целью развитие инфраструктуры российского финансового рынка. 2
для создания биржевой группы - ОАО «Санкт-петербургская биржа» и ОАО «Клиринговый центр МФБ». В начале 2013 года НП РТС начала работу над созданием межброкерской торговой системы с функцией best execution. В сентябре 2013 года задача была расширена до создания универсальной многофункциональной биржевой платформы с поддержкой широкого спектра рынков и внешних площадок. 3
запуска в опытную эксплуатацию за 9 месяцев версии с функционалом Best Execution. В целом она была решена - в июне 2014 года были запущены торги на первой версии системы и дан доступ тестовым участникам. Далее шел процесс доработок под пожелания пользователей и покрытию системы полноценной системой тестов. В ноябре 2014 планируется обновление версии платформы и запуск рынка иностранных ценных бумаг с расчетами в долларах США. 4
C++. Управляющие и некритичные к скорости на Java. Тестовые скрипты пишутся на python. 2. Архитектура модульная. Большинство модулей работают как преобразователи данных - получают входящие потоки данных, обрабатывают и выдают исходящие потоки. Есть модули имеющий под собой БД. 3. В разработке используется универсальный контейнер, позволяющий абстрагировать логику от работы с интерфейсами и сильно облегчающий разработку и тестирование модулей системы. 5
помощью задания данных во входных и выходных потоках за счет абстрагирования реализации ПО от специфики связей в системе создать внутри контейнера прототип модуля (например на python) внешне идентичный промышленной реализации 6
Автоматизированное тестирование путем ручного формирования как тестовых входящих данных, так и выходных данных. Применяется для логически самых простых модулей. 7
случае вручную формируются только входные примеры. Применяется для более сложных модулей. Проверка проводится сравнением выхода прототипа и продукта. Прототип как правило пишется отличным от продукта образом, что снижает вероятность появления одинаковых ошибок. В сложных случаях прототип пишется постановщиком для одновременной проверки правильности понимания постановки разработчиком. 8
рисков. В основе система массового обслуживания: N=5 потоков обрабатывают изменения состояния от 100 до 1 млн портфелей. Данные относящиеся к разным портфелям изолированы. Отсутствие одновременного доступа к данным из разных потоков. Доступ к общим данным только на чтение. 9
из - Прототипа для проверки расчета по одному портфелю с данным набором входящих параметров. - Набора тестовых примеров для тестирования алгоритма. - Регрессионного механизма сверки результата обработки потока операций с результатом восстановления по срезу позиций и заявок. - Нагрузочного стенда для проверки корректности многопоточной обработки по итогам выполнения различных тестовых сценариев. При этом суммарная пропускная способность одного экземпляра модуля должна быть не менее 50 тыс операций в секунду. 11
должна остаться валидной. Это касается сделок, а также операций с заявками. Другие требования к восстановлению: Гарантия возможности. Надежность. Быстрота. 13
архитектуры, различные в части восстановления: 1. Единая шина данных. Единый упорядоченный основной поток торговых данных. Каждый модуль системы имеет один вход и восстановление тривиально. Плюсы - простота восстановления. Минусы - производительность, ограничения в масштабировании. 2. Модульная архитектура с произвольными связями. Плюсы - масштабирование, гибкость в конфигурировании, минусы - сложность восстановления. Был выбран вариант 2. 14
основе содержимого исходящих потоков модулей, затем содержимого входящих потоков. В процессе восстановления используется механизм отсечек - checkpoints от которых клиент потока может проводить восстановление в режиме штатной работы. Отсечка создается один раз в день в каждом торговом потоке. При создании отсечки заявки снимаются и выставляются заново, отсылаются нужные для восстановления значения внутренних переменных. 15
исходные сообщения. Также сохраняются срезы данных - заявок и позиций, для ускорения восстановления. При восстановлении модуль сначала восстанавливает внутреннее состояние, а потом начинает обработку входящих сообщений. Это достигается конфигурированием контейнера, но все равно нуждается в тестировании. 16
систему восстановления на таких принципах. Однако на практике из- за большого числа и различного характера связей некоторых модулей возникли нюансы и отладка восстановления такой системы оказалась сложнее чем ожидалось. Сложная матрица тестовых случаев - много комбинаций состояний входных линков. Восстановление не было запрототипировано, поэтому большой расход труда на формирование тестовых примеров. 17
Облегчается тем что контейнер позволяет тестировщику конфигурационно формировать нужную среду состоящую из нескольких модулей и произвольных связей между ними. Также есть фреймворк для проверки состояния в контрольных точках без формирования полного тестового выхода. 18