Скачать бесплатно

Протокол удалённого управления "MoonCMD"

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

Общая информация о протоколе "MoonCMD"

Терминал Moonbot может принимать команды удалённого управления на UDP порт, высылать ответы и высылать регулярные обновления.


Команды принимаются в формате:


hash команда
где hash = HMAC-SHA256 (команда, пароль); порт и пароль задаются в Настройки → Специальные → Remote:


Поля: UDP Commands Port\pass
Впишите порт, на котором Moonbot будет слушать команды, и пароль, который будет использоваться для подписи команд.


Общий формат ответов:


Ответы отправляются в виде json, с gzip:


{"cmd":"","bot":"string Bot Name","N": int,"data":string или object}


Основные команды:


  • 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\n Timing: 203 ms",
"04.12 00:12:57.104: TON [400] CheckMarginRatio fail! InsufficientAB\n Timing: 203 ms",
"04.12 00:12:57.966: TON [400] CheckMarginRatio fail! InsufficientAB\n Timing: 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 частей.


Формат чтения:


Формат бинарного файла, записанного TMarket.SaveToStreamShort