Перейти к основному содержимому

Позиции и PnL

Когда вы покупаете или продаете токены на Intotes, платформа отслеживает ваши активы как позиции. Каждая позиция представляет вашу чистую экспозицию к конкретному исходу на рынке.

Структура позиции

Запись позиции содержит следующие ключевые поля:

ПолеОписание
market_idРынок, к которому принадлежит позиция.
token_type"YES" или "NO" -- какой токен вы держите.
amountКоличество удерживаемых акций, в копейках. Всегда положительное значение.
avg_priceСредневзвешенная цена приобретения позиции (0--10000).

Длинные и короткие позиции

  • Длинная позиция = владение токенами YES. Вы получаете прибыль, если событие разрешается как YES и цена растет.
  • Короткая позиция = владение токенами NO. Вы получаете прибыль, если событие разрешается как NO (эквивалентно, если цена YES снижается).

В модели данных положительное количество токенов указывает на длинную позицию в этом типе токена. Если вы держите токены YES, вы в длинной позиции по YES; если держите токены NO, вы в длинной позиции по NO (что фактически является короткой позицией по исходу события).

Отслеживание средней цены

avg_price обновляется с каждой сделкой, добавляющей к позиции. Она представляет средневзвешенную стоимость всех акций в позиции:

avg_price = total_cost / total_shares

Когда вы частично закрываете позицию (продаете часть акций), avg_price остается неизменной -- она всегда отражает вашу оригинальную стоимость для оставшихся акций.

Нереализованный PnL

Нереализованный PnL (прибыль и убыток) представляет выигрыш или потерю, которые вы бы реализовали, закрыв позицию по текущей рыночной цене:

unrealized_pnl = (current_price - avg_price) * amount    // для YES (long)
unrealized_pnl = (avg_price - current_price) * amount // для NO (short по YES)

Это значение колеблется по мере изменения рыночных цен и отображается в реальном времени в представлениях позиций.

Позиция с деталями

API возвращает обогащенные объекты позиций (PositionWithDetails), включающие контекстную информацию помимо необработанных числовых данных:

ПолеОписание
event_nameНазвание родительского события.
pool_nameНазвание пула, содержащего рынок.
market_nameНазвание конкретного рынка.
current_priceПоследняя рыночная цена для типа токена.
unrealized_pnlРассчитанный нереализованный PnL.

Это устраняет необходимость дополнительных API-вызовов для разрешения названий событий и рынков при отображении позиций в интерфейсе.

Закрытые позиции

Когда позиция полностью закрыта (вручную или через расчет), она становится закрытой позицией с дополнительными данными расчета:

ПолеОписание
pnlРеализованная прибыль или убыток в копейках.
won_sideИсход, который победил при разрешении события ("YES" или "NO").
closed_atВременная метка закрытия позиции.

Закрытые позиции доступны как объекты ClosedPositionWithDetails, включающие все контекстные поля из представления открытой позиции плюс информацию о расчете.

Получение позиций

Открытые позиции

Открытые позиции возвращаются как часть эндпоинтов портфеля пользователя. Каждая открытая позиция включает текущую рыночную цену и нереализованный PnL.

Закрытые позиции

GET /api/v1/market/positions/completed
Authorization: Bearer <token>

Возвращает список всех закрытых позиций с полными деталями, включая реализованный PnL, выигрышную сторону и контекст события/рынка.

Расчет

Когда событие разрешается, все открытые позиции на его рынках рассчитываются автоматически:

  • Выигрышная сторона (например, токены YES при разрешении события как YES): Каждая акция выплачивает 10000 копеек (100%).
  • Проигравшая сторона (например, токены YES при разрешении события как NO): Каждая акция выплачивает 0 копеек.

Ваш реализованный PnL от расчета:

pnl = (payout_per_share - avg_price) * amount

Для победителей: pnl = (10000 - avg_price) * amount Для проигравших: pnl = (0 - avg_price) * amount

См. также