Протокол удалённого управления "MoonCMD"
Общая информация о протоколе "MoonCMD"
Терминал Moonbot может принимать команды удалённого управления на UDP порт, высылать ответы и высылать регулярные обновления.
Команды принимаются в формате:
hash команда
где hash = HMAC-SHA256 (команда, пароль); порт и пароль задаются в Настройки → Специальные → Remote:
Поля: UDP Commands Port\pass
Впишите порт, на котором Moonbot будет слушать команды, и пароль, который будет использоваться для подписи команд.
Общий формат ответов:
Ответы отправляются в виде json, с gzip:
{"cmd":"
Основные команды
-
buy ... – применяются стандартные правила для сигналов на покупку;
-
short ... – применяются стандартные правила для сигналов на шорт (фьючерсы);
-
sell token – включить PanicSell на монете. Пример: sell NEO;
-
SellALL – включить PanicSell НА ВСЕХ активных ордерах и остановить терминал;
-
list ("lst" для короткого формата) – список активных ордеров на продажу;
-
silent – отключить уведомления терминала в чат о закрытых сделках;
-
talk – включить уведомления терминала в чат о закрытых сделках;
-
STOP – нажать Стоп в терминале (не покупать новые сигналы);
-
CancelBuy – отменить все неисполненные BUY ордера;
-
START – нажать Старт в терминале, запустить стратегии;
-
BL – показать чёрный список монет;
-
BL + coin – добавить монету coin в чёрный список;
-
BL - coin – убрать монету coin из чёрного списка;
-
TempBL +N coin1 coin2 – временный чёрный список на N часов;
-
SetParam Strategy Param Value – поменять параметр в стратегии ("empty" для пустой строки);
-
SetBL+ Strategy coin – добавить монету в чёрный список стратегии или папки;
-
SetBL- Strategy coin – убрать монету из чёрного списка стратегии или папки;
-
SetWL+, SetWL- Strategy coin – аналогично для белого списка;
-
sgStart Strategy, sgStop Strategy <время, минуты> – запустить или остановить стратегии на заданное время;
-
ResetSession coin | ALL – сбросить сессии на монете или на всех рынках;
-
ResetLoss – сбросить счётчик профита;
-
Leverage X [coin,coin] – поменять плечо на монетах на X;
-
Margin [coin,coin \ ALL] ISO\Cross – поменять маржу на маркетах;
-
ConvertBNB – пыль в BNB;
-
report [N days \ weeks] [coin] [hide] – выслать отчёт. По умолчанию за сегодня;
-
SellPiece [coin\ALL] – продать по кусочку от каждого ордера (если SellPiece не 0);
-
DoUpdate – обновить версию.
Дополнительные команды
-
GetStrategiesFull - выслать все стратегии;
-
GetStrategiesActive - выслать только активные стратегии.
Формат выдачи:
{"cmd":"strats","bot":"BotName","N":number,"data":"string"}, где:
N: номер пакета (все стратегии могут не поместиться в один пакет, тогда они дробятся на N пакетов)
Data: список стратегий (формат обычный как при копировании тегии в буфер):
##Begin_Strategy
…
##End_Strategy
В одном пакете может быть подряд несколько стратегий.
Регулярные апдейты от терминала на порт, с которого пришла команда
-
Ордера
{"cmd":"order","bot":"BotName","oid":number,"sql":"string"} Oid: ID ордера в БД терминала Moonbot. Нужно использовать для корректного обновления записей в БД, когда поступают новые sql после изменения цен, частичного или полного исполнения ордера; -
Балансы: (шлёт раз в 5 секунд)
{"cmd":"acc","bot":"BotName", "data":{ "A":”double”,"T":"double", "S":bool,"V":int}}
- A: Available доступный баланс;
- T: Total - всего баланс;
- S: запущен ли терминал;
- V: номер версии (без точки, например, для версии 7.56 отправка в формате “756”); -
Ошибки API: (шлёт по наличию; пачками по 5 секунд. Тексты ошибок идут в массиве data.E)
{"cmd":"errors","bot":"BB-Futures","data":{"E":[
"04.12 00:12:56.268: TON [400] CheckMarginRatio fail! InsufficientAB\nTiming: 203 ms",
"04.12 00:12:57.104: TON [400] CheckMarginRatio fail! InsufficientAB\nTiming: 203 ms",
"04.12 00:12:57.966: TON [400] CheckMarginRatio fail! InsufficientAB\nTiming: 203 ms"]}}; -
Bin файлы с графиками:
SubscribeCharts: Подписаться на рассылку файлов.
UnsubscribeCharts: Отписаться на рассылку файлов.
Формат заголовка
TMoonCmdHeader = packed record
Flag: byte; // 0 всегда, чтобы отличить от простого gzip
Kind: byte; // тип полезной нагрузки. 1 = график
id: integer; // 4 байта для графика - id ордера (dbID)
blockNum: byte; // номер куска датаграммы, с 0
blocksCount: byte; // всего кусков. 1 если не дробим
end;
Файл может дробиться на blocksCount частей.