ДОВЕРИТЕЛЬНОЕ УПРАВЛЕНИЕ

ВЫСОКОЧАСТОТНЫЙ ТРЕЙДИНГ ПО ПРОТОКОЛУ UDP

Инструменты доверительного управления использовали передачу команд между управляющим и ведомыми терминалами при помощи канала в Telegram. Задержка при этом могла составлять 1-3 секунды, что приемлемо при работе по среднесрочным сигналам. Однако, при сверхбыстрой торговле и скальпинге задержка играет критическую роль.

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

По итогам тестов выявлено, что задержка может быть сведена к 100мс и менее! Более того, в некоторых случаях ведомые терминалы могут исполнить команду даже раньше, чем управляющий, если ведомый терминал расположен на сервере ближе к бирже, чем управляющий терминал и соответственно имеет меньший пинг!

За счет чего достигается такая скорость:

  1. Обмен данными посредством протокола UDP не требует установки соединения, то есть пакет данных идет только в 1 сторону. Кроме того, 1 команда умещается в 1 датаграмму, и быстрее проходит по сети.
  2. Некоторые команды являются составными с точки зрения взаимодействия с биржей, например команда "переставить ордер" состоит из 3 фаз: отменить текущий ордер, проверить результат операции, выставить новый ордер. Такая команда отправляется ведомому терминалу в 1 пакет, и исполняется уже на нем, не затрачивая дополнительного времени на обмен с ведущим терминалом.


Перечень команд и принципы работы ДУ в MoonBot описаны в этом разделе, ознакомьтесь с ним прежде чем читать дальше.


Как настроить прием команд ДУ через UDP (ведомый терминал).


1) Для корректной работы ведомый терминал должен иметь статический IP адрес и открытый UDP порт. Адрес и порт вы сообщаете управляющему трейдеру, чтобы он добавил вас в список рассылки команд ДУ от своего ведущего терминала.

1A) Как открыть UDP порт: каждый терминал MoonBot, который участвует в доверительном управлении должен использовать свой уникальный порт, который нужно указать в поле Listen UDP port на вкладке "Настройки - Специальные - System". По умолчанию в терминалах указывается порт 1999.


Далее, если у вас Windows Server 2016:

  • нужно открыть настройки Windows Firewall


  • Открыть Advanced Settings
  • Создать новое правило, разрешающее принимать пакеты на нужный UDP порт:

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


1B) Настройка ведомого терминала.

В окне стратегий ведомого терминала создайте стратегию с типом сигнала "UDP" и на её вкладке "Main" установите галочку AcceptCommands = YES, а поле ChannelKey оставьте пустым.

Внимание! Управляющий терминал может передавать сигналы и в зашифрованном виде, тогда в этом случае установите на вкладке "Main" галочку OnlyEncryptedCommands = YES и возьмите у управляющего трейдера файл с ключами (см. ниже).


3) Настройка управляющего терминала.

Настройка производится нажатием ПКМ на кнопку "Поделиться":


  • Поставьте галочку "Хочу передавать сигналы посредством UDP"
  • Нажмите кнопку "Send LIst", заполните список рассылки, получив у ведомых IP адреса и порты.
  • (Необязательно) Заполните поле MaxOrder: управляющий задаёт тут максимальный размер ордера и, когда управляющий использует меньший ордер, то ведомые так же используют пропорционально меньший ордер.
  • (Необязательно) Заполните поле ChannelKey: управляющий тут задаёт ключ канала, а в ведомых терминалах такой же ключ канала должен быть указан на вкладке "Main" UDP стратегии в поле параметра ChannelKey.


Свои сигналы управляющему в сторону ведомых желательно передавать в зашифрованном виде. 


Для этого нужно создать ключевые файлы:

  • Нажмите 1 раз кнопку Keys, это сгенерирует файлы с приватным ключом (data\UDPKeys.key) и публичны ключом (data\UDPKeys.pub).
  • Приватный ключ UDPKeys.key никому не отдавайте, он сам по себе зашифрован и должен храниться на ПК у управляющего трейдера в папке data терминала MoonBot , с которого отправляются команды для ведомых терминалов.
  • Публичный ключ UDPKeys.pub нужно положить в папку data ведомых терминалов всем своим ДУ пользователям.


Важно! Если вы нажмете кнопку Keys снова, то старые ключи будут перезаписаны, и нужно будет снова раздать всем новые публичные ключи.


Обратите внимание:

  • При включенном шифровании в сигнале передается также базовая валюта, и сверяется принимающим терминалом.
  • Сигналы старого формата из раздела “экспорт” можно пересылать таким же образом на удаленный терминал.
  • Для использования мультиордеров нужно обязательно включить шифрование, так как в этом случае в будет передаваться идентификатор ордера, позволяющий ведомым терминалам отличить разные ордера на 1 монете. В открытых (не шифрованных) командах идентификатор ордера не передается.
  • Разделение ордеров в режиме ДУ возможно, но нужно это делать только по ордеру, при этом ордер разделиться на 3 части как у управляющего, так и у ведомого с сохранением управления всеми 3 ордерами.

ВНИМАНИЕ. Старайтесь не использовать разделение позиции при ДУ, поскольку такая команда будет зависить от конкретного размера позиции управляющего, и может не корректно копироваться на ведомого, а так же позиция у ведомого может быть набрана не только 1 управляющим, но и другими управляющими, или самим ведомым вручную или по его другим стратегиями и т.п.


В админке серверов Amazon и Google нужно дополнительно ещё создать правило, разрешающее принимать пакеты. Для серверов Google инструкция расположена тут: https://cloud.google.com/vpc/docs/using-firewalls.


Любой терминал занимает 1 порт, даже если он работает без стратегий и не настроен на ДУ.

Если вы запускаете несколько терминалов, то на вкладке Настройки - Специальные - System в поле Listen UDP port нужно назначить им разные порты.

Если порт на сервере открыт, и ваш IP адрес управляющий указал верно, то стратегия UDP с выключенным шифрованием должна принимать сигналы и писать данные в лог, даже если не может их обработать. Таким образом, если в логе ничего нет, то это будет означать, что неверно настроены порт или указан IP адрес.


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