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

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

Опционы на Hypercall — европейского стиля с расчётом наличными. В момент экспирации позиции автоматически рассчитываются по референсной цене базового актива, а сумма расчёта зачисляется на ваш счёт или списывается с него.

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

В основной сети контракты SpaceX (SPCX) экспирируются в 16:00 ET в дату экспирации.

В тестнете экспирация в настоящий момент происходит в 08:00 UTC в дату экспирации.

В момент экспирации:

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

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

Инструменты проходят через три состояния:

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

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

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

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

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

Расчётная цена — это 30-минутный TWAP (средневзвешенная по времени цена) индексной цены Hyperliquid Oracle для базового актива.

ПараметрЗначение
Источник ценыHyperliquid Oracle (индексная цена)
Окно TWAP30 минут
Конец окнаВремя экспирации контракта

Оракул начинает выборку за 30 минут до экспирации и вычисляет TWAP в момент экспирации.

Для расчёта требуется финализированный TWAP. Если финализированная цена недоступна в момент экспирации, инструмент остаётся в состоянии Expired Pending Price, и попытки повторяются автоматически. Торговля в этом состоянии уже отключена, но зачисления и списания денежных средств проводятся только после появления финализированной цены оракула.

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

Сумма расчёта вычисляется как внутренняя стоимость опциона на момент экспирации:

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

Сумма расчёта=max(0,SK)×Q\text{Сумма расчёта} = \max(0, S - K) \times Q

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

Сумма расчёта=max(0,KS)×Q\text{Сумма расчёта} = \max(0, K - S) \times Q

Где:

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

Примеры

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

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

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

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

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

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

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

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

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

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

События WebSocket

PositionExpired

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

{
"type": "PositionExpired",
"wallet_address": "0x...",
"symbol": "BTC-20250131-100000-C",
"position_size": 2.0,
"settlement_price": 5000.0,
"settlement_value": 10000.0,
"timestamp": 1738310400000
}
ПолеОписание
position_sizeРазмер позиции со знаком (положительный = лонг, отрицательный = шорт)
settlement_priceВнутренняя стоимость на контракт
settlement_valueОбщая сумма денежного расчёта

MarketExpired

Отправляется при переходе инструмента в состояние Expired Pending Price:

{
"type": "MarketUpdate",
"symbol": "BTC-20250131-100000-C",
"status": "MARKET_EXPIRED",
"timestamp": 1738310400000
}

Эндпоинты API

Получить статус инструмента

GET /instruments/{symbol}

Возвращает текущий статус инструмента (ACTIVE, EXPIRED_PENDING_PRICE или SETTLED).

Получить историю расчётов

GET /settlement/history?wallet=0x...

Возвращает записи о расчётах по вашему счёту.

Ответ:

{
"success": true,
"data": [
{
"symbol": "BTC-20250131-100000-C",
"position_size": 2.0,
"settlement_price": 5000.0,
"settlement_value": 10000.0,
"settled_at": 1738310400000
}
]
}

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

Оракул недоступен

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

  • Инструмент остаётся в состоянии Expired Pending Price
  • Система повторяет попытку каждые 30 секунд
  • Срабатывает продакшен-алертинг, если ожидание финализированной цены затягивается

Торговля блокируется сразу в момент экспирации независимо от доступности оракула.

Задержка финализированной цены

Если финализированный TWAP задерживается:

  • Расчёт откладывается
  • Система ожидает финализированную расчётную цену от оракула
  • Пользователи могут видеть, что инструмент остаётся в состоянии Expired Pending Price
  • Денежный расчёт появляется после того, как механизм повторов применит финализированную цену

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

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

  • Экспирированные инструменты определяются из БД при запуске
  • Расчёт продолжается автоматически
  • Гарантии идемпотентности исключают двойной расчёт

Параметры

ПараметрЗначениеОписание
Интервал проверки экспираций60 секундКак часто система проверяет экспирации
Окно TWAP30 минутОкно усреднения расчётной цены
Интервал повтора расчёта30 секундЧастота повторов при недоступности цены
Порог алерта по финализированной цене30 минутПредупреждение, если экспирированный инструмент всё ещё ожидает финализированную цену
Порог алерта по неисполненным выплатам1 часКритический алерт, если записи о выплатах по расчёту остаются непроведёнными

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

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

Расчёт в блокчейне

В основной сети расчётные цены публикуются в блокчейне после вычисления:

  • Оракул вычисляет расчётный TWAP и публикует финальную цену экспирации.
  • Контракт Exchange может верифицировать опубликованную расчётную цену в блокчейне.
  • Данные оракула в реальном времени не транслируются в блокчейн. Финальные расчётные цены являются он-чейн-референсом для экспирации.

См. также: