Эта страница переведена автоматически. Оригинал на английском языке является каноническим. Читать на английском →
Перейти к основному содержимому

Расчёт и экспирация

На этой странице описаны опционы основной биржи Hypercall Exchange. Это европейские опционы с расчётом денежными средствами в USDC. При экспирации позиции автоматически рассчитываются по расчётной цене базового актива, а расчётная сумма зачисляется на ваш счёт или списывается с него.

Время экспирации​

Базовые активыВремя экспирации
BTC, ETH08:00 UTC
Акции и индексы (SPCX, SP500, BOT, MU, NVDA, META, MSFT, AAPL, SNDK, BABA)20:00 UTC

20:00 UTC соответствует 16:00 по нью-йоркскому времени в период действия летнего времени в США. Время экспирации зафиксировано в UTC и при переходе на летнее время не сдвигается.

При экспирации:

  • Новые заявки отклоняются
  • Открытые заявки отменяются
  • Позиции переходят в процесс расчёта

Движок проверяет наличие инструментов с истёкшим сроком раз в минуту.

Жизненный цикл инструмента​

Инструмент последовательно проходит три состояния:

СостояниеОписаниеТорговля
ActiveОбычная торговляРазрешена
Expired Pending PriceОжидание расчётной ценыЗапрещена
SettledРасчёт завершён, позиции закрытыН/П

Переходы между состояниями​

  1. Active в Expired Pending Price: наступило время экспирации контракта
  2. Expired Pending Price в Settled: расчётная цена доступна, и все позиции рассчитаны

Как только инструмент переходит в состояние Expired Pending Price, все открытые заявки отменяются, а новые отклоняются с ошибкой "Instrument has expired".

Расчётная цена​

Расчётная цена представляет собой устойчивое 30-минутное среднее цены оракула Hyperliquid для базового актива за 30 минут, заканчивающиеся в момент экспирации.

ПараметрЗначение
Источник ценыЦена оракула Hyperliquid (oraclePx) для перпа на базовый актив. Для BTC и ETH используются основные перпы Hyperliquid, для акций и индексов используются перпы HIP-3 xyz, например xyz:NVDA.
Окно30 минут, заканчивается во время экспирации
ВыборкаКаждое отдельное обновление оракула внутри окна, по его временной метке Hyperliquid
Минимум наблюдений500
УсреднениеУсечённая медиана средних

Как вычисляется среднее​

  1. Сбор. Hypercall фиксирует каждую новую цену оракула, полученную в интервале от экспирации минус 30 минут до экспирации. Повторные чтения одного и того же обновления учитываются один раз, а всё, что опубликовано после экспирации, не используется.
  2. Усечение. Наблюдения сортируются по цене, и отбрасываются верхние 5% и нижние 5%.
  3. Группировка. Оставшиеся цены делятся примерно на √n групп, и по каждой группе считается среднее.
  4. Медиана этих групповых средних. Это и есть расчётная цена.

Благодаря усечению и медиане средних несколько выбросов перед экспирацией практически не сдвигают цену, при этом она отражает всё окно целиком.

Если наблюдений недостаточно​

Окно, в котором меньше 500 наблюдений, никогда не используется. Если собственная запись Hypercall неполная (например, после перезапуска внутри окна), окно восстанавливается из архивной истории той же цены оракула Hyperliquid с тем же минимумом в 500 наблюдений и тем же способом усреднения. Если ни в одном источнике наблюдений недостаточно, инструмент остаётся в состоянии Expired Pending Price, и расчёт откладывается. Hypercall не проводит расчёт по неполному окну или по резервной цене.

Это не то же самое, что оценка позиций во время сбоя оракула. Проверки маржи и ликвидация продолжают оценивать позиции по последней зафиксированной спотовой цене, а заявки, увеличивающие риск, отклоняются, если этой цене больше 30 секунд. См. Режимы отказа. Последняя зафиксированная цена никогда не используется как расчётная.

Расчёт суммы​

Расчётная сумма равна внутренней стоимости опциона по расчётной цене:

Колл-опционы:

Расчётная сумма=max⁡(0,S−K)×Q\text{Расчётная сумма} = \max(0, S - K) \times Q

Пут-опционы:

Расчётная сумма=max⁡(0,K−S)×Q\text{Расчётная сумма} = \max(0, K - S) \times Q

Где:

  • SS = расчётная цена
  • KK = цена страйка
  • QQ = размер позиции (со знаком: положительный для лонга, отрицательный для шорта)

Опционы вне денег (OTM) рассчитываются по нулю и удаляются. Премия выплачивается деньгами в момент сделки, поэтому при расчёте переходит только внутренняя стоимость. Это относится как к стандартной, так и к портфельной марже.

Примеры​

Длинный колл (ITM):

  • Позиция: лонг 2 BTC-100000-C
  • Расчётная цена: $105,000
  • Внутренняя стоимость: max(0, 105000 - 100000) = $5,000
  • Расчётная сумма: 5,000×2=∗∗+5,000 × 2 = **+10,000** (зачисляется)

Короткий колл (ITM):

  • Позиция: шорт 2 BTC-100000-C
  • Расчётная цена: $105,000
  • Расчётная сумма: 5,000×−2=∗∗−5,000 × -2 = **-10,000** (списывается)

Длинный пут (OTM):

  • Позиция: лонг 1 BTC-100000-P
  • Расчётная цена: $105,000
  • Внутренняя стоимость: max(0, 100000 - 105000) = $0
  • Расчётная сумма: $0 (истекает без стоимости)

Процесс расчёта​

При расчёте:

  1. Получение цены: берётся финальная 30-минутная расчётная цена
  2. Вычисление суммы: для каждой позиции рассчитывается внутренняя стоимость
  3. Движение средств: все опционы на один базовый актив с одной экспирацией рассчитываются одним пакетом, с неттингом по каждому счёту
  4. Удаление позиции: позиция закрывается и удаляется из портфеля
  5. Отправка события: в WebSocket-канал portfolio отправляется сообщение PositionExpired

Расчёт выполняется с гарантией идемпотентности. Повторное воспроизведение или перезапуск не могут привести к двойному расчёту.

Кто платит, в зависимости от режима маржи​

  • Стандартная маржа: счёт, который должен по расчёту, платит полную сумму из своих денежных средств в Hypercall.
  • Портфельная маржа: счёт, который должен по расчёту, платит сначала из своих денежных средств в Hypercall, затем за счёт займа из пула кредитования PM. Всё, что пул не может профинансировать, становится отложенным обязательством, которое нужно погасить в течение периода урегулирования. См. Финансирование PM.

Если плательщик с портфельной маржой в пакете не смог заплатить полностью, счета-получатели в этом пакете делят собранные средства пропорционально, а остаток фиксируется как отложенное требование, которое выплачивается с процентами по мере погашения долга плательщиком. Инструмент рассчитывается в любом случае: неоплаченное обязательство никогда не останавливает расчёт.

События WebSocket​

PositionExpired​

Отправляется в канал portfolio при расчёте позиции:

{
"type": "PositionExpired",
"wallet_address": "0x...",
"symbol": "BTC-20250131-100000-C",
"position_size": "2",
"settlement_price": "5000",
"settlement_value": "10000",
"settlement_entry_price": "3200",
"cost_basis": "6400",
"net_pnl": "3600",
"timestamp": 1738310400000
}
ПолеОписание
position_sizeРазмер позиции со знаком (положительный = лонг, отрицательный = шорт)
settlement_priceВнутренняя стоимость на один контракт
settlement_valueОбщая сумма денежного расчёта
settlement_entry_priceВаша цена входа на один контракт
cost_basisСтоимость приобретения позиции на момент расчёта
net_pnlP&L по расчёту за вычетом стоимости приобретения, без учёта комиссий

Экспирация рынка​

Отправляется в канал market_updates при экспирации инструмента:

{
"type": "MarketUpdate",
"action": "Expired",
"symbol": "BTC-20250131-100000-C",
"strike": "100000",
"is_call": true,
"underlying": "BTC",
"expiry": 1738310400,
"timestamp": 1738310400000
}

Эндпоинты API​

Список инструментов по состоянию​

GET /instruments?currency=BTC&status=EXPIRED_PENDING_PRICE

По умолчанию status равен ACTIVE. Можно передать EXPIRED_PENDING_PRICE, SETTLED, список через запятую или all.

Получение выплат по расчёту​

GET /settlement-payouts?wallet=0x...

Возвращает записи о расчётах по вашему счёту. Необязательные параметры: symbol, ledger_applied, limit (по умолчанию 50, максимум 100) и offset.

Ответ:

{
"success": true,
"data": [
{
"id": 1,
"wallet": "0x...",
"symbol": "BTC-20250131-100000-C",
"expiry_ts": 1738310400,
"position_size": "2",
"settlement_price": "5000",
"settlement_value": "10000",
"settlement_entry_price": "3200",
"cost_basis": "6400",
"net_pnl": "3600",
"ledger_applied": true,
"is_seen": false,
"created_at": 1738310460000
}
],
"pagination": { "limit": 50, "offset": 0, "count": 1 },
"error": null
}

Обработка сбоев​

Расчётная цена недоступна​

Если расчётную цену не удаётся зафиксировать при экспирации:

  • Инструмент остаётся в состоянии Expired Pending Price
  • Торговля уже заблокирована
  • Движок повторяет попытку при каждой проверке экспирации, раз в минуту
  • Средства перемещаются только после появления расчётной цены, удовлетворяющей правилу 500 наблюдений

Перезапуск системы​

Состояние расчёта сохраняется надёжно. При перезапуске системы:

  • Инструменты с истёкшим сроком подхватываются при старте
  • Расчёт продолжается автоматически
  • Гарантии идемпотентности исключают двойной расчёт

Параметры​

ПараметрЗначениеОписание
Интервал проверки экспирации60 секундКак часто движок проверяет экспирации и повторяет отложенные расчёты
Окно расчёта30 минутЗаканчивается во время экспирации
Минимум наблюдений500При меньшем количестве окно не используется
Усечение5% с каждого краяОтбрасываются до усреднения

Рекомендации​

  1. Следите за экспирациями: отслеживайте даты экспирации своих позиций через эндпоинт портфеля
  2. Планируйте заранее: закрывайте позиции до экспирации, если не хотите участвовать в расчёте
  3. Следите за последними 30 минутами: расчётная цена определяется оракулом за всё это окно, а не ценой в момент экспирации
  4. Подпишитесь на WebSocket: получайте события PositionExpired в реальном времени для мгновенного уведомления
  5. Держите запас маржи: сохраняйте достаточно денежных средств или маржи на случай расчёта по коротким позициям в деньгах (ITM)

См. также: