Группы заявок
Для частичной автоматизации торгов и уменьшения рисков, связанных с колебаниями рынка, рекомендуется выставляемые заявки объединять в группы.
Группа заявок (также известные как брекет-ордеры) — набор из нескольких заявок, объединённых между собой определённым условием выполнения.
Создание группы заявок подразумевает только объединение нескольких заявок в одну группу и не имеет ничего общего с групповым созданием заявок. Все заявки, объединяемые в группу, должны быть созданы соответствующими запросами заранее.
Общая информация
Возможность объединения нескольких заявок в связанную группу обладает рядом свойств, которые необходимо учитывать. В частности, следует помнить, что:
Для биржи не существует групп заявок.
Вся информация о сформированной группе хранится на серверах Брокера и не передаётся бирже, в связи с чем существование группы скрыто от других участников торгов и о её наличии можно только догадываться по косвенным признакам.
Количество групп не ограничено.
Пользователь может создавать любое количество групп заявок для реализации своей торговой стратегии.
У группы нет ограничений по заявкам.
Технически, группа заявок может содержать в себе неограниченное количество заявок любого типа и в любом соотношении. Это могут быть только лимитные или только стоп-заявки, а их количество может составлять несколько сотен. Рыночные заявки, если они по какой-то причине не были исполнены, тоже могут быть включены в группу. На практике такая свобода зачастую избыточна и не пригодится в большинстве сценариев.
У заявок нет ограничений по количеству групп.
Одна и та же заявка может входить в несколько групп одновременно. Это позволяет создавать связанные группы, в которых исполнение, изменение или снятие одной из заявок в одной группе может также повлиять на другую группу. Это же требует повышенного внимания к тому, какие условия выполнения задаются группам и в какие группы входят заявки.
В группу заявок groupA
входят заявки order1
, order2
и order3
, а в группу заявок groupB
— order3
, order4
и order5
. Обе группы содержат в себе order3
и для обеих задано условие выполнения OnExecuteOrCancel
.
Заявка order1
была исполнена, что вызвало отмену всех остальных заявок groupA
, в том числе и order3
. Так как order3
входила в том числе в groupB
, её отмена вызвала также отмену order4
и order5
.
Таким образом, на groupB
было оказано влияние событием, произошедшим в groupA
.
Не рекомендуется изменять заявки после добавления в группу.
Изменение заявок происходит через отмену старой заявки и создание новой. Эта новая заявка не будет иметь никаких связей с той группой, в которую входила старая заявка. При этом, если группе задано условие OnExecuteOrCancel
, изменение одной заявки отменит все остальные заявки в группе. Если необходимо изменить одну заявку в достаточно большой группе, рекомендуем сперва изменить тип группы на IgnoreCancel
и только потом менять входящую в неё заявку с последующим повторным добавлением в группу.
Условия выполнения
Основным условием выполнения для группы заявок, помимо собственных условий входящих в неё заявок, является правило обработки прочих заявок при исполнении одной из них. Это правило определяется параметром executionPolicy
и может принимать следующие значения:
Условие | Описание |
---|---|
OnExecuteOrCancel | Остальные заявки группы отменяются при выполнении, изменении или снятии любой из них |
IgnoreCancel | Остальные заявки группы отменяются только при исполнении любой из входящих в неё заявок. Снятие или изменение заявки исключает её из группы, оставляя остальную группу активной |
TriggerBracketOrders | Применяется для групп из одной лимитной и нескольких стоп-заявок. Стоп-заявки в группе имеют флаг |
Группы с неактивными заявками
Одним из требований при создании группы с условием выполнения TriggerBracketOrders
является неактивный статус стоп-заявок.
При неактивном статусе стоп-заявки игнорируют любые состояния цены инструмента, даже если условия для срабатывания стоп-заявки были достигнуты. Наиболее частый сценарий использования таких заявок — создание тейк-профит и стоп-лосс заявок для инструмента, которого ещё нет в портфеле.
Чтобы создать неактивную стоп-заявку, укажите значение параметра "activate": false
:
{
"condition": "MoreOrEqual",
"triggerPrice": 330.40,
"stopEndUnixTime": 1719781199,
"activate": false, // Параметр, выставляющий стоп-заявку неактивной
"side": "sell",
"quantity": 100,
"instrument": {
"symbol": "SBER",
"exchange": "MOEX",
"instrumentGroup": "TQBR"
},
"user": {
"portfolio": "D39004"
}
}
После чего добавьте её в группу с остальными заявками.
Примеры запросов
Общие требования
При создании группы заявок должны соблюдаться следующие требования:
- Добавляемые в группу заявки не должны быть исполнены или отменены
- Все связанные с группами заявок запросы должны быть авторизованы
Авторизация
Для авторизации запросов используется JWT токен, выполняющий роль Access токена. Полное описание доступных способов авторизации представлено в разделе Авторизация.
В HTTP API для передачи токена используется параметр заголовка Authorization
. Заголовок должен передаваться с каждым выполняемым запросом.
Передаётся этот токен как Bearer-токен, в связи с чем заголовок должен содержать префикс Bearer
перед передаваемым значением. Выглядит корректно заполненный заголовок Authorization
так:
Authorization: Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6IkpXVCJ9.eyJzdWIiOiJMb2dpblNhbXBsZSIsImVudCI6ImNsaWVudCIsImVpbiI6IjAxMjM0IiwiY2xpZW50aWQiOiIwMTIzNDU2IiwiYXpwIjoiMDEyMzQ1Njc4OWFiY2RlZjAxMjMiLCJhZ3JlZW1lbnRzIjoiQWdyZWVtZW50U2FtcGxlMSBBZ3JlZW1lbnRTYW1wbGUyIEFncmVlbWVudFNhbXBsZTMiLCJwb3J0Zm9saW9zIjoiUG9ydGZvbGlvU2FtcGxlMSBQb3J0Zm9saW9TYW1wbGUyIFBvcnRmb2xpb1NhbXBsZTMiLCJzY29wZSI6Ik9yZGVyc1JlYWQgT3JkZXJzQ3JlYXRlIFRyYWRlcyBQZXJzb25hbCBTdGF0cyIsImV4cCI6Mjg3MTc2MzE5OSwiaWF0IjowLCJpc3MiOiJBbG9yLklkZW50aXR5IiwiYXVkIjoiQ2xpZW50IFdBUlAgV2FycEFUQ29ubmVjdG9yIHN1YnNjcmlwdGlvbnNBcGkgQ29tbWFuZEFwaSBJbnN0cnVtZW50QXBpIFRyYWRpbmdWaWV3UGxhdGZvcm0ifQ.QOQVMIAoZ6SnF5urnIzJ0EvtQd9P5Sx355069kXoID207wHOTW0wkKNMcrIKXmENEQQ_0yDjqH_kjeqWLBJuqA
Примеры запросов
Управление группами заявок возможно только через HTTP API. Способ выставления самих заявок при этом не играет роли.
Создание группы заявок
Интерактивное описание запроса доступно на странице Создание группы заявок
Создание группы заявок не предполагает группового создания заявок. Все заявки, которые нужно объединить в группу, должны быть созданы заранее.
Для создания группы заявок используется POST-запрос к конечной точке /commandapi/api/orderGroups
с сообщением, содержащим все характеристики группы.
Полный URL конечной точки выглядит так:
Тело сообщения должно содержать условие выполнения группы и массив добавляемых заявок с основными данными о них: номер и тип заявки, биржа размещения, портфель.
{
"orders": [
{
"portfolio": "D39004",
"exchange": "MOEX",
"orderId": "15...860",
"type": "Limit"
},
{
"portfolio": "D39004",
"exchange": "MOEX",
"orderId": "15856",
"type": "Stop"
}
],
"executionPolicy": "OnExecuteOrCancel"
}
Создана группа заявок, состоящая из лимитной заявки 15...860
и рыночной стоп-заявки 15856
. По условию OnExecuteOrCancel
выполнение одной заявки приведёт к отмене другой.
В случае успешного выполнения запроса API вернёт сообщение с кодом ответа 200, содержащее в себе идентификатор (guid) группы:
{
"message": "success",
"groupId": "eafb19d6-c578-4afe-aa95-d528c4531031"
}
Е сли обработка запроса завершилась ошибкой, API вернёт информацию о причинах этой ошибки.
Полный список всех параметров и возможных ответов доступен на странице описания запроса.
Получение информации о всех группах заявок
Интерактивное описание запроса доступно на странице Все группы заявок
Для получения информации обо всех ранее созданных группах заявок используется GET-запрос к конечной точке /commandapi/api/orderGroups
без дополнительных параметров. Информация о портфелях, для которых требуется отобразить список, содержится в передаваемом с запросом Access токене.
Полный URL конечной точки выглядит так:
В случае успешного выполнения запроса API вернёт сообщение с кодом ответа 200, содержащее массив из всех ранее созданных групп заявок. Для каждой группы будут возвращены её идентификатор, условие выполнения, текущее состояние, время создания и время выполнения, если заявка выполнена. Для определения принадлежности группы ответ также содержит лог ин клиента, от имени которого заявка была выставлена.
[
{
"id": "eafb19d6-c578-4afe-aa95-d528c4531031",
"login": "P039004",
"orders": [
{
"orderId": "15...860"
},
{
"orderId": "15856"
}
],
"executionPolicy": "OnExecuteOrCancel",
"status": "Active",
"createdAt": "2024-04-19T08:25:56.7164619",
"closedAt": null
}
]
Сервер возвращает все доступные группы заявок единым массивом без фильтрации результатов. Механизмы сортировки и фильтрации должны быть предусмотрены в клиентском приложении.
Если обработка запроса завершилась ошибкой, API вернёт информацию о причинах этой ошибки.
Полный список всех параметров и возможных ответов доступен на странице описания запроса.
Получение информации об отдельной группе заявок
Интерактивное описание запроса доступно на странице Выбранная группа заявок
Для получения информации об определённой группе заявок используется GET-запрос к конечной точке /commandapi/api/orderGroups/{orderGroupId}
, где {orderGroupId}
— идентификатор (guid) просматриваемой группы.
Полный URL конечной точки выглядит так:
https://api.alor.ru/commandapi/api/orderGroups/eafb19d6-c578-4afe-aa95-d528c4531031
https://apidev.alor.ru/commandapi/api/orderGroups/eafb19d6-c578-4afe-aa95-d528c4531031
В случае успешного выполнения запроса API вернёт сообщение с кодом ответа 200, содержащее информацию об указанной заявке. Для каждой группы будут возвращены её идентификатор, условие выполнения, текущее состояние, время создания и время выполнения, если заявка выполнена. Для определения принадлежности группы ответ также содержит логин клиента, от имени которого заявка была выставлена.
{
"id": "eafb19d6-c578-4afe-aa95-d528c4531031",
"login": "P039004",
"orders": [
{
"orderId": "15...860"
},
{
"orderId": "15856"
}
],
"executionPolicy": "OnExecuteOrCancel",
"status": "Active",
"createdAt": "2024-04-19T08:25:56.7164619",
"closedAt": null
}
Если обработка запроса завершилась ошибкой, API вернёт информацию о причинах этой ошибки.
Полный список всех параметров и возможных ответов доступен на странице описания запроса.
Изменение группы заявок
Интерактивное описание запроса доступно на странице Редактирование группы заявок
Изменять можно только группы со статусом Active
.
Для изменения существующей группы заявок используется PUT-запрос к конечной точке /commandapi/api/orderGroups/{orderGroupId}
, где {orderGroupId}
— идентификатор (guid) изменяемой группы.
Полный URL конечной точки выглядит так:
https://api.alor.ru/commandapi/api/orderGroups/eafb19d6-c578-4afe-aa95-d528c4531031
https://apidev.alor.ru/commandapi/api/orderGroups/eafb19d6-c578-4afe-aa95-d528c4531031
Запрос сопровождается сообщением, идентичным отправляемому при создании группы заявок. В теле сообщения необходимо указать все данные группы — как новые, так и старые.
{
// Прежние данные группы:
"orders": [
{
"portfolio": "D39004",
"exchange": "MOEX",
"orderId": "15...860",
"type": "Limit"
},
{
"portfolio": "D39004",
"exchange": "MOEX",
"orderId": "15856",
"type": "Stop"
},
// Новая заявка, добавляемая в группу:
{
"portfolio": "D39004",
"exchange": "MOEX",
"orderId": "15857",
"type": "Stop"
}
],
// Изменение ранее переданного параметра:
"executionPolicy": "IgnoreCancel"
}
В случае успешного выполнения запроса API вернёт сообщение с кодом ответа 200, содержащее в себе только текстовый статус выполнения запроса:
success
Если обработка запроса завершилась ошибкой, API вернёт информацию о причинах этой ошибки.
Полный список всех параметров и возможных ответов доступен на странице описания запроса.
Удаление группы заявок
Интерактивное описание запроса доступно на странице Удаление группы заявок
Удалять можно только группы со статусом Active
.
Удаление группы влияет только на связь заявок между собой. Состояние заявок при удалении группы остаётся прежним.
Для удаления группы заявок используется DELETE-запрос к конечной точке /commandapi/api/orderGroups/{orderGroupId}
, где {orderGroupId}
— идентификатор (guid) удаляемой группы.
Полный URL конечной точки выглядит так:
https://api.alor.ru/commandapi/api/orderGroups/eafb19d6-c578-4afe-aa95-d528c4531031
https://apidev.alor.ru/commandapi/api/orderGroups/eafb19d6-c578-4afe-aa95-d528c4531031
В случае успешного выполнения запроса API вернёт сообщение с кодом ответа 200, содержащее в себе только текстовый статус выполнения запроса:
success
Если обработка запроса завершилась ошибкой, API вернёт информацию о причинах этой ошибки.
Полный список всех параметров и возможных ответов доступен на странице описания запроса.
Что дальше?
- Узнайте, как получить биржевую информаци ю, используемую в заявках
- Ознакомьтесь с возможностями рыночных, лимитных и айсберг-заявок
- Изучите возможности условных заявок
- Изучите возможности объединения заявок в группы для упрощения торгов
- Детальнее ознакомьтесь с возможностями и требованиями HTTP API и WebSocket API для лучшего понимания выполняемых действий
- Если возникли вопросы по использованию API, воспользуйтесь списком часто задаваемых вопросов для получения ответа
Для быстрого погружения в процессы использования API можете воспользоваться руководствами по быстрому старту для тестового и боевого контуров системы.