Справочник по API¶
Общие понятия ¶
Объем, цены, типы ордеров и срок действия
Объем¶
Объем указывается в центах (единицах 0,0000001 лота).
| Лоты | Объем (центы) |
|---|---|
| 0,01 | 100 000 |
| 0,1 | 1 000 000 |
| 1,0 | 10 000 000 |
Цены¶
Значения цен указываются в пипетках. Для преобразования: отображаемая_цена = значение_пипетки / 10^pipDigits
Для EURUSD (5 знаков) значение пипетки 112345 = 1,12345.
Типы ордеров¶
| Тип | Описание | Обязательные поля |
|---|---|---|
MARKET | Исполнить немедленно по текущей цене | symbolId, tradeSide, volume |
LIMIT | Исполнить по лимитной цене или лучше | + limitPrice |
STOP | Активировать, когда рынок достигнет стоп-цены | + stopPrice |
MARKET_RANGE | Исполнить в пределах ценового диапазона | + baseSlippagePrice |
STOP_LIMIT | Лимитный ордер, активируемый по стоп-цене | + stopPrice, limitPrice |
Срок действия¶
| Политика | Описание |
|---|---|
GOOD_TILL_CANCEL | Ордер остается активным до исполнения или отмены |
GOOD_TILL_DATE | Ордер истекает в указанный expirationTimestamp |
IMMEDIATE_OR_CANCEL | Исполнить доступное немедленно, остальное отменить |
Информация о счете ¶
GET /v1/balance Get account balance
Возвращает баланс счета, средства и свободную маржу.
Параметры отсутствуют.
200 Успешный ответ
{
"balance": 10000.00,
"equity": 10250.75,
"freeMargin": 9800.50,
"balanceVersion": 42,
"moneyDigits": 2,
"depositAssetId": 1
}
| Поле | Тип | Описание |
|---|---|---|
balance | double | Баланс счета в валюте депозита |
equity | double | Баланс + плавающая прибыль/убыток |
freeMargin | double | Маржа, доступная для новых сделок |
balanceVersion | int64 | Счетчик версии баланса |
moneyDigits | int32 | Десятичные знаки для денежных значений |
depositAssetId | int64 | ID актива валюты депозита |
GET /v1/symbols Получить доступные инструменты
Возвращает все инструменты, доступные для торговли на счете.
Параметры отсутствуют.
200 Массив объектов Symbol
[
{
"symbolId": 1,
"symbolName": "EURUSD",
"enabled": true,
"baseAssetId": 2,
"quoteAssetId": 1,
"description": "Euro vs US Dollar"
}
]
Symbol
| Поле | Тип | Описание |
|---|---|---|
symbolId | int64 | ID инструмента (используется в других вызовах API) |
symbolName | string | Название инструмента (например, "EURUSD") |
enabled | boolean | Доступен ли инструмент для торговли |
baseAssetId | int64 | ID базового актива |
quoteAssetId | int64 | ID актива котировки |
description | string | Описание в удобочитаемом формате |
GET /v1/assets Получить доступные активы
Возвращает доступные активы (валюты).
Параметры отсутствуют.
200 Массив объектов Asset
[
{
"assetId": 1,
"name": "USD",
"displayName": "US Dollar"
}
]
Asset
| Поле | Тип | Описание |
|---|---|---|
assetId | int64 | ID актива |
name | string | Код актива (например, "USD") |
displayName | string | Отображаемое название |
Рыночные данные ¶
GET /v1/prices Получить спотовые цены
Возвращает текущие цены покупки/продажи для указанных инструментов. Это снимок — API не поддерживает потоковую передачу данных.
| Имя | Расположение | Тип | Обязательное | Описание |
|---|---|---|---|---|
symbolId | query | int64[] | ID инструментов через запятую |
200 Массив объектов SpotPrice
[
{
"symbolId": 1,
"bid": 112340,
"ask": 112355,
"high": 112890,
"low": 111950,
"sessionClose": 112100,
"timestamp": 1700000000000
}
]
SpotPrice
| Поле | Тип | Описание |
|---|---|---|
symbolId | int64 | ID инструмента |
bid | int64 | Лучшая цена продажи (пипетки) |
ask | int64 | Лучшая цена покупки (пипетки) |
high | int64 | Максимум сессии (пипетки) |
low | int64 | Минимум сессии (пипетки) |
sessionClose | int64 | Закрытие предыдущей сессии (пипетки) |
timestamp | int64 | Временная метка котировки (эпоха мс) |
GET /v1/trendbars Получить исторические данные OHLCV
Возвращает исторические данные свечей (OHLCV) для инструмента.
| Имя | Расположение | Тип | Обязательное | торговля | Описание |
|---|---|---|---|---|---|
symbolId | query | int64 | – | ID инструмента | |
period | query | string | – | Период бара | |
fromTimestamp | query | string | – | Время начала (ISO-8601) | |
toTimestamp | query | string | – | Время окончания (ISO-8601) | |
count | query | int32 | 100 | Макс. количество баров для возврата |
Доступные периоды
M_1 M_2 M_3 M_4 M_5 M_10 M_15 M_30 H_1 H_2 H_3 H_4 H_6 H_8 H_12 D_1 W_1 MN_1
200 Массив объектов Trendbar
[
{
"timestamp": 1700000000000,
"open": 112340.0,
"high": 112890.0,
"low": 111950.0,
"close": 112500.0,
"volume": 4521
}
]
Trendbar
| Поле | Тип | Описание |
|---|---|---|
timestamp | int64 | Время открытия бара (эпоха мс) |
open | double | Цена открытия (пипетки) |
high | double | Максимальная цена (пипетки) |
low | double | Минимальная цена (пипетки) |
close | double | Цена закрытия (пипетки) |
volume | int64 | Тиковый объем |
Ордера ¶
POST /v1/orders Разместить новый ордер
Размещает новый торговый ордер. Возвращает ExecutionResponse.
Параметры пути или запроса отсутствуют.
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
symbolId | int64 | Инструмент для торговли | |
orderType | string | MARKET, LIMIT, STOP, MARKET_RANGE, STOP_LIMIT | |
tradeSide | string | BUY или SELL | |
volume | int64 | Объем в центах | |
limitPrice | double | Лимитная цена – требуется для LIMIT, STOP_LIMIT | |
stopPrice | double | Цена срабатывания стопа – требуется для STOP, STOP_LIMIT | |
stopLoss | double | Цена стоп-лосса | |
takeProfit | double | Цена тейк-профита | |
comment | string | Произвольный комментарий (макс. 256 символов) | |
label | string | Метка бота (макс. 100 символов) | |
timeInForce | string | GOOD_TILL_CANCEL, GOOD_TILL_DATE, IMMEDIATE_OR_CANCEL | |
baseSlippagePrice | double | Базовая цена для проскальзывания – требуется для MARKET_RANGE | |
slippageInPoints | int32 | Макс. проскальзывание в пунктах | |
expirationTimestamp | int64 | Временная метка истечения (эпоха мс) – для GOOD_TILL_DATE |
{
"symbolId": 1,
"orderType": "MARKET",
"tradeSide": "BUY",
"volume": 10000000,
"stopLoss": 112000,
"takeProfit": 113000
}
200 ExecutionResponse – ордер принят или исполнен
400 INVALID_REQUEST или TRADING_BAD_VOLUME
422 NOT_ENOUGH_MONEY
409 MARKET_CLOSED
{
"orderId": 12345,
"positionId": 67890,
"executionType": "ORDER_FILLED",
"order": { "..." : "..." },
"position": { "..." : "..." },
"deal": { "..." : "..." }
}
GET /v1/orders Получить отложенные ордера
Возвращает все отложенные (неисполненные) ордера.
Параметры отсутствуют.
200 Массив объектов отложенных ордеров
PUT /v1/orders/{orderId} Изменить отложенный ордер
Изменяет существующий отложенный ордер. Возвращает ExecutionResponse.
| Имя | Расположение | Тип | Обязательное | Описание |
|---|---|---|---|---|
orderId | path | int64 | Ордер для изменения |
Любое подмножество следующих полей.
| Поле | Тип | Описание |
|---|---|---|
volume | int64 | Новый объем в центах |
limitPrice | double | Новая лимитная цена |
stopPrice | double | Новая стоп-цена |
stopLoss | double | Новая цена стоп-лосса |
takeProfit | double | Новая цена тейк-профита |
expirationTimestamp | int64 | Новая временная метка истечения (эпоха мс) |
200 ExecutionResponse с ORDER_REPLACED
404 Ордер не найден
DELETE /v1/orders/{orderId} Отменить отложенный ордер
Отменяет отложенный ордер. Возвращает ExecutionResponse.
| Имя | Расположение | Тип | Обязательное | Описание |
|---|---|---|---|---|
orderId | path | int64 | Ордер для отмены |
200 ExecutionResponse с ORDER_CANCELLED
404 Ордер не найден
GET /v1/orders/history Получить историю ордеров
Возвращает исторические ордера в пределах временного диапазона.
| Имя | Расположение | Тип | Обязательное | Описание |
|---|---|---|---|---|
fromTimestamp | query | string | Время начала (ISO-8601) | |
toTimestamp | query | string | Время окончания (ISO-8601) |
200 OrderListResponse
| Поле | Тип | Описание |
|---|---|---|
orders | Order[] | Массив исторических ордеров |
hasMore | boolean | Доступны ли дополнительные страницы |
Позиции ¶
GET /v1/positions Получить открытые позиции
Возвращает все открытые позиции и отложенные ордера.
Параметры отсутствуют.
200 Массив объектов Position
[
{
"positionId": 67890,
"symbolId": 1,
"tradeSide": "BUY",
"volume": 10000000,
"entryPrice": 112345.0,
"stopLoss": 112000.0,
"takeProfit": 113000.0,
"unrealizedPnl": 155.25,
"commission": -7.00,
"swap": -1.20
}
]
Позиция
| Поле | Тип | Описание |
|---|---|---|
positionId | int64 | ID позиции |
symbolId | int64 | ID инструмента |
tradeSide | string | BUY или SELL |
volume | int64 | Объем в центах |
entryPrice | double | Цена входа VWAP |
stopLoss | double | Цена стоп-лосса |
takeProfit | double | Цена тейк-профита |
unrealizedPnl | double | Плавающая прибыль/убыток |
commission | double | Взимаемая комиссия |
swap | double | Сумма свопа |
GET /v1/positions/{positionId} Получить детали позиции
Возвращает позицию со связанными ордерами и сделками.
| Имя | Расположение | Тип | Обязательное | Описание |
|---|---|---|---|---|
positionId | path | int64 | ID позиции |
200 PositionDetailResponse
| Поле | Тип | Описание |
|---|---|---|
position | Position | Объект позиции |
orders | Order[] | Связанные ордера |
deals | Deal[] | Связанные сделки |
PUT /v1/positions/{positionId} Изменить СЛ/ТП позиции
Обновляет стоп-лосс и/или тейк-профит для открытой позиции. Возвращает ExecutionResponse.
| Имя | Расположение | Тип | Обязательное | Описание |
|---|---|---|---|---|
positionId | path | int64 | ID позиции |
| Поле | Тип | Описание |
|---|---|---|
stopLoss | double | Новая цена стоп-лосса (null для удаления) |
takeProfit | double | Новая цена тейк-профита (null для удаления) |
trailingStopLoss | boolean | Включить скользящий стоп-лосс |
{
"stopLoss": 111500,
"takeProfit": 113500,
"trailingStopLoss": false
}
POST /v1/positions/{positionId}/close Закрыть позицию
Закрывает открытую позицию полностью или частично. Используйте значение меньше полного объема позиции для частичного закрытия. Возвращает ExecutionResponse.
| Имя | Расположение | Тип | Обязательное | Описание |
|---|---|---|---|---|
positionId | path | int64 | ID позиции |
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
volume | int64 | Объем для закрытия в центах |
{
"volume": 10000000
}
422 NOT_ENOUGH_MONEY – недостаточная маржа для частичного закрытия
Сделки ¶
GET /v1/deals Получить историю сделок
Возвращает исполненные сделки в пределах временного диапазона.
| Имя | Расположение | Тип | Обязательное | торговля | Описание |
|---|---|---|---|---|---|
fromTimestamp | query | string | – | Время начала (ISO-8601) | |
toTimestamp | query | string | – | Время окончания (ISO-8601) | |
maxRows | query | int32 | 50 | Максимальное количество возвращаемых сделок |
200 Массив объектов Deal
[
{
"dealId": 11111,
"orderId": 12345,
"positionId": 67890,
"symbolId": 1,
"tradeSide": "BUY",
"volume": 10000000,
"filledVolume": 10000000,
"executionPrice": 112345.0,
"executionTimestamp": 1700000000000,
"dealStatus": "FILLED",
"commission": -7.00
}
]
Сделка
| Поле | Тип | Описание |
|---|---|---|
dealId | int64 | ID сделки |
orderId | int64 | Ордер, инициировавший эту сделку |
positionId | int64 | ID позиции |
symbolId | int64 | ID инструмента |
tradeSide | string | BUY или SELL |
volume | int64 | Запрошенный объем в центах |
filledVolume | int64 | Исполненный объем в центах |
executionPrice | double | Цена исполнения |
executionTimestamp | int64 | Время исполнения (эпоха мс) |
dealStatus | string | Статус – см. значения ниже |
commission | double | Взимаемая комиссия |
Значения dealStatus
| Значение | Значение |
|---|---|
FILLED | Ордер полностью исполнен |
PARTIALLY_FILLED | Ордер частично исполнен |
REJECTED | Отклонен торговым сервером |
INTERNALLY_REJECTED | Отклонен внутренне до достижения сервера |
ERROR | Произошла ошибка во время исполнения |
MISSED | Ордер пропущен (напр., гэп на рынке) |
Схемы { #execution-response-schema } ¶
ExecutionResponse ¶
Все операции размещения, изменения и отмены ордеров возвращают этот объект.
| Поле | Тип | Описание |
|---|---|---|
orderId | int64 | ID затронутого ордера |
positionId | int64 | ID затронутой позиции |
executionType | string | Тип результата – см. значения ниже |
order | Order | Детали ордера (если применимо) |
position | Position | Детали позиции (если применимо) |
deal | Deal | Детали сделки (если применимо) |
Значения executionType
| Значение | Значение |
|---|---|
ORDER_ACCEPTED | Отложенный ордер принят |
ORDER_FILLED | Ордер полностью исполнен |
ORDER_REPLACED | Ордер изменен |
ORDER_CANCELLED | Ордер отменен |
ORDER_EXPIRED | Ордер истек |
ORDER_REJECTED | Ордер отклонен |
ORDER_CANCEL_REJECTED | Запрос на отмену отклонен |
ORDER_PARTIAL_FILL | Ордер частично исполнен |
SWAP | Применен своп позиции |
DEPOSIT | Пополнение счета |
WITHDRAW | Снятие средств со счета |
BONUS_DEPOSIT_WITHDRAW | Пополнение или снятие бонуса |
Ограничения частоты запросов ¶
Шлюз применяет ограничения частоты запросов на нескольких уровнях.
| Уровень | Описание |
|---|---|
| По IP | Ограничивает общее количество запросов с одного IP-адреса |
| По пользователю | Ограничивает общее количество запросов по всем счетам для одного токена |
| По счету | Ограничивает запросы, направленные на один торговый счет |
Превышен лимит частоты запросов
Когда лимит частоты запросов превышен, API возвращает 429 Too Many Requests с заголовком Retry-After.
Обработка ошибок ¶
Когда запрос не выполняется, API возвращает ответ об ошибке в формате JSON.
{
"error": {
"code": "NOT_ENOUGH_MONEY",
"message": "Insufficient free margin for this order",
"httpStatus": 422,
"retryAfter": null
}
}
Коды ошибок ¶
| Код | HTTP | Описание |
|---|---|---|
INVALID_REQUEST | 400 | Недопустимые или отсутствующие параметры запроса |
UNAUTHORIZED | 401 | Недопустимый, истекший или отсутствующий токен |
TRADING_BAD_VOLUME | 400 | Объем недопустим (ниже минимума или превышает позицию) |
NOT_ENOUGH_MONEY | 422 | Недостаточная свободная маржа |
SYMBOL_NOT_FOUND | 404 | ID инструмента не существует |
MARKET_CLOSED | 409 | Рынок для инструмента в настоящее время закрыт |
MAINTENANCE | 503 | Торговый сервер находится в режиме обслуживания |
TIMEOUT | 504 | Торговый сервер не ответил вовремя |
GATEWAY_RATE_LIMIT | 429 | Превышен лимит частоты запросов – см. заголовок Retry-After |
Обработка лимита частоты запросов
Когда вы получаете ответ 429, заголовок Retry-After и поле retryAfter указывают, сколько секунд вам нужно подождать перед отправкой следующего запроса.