Старт в Боевом контуре
Это руководство описывает взаимодействие с боевым контуром системы, для которого потребуется действующий торговый аккаунт клиента АЛОР Брокер. Руководство для тестового контура, не требующего настоящего торгового аккаунта, описано здесь.
Шаг 1. Регистрация учётной записи разработчика
Учётная запись разработчика нужна для получения доступа к механизмам авторизации запросов к торговой системе.
Если учётная запись разработчика была зарегистрирована ранее, перейдите к следующему шагу.
Для создания учётной записи разработчика выполните следующие действия:
- Перейдите на портал разработчика и нажмите кнопку Авторизоваться в правом верхнем углу
- Нажмите на ссылку Зарегистрироваться, расположенную ниже формы авторизации
- Заполните обязательные поля и нажмите кнопку
Зарегистрироваться
- Подтвердите указанный при регистрации email, перейдя по ссылке из автоматически отправленного письма
- Перейдите на страницу авторизации и войдите в созданную учётную запись разработчика с данными, указанными при регистрации
Регистрация учётной записи разработчика выполняется единоразово и не требует повторения при каждом последующем выполнении запросов к API.
Детальная информация об учётной записи разработчика доступна в соответствующей статье.
Шаг 2. Привязка торгового аккаунта
Большинство запросов к API предполагают выполнение от имени определённого торгового аккаунта. Чтобы генерируемые авторизационные токены имели привязку к выбранному торговому аккаунту, его необходимо указать в учётной записи разработчика.
Если нужный торговый аккаунт был привязан к учётной записи разработчика ранее, перейдите к следующему шагу.
Чтобы привязать торговый аккаунт к учётной записи разработчика, выполните следующие действия:
- Перейдите на страницу Токены для доступа к API
- Укажите логин и пароль от торгового аккаунта в соответствующих полях и нажмите кнопку
Привязать
Привязка торгового аккаунта выполняется единоразово и не требует повторения при каждом последующем выполнении запросов к API.
Детальная информация о привязке торгового аккаунта доступна в соответствующей статье.
Шаг 3. Получение Refresh токена
В качестве основного механизма, рекомендованного для большинства случаев работы с API, используется авторизация запросов с помощью JWT.
Данный механизм позволяет авторизовать отправляемый запрос с помощью краткосрочного токена доступа, для получения которого сперва потребуется получить токен обновления.
Если Refresh токен был создан ранее и срок его действия не истёк, перейдите к следующему шагу.
Чтобы выписать новый Refresh токен от имени боевого торгового аккаунта, выполните следующие действия:
- Перейдите на страницу Токены для доступа к API
- Создайте новый Refresh токен нажатием кнопки
Выписать токен
- Просмотреть созданный токен можно, найдя его в списке ниже и нажав кнопку
Показать
Полученный Refresh токен действителен в течение 1 года с момента создания. При истечении срока действия или ручном отзыве токена процедуру создания потребуется провести повторно.
Детальная информация о Refresh токенах доступна в соответствующей статье.
Шаг 4. Получение Access токена
Большая часть защищённых ресурсов системы требует наличия у пользователя соответствующих прав доступа. Для подтверждения их наличия при использовании механизма JWT каждый запрос должен содержать в себе токен доступа, создаваемый с помощью полученного ранее токена обновления.
Если Access токен был создан ранее и срок его действия не истёк, перейдите к следующему шагу.
Для создания Access токена отправьте POST-запрос к конечной точке /refresh
сервера авторизации. Для боевого контура этот сервер доступен по адресу https://oauth.alor.ru
.
Отправляемый запрос должен содержать действующий Refresh токен, созданный с привязкой к нужному торговому аккаунту.
Пример запроса:
https://oauth.alor.ru/refresh?token=12b...cac
Где 12b...cac
— Refresh токен.
В ответ сервер авторизации вернёт JSON объект, содержащий Access токен:
{
"AccessToken": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6IkpXVCJ9.eyJzdWIiOiJMb2dpblNhbXBsZSIsImVudCI6ImNsaWVudCIsImVpbiI6IjAxMjM0IiwiY2xpZW50aWQiOiIwMTIzNDU2IiwiYXpwIjoiMDEyMzQ1Njc4OWFiY2RlZjAxMjMiLCJhZ3JlZW1lbnRzIjoiQWdyZWVtZW50U2FtcGxlMSBBZ3JlZW1lbnRTYW1wbGUyIEFncmVlbWVudFNhbXBsZTMiLCJwb3J0Zm9saW9zIjoiUG9ydGZvbGlvU2FtcGxlMSBQb3J0Zm9saW9TYW1wbGUyIFBvcnRmb2xpb1NhbXBsZTMiLCJzY29wZSI6Ik9yZGVyc1JlYWQgT3JkZXJzQ3JlYXRlIFRyYWRlcyBQZXJzb25hbCBTdGF0cyIsImV4cCI6Mjg3MTc2MzE5OSwiaWF0IjowLCJpc3MiOiJBbG9yLklkZW50aXR5IiwiYXVkIjoiQ2xpZW50IFdBUlAgV2FycEFUQ29ubmVjdG9yIHN1YnNjcmlwdGlvbnNBcGkgQ29tbWFuZEFwaSBJbnN0cnVtZW50QXBpIFRyYWRpbmdWaWV3UGxhdGZvcm0ifQ.QOQVMIAoZ6SnF5urnIzJ0EvtQd9P5Sx355069kXoID207wHOTW0wkKNMcrIKXmENEQQ_0yDjqH_kjeqWLBJuqA"
}
Полученный Access токен действителен в течение 30 минут с момента создания. При истечении срока действия токена процедуру создания потребуется провести повторно.
Для запроса на обновление Access токена доступно интерактивное описание на странице Обновление JWT токена.
Детальная информация об Access токенах доступна в соответствующей статье.
Шаг 5. Отправка запросов
Взаимодействие с АЛОР Брокер API возможно как через HTTP API (REST), так и через WebSocket API. При этом часть поддерживаемых торговой системой операций доступна в обоих вариантах взаимодействия.
Получение информации о биржевом стакане финансового инструмента
- HTTP API
- WebSocket API
HTTP API даёт возможность взаимодействовать с системой в рамках краткосрочного соединения, предназначенного для однократного обмена сообщениями — по одному ответу на каждый запрос. В возвращаемом сервером ответе передаётся информация, актуальная на момент выполнения запроса. Для обновления полученных данных спустя время потребуется самостоятельно повторить выполнение того же запроса.
Чтобы получить информацию о биржевом стакане интересующего инструмента на нужной бирже через HTTP API, отправьте запрос GET к конечной точке /md/v2/orderbooks/{exchange}/{symbol}
сервера API. При этом:
- Сервер API боевого контура:
https://api.alor.ru
; {exchange}
должен содержать фактический код биржи;{symbol}
должен содержать фактический код (тикер) инструмента.
Перед выполнением запроса убедитесь, что заполнены все необходимые path-, query- и header-параметры.
Пример URL запроса:
https://api.alor.ru/md/v2/orderbooks/MOEX/SBER
Если необходимо, укажите в URL поддерживаемые запросом query-параметры:
depth
— Глубина стакана. Стандартное и максимальное значение:20
(20х20)format
— Формат возвращаемого сервером JSON-объекта:Simple
,Slim
,Heavy
. Стандартное значение:Simple
.
Пример URL запроса с query-параметрами:
https://api.alor.ru/md/v2/orderbooks/MOEX/SBER?depth=1&format=Simple
Для успешного выполнения запроса необходимо указать значения для обязательных параметров заголовка:
- Параметр
Authorization
должен содержать значениеBearer <Token>
, где Token — Access токен, полученный ранее.
Заполните все параметры актуальными для задачи значениями и выполните запрос. В случае успешно обработки запроса сервер в ответ вернёт JSON-объект с информацией.
- Тело ответа
- Схема
{
"snapshot": true,
"bids": [
{
"price": 281.98,
"volume": 36
}
],
"asks": [
{
"price": 281.99,
"volume": 11
}
],
"timestamp": 1701105939,
"ms_timestamp": 1701105939395,
"existing": true
}
Параметры тела ответа
Deprecated. Устаревшее поле, будет удалено в будущих обновлениях. Вместо этого поля используйте поле existing
Пример: true
bids
object
Данные о бидах
Цена
Пример: 115820
Объём
Пример: 23
asks
object
Данные об асках
Цена
Пример: 116030
Объём
Пример: 31
Deprecated. Устаревшее поле, будет удалено в будущих обновлениях. Вместо этого поля используйте поле ms_timestamp
Пример: 1610982677
Время (UTC) в формате Unix Time Milliseconds
Пример: 1610982677578
True
— для данных из снепшота, то есть из истории. False
— для новых событий
Пример: true
Если синтаксис запроса был нарушен или указаны некорректные значения, сервер вернёт JSON-объект с соответствующими ошибке значениями.
Детальная информация об HTTP запросе на получение информации о биржевом стакане доступна на странице интерактивного описания запроса.
WebSocket API даёт возможность создать автоматически обновляемые подписки на интересующие информационные каналы, давая возможность получать в ответ актуальную информацию со всеми изменениями в течение всего времени действия подписки без необходимости выполнения повторных запросов.
Все запросы на управление подписками, независимо от выбранного кода операции, обращаются к серверу API по интерфейсу /ws
. Перед отправкой запроса установите WebSocket-соединение с этим интерфейсом.
Полный URL интерфейса:
wss://api.alor.ru/ws
Пример установки соединения в Postman
Для получения информации о биржевом стакане интересующего финансового инструмента отправьте в установленное WebSocket-соединение сообщение с кодом операции OrderBookGetAndSubscribe
, содержащее детали интересующей подписки.
- Тело запроса
- Схема
{
"opcode": "OrderBookGetAndSubscribe",
"code": "SBER",
"depth": 10,
"exchange": "MOEX",
"format": "Simple",
"frequency": 0,
"guid": "f35a2373-612c-4518-54af-72025384f59b",
"token": "eyJhbGciOiJ..."
}
Параметры тела запроса
OrderBookGetAndSubscribe
— Подписка на биржевой стаканBarsGetAndSubscribe
— Подписка на историю цен (свечи)QuotesSubscribe
— Подписка на информацию о котировкахInstrumentsGetAndSubscribeV2
— Подписка на изменение информации о финансовых инструментах на выбранной биржеAllTradesGetAndSubscribe
— Подписка на все сделкиPositionsGetAndSubscribeV2
— Подписка на информацию о текущих позициях по торговым инструментам и деньгамSummariesGetAndSubscribeV2
— Подписка на сводную информацию по портфелюRisksGetAndSubscribe
— Подписка на сводную информацию по портфельным рискамSpectraRisksGetAndSubscribe
— Подписка на информацию по рискам срочного рынка (FORTS)TradesGetAndSubscribeV2
— Подписка на информацию о сделкахOrdersGetAndSubscribeV2
— Подписка на информацию о текущих заявках на рынке для выбранных биржи и финансового инструментаStopOrdersGetAndSubscribeV2
— Подписка на информацию о текущих заявках на рынке для выбранных биржи и финансового инструментаUnsubscribe
— Отмена существующей подпискиMOEX
— Московская БиржаSPBX
— СПБ Биржа
Код выполняемой операции:
Пример: OrderBookGetAndSubscribe
Код финансового инструмента (Тикер)
Пример: SBER
Глубина стакана. Стандартное и максимальное значение — 20 (20х20).
Пример: 20
Биржа:
Пример: MOEX
Формат представления возвращаемых данных: Simple, Slim, Heavy
Пример: Simple
Максимальная частота отдачи данных сервером в миллисекундах
Пример: 0
Уникальный идентификатор сообщений создаваемой подписки. Все входящие сообщения, соответствующие этой подписке, будут иметь такое значение поля guid
Пример: f35a2373-612c-4518-54af-72025384f59b
Access токен для авторизации запроса
Пример: eyJhbGciOiJ...
Передаваемое в сообщении значение параметра guid
должно быть уникальным для каждого запроса в рамках установленного соединения. При передаче ранее использовавшегося значения сервер заменит ранее созданную подписку с указанным идентификатором новой.
В случае успешной обработки сообщения сервер вернёт в установленное соединение одиночное сообщение с кодом 200
, подтверждающее создание подписки.
- Тело ответа
- Схема
{
"message": "Handled successfully",
"httpCode": 200,
"requestGuid": "c328fcf1-e495-408a-a0ed-e20f95d6b813"
}
Параметры тела ответа
Текстовое представление возвращаемого сообщения
Пример: Handled successfully
Код возвращаемого сообщения
Пример: 200
Уникальный идентификатор сообщений подписки. Значение во входящем сообщении равно значению поля guid
, переданному при отправке запроса.
Пример: c328fcf1-e495-408a-a0ed-e20f95d6b813
После подтверждения создания подписки сервер начнёт передачу запрошенных данных в череде сообщений с кодом 100
.
- Тело ответа
- Схема
{
"data": {
"snapshot": true,
"bids": [
{
"price": 257.70,
"volume": 157
}
],
"asks": [
{
"price": 257.71,
"volume": 288
}
],
"timestamp": 1702631123,
"ms_timestamp": 1702631123780,
"existing": true
},
"guid": "c328fcf1-e495-408a-a0ed-e20f95d6b813"
}
Параметры тела ответа
data
object
Блок данных от информационного канала
Deprecated. Устаревшее поле, будет удалено в будущих обновлениях. Вместо этого поля используйте поле existing
Пример: true
bids
object
Данные о бидах
Цена
Пример: 115820
Объём
Пример: 23
asks
object
Данные об асках
Цена
Пример: 116030
Объём
Пример: 31
Deprecated. Устаревшее поле, будет удалено в будущих обновлениях. Вместо этого поля используйте поле ms_timestamp
Пример: 1610982677
Время (UTC) в формате Unix Time Milliseconds
Пример: 1610982677578
True
— для данных из снепшота, то есть из истории. False
— для новых событий
Пример: true
Уникальный идентификатор сообщений подписки. Значение во входящем сообщении равно значению поля guid
, переданному при отправке запроса.
Пример: f35a2373-612c-4518-54af-72025384f59b
Чтобы отменить созданную подписку, отправьте в то же WebSocket-соединение сообщение с кодом операции unsubscribe
и идентификатором отменяемой подписки, либо разорвите установленное соединение.
Если синтаксис запроса был нарушен или указаны некорректные значения, сервер вернёт JSON-объект с соответствующими ошибке значениями, после чего в одностороннем порядке разорвёт установленное соединение.
Детальная информация о WebSocket подписке на информацию о биржевом стакане доступна на странице описания запроса.
Создание рыночной заявки на приобретение выбранного инструмента
- HTTP API
- WebSocket API
Перед выполнением запроса убедитесь, что заполнены все необходимые path-, query- и header-параметры.
Чтобы создать рыночную заявку на покупку ценной бумаги на выбранной бирже через HTTP API, отправьте POST запрос к конечной точке /commandapi/warptrans/TRADE/v2/client/orders/actions/market
сервера API. При этом:
- Сервер API боевого контура:
https://api.alor.ru
; - Все параметры заявки должны быть переданы в теле запроса.
https://api.alor.ru/commandapi/warptrans/TRADE/v2/client/orders/actions/market
Для успешного выполнения запроса необходимо указать значения для обязательных параметров заголовка:
- Параметр
Authorization
должен содержать значениеBearer <Token>
, где Token — Access токен, полученный ранее. - Параметр
X-REQID
должен содержать значение<ID>
, где ID — сгенерированный пользователем уникальный идентификатор заявки.
Передаваемое в заголовке X-REQID
значение должно быть уникальным для каждого запроса. При передаче ранее использовавшегося значения сервер отклонит запрос с соответствующей ошибкой.
В тело сообщения добавьте JSON-объект, содержащий условия заявки.
- Тело запроса
- Схема
{
"side": "buy",
"type": "market",
"quantity": 1,
"instrument": {
"symbol": "SBER",
"exchange": "MOEX"
},
"comment": "Пользовательский комментарий",
"user": {
"portfolio": "D39004"
}
}
Параметры тела запроса
buy
- Купляsell
- ПродажаMOEX
- Московская биржаSPBX
- СПБ Биржа
Направление сделки:
Пример: buy
Тип заявки
Пример: market
Количество (лоты)
Пример: 1
instrument
object
Данные о финансовом инструменте
Тикер (Код финансового инструмента)
Пример: SBER
Биржа:
Пример: MOEX
Пользовательский комментарий к заявке
Пример: Заметка №451
user
object
Данные о пользователе
Идентификатор клиентского портфеля
Пример: D39004
Заполните все параметры актуальными для задачи значениями и выполните запрос. В случае успешной обработки переданного сообщения сервер в ответ вернёт JSON-объект с номером созданной заявки.
{
"message": "success",
"orderNumber": "409...153"
}
Если синтаксис запроса был нарушен или указаны некорректные значения, сервер вернёт JSON-объект с соответствующими ошибке значениями.
В дальнейшем созданную заявку можно просмотреть, изменить или отменить с помощью соответствующих запросов.
Детальная информация о запросе на получение информации о создании рыночной заявки доступна на странице интерактивного описания запроса.
Все запросы на управление заявками через WebSocket API, независимо от типа заявки и запрашиваемой операции, выполняются через интерфейс /cws
. Перед отправкой запроса установите WebSocket-соединение с этим интерфейсом.
Полный URL интерфейса:
wss://api.alor.ru/cws
Пример установки соединения в Postman
Для создания рыночной заявки на приобретение интересующего финансового инструмента на выбранной бирже отправьте в установленное WebSocket-соединение сообщение с кодом операции create:market
, содержащее детали заявки.
- Тело запроса
- Схема
{
"opcode": "create:market",
"guid": "c328fcf1-e495-408a-a0ed-e20f95d6b813",
"side": "buy",
"quantity": 1,
"instrument": {
"symbol": "SBER",
"exchange": "MOEX"
},
"comment": "Первая заявка",
"board": "TQBR",
"user": {
"portfolio": "D39004"
},
"checkDuplicates": true
}
Параметры тела запроса
buy
— Покупкаsell
— ПродажаMOEX
— Московская БиржаSPBX
— СПБ Биржа
Код выполняемой операции
Пример: create:market
Уникальный идентификатор сообщений создаваемой подписки. Все входящие сообщения, соответствующие этой подписке, будут иметь такое значение поля guid
Пример: c328fcf1-e495-408a-a0ed-e20f95d6b813
Направление сделки:
Пример: buy
Количество (лоты)
Пример: 1
instrument
object
Данные о финансовом инструменте
Тикер (Код финансового инструмента)
Пример: SBER
Биржа:
Пример: MOEX
Пользовательский комментарий к заявке
Пример: Первая заявка
Код режима торгов (Борд)
Пример: TQBR
user
object
Данные о пользователе, от чьего имени создаётся заявка
Идентификатор клиентского портфеля
Пример: D39004
Флаг, отвечающий за проверку уникальности команд. По умолчанию включен. При отключении ускоряет прием заявки.
Пример: true
Передаваемое в сообщении значение параметра guid
должно быть уникальным для каждого запроса в рамках установленного соединения. При передаче ранее использовавшегося значения сервер отклонит запрос с соответствующей ошибкой, после чего в одностороннем порядке разорвёт соединение.
В случае успешной обработки сообщения сервер вернёт в установленное соединение одиночное сообщение с кодом 200
, подтверждающее создание заявки.
- Тело ответа
- Схема
{
"requestGuid": "c328fcf1-e495-408a-a0ed-e20f95d6b813",
"httpCode": 200,
"message": "An order '12345' has been created.",
"orderNumber": 12345
}
Параметры тела ответа
Уникальный идентификатор запроса. Значение во входящем сообщении равно значению поля guid
, переданному при отправке запроса.
Пример: c328fcf1-e495-408a-a0ed-e20f95d6b813
Код возвращаемого сообщения
Пример: 200
Текстовое представление возвращаемого сообщения
Пример: An order '12345' has been created.
Уникальный идентификатор заявки
Пример: 12345
Если синтаксис запроса был нарушен или указаны некорректные значения, сервер вернёт JSON-объект с соответствующими ошибке значениями, после чего в одностороннем порядке разорвёт установленное соединение.
В дальнейшем созданную заявку можно просмотреть, изменить или отменить с помощью соответствующих запросов.
Детальная информация о запросе на получение информации о создании рыночной заявки доступна на странице интерактивного описания запроса.
Что дальше?
Дополнительно рекомендуем ознакомиться со следующими статьями по теме: