Настройки криптовалютного ядра
- currency_pair_separator – символ разграничения торговой пары
- web_app_port – порт, по которому подключается веб интерфейс по протоколу TCP к торговому ядру. Доступ по этому порту возможен только через локальное соединение (доступ извне закрыт). По умолчанию – 1330 порт
- marketmaker_port – порт, по которому может подключиться брокер к торговому ядру. Доступ осуществляется по IP брокера. По умолчанию – 1340 порт
- daemon_port – порт, по которому осуществляется взаимодействие системы уведомлений и ядра криптовалютной биржи. В качестве системы уведомлений используется NodeJS. Кроме функционала уведомлений, система NodeJS занимается вставкой в БД информации о новых ордерах, сделках и изменении статуса ордеров. Возможно, настроить доступ только на локальное подключение либо по IP. По умолчанию – 1350 порт
- reserve_port – порт, по которому осуществляется взаимодействие основного торгового ядра и резервного. Все команды, поступающие на вход основному ядру криптовалютной биржи, транслируются резервному ядру. Таким образом, если в дата-центре происходит сбой, есть возможность мгновенно переключиться на резервный сервер и продолжить работу в штатном режиме. По умолчанию – 1360 порт
- admin_user_id – в данном параметре указывается уникальный идентификатор администратора по таблице users. Данное значение используется при формировании плеча со стороны биржи. Если плечо формируется со стороны биржи, то система не проверяет достаточность свободных средств для формирования плеча. Также данное значение используется для возможности блокировки/разблокировки любого другого плеча пользователя
- queue_delay – задержка (мс), применяемая при обработке команд пустых очередей в следующих потоках: поток вызова команд стандартных и периодических функций и поток для отправки команд в систему уведомлений
Основные положения взаимодействия
Каждая команда, посылаемая на вход торговому ядру, должна быть представлена в JSON формате:
{"0":<func_id>,"1":<param1>,"2":<param2>…}
где
- <func_id> – целочисленный номер функции,
- <param1>,<param2> – параметры функции
Результатом выполнения команды является строка (или несколько строк) также в JSON формате. Первая JSON строка состоит из инкрементного номера посылаемой команды (func_call_id), которая говорит о том, что команда, поданная на вход зарегистрирована торговым ядром, а вторая и последующие JSON строки содержат результат выполнения команды.
Пример 1:
Посылаем команду, которая регистрирует нового пользователя в торговом ядре. У данной команды в соответствии с API (п. 4.1) func_id=100. Таким, образом JSON строка будет выглядеть следующим образом:
{"0":100,"1":123}
- 100 – номер команды (func_id)
- 123 – id пользователя
На выходе мы должны получить две JSON строки
Первая будет содержать инкрементный номер команды, которая торговая система присвоила в результате разбора входящей команды
{"0":0,"1":555}
- 0 – это успешный код возврата (информирующая лишь о том, что входящая команда принята к исполнению)
- 555 – инкрементный номер команды, присвоенный торговым ядром
Вторая будет содержать результат выполнения команды
{"0":555,"1":0}
- 555 – ссылка на инкрементный номер команды
- 0 – это успешный код возврата, говорящий нам о том, что новый пользователь успешно создан в торговом ядре.
Пример 2:
Посылаем команду, которая пытается зарегистрировать уже существующего пользователя в системе. У данной команды в соответствии с API (п. 4.1) func_id=100. Таким, образом JSON строка будет выглядеть следующим образом:
{"0":100,"1":123}
- 100 – номер команды (func_id)
- 123 – id пользователя, которого мы уже ранее регистрировали
На выходе мы должны получить две JSON строки
Первая будет содержать инкрементный номер команды, которая торговая система присвоила в результате разбора входящей команды
{"0":0,"1":556}
- 0 – это успешный код возврата (информирующая лишь о том, что входящая команда принята к исполнению)
- 556 – инкрементный номер команды, присвоенный торговым ядром
Вторая будет содержать результат выполнения команды
{"0":556,"1":1}
- 556 – ссылка на инкрементный номер команды
- 1 – это код возврата, говорящий нам о том, что пользователь уже существует
Список всевозможных кодов возврата описаны в п. 3
В случае, если в торговое ядро посылается команда, которой не существует, возвращается только одна JSON строка с кодом ошибки 25 (ErrorFunctionNotFound)
Пример 3:
Посылаем команду, которой не существует:
{"0":777}
Получим следующий ответ:
{"0":25}
- 25 – это код возврата, говорящий о том, что функция не найдена в торговом ядре
В случае, если в торговое ядро приходит команда с невалидным JSON, возвращается код ошибки 26 (ErrorInvalidJsonInput)
Пример 4:
Посылаем команду с невалидным JSON:
{100,123}
Получим следующий ответ:
{"0":26}
- 26 – это код возврата, говорящий о том, что парсер торгового ядра не смог распарсить JSON строку
В случае, если в торговое ядро приходит команда по торговой паре, по которой торги приостановлены, возвращается код ошибки 40 (ErrorMarketClosed)
Основные коды возврата
Код |
Текстовое наименование |
Описание |
0 |
Success |
Успешный код возврата |
1 |
ErrorAccountAlreadyExists |
Пользователь уже существует |
2 |
ErrorAccountNotFound |
Пользователь не найден |
3 |
ErrorAccountAlreadySuspended |
Пользователь уже заблокирован (при попытке заблокировать) |
4 |
ErrorAccountAlreadyUnsuspended |
Пользователь уже разблокирован (при попытке разблокировать) |
5 |
ErrorAccountSuspended |
Счета пользователя заблокированы. Возникает при попытке вывести средства с торгового счета, при попытке удаления пользователя в системе и при попытке выставить ордер |
6 |
ErrorCrossUserAccessDenied |
Возникает при попытке модифицировать объект, не принадлежащий пользователю |
7 |
ErrorInsufficientFunds |
Возникает при недостаточности денежных средств на счету |
8 |
ErrorUserHasActiveOrder |
Возникает при попытке удалить пользователя из торгового ядра, в случае если у него в системе остались активные ордера или заложенные средства под плечо |
9 |
ErrorOrderNotFound |
Возникает при попытке отменить несуществующий ордер или получить информацию по несуществующему ордеру |
10 |
ErrorInsufficientMarketVolume |
Возникает при недостаточности глубины стакана при размещении рыночного ордера на покупку или продажу |
11 |
ErrorBorrowedFundsUse |
Возникает при попытке удалить пользователя из торгового ядра, в случае если у него в системе остались незакрытые позиции |
12 |
ErrorNegativeOrZeroValue |
Возникает при валидации входных параметров |
13 |
ErrorNegativeOrZeroId |
Возникает при валидации входных параметров |
14 |
ErrorUserHasAvailableFunds |
Возникает при попытке удалить пользователя из торгового ядра, в случае если у него в системе остались средства на торговых счетах |
15 |
ErrorIncorrectStopLossRate |
Некорректное значение цены STOPLOSS |
16 |
ErrorIncorrectTakeProfitRate |
Некорректное значение цены TAKEPROFIT |
17 |
ErrorIncorrectTrailingStopOffset |
Некорректное смещение цены TRAILINGSTOP |
23 |
ErrorNegativeOrZeroLimit |
Некорректный уровень глубины при получении глубины стакана |
24 |
ErrorInvalidFunctionArguments |
Возникает при несоответствии входных параметров команды, передаваемых в торговое ядро |
25 |
ErrorFunctionNotFound |
Команда не найдена в торговом ядре |
26 |
ErrorInvalidJsonInput |
Невалидная JSON строка, передаваемая в торговое ядро |
28 |
ErrorIncorrectPercValue |
Некорректное значение процента |
38 |
ErrorSnapshotBackupFailed |
Возникает при ошибке выполнения бэкапа торгового ядра |
39 |
ErrorSnapshotRestoreFailed |
Возникает при невозможности восстановиться из бэкапа |
40 |
ErrorMarketClosed |
Данная ошибка возникает при попытке выставить /отменить ордер или закрыть позицию, если торги по указанной торговой паре приостановлены |
41 |
ErrorMarketAlreadyClosed |
Торги по паре уже приостановлены |
42 |
ErrorMarketAlreadyOpened |
Торги по паре уже возобновлены |
46 |
ErrorInvalidCurrency |
Возникает в случае, если код валюты, передаваемый в торговое ядро, пусто или имеет значение NULL |
48 |
ErrorCurrencyNotFound |
Возникает в случае отсутствия в торговом ядре указанной валюты |
49 |
ErrorCurrencyPairNotFound |
Возникает в случае отсутствия в торговом ядре указанной валютной пары |
50 |
ErrorCurrencyPairAlreadyExists |
Возникает при попытке добавить в торговое ядро уже существующую валютную пару |
51 |
ErrorStopLossUnavailable |
Стоп-лосс недоступен по причине пустого списка ордеров |
52 |
ErrorTakeProfitUnavailable |
Тейк-профит недоступен по причине пустого списка ордеров |
53 |
ErrorTrailingStopUnavailable |
Трейлинг-стоп недоступен по причине пустого списка ордеров |
54 |
ErrorIncorrectDelayValue |
Некорректное значение задержки (см. параметр queue_delay в п. 1)
|
56 |
ErrorOfferDoesNotExist |
Возникает при отсутствии кредитного предложения по плечу |
57 |
ErrorOfferInsufficientFunds |
Возникает в случае, если сумма маржи превышает предоставляемую в заем сумму |
58 |
ErrorMarginAlreadyClosed |
Маржинальная торговля по валютной паре уже приостановлена |
59 |
ErrorMarginAlreadyOpened |
Маржинальная торговля по валютной паре уже возобновлена |
61 |
ErrorCreditInUse |
Возникает при попытке удалить предложение по плечу, по которому есть незакрытые позиции |
62 |
ErrorCreditOfferAlreadySuspended |
Предложение по займу уже приостановлено |
63 |
ErrorCreditOfferAlreadyUnsuspended |
Предложение по займу уже возобновлено |
64 |
ErrorPositionNotFound |
Возникает при отсутствии позиции |
65 |
ErrorCanBeForceLiquidation |
Возникает при попытке открыть позицию, при которой будет следом осуществлена процедура ликвидации средств и принудительное закрытие |
API взаимодействия
Перечисление типов переменных:
- Int32 – 32-разрядное целое число со знаком. MaxValue: 9223372036854775807
- Int64 – 64-разрядное целое число со знаком. MaxValue: 2147483647
- Decimal – 128-разрядный тип данных со знаком. Диапазон значений: (От -7,9 x 1028 до 7,9 x 1028) / (от 100 до 1028). Точность: 28–29 значащих цифр
- String – текст как последовательность кодов символов UTF-16
Используемые параметры:
- func_call_id – многопоточный инкремент id предыдущего вызова (Int64)
- func_id – целочисленный номер функции API
- user_id – id пользователя торговой системы (Int32)
- amount – количество валюты (Decimal)
- currency_code – код валюты торгов (String)
- market_currency_code – код валюты рынка (String)
- side – направленность ордера (Bool). true – ордер на продажу, false – ордер на покупку
- rate – цена покупки/продажи (Decimal)
- sl_rate – при достижении данной цены автоматически выставляется рыночный stopLoss ордер (Decimal)
- tp_rate – при достижении данной цены автоматически выставляется takeProfit ордер (Decimal)
- ts_offset – смещение цены trailingStop ордера (Decimal)
- new_fee_percent – процент комиссии, назначаемый определенному пользователю по определенной валюте
- order_id – id ордера (Int64)
- deal_id – id сделки (Int64)
Торговое ядро принимает команды из web интерфейса по порту 1330 (web_app_port)
При поступлении каждой команды выполняются следующие проверки:
- Проверка валидности JSON команды
- Проверка существования команды
- Проверка на приостановку торгов по валютной паре (только для команд: размещение лимитного ордера, размещение рыночного ордера и отмена ордера)
- Проверки на соответствие типов передаваемых данных в параметрах команды
После прохождения общих для всех команд проверок, данная команда реплицируется на резервное торговое ядро.
Создание пользователя
Данная команда посылается при активации нового пользователя в системе.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на существование пользователя
При успешном прохождении проверки в торговом ядре данному пользователю открываются торговые счета по всем торгуемым валютам, и пользователь добавляется в систему.
{"0":100,"1":<user_id>}
Блокировка счетов пользователя
Данная команда посылается администратором системы для блокировки всех счетов пользователя.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на существование пользователя
- проверка не заблокированы ли уже счета
В торговом ядре данному пользователю устанавливается флаг Suspended=true. Дальнейшая попытка выставить ордер на покупку или продажу блокируется
{"0":200,"1":<user_id>}
Разблокировка счетов пользователя
Данная команда посылается администратором системы для разблокировки всех счетов пользователя.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на существование пользователя
- проверка не разблокированы ли уже счета
В торговом ядре данному пользователю устанавливается флаг Suspended=false. Возобновляется возможность выставлять ордера на покупку или продажу
{"0":300,"1":<user_id>}
Удаление пользователя
Данная команда посылается администратором системы при удалении пользователя.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на существование пользователя
- проверка на блокировку счёта
- проверка наличия открытых ордеров
- проверка наличия открытых позиций
- проверка наличия остатков на счетах
При прохождении всех проверок, в торговом ядре удаляются счета по всем валютам и сам пользователь.
{"0":400,"1":<user_id>}
Пополнение счета
Данная команда посылается в торговое ядро при пополнении торгового счета пользователя.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на существование пользователя
- проверка на положительность суммы пополнения
- проверка существования валюты
В торговом ядре пополняется счет на указанную сумму в указанной валюте и посылается сообщение о новом балансе торгового счета по данной валюте в систему уведомлений.
{"0":500,"1":<user_id>,"2":<currency_code>,"3":<amount>}
Вывод средств
Данная команда посылается в торговое ядро при выводе средств с торгового счета пользователя.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на существование пользователя
- проверка на блокировку счёта
- проверка на положительность суммы вывода
- проверка существования валюты
- проверка достаточности указанной суммы средств для вывода
В торговом ядре уменьшается баланс счета на указанную сумму в указанной валюте и посылается сообщение о новом балансе торгового счета по данной валюте в систему уведомлений.
{"0":600,"1":<user_id>,"2":<currency_code>,"3":<amount>}
Размещение лимитного ордера
Данная команда посылается в торговое ядро при выставлении пользователем лимитного ордера на покупку или продажу.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на существование стакана
- проверка на существование пользователя
- проверка на блокировку счёта
- проверка на корректность валюты рынка
- проверка на корректность валюты торгов
- проверка переданных значений сумм на положительность
- если выставлена цена STOP-LOSS
- проверка существования активных ордеров на покупку/продажу в стакане
- проверка уровня SL по отношению к рыночной цене на покупку (если SL меньше, чем цена самого лучшего ордера на покупку, то ордер на покупку не выставляется и возвращается ошибка о неверно заданной цене SL) – если SL на продажу
- проверка уровня SL по отношению к рыночной цене на продажу (если SL больше, чем цена самого лучшего ордера на продажу, то ордер на продажу не выставляется и возвращается ошибка о неверно заданной цене SL) – если SL на покупку
- если выставлена цена TAKE-PROFIT
- проверка существования активных ордеров на покупку/продажу в стакане
- проверка уровня TP по отношению к рыночной цене на покупку (если TP больше, чем цена самого лучшего ордера на покупку, то ордер на покупку не выставляется и возвращается ошибка о неверно заданной цене TP) – если TP на продажу
- проверка уровня TP по отношению к рыночной цене на продажу (если TP меньше, чем цена самого лучшего ордера на продажу, то ордер на продажу не выставляется и возвращается ошибка о неверно заданной цене TP) – если TP на покупку
- если выставлено смещение цены TRAILING-STOP
- проверка существования активных ордеров на покупку/продажу в стакане
- проверка уровня TS по отношению к рыночной цене на покупку (если разница самой лучшей цены на покупку и заданного TS смещения меньше или равно нулю, то ордер на покупку не выставляется и возвращается ошибка о неверно заданном смещении TS) – если TS на продажу
- проверка уровня TS по отношению к рыночной цене на продажу (если сумма заданного TS смещения и цены самого лучшего ордера на продажу меньше или равно нулю, то ордер на продажу не выставляется и возвращается ошибка о неверно заданном смещении TS) – если TS на покупку
- если выставлен ордер на покупку
- проверка достаточности средств в валюте рынка
- если собственных средств недостаточно и по данной валютной паре отсутствует маржинальная торговля, то выставление ордера с плечом не задействуется и возникает ошибка о недостаточности средств
- если собственных средств недостаточно и по данной валютной паре включена маржинальная торговля и было выбрано кредитное предложение, осуществляются следующие проверки для возможности открытия позиции:
- проверка на существование кредитного предложения
- проверка совпадения валюты займа и валюты кредитного предложения
- проверка достаточности свободных средств в кредитном предложении для открытия позиции
- проверка достаточности средств обеспечения под открытие позиции
- проверка допустимости открытия позиции без последующей принудительной ликвидации средств
- если выставлен ордер на продажу
- проверка достаточности средств в валюте торгов
- если собственных средств недостаточно и по данной валютной паре отсутствует маржинальная торговля, то выставление ордера с плечом не задействуется и возникает ошибка о недостаточности средств
- если собственных средств недостаточно и по данной валютной паре включена маржинальная торговля и было выбрано кредитное предложение, осуществляются следующие проверки для возможности открытия позиции:
- проверка на существование кредитного предложения
- проверка совпадения валюты займа и валюты кредитного предложения
- проверка достаточности свободных средств в кредитном предложении для открытия позиции
- проверка достаточности средств обеспечения под открытие позиции
- проверка допустимости открытия позиции без последующей принудительной ликвидации средств
В случае если используются собственные средства:
В результате данной команды при прохождении всех проверок блокируются средства под открытие данного ордера и отсылается уведомление о новом балансе в систему уведомлений, выставляется соответствующий ордер на покупку/продажу и при необходимости выставляются соответствующие условные ордера SL, TP, TS. Информация о выставленных ордерах отсылается в систему уведомлений. В случае, если вместе с основным ордером были выставлены условные, то происходит перелинковка ордеров и задействуется функция метчинга текущих активных ордеров в данном стакане.
В случае если был задействован механизм маржинальной торговли:
В результате данной команды, при прохождении всех проверок, блокируются маржа под открытие позиции, блокируется необходимая сумма с кредитного предложения кредитора и отсылается уведомление о новом балансе как кредитора, так и заемщика в систему уведомлений, выставляется соответствующая позиция. Условные ордера в этом случае не создаются. Осуществляется расчет позиции и уровня маржи. Информация о сформированной позиции отсылается в систему уведомлений. Тут же задействуется функция метчинга текущих активных ордеров в данном стакане.
{"0":700,"1":<user_id>,"2":<market>,"3":<currency>,"4":<side>,"5":<amount>,"6":<rate>,"7":<sl_rate>,"8":<tp_rate>,"9":<ts_offset>,"10":<offer_id>}
- <user_id> – ID пользователя,
- <market> – код валюты рынка, (например, USDT, BTC)
- <currency> – код покупаемой или продаваемой валюты, (например, LTC, BCH, ETH)
- <side> – направленность ордера: 1 – ордер на продажу, 0 – ордер на покупку
- <amount> – количество продаваемой или покупаемой валюты <currency>
- <rate> – цена покупки или продажи в валюте <market>
- <sl_rate> – цена stop-loss (в случае если покупаемая валюта пошла вниз, и наилучшая цена покупки в стакане стала меньше или равна выставленной цене stop loss, то выставляется автоматически рыночный ордер на продажу всех уже купленных активов в основном ордере для исключения ещё больших потерь; в случае если продаваемая валюта пошла вверх, и наилучшая цена продажи в стакане стала больше или равна выставленной цене stop loss, то выставляется автоматически рыночный ордер на покупку всех уже проданных активов в основном ордере для исключения ещё больших потерь)
- <tp_rate> – цена take-profit (в случае если покупаемая валюта пошла вверх, и наилучшая цена покупки в стакане стала больше или равна выставленной цене take profit, то выставляется автоматически рыночный ордер на продажу всех уже купленных активов в основном ордере для фиксации прибыли; в случае если продаваемая валюта пошла вниз, и наилучшая цена продажи в стакане стала меньше или равна выставленной цене take profit, то выставляется автоматически рыночный ордер на покупку всех уже проданных активов в основном ордере для фиксации прибыли)
- <ts_offset> – смещение цены trailing-stop. Для покупаемой валюты цена TS ордера изначально устанавливается в значение равное разнице между наилучшей ценой на покупку и заданного смещения. Для продаваемой валюты цена TS ордера изначально устанавливается в значение равное сумме наилучшей цены на продажу и заданного смещения
- <offer_id> – содержит значение выбранного предложения по плечу (при использовании маржинальной торговли). Если плечо не использовалось, содержит значение 0
В случае если покупаемая валюта пошла вверх, то происходит подтягивание вверх цены TS ордера на продажу на разницу между наилучшей ценой покупки в стакане и заданного смещения; в случае если покупаемая валюта пошла вниз, то проверяется условие на срабатывание TS ордера (если наилучшая цена покупки стала меньше или равна цене TS ордера), и если условие выполнено, то выставляется автоматически рыночный ордер на продажу всех купленных активов в основном ордере.
В случае если продаваемая валюта пошла вниз, то происходит подтягивание вниз цены TS ордера на покупку на сумму заданного смещения и наилучшей цены продажи в стакане; в случае если продаваемая валюта пошла вверх, то проверяется условие на срабатывание TS ордера (если наилучшая цена продажи стала больше или равна цене TS ордера), и если условие выполнено, то выставляется автоматически рыночный ордер на покупку всех купленных активов в основном ордере.
В случае если ордер был выставлен на покупку без маржи:
- блокируется сумма под ордер
- посылается сообщение о новом балансе в систему уведомлений
- выставляется ордер на покупку
- посылается сообщение о выставлении ордера на покупку в систему уведомлений
- если была задана цена SL, то выставляется условный ордер на продажу и посылается сообщение о выставлении условного ордера SL на продажу
- если была задана цена TP, то выставляется условный ордер на продажу и посылается сообщение о выставлении условного ордера TP на продажу
- если было задано смещение цены TS, то выставляется условный ордер на продажу и посылается сообщение о выставлении условного ордера TS на продажу
- выполняется при необходимости перелинковка условных ордеров
- выполняется метчинг активных ордеров в текущем стакане
В случае если ордер был выставлен на продажу без маржи:
- блокируется сумма под ордер
- посылается сообщение о новом балансе в систему уведомлений
- выставляется ордер на продажу
- посылается сообщение о выставлении ордера на продажу в систему уведомлений
- если была задана цена SL, то выставляется условный ордер на покупку и посылается сообщение о выставлении условного ордера SL на покупку
- если была задана цена TP, то выставляется условный ордер на покупку и посылается сообщение о выставлении условного ордера TP на покупку
- если было задано смещение цены TS, то выставляется условный ордер на покупку и посылается сообщение о выставлении условного ордера TS на покупку
- выполняется при необходимости перелинковка условных ордеров
- выполняется метчинг активных ордеров в текущем стакане
В случае если была открыта длинная/короткая позиция:
- блокируется обеспечение под открытую позицию с плечом x5
- блокируются средства кредитора под открытие позиции
- посылается сообщение о новом балансе трейдера и кредитора в систему уведомлений
- выставляется ордер на покупку/продажу
- посылается сообщение о выставлении ордера на покупку/продажу в систему уведомлений
- выполняется метчинг активных ордеров в текущем стакане
Размещение рыночного ордера
Данная команда посылается в торговое ядро при выставлении пользователем рыночного ордера на покупку или продажу.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на существование стакана
- проверка, что объём накопленных заявок на продажу/покупку покрывает объём заявки на покупку/продажу
- проверка на существование пользователя
- проверка на блокировку счёта
- проверка на корректность валюты рынка
- проверка на корректность валюты торгов
- проверка переданных значений сумм на положительность
- если выставлена цена STOP-LOSS
- проверка существования активных ордеров на покупку/продажу в стакане
- проверка уровня SL по отношению к рыночной цене на покупку (если SL меньше, чем цена самого лучшего ордера на покупку, то ордер на покупку не выставляется и возвращается ошибка о неверно заданной цене SL) – если SL на продажу
- проверка уровня SL по отношению к рыночной цене на продажу (если SL больше, чем цена самого лучшего ордера на продажу, то ордер на продажу не выставляется и возвращается ошибка о неверно заданной цене SL) – если SL на покупку
- если выставлена цена TAKE-PROFIT
- проверка существования активных ордеров на покупку/продажу в стакане
- проверка уровня TP по отношению к рыночной цене на покупку (если TP больше, чем цена самого лучшего ордера на покупку, то ордер на покупку не выставляется и возвращается ошибка о неверно заданной цене TP) – если TP на продажу
- проверка уровня TP по отношению к рыночной цене на продажу (если TP меньше, чем цена самого лучшего ордера на продажу, то ордер на продажу не выставляется и возвращается ошибка о неверно заданной цене TP) – если TP на покупку
- если выставлено смещение цены TRAILING-STOP
- проверка существования активных ордеров на покупку/продажу в стакане
- проверка уровня TS по отношению к рыночной цене на покупку (если разница самой лучшей цены на покупку и заданного TS смещения меньше или равно нулю, то ордер на покупку не выставляется и возвращается ошибка о неверно заданном смещении TS) – если TS на продажу
- проверка уровня TS по отношению к рыночной цене на продажу (если сумма заданного TS смещения и цены самого лучшего ордера на продажу меньше или равно нулю, то ордер на продажу не выставляется и возвращается ошибка о неверно заданном смещении TS) – если TS на покупку
- если выставлен ордер на покупку
- проверка достаточности средств в валюте рынка
- если собственных средств недостаточно и по данной валютной паре отсутствует маржинальная торговля, то выставление ордера с плечом не задействуется и возникает ошибка о недостаточности средств
- если собственных средств недостаточно и по данной валютной паре включена маржинальная торговля и было выбрано кредитное предложение, осуществляются следующие проверки для возможности открытия позиции:
- проверка на существование кредитного предложения
- проверка совпадения валюты займа и валюты кредитного предложения
- проверка достаточности свободных средств в кредитном предложении для открытия позиции
- проверка достаточности средств обеспечения под открытие позиции
- проверка допустимости открытия позиции без последующей принудительной ликвидации средств
- если выставлен ордер на продажу
- проверка достаточности средств в валюте торгов
- если собственных средств недостаточно и по данной валютной паре отсутствует маржинальная торговля, то выставление ордера с плечом не задействуется и возникает ошибка о недостаточности средств
- если собственных средств недостаточно и по данной валютной паре включена маржинальная торговля и было выбрано кредитное предложение, осуществляются следующие проверки для возможности открытия позиции:
- проверка на существование кредитного предложения
- проверка совпадения валюты займа и валюты кредитного предложения
- проверка достаточности свободных средств в кредитном предложении для открытия позиции
- проверка достаточности средств обеспечения под открытие позиции
- проверка допустимости открытия позиции без последующей принудительной ликвидации средств
В случае если используются собственные средства:
В результате данной команды при прохождении всех проверок блокируются средства под открытие данного ордера и отсылается уведомление о новом балансе в систему уведомлений, выставляется соответствующий ордер на покупку/продажу и при необходимости выставляются соответствующие условные ордера SL, TP, TS. Информация о выставленных ордерах отсылается в систему уведомлений. В случае, если вместе с основным ордером были выставлены условные, то происходит перелинковка ордеров и задействуется функция метчинга текущих активных ордеров в данном стакане.
В случае если был задействован механизм маржинальной торговли:
В результате данной команды, при прохождении всех проверок, блокируются маржа под открытие позиции, блокируется необходимая сумма с кредитного предложения кредитора и отсылается уведомление о новом балансе как кредитора, так и заемщика в систему уведомлений, выставляется соответствующая позиция. Условные ордера в этом случае не создаются. Осуществляется расчет позиции и уровня маржи. Информация о сформированной позиции отсылается в систему уведомлений. Тут же задействуется функция метчинга текущих активных ордеров в данном стакане.
{"0":800,"1":<user_id>,"2":<market>,"3":<currency>,"4":<side>,"5":<base>,"6":<amount>,"7":<sl_rate>,"8":<tp_rate>,"9":<ts_offset>,"10":<offer_id>}
- <user_id> – ID пользователя,
- <market> – код валюты рынка, (например, USDT, BTC)
- <currency> – код покупаемой или продаваемой валюты, (например, LTC, BCH, ETH)
- <side> – направленность ордера: 1 – ордер на продажу, 0 – ордер на покупку
- <base> – признак, определяющий в какой валюте задано кол-во продаваемого или покупаемого актива. 0 – кол-во задано в валюте <currency>, 1 – кол-во задано в валюте <market>
- <amount> – количество продаваемой или покупаемой валюты <currency>
- <sl_rate> – цена stop-loss (в случае если покупаемая валюта пошла вниз, и наилучшая цена покупки в стакане стала меньше или равна выставленной цене stop loss, то выставляется автоматически рыночный ордер на продажу всех уже купленных активов в основном ордере для исключения ещё больших потерь; в случае если продаваемая валюта пошла вверх, и наилучшая цена продажи в стакане стала больше или равна выставленной цене stop loss, то выставляется автоматически рыночный ордер на покупку всех уже проданных активов в основном ордере для исключения ещё больших потерь)
- <tp_rate> – цена take-profit (в случае если покупаемая валюта пошла вверх, и наилучшая цена покупки в стакане стала больше или равна выставленной цене take profit, то выставляется автоматически рыночный ордер на продажу всех уже купленных активов в основном ордере для фиксации прибыли; в случае если продаваемая валюта пошла вниз, и наилучшая цена продажи в стакане стала меньше или равна выставленной цене take profit, то выставляется автоматически рыночный ордер на покупку всех уже проданных активов в основном ордере для фиксации прибыли)
- <ts_offset> – смещение цены trailing-stop. Для покупаемой валюты цена TS ордера изначально устанавливается в значение равное разнице между наилучшей ценой на покупку и заданного смещения. Для продаваемой валюты цена TS ордера изначально устанавливается в значение равное сумме наилучшей цены на продажу и заданного смещения
- <offer_id> – содержит значение выбранного предложения по плечу (при использовании маржинальной торговли). Если плечо не использовалось, содержит значение 0
В случае если покупаемая валюта пошла вверх, то происходит подтягивание вверх цены TS ордера на продажу на разницу между наилучшей ценой покупки в стакане и заданного смещения; в случае если покупаемая валюта пошла вниз, то проверяется условие на срабатывание TS ордера (если наилучшая цена покупки стала меньше или равна цене TS ордера), и если условие выполнено, то выставляется автоматически рыночный ордер на продажу всех купленных активов в основном ордере.
В случае если продаваемая валюта пошла вниз, то происходит подтягивание вниз цены TS ордера на покупку на сумму заданного смещения и наилучшей цены продажи в стакане; в случае если продаваемая валюта пошла вверх, то проверяется условие на срабатывание TS ордера (если наилучшая цена продажи стала больше или равна цене TS ордера), и если условие выполнено, то выставляется автоматически рыночный ордер на покупку всех купленных активов в основном ордере.
В случае если ордер был выставлен на покупку без маржи:
- блокируется сумма под ордер
- посылается сообщение о новом балансе в систему уведомлений
- выставляется ордер на покупку
- посылается сообщение о выставлении ордера на покупку в систему уведомлений
- если была задана цена SL, то выставляется условный ордер на продажу и посылается сообщение о выставлении условного ордера SL на продажу
- если была задана цена TP, то выставляется условный ордер на продажу и посылается сообщение о выставлении условного ордера TP на продажу
- если было задано смещение цены TS, то выставляется условный ордер на продажу и посылается сообщение о выставлении условного ордера TS на продажу
- выполняется при необходимости перелинковка условных ордеров
- выполняется метчинг активных ордеров в текущем стакане
В случае если ордер был выставлен на продажу без маржи:
- блокируется сумма под ордер
- посылается сообщение о новом балансе в систему уведомлений
- выставляется ордер на продажу
- посылается сообщение о выставлении ордера на продажу в систему уведомлений
- если была задана цена SL, то выставляется условный ордер на покупку и посылается сообщение о выставлении условного ордера SL на покупку
- если была задана цена TP, то выставляется условный ордер на покупку и посылается сообщение о выставлении условного ордера TP на покупку
- если было задано смещение цены TS, то выставляется условный ордер на покупку и посылается сообщение о выставлении условного ордера TS на покупку
- выполняется при необходимости перелинковка условных ордеров
- выполняется метчинг активных ордеров в текущем стакане
В случае если была открыта длинная/короткая позиция:
- блокируется обеспечение под открытую позицию с плечом x5
- блокируются средства кредитора под открытие позиции
- посылается сообщение о новом балансе трейдера и кредитора в систему уведомлений
- выставляется ордер на покупку/продажу
- посылается сообщение о выставлении ордера на покупку/продажу в систему уведомлений
- выполняется метчинг активных ордеров в текущем стакане
Отмена ордера
Данная команда посылается в торговое ядро при отмене ордера пользователем.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на существование пользователя
- проверка на положительность ID ордера
- проверка на существование открытого ордера
- проверка принадлежности ордера пользователю
В случае если отменяется лимитный ордер:
- если данный ордер не начал исполняться
- отменяются условные ордера SL, TP, TS при их наличии, и посылаются сообщения об отмене условных ордеров в систему уведомлений
- отменяется сам ордер
- снимается блокировка средств под данный ордер
- посылается сообщение об отмене ордера в систему уведомлений
- посылается сообщение о новом балансе пользователя в систему уведомлений
- при необходимости посылаются также следующие сообщения в систему уведомлений:
- сообщение о новом тикере
- сообщение о новом топе стакана на покупку
- сообщение о новом топе стакана на продажу
- сообщение о новой глубине стакана
В случае если отменяется условный ордер (SL, TP или TS):
- отменяется заданный условный ордер
- посылается сообщение об отмене условного ордера в систему уведомлений
{"0":900,"1":<user_id>,"2":<market>,"3":<currency>,"4":<order_id>}
- <user_id> – ID пользователя,
- <market> – код валюты рынка, (например, USDT, BTC)
- <currency> – код покупаемой или продаваемой валюты, (например, LTC, BCH, ETH)
- <order_id> – ID отменяемого ордера
Назначение размера комиссии пользователю
Данная команда посылается в торговое ядро администратором системы для назначения размера комиссии для определенного пользователя по определенной валюте.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на существование пользователя
- проверка на существование счета в заданной валюте
- проверка на корректность процентного значения
{"0":1000,"1":<user_id>,"2":<currency_code>,"3":<new_fee_percent>}
В результате данной команды пользователю назначается новый размер комиссии по указанной валюте и направляется сообщение о новом размере комиссии в систему уведомлений.
Закрытие позиции
Данная команда посылается в торговое ядро при закрытии позиции пользователем.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на существование пользователя
- проверка на положительность ID позиции
- проверка на существование позиции
- проверка принадлежности позиции пользователю
{"0":1100,"1":<user_id>,"2":<market>,"3":<currency>,"4":<position_id>,"5":<side>}
- position_id – ID позиции
- side – направленность закрываемой позиции: 0 – длинная позиция, 1 – короткая позиция
После прохождения всех проверок выполняются следующие действия:
- если под позицией все еще существует открытый ордер, то данный ордер удаляется
- кредитору возвращается основная сумма заемных средств плюс процент за использование заемных средств
- отсылается сообщение о новом балансе кредитора в систему уведомлений
- у заемщика вычитается из свободных средств сумма использованных средств в позиции и проценты за использование заемных средств за вычетом маржи
- если при выставлении позиции, ордер был исполнен или исполнен частично, то размещается ордер на покупку/продажу на сумму реализованных при размещении позиции средств. При этом посылается сообщение в систему уведомлений о размещении рыночного ордера и о закрытии позиции. При реализации вырученных средств, данные средства пополнят торговый счет заемщика.
- в этой же транзакции выполняется метчинг ордеров по данному стакану в случае, если при выставлении позиции, ордер был исполнен или исполнен частично
Начисление процентов по позиции
Данная команда посылается через каждые сутки в течение действия позиции в торговое ядро с целью начисления очередного процента по займу и вычисления новых маржинальных параметров по данной позиции.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на положительность ID позиции
- проверка на существование позиции
{"0":1200,"1":<user_id>,"2":<market>,"3":<currency>,"4":<position_id>,"5":<side>}
- position_id – ID позиции
- side – направленность закрываемой позиции: 0 – длинная позиция, 1 – короткая позиция
После прохождения всех проверок выполняются следующие действия:
- если срок позиции не подошел к концу, то начисляется очередной процент по позиции и рассчитываются маржинальные параметры по ней
- если срок позиции истек, то позиция закрывается принудительно. При принудительном закрытии позиции выполняются те же действия, как и при закрытии позиции пользователем.
Обеспечительный платеж под позицию
Данная команда посылается в торговое ядро при внесении обеспечительного платежа под позицию пользователем. Например, в случае если уровень маржи достигает критической отметки и наступает так называемый Margin Call.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка существования пользователя
- проверка на положительность ID позиции
- проверка на существование позиции
- проверка на положительность суммы пополнения
- проверка достаточности средств на торговом счету в валюте маржи
{"0":1300,"1":<user_id>,"2":<market>,"3":<currency>,"4":<position_id>,"5":<side>,"6":<amount>}
- position_id – ID позиции
- side – направленность закрываемой позиции: 0 – длинная позиция, 1 – короткая позиция
- amount – сумма вносимого обеспечительного платежа под позицию
После прохождения всех проверок выполняются следующие действия:
- увеличивается маржа на сумму платежа
- уменьшается сумма свободных средств на торговом счету в валюте займа
- направляется сообщение в систему уведомлений о новом балансе пользователя
- рассчитываются маржинальные параметры позиции с учетом пополнения и направляется сообщение о новых маржинальных параметрах в систему уведомлений
Определение суммы займа
Данная команда посылается в торговое ядро для определения необходимой суммы займа по заданному количеству и по текущему рыночному курсу.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на существование стакана
- проверка на достаточность глубины стакана
{"0":1400,"1":<user_id>,"2":<currency>,"3":<market>,"4":<amount>}
- amount – сумма предполагаемой открываемой позиции
Возвращается необходимая сумма займа для обеспечения исполнения рыночного ордера при открытии позиции
Информация по балансу пользователя
Данная команда посылается в торговое ядро для получения информации по балансу либо определенной валюты, либо по всем валютам.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка существования пользователя
{"0":2400,"1":<user_id>,"2":<currency>}
- currency – необязательный параметр (если не указан, то получаем информацию по всем валютам)
Возвращаются следующие данные: доступные средства, средства, блокированные в ордерах и размер комиссии.
Информация по балансу и общие маржинальные параметры
Данная команда посылается в торговое ядро для получения информации по балансу по всем валютам как в команде п. 4.15 плюс общие маржинальные параметры: уровень Margin Call, уровень Force Liquidation, уровень плеча, признак Margin Call и признак блокировки счетов.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка существования пользователя
{"0":2500,"1":<user_id>}
Возвращаются следующие данные: доступные средства, средства, блокированные в ордерах и размер комиссии по каждой валюте, коэффициент максимального плеча, уровень MC, уровень FL, флаг MC, флаг блокировки счетов.
Информация по размеру комиссии пользователя
Данная команда посылается в торговое ядро для получения информации по размеру комиссии по заданной валюте и пользователю.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка существования пользователя
- проверка на существование валюты
{"0":2600,"1":<user_id>,"2":<currency>}
Возвращаются следующие данные: размер комиссии по валюте.
Информация по активным ордерам пользователя
Данная команда посылается в торговое ядро для получения информации по активным ордерам пользователя по определенной валюте и рынку (валютной паре).
При данной команде в торговом ядре выполняются следующие проверки:
- проверка существования пользователя
- проверка на существование валютной пары
{"0":2700,"1":<user_id>,"2":<market>,"3":<currency>}
Возвращаются как обычные ордера, так и условные ордера (SL, TP, TS)
Информация по определенному ордеру
Данная команда посылается в торговое ядро для получения информации по определенному ордеру.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка существования пользователя
- проверка на положительность ID ордера
- проверка на существование ордера
- проверка принадлежности ордера указанному пользователю
{"0":2800,"1":<user_id>,"2":<order_id>}
Возвращаются валюта, валюта рынка, направленность ордера и информация об ордере.
Информация по открытым позициям
Данная команда посылается в торговое ядро для получения информации по всем открытым позициям для заданной валютной пары и пользователю.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка существования пользователя
- проверка существования валютной пары
{"0":3000,"1":<user_id>,"2":<market>,"3":<currency>}
Возвращаются список длинных и коротких позиций по данному пользователю
Создание валютной пары
Данная команда посылается администратором в торговое ядро для создания новой валютной пары.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка символов валют на пустоту
- проверка существования валютной пары c заданными параметрами
- проверка на положительность параметров amount_scale (кол-во десятичных разрядов для кол-ва) и rate_scale (кол-во десятичных разрядов для цены)
{"0":5000,"1":<currency>,"2":<market>,"3":<amount_scale>,"4":<rate_scale>}
- amount_scale – кол-во десятичных разрядов для кол-ва
- rate_scale – кол-во десятичных разрядов для цены
В ходе создания всем пользователям открываются торговые счета по новым валютам и создается новый стакан ордеров по данной валютной паре.
Информация по всем валютным парам
Данная команда посылается в торговое ядро для получения списка валютных пар, информации о приостановке торгов по каждой валютной паре и о статусе маржинальной торговли по валютным парам
{"0":5100}
Список валют по рынку
Данная команда посылается в торговое ядро для получения списка торгуемых валют по определенному рынку.
{"0":5200}
Изменение параметров валютной пары
Данная команда посылается в торговое ядро администратором для изменения значащих десятичных разрядов для количества и цены.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка символов валют на пустоту
- проверка существования валютной пары
- проверка на положительность параметров amount_scale (кол-во десятичных разрядов для кол-ва) и rate_scale (кол-во десятичных разрядов для цены)
{"0":5400,"1":<currency>,"2":<market>,"3":<amount_scale>,"4":<rate_scale>}
- amount_scale – кол-во десятичных разрядов для кол-ва
- rate_scale – кол-во десятичных разрядов для цены
Запуск маржинальной торговли для валютной пары
Данная команда посылается в торговое ядро администратором для изменения статуса маржинальной торговли для заданной валютной пары.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка символов валют на пустоту
- проверка существования валютной пары
- проверка не запущена ли уже маржинальная торговля по данной валютной паре
{"0":5500,"1":<currency>,"2":<market>}
Приостановка маржинальной торговли для валютной пары
Данная команда посылается в торговое ядро администратором для изменения статуса маржинальной торговли для заданной валютной пары.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка символов валют на пустоту
- проверка существования валютной пары
- проверка не приостановлена ли уже маржинальная торговля по данной валютной паре
{"0":5600,"1":<currency>,"2":<market>}
Добавление предложения по плечу
Данная команда посылается в торговое ядро с целью добавления предложения по плечу как трейдером, так и администратором биржи.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка типа пользователя (если пользователь – администратор биржи, то добавление предложения по плечу происходит без последующих проверок)
- проверка на существование пользователя
- проверка достаточности средств на торговом счету
- проверка существования валюты
{"0":5700,"1":<offer_id>,"2":<user_id>,"3":<funds>,"4":<currency>,"3":<percent>,"3":<period>}
- offer_id – ID маржинального предложения
- funds – сумма маржинального предложения
- percent – процент по маржинальному предложению в день
- period – максимальный период предоставления плеча
В торговом ядре с торгового счета пользователя списывается указанная сумма funds и формируется предложение по плечу с заданными параметрами, а также формируется сообщение в систему уведомлений о новом балансе пользователя.
Удаление предложения по плечу
Данная команда посылается в торговое ядро для удаления предложения по плечу из системы.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на существование предложения по плечу
- проверка на текущее использование средств по данному предложению
- проверка типа кредитора данного предложения
- если кредитором является администратор биржи, то данное предложение безусловно удаляется из системы
- если кредитором является трейдер, то происходит проверка на существование данного пользователя
{"0":5710,"1":<user_id>,"2":<offer_id>}
- offer_id – ID маржинального предложения
В торговом ядре на торговый счет пользователя зачисляется основная сумма заложенных средств плюс начисленные проценты по использованию займа, а также формируется сообщение в систему уведомлений о новом балансе пользователя. После чего предложение по плечу удаляется из системы.
Приостановка предложения по плечу
Данная команда посылается в торговое ядро для изменения статуса по указанному предложению по плечу.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на существование предложения по плечу
- проверка типа кредитора данного предложения
- если кредитором является администратор биржи, то данное предложение приостанавливается
- если кредитором является трейдер, то происходит проверка принадлежности предложения указанному пользователю и если он является владельцем, то данное предложение приостанавливается
{"0":5720,"1":<user_id>,"2":<offer_id>}
- offer_id – ID маржинального предложения
Возобновление предложения по плечу
Данная команда посылается в торговое ядро для изменения статуса по указанному предложению по плечу.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на существование предложения по плечу
- проверка типа кредитора данного предложения
- если кредитором является администратор биржи, то данное предложение возобновляется
- если кредитором является трейдер, то происходит проверка принадлежности предложения указанному пользователю и если он является владельцем, то данное предложение возобновляется
{"0":5730,"1":<user_id>,"2":<offer_id>}
- offer_id – ID маржинального предложения
Перевод процентов в предложении по плечу на торговый счет кредитора
Данная команда посылается в торговое ядро кредитором с целью перевести заработанные средства (проценты) на собственный торговый счет.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка на существование предложения по плечу
- проверка на существование пользователя
- проверка принадлежности указанного пользователя данному предложению
- проверка достаточности начисленных процентов по предложению (начисленные проценты должны быть больше или равны указанной суммы <funds>)
{"0":5740,"1":<user_id>,"2":<offer_id>,"2":<funds>}
- offer_id – ID маржинального предложения
- funds – сумма переводимых средств
В результате выполнения данной команды на торговый счет кредитора переводятся начисленные проценты и посылается сообщение о новых параметрах предложения по плечу и новом балансе кредитора в систему уведомлений
Получение тикера по валютной паре
Данная команда посылается в торговое ядро для получения тикера по валютной паре.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка существования валютной пары
{"0":7000,"1":<currency>,"2":<market>}
В результате выполнения данной команды возвращается best bid и best ask (лучшая по цене заявка на покупку и лучшая по цене заявка на продажу)
Информация о глубине рынка по валютной паре
Данная команда посылается в торговое ядро для получения глубины рынка по валютной паре с учетом заданного лимита по количеству ордеров.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка существования валютной пары
- проверка на положительность лимита
{"0":7100,"1":<currency>,"2":<market>,"3":<limit>}
Возвращаются следующие данные: список активных ордеров на покупку с учетом заданного лимита (условные ордера SL, TP, TS не включаются), список активных ордеров на продажу с учетом заданного лимита (условные ордера SL, TP, TS не включаются), объем заявок на покупку в валюте рынка (всего, не смотря на limit), объем заявок на продажу в валюте рынка (всего, не смотря на limit), количество заявок на покупку и количество заявок на продажу, количество продаваемой и покупаемой валюты (всего, не смотря на limit)
Приостановка торгов по валютной паре
Данная команда посылается администратором в торговое ядро для приостановки торгов по определенной валютной паре.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка существования валютной пары
- проверка текущего статуса (не приостановлены ли уже торги)
{"0":8800,"1":<currency>,"2":<market>}
Возобновление торгов по валютной паре
Данная команда посылается администратором в торговое ядро для возобновления торгов по определенной валютной паре.
При данной команде в торговом ядре выполняются следующие проверки:
- проверка существования валютной пары
- проверка текущего статуса (не возобновлены ли уже торги)
{"0":8900,"1":<currency>,"2":<market>}
Создание снэпшота системы
Данная команда посылается администратором в торговое ядро для создания резервной копии текущего состояния ядра торговой системы.
{"0":9000}
При вызове данной команды создаются два файла: ids.dat (содержит текущие инкрементные значения func_call_id, order_id, deal_id и position_id) и бинарный файл core.bin (содержит текущее состояние всех сериализуемых объектов системы)
Восстановление системы из снэпшота
Данная команда посылается администратором в торговое ядро для восстановления данных из резервной копии ядра торговой системы.
{"0":9100}
При вызове данной команды в файловой системе ищутся два файла: ids.dat (содержит текущие инкрементные значения func_call_id, order_id, deal_id и position_id) и бинарный файл core.bin (содержит текущее состояние всех сериализуемых объектов системы) и по ним восстанавливается то состояние торгового ядра, которое было на момент формирования данных файлов.
Восстановление балансов пользователей торгового ядра по данным БД
Данная команда посылается администратором в торговое ядро для восстановления балансов пользователя в торговом ядре.
{"0":9300,"1":<user_id>,"2":<currency_code>,"3":<available>,"4":<blocked>,"5":<fee>}
Восстановление ордера в торговом ядре по данным БД
Данная команда посылается администратором в торговое ядро для восстановления ордера пользователя в торговом ядре.
{"0":9400,"1":<user_id>,"2":<order_id>,"3":<currency_code>,"4":<market_currency_code>,"5":<side>,"6":<size>,"7":<actualSize>,"8":<price>,"9":<time_tick>}
Восстановление условного SL ордера в торговом ядре по данным БД
Данная команда посылается администратором в торговое ядро для восстановления условного SL ордера пользователя в торговом ядре.
{"0":9410,"1":<user_id>,"2":<main_order_id>,"3":<order_id>,"4":<currency_code>,"5":<market_currency_code>,"6":<side>,"7":<size>,"8":<actualSize>,"9":<price>,"10":<time_tick>}
Восстановление условного TP ордера в торговом ядре по данным БД
Данная команда посылается администратором в торговое ядро для восстановления условного TP ордера пользователя в торговом ядре.
{"0":9420,"1":<user_id>,"2":<main_order_id>,"3":<order_id>,"4":<currency_code>,"5":<market_currency_code>,"6":<side>,"7":<size>,"8":<actualSize>,"9":<price>,"10":<time_tick>}
Восстановление условного TS ордера в торговом ядре по данным БД
Данная команда посылается администратором в торговое ядро для восстановления условного TS ордера пользователя в торговом ядре.
{"0":9430,"1":<user_id>,"2":<main_order_id>,"3":<order_id>,"4":<currency_code>,"5":<market_currency_code>,"6":<side>,"7":<size>,"8":<actualSize>,"9":<price>,"10":<time_tick>,"11":<ts_offset>}
Восстановление предложения по плечу в торговом ядре по данным из БД
Данная команда посылается администратором в торговое ядро для восстановления предложения по плечу в торговом ядре.
{"0":9700,"1":<offer_id>,"2":<user_id>,"3":<currency_code>,"4":<available_funds>,"5":<blocked_funds>,"6":<fee_funds>,"7":<percent>,"8":<period>,"9":<active>,"10":<time_tick>}
Восстановление позиции в торговом ядре по данным БД
Данная команда посылается администратором в торговое ядро для восстановления позиции пользователя в торговом ядре.
{"0":9440,"1":<market_currency_code>,"2":<currency_code>,"3":<position_id>,"4":<side>,"5":<main_order_id>,"6":<user_id>,"7":<offer_id>,"8":<original_amount>,"9":<actual_amount>,"10":<credited>,"11":<creditFee>,"12":<creditUsed>,"13":<marginPosition>,"14":<realized_volume>,"15":<blockedMarginFunds>,"16":<marginCall>,"17":<validUntilTicks>,"18":<time_tick>}
Восстановление буфферных данных в торговом ядре
Данная команда посылается администратором в торговое ядро для восстановления буфферных данных в торговом ядре.
{"0":9600}
Расчет маржинальных параметров по всем позициям
Послать данную команду через API нельзя, данная команда выполняется автоматически при каждом выставлении ордера на продажу или покупку, или отмене ордера, а также при закрытии позиции (как в автоматическом режиме, так и по инициативе пользователя)
В процессе выполнения данной команды осуществляется (при необходимости) обновление маржинальных параметров каждой позиции и, если уровень маржи по позиции меньше или равен 0.14, то задействется механизм предупреждения пользователя о необходимости пополнить баланс торгового счета во избежание ликвидации маржи по позиции, и, если уровень маржи становится меньше или равен 0.07, то задействуется механизм принудительной закрытии позиции по рынку.
Данная команда также поступает на вход резервному торговому ядру для выполнения заложенных в него алгоритмов.
Расчет условных ордеров по всем стаканам
Послать данную команду через API нельзя, данная команда выполняется автоматически при изменении наилучшей цены на покупку или продажу.
В процессе выполнения данной команды осуществляется проверка и расчёт условных заявок SL, TP и TS во всех стаканах. Условные ордера срабатывают только если выполняются следующие условия:
- если объём условного ордера больше нуля
- если наилучший ордер на покупку/продажу достиг выставленного значения условного ордера
- если объём накопленных ордеров в стакане на покупку/продажу покрывает объём условного ордера на продажу/покупку
- если на счету пользователя достаточно средств для выполнения данного условного ордера
Если объем накопленных ордеров в стакане не позволяет исполнить условный ордер, то система будет ждать достаточного объема.
Если объем накопленных ордеров в стакане позволяет исполнить условный ордер, но на счету пользователя недостаточно средств, то данный условный ордер автоматически отменяется.
В случае, если все проверки пройдены, система блокирует средства под исполнение данного ордера, отсылает сообщение о новом балансе в систему уведомлений, удаляет условный ордер из памяти.
Если кроме данного условного ордера были выставлены другие условные ордера, то система их также удаляет из памяти и направляет сообщение об отмене этих условных ордеров, а также направляется сообщение в систему уведомлений о исполнении условного ордера. Создается рыночный ордер и отправляется в стакан на исполнение.
Данная команда также поступает на вход резервному торговому ядру для выполнения заложенных в него алгоритмов.
Размещение лимитного ордера маркет-мэйкером
Данная команда посылается в торговое ядро при выставлении маркет-мэйкером лимитного ордера на покупку или продажу.
При данной команде в торговом ядре выполняются те же проверки, что и при выставлении лимитного ордера через веб-интерфейс
{"0":700,"1":<user_id>,"2":<market>,"3":<currency>,"4":<side>,"5":<amount>,"6":<rate>,"7":<sl_rate>,"8":<tp_rate>,"9":<ts_offset>,"10":<offer_id>}
- <user_id> – ID пользователя маркет-мэйкера
- <market> – код валюты рынка, (например, USDT, BTC)
- <currency> – код покупаемой или продаваемой валюты, (например, LTC, BCH, ETH)
- <side> – направленность ордера: 1 – ордер на продажу, 0 – ордер на покупку
- <amount> – количество продаваемой или покупаемой валюты <currency>
- <rate> – цена покупки или продажи в валюте <market>
- <sl_rate> – цена stop-loss (в случае если покупаемая валюта пошла вниз, и наилучшая цена покупки в стакане стала меньше или равна выставленной цене stop loss, то выставляется автоматически рыночный ордер на продажу всех уже купленных активов в основном ордере для исключения ещё больших потерь; в случае если продаваемая валюта пошла вверх, и наилучшая цена продажи в стакане стала больше или равна выставленной цене stop loss, то выставляется автоматически рыночный ордер на покупку всех уже проданных активов в основном ордере для исключения ещё больших потерь)
- <tp_rate> – цена take-profit (в случае если покупаемая валюта пошла вверх, и наилучшая цена покупки в стакане стала больше или равна выставленной цене take profit, то выставляется автоматически рыночный ордер на продажу всех уже купленных активов в основном ордере для фиксации прибыли; в случае если продаваемая валюта пошла вниз, и наилучшая цена продажи в стакане стала меньше или равна выставленной цене take profit, то выставляется автоматически рыночный ордер на покупку всех уже проданных активов в основном ордере для фиксации прибыли)
- <ts_offset> – смещение цены trailing-stop. Для покупаемой валюты цена TS ордера изначально устанавливается в значение равное разнице между наилучшей ценой на покупку и заданного смещения. Для продаваемой валюты цена TS ордера изначально устанавливается в значение равное сумме наилучшей цены на продажу и заданного смещения
- <offer_id> – содержит значение выбранного предложения по плечу (при использовании маржинальной торговли). Если плечо не использовалось, содержит значение 0
В случае если покупаемая валюта пошла вверх, то происходит подтягивание вверх цены TS ордера на продажу на разницу между наилучшей ценой покупки в стакане и заданного смещения; в случае если покупаемая валюта пошла вниз, то проверяется условие на срабатывание TS ордера (если наилучшая цена покупки стала меньше или равна цене TS ордера), и если условие выполнено, то выставляется автоматически рыночный ордер на продажу всех купленных активов в основном ордере.
В случае если продаваемая валюта пошла вниз, то происходит подтягивание вниз цены TS ордера на покупку на сумму заданного смещения и наилучшей цены продажи в стакане; в случае если продаваемая валюта пошла вверх, то проверяется условие на срабатывание TS ордера (если наилучшая цена продажи стала больше или равна цене TS ордера), и если условие выполнено, то выставляется автоматически рыночный ордер на покупку всех купленных активов в основном ордере.
Выполняются те же процедуры что и при выставлении лимитного ордера через веб-интерфейс
Размещение рыночного ордера маркет-мэйкером
Данная команда посылается в торговое ядро при выставлении маркет-мэйкером рыночного ордера на покупку или продажу.
При данной команде в торговом ядре выполняются те же проверки что и при выставлении рыночного ордера через веб-интерфейс
{"0":800,"1":<user_id>,"2":<market>,"3":<currency>,"4":<side>,"5":<base>,"6":<amount>,"7":<sl_rate>,"8":<tp_rate>,"9":<ts_offset>,"10":<offer_id>}
- <user_id> – ID пользователя,
- <market> – код валюты рынка, (например, USDT, BTC)
- <currency> – код покупаемой или продаваемой валюты, (например, LTC, BCH, ETH)
- <side> – направленность ордера: 1 – ордер на продажу, 0 – ордер на покупку
- <base> – признак, определяющий в какой валюте задано кол-во продаваемого или покупаемого актива. 0 – кол-во задано в валюте <currency>, 1 – кол-во задано в валюте <market>
- <amount> – количество продаваемой или покупаемой валюты <currency>
- <sl_rate> – цена stop-loss (в случае если покупаемая валюта пошла вниз, и наилучшая цена покупки в стакане стала меньше или равна выставленной цене stop loss, то выставляется автоматически рыночный ордер на продажу всех уже купленных активов в основном ордере для исключения ещё больших потерь; в случае если продаваемая валюта пошла вверх, и наилучшая цена продажи в стакане стала больше или равна выставленной цене stop loss, то выставляется автоматически рыночный ордер на покупку всех уже проданных активов в основном ордере для исключения ещё больших потерь)
- <tp_rate> – цена take-profit (в случае если покупаемая валюта пошла вверх, и наилучшая цена покупки в стакане стала больше или равна выставленной цене take profit, то выставляется автоматически рыночный ордер на продажу всех уже купленных активов в основном ордере для фиксации прибыли; в случае если продаваемая валюта пошла вниз, и наилучшая цена продажи в стакане стала меньше или равна выставленной цене take profit, то выставляется автоматически рыночный ордер на покупку всех уже проданных активов в основном ордере для фиксации прибыли)
- <ts_offset> – смещение цены trailing-stop. Для покупаемой валюты цена TS ордера изначально устанавливается в значение равное разнице между наилучшей ценой на покупку и заданного смещения. Для продаваемой валюты цена TS ордера изначально устанавливается в значение равное сумме наилучшей цены на продажу и заданного смещения
- <offer_id> – содержит значение выбранного предложения по плечу (при использовании маржинальной торговли). Если плечо не использовалось, содержит значение 0
В случае если покупаемая валюта пошла вверх, то происходит подтягивание вверх цены TS ордера на продажу на разницу между наилучшей ценой покупки в стакане и заданного смещения; в случае если покупаемая валюта пошла вниз, то проверяется условие на срабатывание TS ордера (если наилучшая цена покупки стала меньше или равна цене TS ордера), и если условие выполнено, то выставляется автоматически рыночный ордер на продажу всех купленных активов в основном ордере.
В случае если продаваемая валюта пошла вниз, то происходит подтягивание вниз цены TS ордера на покупку на сумму заданного смещения и наилучшей цены продажи в стакане; в случае если продаваемая валюта пошла вверх, то проверяется условие на срабатывание TS ордера (если наилучшая цена продажи стала больше или равна цене TS ордера), и если условие выполнено, то выставляется автоматически рыночный ордер на покупку всех купленных активов в основном ордере.
Выполняются те же процедуры что и при выставлении рыночного ордера через веб-интерфейс
Отмена ордера маркет-мэйкером
Данная команда посылается в торговое ядро при отмене ордера маркет-мэйкером.
При данной команде в торговом ядре выполняются те же проверки что и при отмене ордера через веб-интерфейс
{"0":900,"1":<user_id>,"2":<market>,"3":<currency>,"4":<order_id>}
- <user_id> – ID пользователя,
- <market> – код валюты рынка, (например, USDT, BTC)
- <currency> – код покупаемой или продаваемой валюты, (например, LTC, BCH, ETH)
- <order_id> – ID отменяемого ордера
Выполняются те же процедуры что и при отмене ордера через веб-интерфейс