/positions/{positionId}/historyЧто произошло с одной позицией, сначала самые новые: увеличения, частичные и полные закрытия, ликвидация, принудительное закрытие, изменения маржи.
- Платежи по финансированию исключены из этого потока.
- Принудительное закрытие несёт за собой рыночное событие, в котором и находится причина этого закрытия.
https://api.upscale.tradeПараметры
positionIdstring · uuidобязательноИдентификатор позиции. Его аккаунт должен принадлежать вызывающему.
00000000-0000-4000-8000-000000000000Примеры
curl --request GET 'https://api.upscale.trade/positions/{positionId}/history' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY'const response = await fetch("https://api.upscale.trade/positions/{positionId}/history", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": "Bearer YOUR_API_KEY"
},
});
console.log(response.status, await response.text());import requests
response = requests.request(
"GET",
"https://api.upscale.trade/positions/{positionId}/history",
headers={"Accept":"application/json","Authorization":"Bearer YOUR_API_KEY"},
timeout=30,
)
print(response.status_code, response.text)Ответы
Неавторизовано
Аккаунт принадлежит другому пользователю (account_access_denied), или запрос аутентифицирован с помощью API-ключа, тогда как api_trading отключён на аккаунте (api_trading_not_enabled).
Нет позиции с этим идентификатором.
Превышен лимит частоты запросов API-ключа (api_key_rate_limit_exceeded). Retry-After указывает, когда вернуться; тело содержит бакет (read / write), окно, которое сработало, его лимит и retryAt.
defaultОтветapplication/json
Массив PositionEventResponse
idxstring[]обязательноИдентификатор позиции. То же значение, что и txId.
Элементы массива · string
string
Посмотреть пример
[
"string"
]txIdstring[]обязательноИдентификатор позиции. Сохранён для обратной совместимости, всегда равен idx.
Элементы массива · string
string
Посмотреть пример
[
"string"
]versionnumberобязательноРевизия позиции: увеличивается при каждом событии, применённом к ней.
0openedAtstring · date-timeобязательноКогда позиция была открыта.
2026-05-01T12:30:00.000ZlastUpdatedAtstring · date-timeобязательноКогда к позиции было применено последнее событие.
2026-05-01T12:30:00.000ZclosedAtstring · date-time · nullableобязательноКогда позиция была закрыта; null, пока она всё ещё открыта.
2026-05-01T12:30:00.000Ztypestring · enumобязательноНаправление позиции. То же значение, что и direction.
"long" "short"longstatusstring · enumобязательноЯвляется ли позиция всё ещё открытой, закрытой трейдером или ликвидированной.
"opened" "closed" "liquidated"openedmarketstring · uuidобязательноРынок, на котором удерживается позиция.
- pattern
- ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
00000000-0000-4000-8000-000000000000traderstring · uuidобязательноСчёт трейдера, которому принадлежит позиция.
- pattern
- ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
00000000-0000-4000-8000-000000000000sizestring · int32обязательноРазмер позиции в единицах базового актива, fp9 в сыром виде.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000notionalstring · int32обязательноОткрытый номинал позиции в валюте котировки, fp9 в сыром виде — размер по цене входа.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000fractionstring · int32обязательноВсегда 0. Сохранено для обратной совместимости.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000marginstring · int32обязательноМаржа, в настоящее время обеспечивающая позицию, fp9 в сыром виде. Изменяется вместе с pnl, финансированием и ручными изменениями маржи.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000pnlstring · int32 · nullableобязательноРеализованный pnl, накопленный по каждому событию позиции, fp9 в сыром виде.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000fundingstring · int32 · nullableобязательноФинансирование, уплаченное (отрицательное) или полученное (положительное) за всё время существования позиции, fp9 в необработанном виде.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000rolloverFeestring · int32обязательноВсегда 0. Сохранено для обратной совместимости.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000settlementOraclePricestring · int32обязательноВсегда 1000000000 (1.0). Сохранено для обратной совместимости.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000feestring · int32обязательноТорговые комиссии, взимаемые за всё время существования позиции, fp9 в необработанном виде.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000feeRatestring · int32обязательноСтавка комиссии, применяемая к позиции, fp9 в виде необработанной дроби (1000000 = 0.1%).
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000exchangedQuotestring · int32обязательноСумма в котируемой валюте, обмененная в результате последнего события, fp9 в необработанном виде.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000exchangedBasestring · int32обязательноСумма в базовой валюте, обмененная в результате последнего события, fp9 в необработанном виде.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000directionstring · enumобязательноНаправление позиции.
"long" "short"longeventNamestring · enumобязательноТип последнего события, применённого к позиции.
"addMargin" "removeMargin" "closePosition" "increasePosition" "liquidate" "forceClose" "payFunding"addMarginpnlInEventstring · int32обязательноРеализованный pnl последнего события, fp9 в сыром виде.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000rawPnlInEventstring · int32обязательноРеализованный pnl последнего события до 60-секундной корректировки, fp9 в сыром виде. Отличается от pnlInEvent только когда корректировка сработала.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000profitAdjustmentAppliedbooleanобязательноОграничила ли 60-секундная корректировка прибыль последнего события — в течение минуты после открытия или увеличения позиции pnl не может вырасти выше того, каким он был в тот момент.
trueholdingTimeMsstring[]обязательноКак долго позиция удерживалась до самого последнего закрытия, в миллисекундах, считая от открытия или последнего увеличения. Null для событий, которые не являются закрытиями.
Элементы массива · string
string
Посмотреть пример
[
"string"
]feeInEventstring · int32обязательноКомиссия, взимаемая по самому последнему событию, fp9 в сыром виде.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000fundingInEventstring · int32обязательноФандинг, урегулированный самым последним событием, fp9 в сыром виде.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000rolloverFeeInEventstring · int32обязательноВсегда 0. Сохранено для обратной совместимости.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000executionFeeRatestring · int32обязательноВсегда 0. Сохранено для обратной совместимости.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000executionFeeInEventstring · int32обязательноВсегда 0. Сохранено для обратной совместимости.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000executionFeestring · int32обязательноВсегда 0. Сохранено для обратной совместимости.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000timestampstring · date-timeобязательноВременная метка самого последнего события. То же значение, что и lastUpdatedAt.
2026-05-01T12:30:00.000ZisOnchainbooleanобязательноВсегда true. Сохранено для обратной совместимости.
trueroestring · int32обязательноРентабельность капитала позиции — реализованный pnl относительно внесённой маржи, fp9 в виде необработанной дроби.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000scalpingCoefficientstring · int32обязательноДинамический множитель спреда, применённый к позиции, fp9 в необработанном виде (1000000000 = 1.0). Выше 1, когда сделка попала в окно рыночного скальпинга.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000closeReasonstring[]обязательноПочему платформа закрыла позицию (например, weekly_session_risk_close). Null для позиций, закрытых трейдером, и для открытых.
Элементы массива · string
string
Посмотреть пример
[
"string"
]orderobject · nullableобязательноОрдер, создавший это событие; null для событий, которые платформа инициировала самостоятельно, таких как финансирование или принудительное закрытие.
Объект · 35 поля
idstring · uuidобязательноИдентификатор ордера.
- pattern
- ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
00000000-0000-4000-8000-000000000000txIdstringобязательноИдентификатор ордера. Сохранён для обратной совместимости, всегда равен id.
stringtraderstring · uuidобязательноАккаунт трейдера, которому принадлежит ордер.
- pattern
- ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
00000000-0000-4000-8000-000000000000marketstring · uuidобязательноРынок, на котором размещён ордер.
- pattern
- ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
00000000-0000-4000-8000-000000000000statusstring · enumобязательноСостояние жизненного цикла: active, пока он ожидает, executed после исполнения, canceled при отмене трейдером или платформой, canceled_by_update при замене в результате редактирования, canceled_by_position когда позиция, к которой он был привязан, исчезла, canceled_by_error при неудачном исполнении — см. errorCode.
"active" "canceled" "canceled_by_update" "canceled_by_error" "canceled_by_position" "executed"activetypestring · enumобязательноТип ордера. liquidation обозначает ордер, который движок выставил сам.
"market" "limit" "stop" "trailing_stop" "take" "stop_limit" "stop_market" "liquidation"marketdirectionstring · enumобязательноНаправление ордера.
"long" "short"longtriggerPricestring · int32обязательноЦена, при которой срабатывает ордер, fp9 в необработанном виде. 0, когда ордер не имеет триггера.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000requestedTriggerPricestring · int32 · nullableобязательноЦена триггера, как запрошено, до того как движок вытолкнул её до минимального стоп-расстояния, fp9 в исходном виде. Null, когда запрошенная цена была оставлена как есть.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000stopPricestring · int32обязательноЦена триггера ордера stop_market / stop_limit, fp9 в исходном виде; 0 для любого другого типа.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000limitPricestring · int32обязательноЦена, по которой ордер размещается при срабатывании, fp9 в исходном виде: цена стоп-лимит, с возвратом к цене триггера.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000stopTriggerPricestring · int32обязательноСтоп-лосс, привязанный к ордеру, fp9 в исходном виде. 0, если он не привязан.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000takeTriggerPricestring · int32обязательноТейк-профит, привязанный к ордеру, fp9 в исходном виде. 0, если он не привязан.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000trailingStopActivationPricestring · int32обязательноЦена, при которой трейлинг-стоп начинает следовать, fp9 в сыром виде. 0, когда он следует с момента создания.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000trailingStopOffsetstring · int32обязательноДистанция трейлинга как абсолютная сумма в котируемой валюте, fp9 в сыром виде. 0, когда дистанция задана в процентах.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000trailingStopOffsetPercentstring · int32обязательноДистанция трейлинга как доля цены, fp9 в сыром виде. 0, когда дистанция абсолютная.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000leveragestring · int32 · nullableобязательноКредитное плечо ордера, fp9 в сыром виде. Null для ордеров на закрытие, которые наследуют кредитное плечо позиции.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000indexstringобязательноИдентификатор ордера. Сохранён для обратной совместимости, всегда равен id.
stringpositionIdstring · nullableобязательноПозиция, к которой привязан ордер на закрытие. Null для ордеров, которые открывают или увеличивают позицию.
stringparentOrderIdstring · nullableобязательноОрдер, из которого был порождён этот: стоп или тейк, созданный из stopTriggerPrice / takeTriggerPrice, или лимитный ордер, в который превратился stop_limit. Null, когда ордер был отправлен напрямую.
stringexpirationstring · date-time · nullableобязательноВсегда null. Сохранено для обратной совместимости — ордера не истекают сами по себе.
2026-05-01T12:30:00.000Zamountstring · int32обязательноРазмер ордера, fp9 в сыром виде, в единице, которую использует его класс: для ордера на увеличение — сумма в котируемой валюте — резерв, пока он ожидает, и то, что он фактически потратил после исполнения; для ордера на закрытие (stop, take, trailing_stop) — размер базового актива, который он закрывает, как было запрошено при создании.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000indexPricestring · int32 · nullableобязательноЦена индекса, по которой был исполнен ордер, fp9 в сыром виде. Null, пока ордер не исполнен.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000settlementOraclePricestring · int32обязательноВсегда 1000000000 (1.0). Сохранено для обратной совместимости.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000createdAtstring · date-timeобязательноКогда ордер был принят.
2026-05-01T12:30:00.000Zerrorstring · nullableобязательноВсегда null. Сохранён для обратной совместимости — используйте errorCode.
stringrealizedPnlstring · int32 · nullableобязательноPnl, реализованный этим ордером, fp9 в сыром виде. Устанавливается только для исполненного ордера на закрытие; null, пока ордер в ожидании, и для ордеров, которые открывают или увеличивают позицию.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000rawRealizedPnlstring · int32 · nullableобязательноРеализованный pnl до 60-секундной корректировки, fp9 в сыром виде. Отличается от realizedPnl только тогда, когда корректировка сработала.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000profitAdjustmentAppliedbooleanобязательноОграничила ли 60-секундная корректировка прибыль этого ордера — в течение минуты после открытия или увеличения позиции pnl позиции не может вырасти выше значения, которое было в тот момент.
trueexecutedAfterPausebooleanобязательноБыл ли ордер исполнен после рыночной паузы. Не задаётся текущим движком — всегда false.
truesizeModestring · enumобязательноКак был выражен размер при создании: quote задаёт размер ордера по amount, base задаёт его по baseSize.
"quote" "base"quotebaseSizestring · int32 · nullableобязательноРазмер ордера в единицах базового актива, fp9 в сыром виде. Null для ордеров с размером quote.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000reservedAmountstring · int32 · nullableобязательноСумма в котируемой валюте, зарезервированная при создании ордера с sizeMode=base, fp9 в сыром виде. Остаётся равной исходному резерву после исполнения, тогда как amount перезаписывается на потраченную сумму. Null для ордеров с размером quote, где amount — это резерв.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000errorCodestring · nullableобязательноПочему исполнение не удалось, задаётся вместе со статусом canceled_by_error — например, insufficient_reserve_at_execution, order_below_min_notional, order_exceeds_market_depth или slippage_tolerance. В остальных случаях Null.
stringreasonstring · enum · nullableобязательноПочему платформа сама отменила ордер, например force_close или weekly_session_risk_close. Null для отмен, инициированных трейдером.
"force_close" "stop_accounts_fail" "stop_accounts_freeze" "stop_accounts_promote" "stop_accounts_manual" "weekly_session_risk_close" nullforce_closeПосмотреть пример
{
"id": "00000000-0000-4000-8000-000000000000",
"txId": "string",
"trader": "00000000-0000-4000-8000-000000000000",
"market": "00000000-0000-4000-8000-000000000000",
"status": "active",
"type": "market",
"direction": "long",
"triggerPrice": "1000000000",
"requestedTriggerPrice": "1000000000",
"stopPrice": "1000000000",
"limitPrice": "1000000000",
"stopTriggerPrice": "1000000000",
"takeTriggerPrice": "1000000000",
"trailingStopActivationPrice": "1000000000",
"trailingStopOffset": "1000000000",
"trailingStopOffsetPercent": "1000000000",
"leverage": "1000000000",
"index": "string",
"positionId": "string",
"parentOrderId": "string",
"expiration": "2026-05-01T12:30:00.000Z",
"amount": "1000000000",
"indexPrice": "1000000000",
"settlementOraclePrice": "1000000000",
"createdAt": "2026-05-01T12:30:00.000Z",
"error": "string",
"realizedPnl": "1000000000",
"rawRealizedPnl": "1000000000",
"profitAdjustmentApplied": true,
"executedAfterPause": true,
"sizeMode": "quote",
"baseSize": "1000000000",
"reservedAmount": "1000000000",
"errorCode": "string",
"reason": "force_close"
}[
{
"idx": [
"string"
],
"txId": [
"string"
],
"version": 0,
"openedAt": "2026-05-01T12:30:00.000Z",
"lastUpdatedAt": "2026-05-01T12:30:00.000Z",
"closedAt": "2026-05-01T12:30:00.000Z",
"type": "long",
"status": "opened",
"market": "00000000-0000-4000-8000-000000000000",
"trader": "00000000-0000-4000-8000-000000000000",
"size": "1000000000",
"notional": "1000000000",
"fraction": "1000000000",
"margin": "1000000000",
"pnl": "1000000000",
"funding": "1000000000",
"rolloverFee": "1000000000",
"settlementOraclePrice": "1000000000",
"fee": "1000000000",
"feeRate": "1000000000",
"exchangedQuote": "1000000000",
"exchangedBase": "1000000000",
"direction": "long",
"eventName": "addMargin",
"pnlInEvent": "1000000000",
"rawPnlInEvent": "1000000000",
"profitAdjustmentApplied": true,
"holdingTimeMs": [
"string"
],
"feeInEvent": "1000000000",
"fundingInEvent": "1000000000",
"rolloverFeeInEvent": "1000000000",
"executionFeeRate": "1000000000",
"executionFeeInEvent": "1000000000",
"executionFee": "1000000000",
"timestamp": "2026-05-01T12:30:00.000Z",
"isOnchain": true,
"roe": "1000000000",
"scalpingCoefficient": "1000000000",
"closeReason": [
"string"
],
"order": {
"id": "00000000-0000-4000-8000-000000000000",
"txId": "string",
"trader": "00000000-0000-4000-8000-000000000000",
"market": "00000000-0000-4000-8000-000000000000",
"status": "active",
"type": "market",
"direction": "long",
"triggerPrice": "1000000000",
"requestedTriggerPrice": "1000000000",
"stopPrice": "1000000000",
"limitPrice": "1000000000",
"stopTriggerPrice": "1000000000",
"takeTriggerPrice": "1000000000",
"trailingStopActivationPrice": "1000000000",
"trailingStopOffset": "1000000000",
"trailingStopOffsetPercent": "1000000000",
"leverage": "1000000000",
"index": "string",
"positionId": "string",
"parentOrderId": "string",
"expiration": "2026-05-01T12:30:00.000Z",
"amount": "1000000000",
"indexPrice": "1000000000",
"settlementOraclePrice": "1000000000",
"createdAt": "2026-05-01T12:30:00.000Z",
"error": "string",
"realizedPnl": "1000000000",
"rawRealizedPnl": "1000000000",
"profitAdjustmentApplied": true,
"executedAfterPause": true,
"sizeMode": "quote",
"baseSize": "1000000000",
"reservedAmount": "1000000000",
"errorCode": "string",
"reason": "force_close"
}
}
]