Старт в Тестовом контуре
Это руководство описывает взаимодействие с тестовым контуром системы, предназначенным для проверки запросов и основанного на них кода без использования ресурсов боевого торгового аккаунта. Руководство для боевого контура, позволяющего заключать настоящие сделки, описано здесь.
Шаг 1. Регистрация учётной записи разработчика
Учётная запись разработчика нужна для получения доступа к механизмам авторизации запросов к торговой системе.
Если учётная запись разработчика была зарегистрирована ранее, перейдите к следующему шагу.
Для создания учётной записи разработчика выполните следующие действия:
- Перейдите на портал разработчика и нажмите кнопку Авторизоваться в правом верхнем углу
- Нажмите на ссылку Зарегистрироваться, расположенную ниже формы авторизации
- Заполните обязательные поля и нажмите кнопку
Зарегистрироваться
- Подтвердите указанный при регистрации email, перейдя по ссылке из автоматически отправленного письма
- Перейдите на страницу авторизации и войдите в созданную учётную запись разработчика с данными, указанными при регистрации
Регистрация учётной записи разработчика выполняется единоразово и не требует повторения при каждом последующем выполнении запросов к API.
Детальная информация об учётной записи разработчика доступна в соответствующей статье.
Шаг 2. Получение тестового торгового аккаунта
Большинство запросов к API предполагают выполнение от имени определённого торгового аккаунта. Тестовый контур взаимодействует с игровым окружением биржи и использует в работе симуляционные данные, из-за чего и торговый аккаунт тоже должен быть тестовым.
Чтобы получить тестовый торговый аккаунт или изменить список относящихся к нему портфелей, оставьте заявку на support@alor.ru или свяжитесь с нами в телеграме.
Тестовый аккаунт не привязывается к учётной записи разработчика, как это происходит с настоящим торговым аккаунтом. Сохраните логин и пароль от предоставленного аккаунта на всё время тестирования запросов.
Шаг 3. Получение Refresh Токена
В качестве единственного механизма авторизации запросов к API, доступного для Тестового контура, используется авторизация запросов с помощью JWT.
Данный механизм позволяет авторизовать отправляемый запрос с помощью краткосрочного токена доступа, для получения которого сперва потребуется получить токен обновления.
Тестовый торговый аккаунт предназначен для проверки запросов, в связи с чем позволяет получить только один Refresh Токен одновременно без предоставления информации о дате создания и сроке действия.
Если Refresh Токен был создан ранее и срок его действия не истёк, перейдите к следующему шагу.
Чтобы получить Refresh Токен, выписанный от имени тестового торгового аккаунта, выполните следующие действия:
- Перейдите на страницу Токены для доступа к API
- Нажмите на ссылку
Токены для ведения торгов в тестовом контуре можно получить здесь.
в разделе "Тестовый контур" внизу страницы - На открывшейся странице нажмите на ссылку
Begin OAuth authorization flow
- Введите логин и пароль тестового торгового аккаунта, полученного от технической поддержки, в соответствующие поля и нажмите
Войти
- Ознакомьтесь с перечнем прав доступа, предоставляемых для тестового торгового аккаунта, и нажмите
Разрешить
- Сохраните полученные Access и Refresh Токены в безопасное место
После выполнения последнего действия можете закрыть вкладку или перейти к документации по поддерживаемым запросам.
Детальная информация о Refresh Токенах доступна в соответствующей статье.
Шаг 4. Получение Access Токена
Большая часть защищённых ресурсов системы требует наличия у пользователя соответствующих прав доступа. Для подтверждения их наличия при использовании механизма JWT каждый запрос должен содержать в себе токен доступа, создаваемый с помощью полученного ранее токена обновления.
Первый Access Токен для тестового торгового аккаунта создаётся автоматически при получении Refresh Токена и действителен в течение 30 минут с момента получения. Если срок его действия не истёк, перейдите к следующему шагу.
Для создания Access Токена используется POST-запрос к конечной точке /refresh
сервера авторизации. Для тестового контура этот сервер доступен по адресу https://oauthdev.alor.ru
.
Отправляемый запрос должен содержать действующий Refresh Токен.
Пример запроса:
https://oauthdev.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 позволяет выполнить однократный обмен данными с сервером API, получив в ответ на отправленный запрос сообщение с информацией, актуальной на момент выполнения запроса.
Получение информации о биржевом стакане интересующего финансового инструмента на выбранной бирже через HTTP API выполняется с помощью запроса к конечной точке /md/v2/orderbooks/{exchange}/{symbol}
сервера API. Для тестового контура этот сервер доступен по адресу https://apidev.alor.ru
. URL запроса должен содержать фактические значения кода биржи вместо параметра {exchange}
и кода финансового инструмента вместо {symbol}
.
Перед выполнением запроса убедитесь, что заполнены все необходимые path-, query- и header-параметры.
Пример URL запроса:
https://apidev.alor.ru/md/v2/orderbooks/MOEX/SBER
Если необходимо, укажите в URL поддерживаемые запросом query-параметры:
depth
— Глубина стакана. Стандартное и максимальное значение:20
(20х20)format
— Формат возвращаемого сервером JSON-объекта:Simple
,Slim
,Heavy
. Стандартное значение:Simple
.
Пример URL запроса с query-параметрами:
https://apidev.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
После возвращения ответа HTTP-соединение будет завершено. Для получения актуальной информации в дальнейшем потребуется выполнить запрос повторно.
Если синтаксис запроса был нарушен или указаны некорректные значения, сервер вернёт JSON-объект с соответствующими ошибке значениями.
Детальная информация об HTTP запросе на получение информации о биржевом стакане доступна на странице интерактивного описания запроса.
WebSocket API позволяет создать подписку на интересующий информационный канал, давая возможность получать в ответ актуальную информацию со всеми изменениями в течение всего времени действия подписки без необходимости выполнения повторных запросов.
Все запросы на управление подписками, независимо от выбранного кода операции, обращаются к серверу API по интерфейсу /ws
. Перед отправкой запроса установите WebSocket-соединение с этим интерфейсом.
Полный URL интерфейса:
wss://apidev.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 выполняется с помощью запроса к конечной точке /commandapi/warptrans/TRADE/v2/client/orders/actions/market
сервера API. Для тестового контура этот сервер доступен по адресу https://apidev.alor.ru
. Условия заявки указываются в передаваемом указанной конечной точке теле сообщения.
Пример URL запроса:
https://apidev.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://apidev.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-объект с соответствующими ошибке значениями, после чего в одностороннем порядке разорвёт установленное соединение.
В дальнейшем созданную заявку можно просмотреть, изменить или отменить с помощью соответствующих запросов.
Детальная информация о запросе на получение информации о создании рыночной заявки доступна на странице интерактивного описания запроса.
Что дальше?
Дополнительно рекомендуем ознакомиться со следующими статьями по теме: