# 2. О платформе
# 2.1. Краткое описание платформы
В упрощённом виде можно сказать что платформа состоит непосредственно из торговых роботов и системы управления ими. В систему управления роботами с точки зрения клиента входят API и сайт https://bot.fkviking.com/ (opens new window). API является единственным программным интерфейсом, обеспечивающим связь пользователя и роботов. Сайт https://bot.fkviking.com/ (opens new window) для своей работы использует тот же API, что доступен сторонним разработчикам для реализации собственных пользовательских интерфейсов. На платформе используется система разграничения прав пользователей путём указания каждому пользователю доступных ему ролей. Доступ к платформе через API или сайт осуществляется с учётом ограничений, накладываемых ролью, под которой выполнена авторизация. Предполагается, что один пользователь имеет только один аккаунт на платформе, так как ролевая модель обеспечивает одновременный доступ к портфелям нескольких роботов, даже если роботы принадлежат разным компаниям. Далее будут даны системные требования для клиентских устройств, краткие описания робота, интерфейса сайта и ролевой модели.
# 2.2. Системные требования
Основным средством взаимодействия пользователей с роботами является сайт https://bot.fkviking.com/ (opens new window). Сайт существует в десктопной и мобильной версиях. Мобильная версия сайта хоть и обеспечивает функционал близкий к десктопной версии, всё же проигрывает десктопной версии по комфорту использования за счёт ограничения на отображение только одного виджета одновременно. Отображение нескольких виджетов одновременно в десктопной версии сайта требует передачи и хранения большого количества данных. Поэтому рекомендуется использовать десктопную версию сайта на компьютере, удовлетворяющем следующим требованиям:
- процессор с не менее чем четырьмя ядрами (не ниже Intel Core i3-10100 или AMD Ryzen 3 3100);
- объём оперативной памяти не менее 8 ГБ;
- интернет-соединение со скоростью не ниже 30 Мб/с;
- установлена актуальная версия одного из современных браузеров (Google Chrome, Mozilla Firefox, Microsoft Edge, Safari, Opera) с включенной поддержкой JavaScript и отключенными блокировщиками рекламы/скриптов (платформа Викинг не имеет рекламы, однако такие расширения могут негативно влиять на производительность страницы);
- в фаерволе открыт доступ к сайту https://bot.fkviking.com/ (opens new window).
Следует понимать, что указанные требования соответствуют случаю, когда на компьютере открыт браузер с одной вкладкой, в которой открыт сайт https://bot.fkviking.com/ (opens new window), и вся пропускная спрособность интернет-соединения используется для передачи данных между сайтом и сервером, в случае использования нескольких экземляров (вкладок в браузере) нашего сайта, в случае использования интернет-соединения несколькими устройствами и/или приложениями, а так же в случае параллельного запуска на компьютере других ресурсоёмких приложений (торговые терминалы, электронные таблицы, видеопроигрыватели, компьютерные игры и т.д.) общие системные требования увеличиваются. Кроме того, использование VPN или прокси-серверов может уменьшать реальную ширину интернет-канала. Приведенные выше требования являются рекомендуемыми, возможно использование десктопной версии сайта на компьютере, не удовлетворяющем этим требованиям, но в таком случае возможны "подвисания" интерфейса при взаимодействии с некоторыми виджетами.
# 2.3. Краткое описание робота
Каждый робот может торговать несколькими одинаковыми алгоритмами. Один алгоритм, со всеми его настройками, далее будем называть портфелем. Каждый портфель робота должен содержать биржевые инструменты, которыми предполагается торговать или использовать их в расчётах. В портфеле может содержаться минимум один инструмент, все инструменты портфеля уникальны.
Один из инструментов портфеля должен быть отмечен признаком Is first, такой инструмент будем называть главным или первой ногой портфеля. Инструменты портфеля, не отмеченные признаком Is first, будем называть второй ногой портфеля. В каждом портфеле робота есть параметры, которые задаются на весь портфель, назовём их параметры портфеля. Кроме них в портфеле есть параметры, которые задаются отдельно для каждого из инструментов портфеля, будем называть их параметры инструментов портфеля. Так же, для всего портфеля задаются параметры уведомлений (Notifications).
Есть еще несколько параметров, которые задаются для каждого используемого инструмента каждого транзакционного подключения (параметры позиций по инструментам и параметры позиций по валютам). Параметры делятся на редактируемые (т.е. собственно настройки) и отображаемые или расчётные (например, финансовый результат).
Некоторые параметры портфеля и инструментов для большей гибкости могут быть заданы как формулы на Языке программирования C++.
Для каждого из портфелей робота можно выбрать Type используемого алгоритма. Основной алгоритм робота арбитражный. Цены заявок на покупку и продажу по главному инструменту в общем случае рассчитываются на основании цен других инструментов портфеля. Поддерживается работа в двух режимах. В режиме котирования (флаг Quote взведен) после включения торговли на покупку и/или продажу в стакане по главному инструменту портфеля держатся заявки на покупку и продажу соответственно. Котирующая заявка переставляется при выполнении определенных условий, например, при отклонении цены выставленной заявки от расчетной цены. Если котирование отключено, то заявки по главному инструменту выставляются при появлении сигнала (выполнении определенного условия).
Заявки по инструментам второй ноги выставляются после прохождения сделки по первой ноге. Направление заявок по инструментам второй ноги определяется направлением сделки по первой ноге, а также значением параметра On buy соответствующего инструмента.
Робот может быть настроен как на выставление заявок второй ноги после прохождения каждой сделки по первой ноге, так и на более редкое выставление заявок по второй ноге. Объем для выставления по каждому финансовому инструменту второй ноги вычисляется исходя из текущей позиции портфеля по первой ноге и значения параметра Count обоих финансовых инструментов таким образом, чтобы отношение "новой" позиции текущего финансового инструмента (которая будет после прохождения сделки по еще невыставленной, но выставляемой в данный момент заявке) к позиции первой ноги было равно отношению значения параметра Count второй ноги к значению параметра Count первой ноги. Причем, если при определении "новой" позиции по финансовому инструменту в портфеле есть неисполненные заявки, то исходим из того, что они будут полностью сведены в сделки.
Все заявки, выставляемые роботом, являются лимитными котировочными на всех поддерживаемых биржах.
# 2.4. Краткое описание интерфейса
Основная страница интерфейса представлена набором таблиц-виджетов, которые расположены в выпадающем списке Widgets
. Все виджеты могут быть открыты
и закрыты в любом количестве и порядке, кроме виджета Robot logs
, который открыт всегда и всегда один.
Во время работы робота могут возникать различные "ошибки" при выставлении и удалении заявок, такие ситуации не являются нештатной работой робота и
могут быть вызваны причинами, не связанными с некорректной работой торгового робота, например, отсутствием денег на счете клиента. Все "ошибки" и
еще некоторую информацию, связанную с работой программы, можно посмотреть в виджете Robot logs
. Некоторые слишком часто приходящие сообщения будут
отображаться в таблице не все, а 1 раз в 10 секунд и будут отмечены в конце сообщения символом xN, где N - количество не показанных сгруппированных
сообщений. Некоторые приказы, которые заведомо будут отклонены биржей, на биржу не отправляются. Такие "ошибки" помечены постфиксом _LOCAL
.
Исторические логи можно посмотреть, используя виджет Robot logs history
. В настройках виджета можно выбрать один из предложенных периодов: сегодня,
вчера, 5 дней, неделя, 10 дней, месяц или задать интересующий период самостоятельно с точностью до минуты.
В виджетах Robot logs
, Robot logs history
, Financial result for today
, Finres history
, Deals for today
, Deals history
,
Trade connections orders
отображается локальное время пользователя.
В основном интерфейсе робота есть функционал важных сообщений, которые показываются в виде модального окна, блокирующего взаимодействие пользователя
с сайтом до подтверждения им кнопкой, что он ознакомился с сообщением. Если пользователь онлайн, то сообщение появится у него сразу после отправки.
Если пользователь оффлайн, то сообщение появится у пользователя при следующем входе на сайт. Если какое-то сообщение приходит в лог не реже, чем
каждые 20 секунд и длится 10 минут, то пользователь получит об этом сообщение. Такое сообщение всплывает поверх всех окон и держится до тех пор,
пока пользователь не нажмет ok
, тем самым подтвердив прочтение сообщения. Первоначальный таймаут для получения такого сообщения 10 минут, потом
30 минут, 1 час, 3 часа и 6 часов, затем снова 10 минут и т.д. Список отправленных сообщений также доступен для просмотра в меню Notifications
в
личном кабинете пользователя под иконкой справа сверху.
Стоит заметить, что все виджеты настраиваемые. Можно менять местами столбцы, регулировать их ширину, а так же скрывать ненужные Columns
. Возможно
одновременное открытие нескольких одинаковых виджетов с использованием в них разных настроек. Настроенное рабочее пространство можно сохранить в
Workspaces
и позже загружать его на другие устройства. Также есть возможность экспорта и импорта Workspaces
через файл. Это позволяет пользователям
с несколькими ролями перенести настроенные Workspaces
из одной роли в другую.
Для начала работы с роботом необходимо активировать нужные подключения для получения маркет-даты и добавить необходимые транзакционные подключения.
Маркет-дата подключения активируются в виджете Data connections
. Транзакционные подключения добавляются в виджете Trade connections
. Для создания
портфеля необходимо использовать виджет Portfolios table
.
# 2.5. Краткое описание ролевой модели
Для разграничения прав доступа пользователей на платформе используется ролевая модель. Для её понимания необходимо сначала ввести некоторые сущности и уточнить связи между сущностями. Кроме робота, портфеля и пользователя вводится сущность "компания". Эта сущность используется как точка привязки роботов, т.е. робот создаётся для какой-либо компании и в дальнейшем ей принадлежит. Создание робота без указания компании невозможно. Портфель создается пользователем в конкретном роботе. Пользователь, создавший портфель, является его владельцем (создателем) и автоматически получает права на этот портфель. Таким образом, пользователь имеет права на все портфели, которые он создал в данном роботе. Доступ к портфелю, созданному пользователем, можно отнять только вместе с роботом.
После регистрации пользователь автоматически получает роль Demo
в компании public
, это специальная роль и специальная компания, под этой ролью
в данной компании доступны только бесплатные роботы с виртуальной торговлей. В других компаниях роль Demo
недоступна. Все остальные роли назначаются пользователю
в рамках определенной, уже "реальной", компании. Пользователь может иметь одну и ту же роль в разных компаниях. Причём в каждой из компаний он может иметь одну или несколько ролей.
На текущий момент кроме роли Demo
существуют роли Trader
и Head of traders
, Head view only
. Роль Trader
предназначена для выполнения исключительно торговых операций.
Под ролью Head of traders
можно выполнять как торговые операции, так и административные. Под ролью Head view only
можно просматривать торговую и административную информацию без возможности её редактирования. После того, как трейдер добавлен в компанию под ролью Trader
,
ему со стороны Head of traders
может быть дан доступ к одному или нескольким роботам и к одному или нескольким портфелям. Один робот может быть доступен
нескольким пользователям с ролью Trader
. Пользователь под ролью Trader
имеет доступ только к тем портфелям доступных ему роботов, для которых он является
владельцем (создателем), и к тем, доступ к которым был явно предоставлен ему Head of traders
.
Head of traders
может назначать себе и другим пользователям роли внутри той компании, где он является Head of traders
. В дальнейшем он может
давать доступы к роботам и портфелям тем пользователям, которые имеют в компании роль Trader
. Head of traders
имеет доступ ко всем роботам и портфелям
внутри компании.
Head view only
является просмотровым аналогом роли Head of traders
, под данной ролью видны те же данные, что и под Head of traders
, но изменение этих данных запрещено. Под ролью Head view only
можно редактировать только настройки своего пользователя.
Таким образом, теперь роботы связаны с пользователями не напрямую, а через прослойку в виде компании: роботы принадлежат компании, пользователи получают в компании роли, в соответствии с которыми им могут быть назначены роботы и портфели из числа принадлежащих компании.
При авторизации пользователь указывает роль, под которой выполняется авторизация. Авторизация выполняется под ролью без указания компании, т.е. пользователь после авторизации получит доступ в соответствии с указанной ролью во всех компаниях, где ему назначена эта роль.