Доверительное управление и социальный трейдинг
Скачать бесплатно

Доверительное управление и социальный трейдинг

Быстрый поиск по статье

Доверительное управление через UDP протокол

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


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


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


Более высокая скорость управления достигается из-за того, что:


  • Обмен данными посредством UDP протокола не требует установки соединения, то есть пакет данных идёт только в 1 сторону. Кроме того, 1 команда умещается в 1 датаграмму, и быстрее проходит по сети.

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


Перечень команд и принципы работы Доверительного управления в Moonbot описаны в разделе "Доверительное управления через Телеграм", только эти команды при использовании UDP протокола передаются не в Telegram, а отправляются сразу ведомым терминалам напрямую.


Настройка ведомого терминала для приёма команд Доверительного управления через UDP протокол


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


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


Далее, если у вас Windows Server 2016, то нужно открыть настройки Windows Firewall




Открыть Advanced Settings



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



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


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


Настройка ведущего терминала для отправки команд Доверительного управления через UDP протокол


1) Откройте любую монету на полный экран и на правой панели управления нажмите на кнопку "Поделиться", чтобы открылось окно Share market.



2) Установите галочку "Хочу слать сигналы ДУ через UDP протокол".


3)Выполните необходимые настройки ведущего терминала в зоне «UDP Settings».


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


Установите галочку «Encrypt signals sent over UDP», для включения шифрования сигналов, передаваемых по UDP протоколу. В этом случае в зашифрованном сигнале передаётся также базовая валюта, и сверяется принимающим терминалом.


Сигналы старого формата из раздела “экспорт” можно пересылать таким же образом на удаленный терминал.


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


Разделение ордеров в режиме Доверительного управления возможно, но нужно это делать толькопо ордеру, при этом ордер разделиться на 3 части как у управляющего, так и у ведомого с сохранением управления всеми 3 ордерами.


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


4) При использовании шифрования нужно создать файлы с ключами, для этого нажмите 1 раз кнопку «Keys», это сгенерирует файлы с приватным ключом (data\UDPKeys.key) и публичным ключом (data\UDPKeys.pub).


Приватный ключ UDPKeys.key никому не отдавайте, он сам по себе зашифрован и должен храниться на компьютере у ведущего трейдера в папке data его терминала Moonbot, с которого будут отправляться команды для ведомых терминалов.


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


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


5) Нажмите на кнопку "Send LIst", заполните список рассылки, получив у ведомых пользователей IP адреса и порты.


Ниже можно настроить другие опции:


  • Send only share signals - отправлять только сигналы на покупку или полный набор команд Доверительного Управления.

  • Send Panic Sell for closed orders - отправлять команду PanicSell, когда ведущий бот закрыл ордер на продажу.

  • Send Cancel_Buy for closed orders - отправлять команду CancelBuy, когда ведущий бот закрыл ордер на продажу.

  • Send Cancel_Buy on buy fill - отправлять команду CancelBuy через 5 сек., после того как ведущий бот купил монету.

  • SendFirstSell - отправлять команду Sell сразу после покупки; Если нет, то будет использована цена продажи из настроек ведомого бота.

  • Sell If master not filled - отправлять команду PanicSell, если управляющий отменил Buy ордер и ничего не купил.

  • Max Order: необязательное поле для указания максимального размера ордера в ведущем терминале (в примере на скриншоте: 1000$). Когда ведущий терминал использует меньший ордер, то ведомые терминалы так же используют пропорционально меньший ордер.

  • ChannelKey: необязательное поле для указания в ведущем терминале ключа канала (в примере на скриншоте: Trust). Если ключ канала установлен в ведущем терминале, то в ведомом терминале такой же ключ должен быть указан на вкладке Main настройки стратегии UDP в параметре ChannelKey. Для примера на скриншоте у ведущего указано «ChannelKey: Trust», значит у ведомого в UDP стратегии на вкладке Main должно быть указано ChannelKey=Trust .


Также, в админ панели серверов Amazon и Google нужно дополнительно ещё создать правило, разрешающее принимать пакеты с данными.


Для серверов Google инструкция расположена тут: https://cloud.google.com/vpc/docs/using-firewalls.


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


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


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


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