# 12. Сравнение C++ формул и WebSocket API
Расширение существующих возможностей робота возможно двумя способами: с помощью механизма С++ формул и WebSocket API. Это разные механизмы, решающие разные задачи, тем не менее, у этих механизмов есть общие черты. Для удобства пользователей ниже в таблице приведено сравнение С++ формул и WebSocket API по ряду параметров.
Характеристика | С++ формулы | WebSocket API |
---|---|---|
Язык программирования | C++ | Любой язык программирования. Желательно использовать высокоуровневые языки, имеющие стандартные библиотеки для работы с протоколом WebSocket |
Возможности | Ограниченные. Есть ограничения на длину исходного кода формул. Доступно получение значений по финансовым инструментам и изменение некоторых параметров портфелей. Для использования в формулах предусмотрены пользовательские поля, не задействованные в основном алгоритме. Запрещено использование функций, обращающихся к файловой системе или работающих с сетью. Крайне нежелательно выполнение затратных по времени операций. Нет возможности получения значений из внешних источников данных (баз данных, таблиц Excel и т.д.) | Полные. Можно автоматизировать всё то, что доступно через веб-интерфейс платформы. Нет ограничений на архитектуру приложения и на использование внешних источников данных. |
Взаимодействие между портфелями | Возможно только между портфелями одного робота, при этом у портфелей, к которым осуществляется доступ, должен быть взведен флаг Shared formulas | Можно из одного приложения взаимодействовать со всеми доступными портфелями вне зависимости от того, каким роботам они принадлежат |
Способ исполнения | Нативный код, компилируется в динамически загружаемую библиотеку, которая выполняется в том же потоке, что и код основного алгоритма робота | Отдельное приложение, которое запускатся на другом сервере |
Влияние на скорость работы робота | Могут замедлять работу робота, так как являются неотъемлемой частью основного алгоритма робота и выполняются в одном потоке с ним | Нет влияния на скорость работы робота, так как расчёты производятся параллельно работе робота |
Скорость доступа к данным | Код формул выполняется всегда, когда вызывается расчёт цен по основному алгоритму. Соответственно, формулы пересчитываются сразу после получения цен при любом изменении в стакане. Никаких ограничений на доступ к данным, доступным в формулах, не накладывается | Для получения данных или внесения изменений необходимо отправить соотвествующий запрос, есть ограничения на количество отправляемых запросов в единицу времени. При подписке на получение данных данные со стороны сервера управления роботами отправляются не при каждом изменении данных, а "пачками" с определенной частотой |
Отказоустойчивость | Ошибки в формулах могут приводить к аварийному завершению работы всего робота | Аварийное завершение работы отдельного приложения повлияет лишь на расчёты, выполняемые в этом приложении, робот при этом продолжит торговать в соответствии со своим алгоритмом и заданными параметрами. Стоит учитывать, что при такой автоматизации есть риск разрыва связи между роботом и отдельным приложением, в таком случае робот продолжит торговать с теми параметрами, которые у него остались перед разрывом связи |