Расчёт и экспирация
Опционы на Hypercall — европейского стиля с расчётом наличными. В момент экспирации позиции автоматически рассчитываются по референсной цене базового актива, а сумма расчёта зачисляется на ваш счёт или списывается с него.
Время экспирации
В основной сети контракты SpaceX (SPCX) экспирируются в 16:00 ET в дату экспирации.
В тестнете экспирация в настоящий момент происходит в 08:00 UTC в дату экспирации.
В момент экспирации:
- Новые заявки отклоняются
- Открытые заявки отменяются
- Позиции переходят в процесс расчёта
Жизненный цикл инструмента
Инструменты проходят через три состояния:
| Состояние | Описание | Торговля |
|---|---|---|
| Active | Обычная торговля | Включена |
| Expired Pending Price | Ожидание расчётной цены от оракула | Отключена |
| Settled | Расчёт завершён, позиции закрыты | Н/Д |
Переходы между состояниями
- Active → Expired Pending Price: наступило время экспирации контракта
- Expired Pending Price → Settled: расчётная цена доступна, все позиции рассчитаны
Как только инструмент переходит в состояние Expired Pending Price, все открытые заявки отменяются, а новые отклоняются с сообщением "Instrument has expired".
Расчётная цена
Расчётная цена — это 30-минутный TWAP (средневзвешенная по времени цена) индексной цены Hyperliquid Oracle для базового актива.
| Параметр | Значение |
|---|---|
| Источник цены | Hyperliquid Oracle (индексная цена) |
| Окно TWAP | 30 минут |
| Конец окна | Время экспирации контракта |
Оракул начинает выборку за 30 минут до экспирации и вычисляет TWAP в момент экспирации.
Для расчёта требуется финализированный TWAP. Если финализированная цена недоступна в момент экспирации, инструмент остаётся в состоянии Expired Pending Price, и попытки повторяются автоматически. Торговля в этом состоянии уже отключена, но зачисления и списания денежных средств проводятся только после появления финализированной цены оракула.
Расчёт суммы расчёта
Сумма расчёта вычисляется как внутренняя стоимость опциона на момент экспирации:
Колл-опционы:
Пут-опционы:
Где:
- = расчётная цена (30-минутный TWAP)
- = цена страйка
- = размер позиции (со знаком: положительный для длинной позиции, отрицательный для короткой)
Примеры
Длинный колл (ITM):
- Позиция: лонг 2 BTC-100000-C
- Расчётная цена: $105 000
- Внутренняя стоимость: max(0, 105000 - 100000) = $5 000
- Сумма расчёта: 10 000** (зачисляется)
Короткий колл (ITM):
- Позиция: шорт 2 BTC-100000-C
- Расчётная цена: $105 000
- Сумма расчёта: 10 000** (списывается)
Длинный пут (OTM):
- Позиция: лонг 1 BTC-100000-P
- Расчётная цена: $105 000
- Внутренняя стоимость: max(0, 100000 - 105000) = $0
- Сумма расчёта: $0 (истекает без стоимости)
Процесс расчёта
При выполнении расчёта:
- Получение цены: оракул возвращает 30-минутный TWAP
- Вычисление суммы: для каждой позиции рассчитывается внутренняя стоимость
- Обновление баланса: сумма расчёта добавляется (длинная ITM) или вычитается (короткая ITM) из баланса счёта
- Удаление позиции: позиция закрывается и удаляется из портфеля
- Отправка события: через 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 секунд | Как часто система проверяет экспирации |
| Окно TWAP | 30 минут | Окно усреднения расчётной цены |
| Интервал повтора расчёта | 30 секунд | Частота повторов при недоступности цены |
| Порог алерта по финализированной цене | 30 минут | Предупреждение, если экспирированный инструмент всё ещё ожидает финализированную цену |
| Порог алерта по неисполненным выплатам | 1 час | Критический алерт, если записи о выплатах по расчёту остаются непроведёнными |
Рекомендации
- Следите за экспирациями: отслеживайте даты экспирации ваших позиций через эндпоинт портфеля
- Планируйте заранее: закрывайте позиции до экспирации, если хотите избежать расчёта
- Проверяйте расчётные цены: убедитесь, что цена оракула соответствует вашим ожиданиям
- Подпишитесь на WebSocket: получайте события
PositionExpiredв реальном времени для немедленного уведомления - Держите запас маржи: обеспечьте достаточную маржу на случай расчёта коротких позиций ITM
Расчёт в блокчейне
В основной сети расчётные цены публикуются в блокчейне после вычисления:
- Оракул вычисляет расчётный TWAP и публикует финальную цену экспирации.
- Контракт Exchange может верифицировать опубликованную расчётную цену в блокчейне.
- Данные оракула в реальном времени не транслируются в блокчейн. Финальные расчётные цены являются он-чейн-референсом для экспирации.
См. также:
- Ликвидация: что происходит при недостаточной марже
- Портфельная маржа: как позиции влияют на маржу
- Стандартная маржа: расчёт маржи по каждой позиции