结算与到期
Hypercall 上的期权为欧式期权,采用现金结算。到期时,头寸将根据标的资产的参考价格自动结算,结算价值将记入或扣除您的账户。
到期时间
在主网上,SpaceX(SPCX)合约在其到期日的美东时间下午 4:00 到期。
测试网目前在到期日的 UTC 时间 08:00 到期。
到期时:
- 新订单将被拒绝
- 未成交订单将被取消
- 头寸进入结算流程
合约生命周期
合约会经历三种状态:
| 状态 | 描述 | 交易 |
|---|---|---|
| Active(活跃) | 正常交易 | 启用 |
| Expired Pending Price(已到期待定价) | 等待预言机提供结算价格 | 禁用 |
| Settled(已结算) | 结算完成,头寸已关闭 | 不适用 |
状态转换
- Active → Expired Pending Price:达到合约到期时间
- Expired Pending Price → Settled:结算价格可用且所有头寸均已结算
一旦合约进入 Expired Pending Price 状态,所有未成交订单将被取消,新订单将被拒绝并返回 "Instrument has expired"。
结算价格
结算价格为标的资产的 Hyperliquid 预言机指数价格的 30 分钟 TWAP(时间加权平均价格)。
| 参数 | 值 |
|---|---|
| 价格来源 | Hyperliquid 预言机(指数价格) |
| 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 合约可以在链上验证已发布的结算价格。
- 实时预言机数据不会流式传输到链上。最终结算价格是到期时的链上参考依据。
另请参阅: