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

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

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

При использовании функции доверительного управления команды между ведущим и ведомыми терминалами могут передаваться через Telegram. В этом случае задержка составляет примерно 1–3 секунды. Такой интервал допустим для среднесрочных торговых сигналов, однако при скальпинге и высокочастотной торговле даже подобная задержка может быть критичной, поэтому её необходимо минимизировать.


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


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


Особенности обмена данными по протоколу UDP


Более высокая скорость управления терминалом при использовании протокола UDP достигается благодаря следующим особенностям:


  • Обмен данными по UDP не требует установления постоянного соединения.
    Пакет данных отправляется в одну сторону, без подтверждения получения, что значительно ускоряет передачу команд по сети. Каждая команда помещается в отдельную датаграмму, что минимизирует задержки и повышает скорость обмена.

  • Некоторые команды являются составными с точки зрения взаимодействия с биржей.
    Например, команда «переставить ордер» включает три фазы: отмену текущего ордера, проверку результата операции и выставление нового ордера. При использовании UDP такая составная команда передаётся ведомому терминалу в одном пакете, что позволяет полностью выполнить её на ведомом терминале без необходимости обмениваться данными с ведущим терминалом, тем самым экономя время и снижая задержки.


Принципы работы и перечень доступных команд Доверительного управления описаны в разделе «Доверительное управление через Телеграм».


При работе через UDP-протокол используются те же команды — только передаются они не в Telegram, а отправляются сразу ведомым терминалам напрямую.


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


Шаг 1. Настройка статического IP и открытие UDP-порта


Для корректной работы ведомый терминал должен иметь статический IP-адрес и открытый UDP-порт.
Этот IP и порт Вы передаёте управляющему трейдеру, чтобы он мог добавить Ваш терминал в список рассылки команд Доверительного управления.


Как открыть UDP-порт:


  • Каждый терминал Moonbot, участвующий в ДУ, должен использовать уникальный порт, который задаётся во вкладке Настройки → Специальные → System в поле Listen UDP port. По умолчанию там стоит порт 1999;

  • Если у Вас установлен Windows Server 2016, то необходимо открыть порт в Windows Firewall, для этого сделайте следующее:


1. Откройте Windows Firewall




2. Перейдите в Advanced Settings



3.  Создайте новое правило, которое разрешает входящие UDP-пакеты на выбранный порт 



4. Откройте свойства созданного правила и ограничьте доступ — разрешите приём пакетов только с IP-адресов, которые сообщит управляющий трейдер.


Шаг 2. Настройка стратегии UDP на ведомом терминале


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


⚠️ Внимание: если управляющий терминал передаёт сигналы в зашифрованном виде, установите на вкладке Main галочку OnlyEncryptedCommands = YES и получите у управляющего трейдера файл с ключами (подробности приведены ниже).


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


1) Откройте окно Share market


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



2) Включите отправку сигналов по UDP


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


3) Настройте параметры в разделе UDP Settings


Шифрование


Рекомендуется всегда передавать сигналы в зашифрованном виде для повышения безопасности. Для этого установите галочку Encrypt signals sent over UDP. При включённом шифровании каждая команда будет дополнительно содержать информацию о базовой валюте, которая сверяется на стороне ведомого терминала, что добавляет дополнительный уровень проверки и безопасности.


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


Мультиордера


Для использования режима мультиордеров обязательно необходимо включить шифрование. Это связано с тем, что при шифрованной передаче данных в команды добавляется уникальный идентификатор ордера, который позволяет ведомым терминалам правильно различать несколько ордеров на одной и той же монете. Если команды не зашифрованы, то идентификатор ордера не передаётся, и работа мультиордеров будет либо невозможной, либо некорректной.


Разделение ордеров


Разделение ордеров при Доверительном управлении поддерживается, но его следует использовать только для одного конкретного ордера. В этом случае ордер будет разделён на три равные части, и процесс разделения будет синхронизирован одинаковым образом как на ведущем, так и на ведомом терминале, сохраняя полный контроль над всеми тремя частями ордера.


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


⚠️ Внимание! Избегайте использования разделения позиции при Доверительном управлении. Это может привести к некорректному копированию команды на ведомый терминал, поскольку эта операция зависит от точного размера позиции на ведущем терминале. Также позиция у ведомого может быть сформирована не только ведущим терминалом, но и другими ведущими, пользователем вручную или его собственными стратегиями, что может привести к ошибкам при обработке и копировании команды.


4) При использовании шифрования - создайте файлы с ключами.
Для этого нажмите один раз кнопку 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.


Для работы с терминалами Moonbot на серверах Amazon и Google необходимо дополнительно создать правило, которое разрешит принимать пакеты с данными.


Инструкция по настройке правил для серверов Google доступна по следующей ссылке:


🔗 Google Cloud Firewall Documentation.


Любой терминал занимает отдельный порт, даже если он не использует стратегии или не настроен для доверительного управления (ДУ).


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


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


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