Лучший онлайн-брокер для работы на бирже
197,17
рейтинг
25 февраля 2014 в 13:47

Разработка → Биржевой софт: история создания торгового терминала

image

Фондовый рынок – крайне высокотехнологичная отрасль, в которой задействована масса интересных технологий и крайне сложная инфраструктура. Сегодня мы хотим рассказать о том, как в финансовой сфере ведется работа над IT-проектами. В частности, осветить аспект разработки софта на примере создания торгового терминала SmartX.

Предыстория


Мы в ITinvest, в отличие от большинства других брокеров, всегда уделяли внимание разработке собственного программного обеспечения. В частности, в 2000-х большой популярностью на рынке пользовался созданный нами терминал SmartTrade, который, в принципе, и по сей день отвечает основным требованиям трейдеров.

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

Во многом поэтому мы решили разрабатывать торговый терминал не полностью с нуля, а лицензировать технологии американской компании Modulus FE, в частности, торговую платформу M4, которая поставлялась вместе со всем исходным кодом и могла быть модифицирована так, чтобы удовлетворить нужды наших клиентов.

image

Этапы разработки


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

Кроме того, практически сразу же стало очевидно, что технологии Modulus FE не удовлетворяют требованиям производительности, предъявляемым к торговым приложениям на российском фондовом рынке. Проще говоря, уже при не особенно большой нагрузке терминал начинал крайне сильно тормозить, что в ситуациях, когда доля секунды может привести либо к значительной прибыли, либо к большим убыткам, просто недопустимо.

Графики


Одной из основных причин низкой производительности были встроенные в платформу M4 графики на платформе COM+.При открытии 5-минуных или 15-минутных графиков скорость работы еще была приемлемой, но тиковый график намертво “подвешивал” терминал.

Помимо этого, «дефолтные» графики обладали серьезными изъянами в плане юзабилити – например, чтобы нарисовать на графике линию (совершенно стандартная для любого терминала функция) пользователю нужно было нажатием специальной кнопки остановить обновление графика, нарисовать линию, а затем снова включить загрузку.

После выпуска первого релиза продукта SmartX 1.0 было принято окончательно решение отказаться от графиков M4 и найти какое-то другое решение. В результате было выбрано новое графическое ядро – open-source проект Gordago, — которое затем было сильно «допилено» в соответствии с нашими нуждами в плане производительности.

image

На сегодняшний момент мы гордимся тем, что наш терминал имеет одни из самых шустрых графиков, полностью реализованных на .Net.

Контролы


Решения Modulus FE строятся на платформе .NET, поэтому изначально все элементы управления были стандартными «дотнетовскими», но, все по тем же соображениям производительности, было решено от них также отказаться. Неплохой заменой, после некоторой доработки, стал еще один открытый проект SourceGrid. Скорость обновления таблиц на больших объемах данных в конечном счете удалось увеличить почти на 2 порядка.

image

Data Manager


Как это часто бывает, начав что-то менять, остановиться трудно, и уже после старта разработки нового терминала, были начаты и работы по созданию совершенно новой брокерской торговой системы. Основная часть этих работ была завершена осенью 2013 года, получившаяся система получила название MatriX™ (более подробно о ней будет отдельный топик).Одной из главных ее «фич» стала единая денежная позиция.

При использовании предыдущей версии нашей торговой системы, которая называлась it-trade/SmartTrade, клиенту предоставлялся отдельный лицевой счет для каждой торговой площадки. Например, Фондовый рынок Московской биржи — это счет MS; Срочный рынок Московской биржи — счет RF; Валютный рынок Московской биржи — счет FX (беспоставочный) или счет CD (поставочный) и другие. При подобном разделении, ценные бумаги и денежные средства, расположенные на одной торговой площадке не могут служить в качестве обеспечения для совершения операций на другой.

При использовании единой денежной позиции клиенту предоставляется единый счет с идентификатором MO, который включает в себя сразу несколько торговых площадок:

  • Фондовый рынок Московской биржи (все инструменты, торгуемые в режиме Т+2).
  • Срочный рынок Московской биржи (фьючерсы, опционы).
  • Валютный рынок Московской биржи (беспоставочный режим).
  • London Stock Exchange секция IOB (АДР российских эмитентов).

Этот счет становится единым для всех торговых площадок, а активы (деньги, бумаги), расположенные на одной торговой площадке рынка могут быть использованы в качестве обеспечения на других рынках, входящих в единую денежную позицию.

Соответственно, новый торговый терминал должен был соответствовать этим нововведениям и уметь работать с единой денежной позицией. Это, в свою очередь, повлекло необходимость переделки существующего ранее модуля Data Manager, который достался SmartX от предшественника – терминала SmartTrade.

Модуль Data Manager отвечает за взаимодействие терминала с брокерской торговой системой. Старый модуль был однопоточным и у него было не все хорошо с производительностью, что в ситуации, когда через терминал в день могут «прокачиваться» гигабайты биржевых данных, было неприемлемо. Новый Data Manager стал многопоточным и асинхронным, благодаря чему, теперь терминал может без всяких проблем отобразить 2 миллиона клиентских заявок – при торговле роботом, иногда трейдеры контролируют ситуацию по счету с помощью торгового терминала, так что это довольно ценная возможность.

Расширение функциональности: Плагины


После того, как SmartX получил необходимый базовый набор функций (графики, ленты сделок, таблицы котировок, биржевые стаканы, состояние счета, информация по заявкам и позициями), мы задумались о расширении его возможностей. При этом сильно усложнять сам терминал и делать его негибким не хотелось, поэтому был придуман и реализован механизм расширений/плагинов, которые позволяют тем пользователям SmartX, которым не хватает базового функционала терминала, расширить его возможности. В число доступных на данный момент плагинов входят:

  • Пакет опционных плагинов.
  • Конструктор роботов TradeScript™ (подробнее в этом топике).
  • Торговля облигациями.
  • Легкая торговля.
  • Время жизни заявки.
  • Дополнительные окна котировок.
  • Автоследование EasyMANi – первый плагин от сторонних разработчиков.
  • Знаменитая игра «Змейка».

Изначально плагины подключались к терминалу вручную – пользователю нужно было скопировать соответствующую .dll-библиотеку в нужную папку, а сейчас терминал умеет самостоятельно скачивать расширения с сайта.

image

Интерфейс и юзабилити


Цветовое оформление терминала осталось в нем от платформы M4, которая обладала неплохим дизайном и интересной возможностью включать разные схемы оформления, а не только какую-то одну стандартную. По факту, все, что на данный момент есть общего у SmartX и M4 – это как раз визуальное оформление.

image

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

В целом же, работы по юзабилити не прекращались никогда и ведутся по сей день. Общую схему работы над добавлением новых функций в терминал можно разбить на два этапа:

  1. Перенос в новый терминал функционала предшественника (SmartTrade).
  2. По завершению этого этапа, добавление новых функций по просьбам клиентов и по инициативе внутри компании.

После внедрения любых нововведений начинается сбор обратной связи от пользователей, с учетом которой в следующей версии терминала происходят очередные изменения (в том числе и с точки зрения интерфейса) – это непрерывный процесс, который позволяет постоянно двигаться вперед.

Кроме того, одним из главных отличий SmartX от предыдущих продуктов, является тот факт, что он оптимизирован для работы с несколькими мониторами. Это выражается в том, что все элементы его рабочего пространства – таблица, окна котировок и т.п. – могут быть вынесены за пределы самого терминала. Затем это рабочее пространство можно сохранить и загрузить, к примеру, на другом компьютере.

Еще одно важное с точки зрения юзабилити нововведение – в новом терминале, клиент может видеть все свои счета и заявки по ним одновременно, в то время как при работе с предыдущими терминалами, при переключении с одного счета на другой, терялась возможность в режиме реал-тайм видеть ситуацию по остальным и осуществлять по ним операции.

Также, впервые для продуктов ITinvest, в SmartX появилась функция автоматического обновления. Теперь пользователи в два клика могут получить новую версию терминала.

Риск-менеджмент


Для того, чтобы помочь клиентам обезопасить себя и свои деньги при торговле на бирже в терминале был реализован модуль риск-менеджмента. Он работает на стороне клиента и позволяет пользователю задавать ограничения, при нарушении которых запрещается отправка новых заявок и открытие новых позиций, а также настраивать автоматическое выставление защищающих позицию приказов (стоп-лосс, тейк-профит и т.п.).

image

Планы


Несмотря на то, что проект SmartX длится уже несколько лет, постоянное развитие и улучшение терминала никогда не останавливается. В частности, среди ближайших планов, внедрение в него функционала, который доступен пользователям через веб-интерфейс торговой системы, в том числе – подпись отчетных документов, переводы между счетами, подписка на сервисы.

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

На сегодня все. Будем рады ответить на вопросы в комментариях. Спасибо за внимание!

P. S. Вы можете самостоятельно ознакомиться с тем, что у нас получилось в итоге разработки, без необходимости открывать реальный счет и заводить на него деньги. Специально для этих целей у нас есть тестовый доступ — безрисковая виртуальная бирже, с деньгами, акциями, фьючерсами и всем необходимым для полноценной торговли.
Автор: @itinvest
ITinvest
рейтинг 197,17
Лучший онлайн-брокер для работы на бирже

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

  • +3
    Совершенно куцая техническая часть. Рекламный буклет какой-то.
    • 0
      Что конкретно вас интересует? Можно сделать продолжение в более хардкорном стиле, не проблема.
      • 0
        Я думаю тут имелись ввиду такие вещи, какой стек используется (Rx, TPL DataFlow, и т.п.), какие другие либы используются (QuickFix? QuantLib?), ну и все такое прочие.
        • –1
          В таком случае, это вопрос вообще из области «какие кони использовались при выпекании ватрушек» :). Протокол, по которому SmartX общается с сервером — проприетарный, и софт, его разбирающий, соответственно, тоже. Сторонние либы в этой области не используются. У нас вообще, по большей части, свои разработки используются.
      • 0
        Мне вот интересно, кстати — вы упоминаете, что
        было выбрано новое графическое ядро – open-source проект Gordago, — которое затем было сильно «допилено» в соответствии с нашими нуждами в плане производительности.

        Из того, что я вижу здесь на странице самого Gordago — он распространяется под LGPLv2. Вы, насколько я понимаю, распространяете библиотеку в составе вашего ПО. Где-то можно посмотреть исходники ваших доработок? Или они отправлены обратно в апстрим?
        • 0
          С разработчиком проекта Gordago мы общались в процессе разработки терминала, и все вопросы с лицензированием были решены. В результате SmartX распространяется по собственной лицензии, которая не предполагает открытия исходных кодов
  • 0
    Сколько примерно терминалов обслуживаются одним сервером?
    • 0
      Ежедневно подключаются тысячи наших клиентов. В моменте на одном сервере запросто может быть, скажем, 3 тысячи подключений.
      • 0
        И что к каждому из них котировки идут по отдельному соединению?
        • 0
          Не совсем ясно, что вы имеете в виду. Человек у себя дома запускает терминал, через интернет соединяется с сервером, получает данные.
          • –1
            Первый открывает несколько окон котировок на 10 уровней с наиболее активными инструментами, второй делает то же самое… и таких 3 тысячи и все они подключаются к одному серверу. Сервер, а особенно маршрутизаторы, не захлебнутся от такого потока одновременно отдаваемых терминалам данных?
  • +4
    Странный выбор .Net для трейдинга — вы автоматически исключаете из ваших потенциальных клиентов всех пользователей Linux и Mac OS X.
    Судя по тому, что почти никакие терминалы не работают под данные ОС — вы смогли бы получить дополнительных клиентов.
    • 0
      На самом деле, число клиентов, желающих торговать на этих платформах не особенно велико. Поэтому тут вступает логика затрат на разработку таких решений и получаемого за этот счет профита — пока более выгодно не делать терминалы под эти ОС.
      • +1
        Дак вы же не пробовали )
        если нет терминалов, то и торговать никто, естественно, не будет.
      • 0
        Если бы был консольный терминал для linux или api на сервере, программисты бы могли писать своих роботов для торговли, выгрузки данных, анализа. Лично мне это было бы очень интересно.
        • 0
          Так API у нас есть, был даже специальный топик об этом. Так что об этом мы думаем).
          • +1
            А есть возможность отвязаться от COM? Было бы круто просто иметь спецификацию протокола
          • 0
            Промахнулся — извините.
            Перенес выше коментарий.
          • +1
            API сервиса работающего под Win*? Как единичный терминал сгодиться. Как терминал для 2-3 трейдеров тоже. Но если нагрузить его хотя бы 10 человек? Вы пробовали? Win* сколько ресурсов съест? А если говорить про реалтайм (хоть какой-то) то тут все очень плохо.

            Я почему говорю, мы пробовали внедрить ваших «конкурентов»-французов. Все закончилось ровно через 1 месяц. Схема сервер с API на Win* и клиенты подключенные к нему — требует огромных ресурсов самого сервера. Что приводит к глюкам, тормозам и прочим прелестям.

            И мне всегда нравился фреймворк .NET — Поставь 2.5 версию. Потом мы обновили продукт и используем новый фреймворк — поставь 3.5 версию. Потом мы переписали программу — поставь 4.0 версию, но 2.5 удалить нельзя, так как мы с ней тоже работаем. А 3.5 требуется для соединения.
            У Win* платформ, к сожалению получается примерно как-то так.
            Хотя к чести сказать, они растут и ведут работу над ошибками :)
            Надеюсь вы избежите подобных проблем.
      • +1
        Ок, я использую из под Parallels, а как вы узнали, что я не хочу под мак?
        Но зная, как шикарно исполнен терминал для андройда, думаю, лучше пусть все остается так как есть.
        • 0
          И я с вами согласен, то, что я видел — тихий ужас.
      • +2
        Приведу пример из нашей компании. У нас 12 трейдеров. 6 из них хотели бы работать на Mac. Но, увы и ах — этого сделать нельзя.
        • +1
          Ну мы в будущем не исключаем создания каких-то решений и под Mac, вы поймите — мы сами только за, но встает вопрос ресурсов. Если его удастся решить, то почему бы и нет. Порадовать клиентов — это же хорошо :).
          • +1
            Надеюсь у вас все получится. Было бы здорово увидеть достойный продукт от наших разработчиков.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разработка