결제 및 만기
이 페이지는 Hypercall 메인 거래소의 옵션을 다룹니다. 옵션은 유럽형이며 USDC로 현금결제됩니다. 만기가 되면 포지션은 기초자산의 결제가격을 기준으로 자동 결제되며, 결제금액은 계정에 입금되거나 계정에서 차감됩니다.
만기 시각
| 기초자산 | 만기 시각 |
|---|---|
| BTC, ETH | 08:00 UTC |
| 주식 및 지수 (SPCX, SP500, BOT, MU, NVDA, META, MSFT, AAPL, SNDK, BABA) | 20:00 UTC |
미국 서머타임 기간에는 20:00 UTC가 뉴욕 시각 오후 4시입니다. 만기는 UTC 기준으로 고정되어 있으므로 서머타임에 따라 바뀌지 않습니다.
만기 시점에는 다음이 적용됩니다.
- 신규 주문이 거부됩니다
- 미체결 주문이 취소됩니다
- 포지션이 결제 절차에 들어갑니다
엔진은 매분 만기된 상품이 있는지 확인합니다.
상품 생애주기
상품은 세 가지 상태를 거칩니다.
| 상태 | 설명 | 거래 |
|---|---|---|
| Active | 정상 거래 | 가능 |
| Expired Pending Price | 결제가격 대기 중 | 불가 |
| Settled | 결제 완료, 포지션 종료 | 해당 없음 |
상태 전환
- Active에서 Expired Pending Price로: 계약 만기 시각 도달
- Expired Pending Price에서 Settled로: 결제가격이 확정되고 모든 포지션 결제 완료
상품이 Expired Pending Price 상태에 들어가면 모든 미체결 주문이 취소되고, 신규 주문은 "Instrument has expired" 메시지와 함께 거부됩니다.
결제가격
결제가격은 만기 시각에 끝나는 30분 동안 기초자산의 Hyperliquid 오라클 가격을 이상치에 강하게 평균한 값입니다.
| 항목 | 값 |
|---|---|
| 가격 소스 | 기초자산 퍼프의 Hyperliquid 오라클 가격(oraclePx). BTC와 ETH는 Hyperliquid 메인 퍼프를 사용하고, 주식과 지수는 xyz HIP-3 퍼프(예: xyz:NVDA)를 사용합니다. |
| 구간 | 30분, 만기 시각에 종료 |
| 샘플링 | 구간 내 모든 개별 오라클 업데이트, Hyperliquid 타임스탬프 기준 |
| 최소 샘플 수 | 500 |
| 평균 방식 | 트림 평균값들의 중앙값(trimmed median of means) |
평균 산출 방식
- 수집. Hypercall은 만기 30분 전부터 만기까지 관측된 새 오라클 가격을 모두 기록합니다. 같은 업데이트를 여러 번 읽어도 한 번만 집계하며, 만기 이후 게시된 가격은 사용하지 않습니다.
- 트림. 샘플을 가격순으로 정렬한 뒤 상위 5%와 하위 5%를 제외합니다.
- 그룹화. 남은 가격을 약 √n개 그룹으로 나누고 각 그룹의 평균을 구합니다.
- 중앙값 산출. 그룹 평균들의 중앙값이 결제가격입니다.
트림과 평균값들의 중앙값 방식을 쓰면 만기 직전의 몇몇 이상 체결로는 가격을 움직이기 어렵고, 동시에 구간 전체를 반영할 수 있습니다.
샘플이 부족한 경우
샘플이 500개 미만인 구간은 절대 사용하지 않습니다. Hypercall 자체 기록이 부족한 경우(예: 구간 도중 재시작이 있었던 경우), 동일한 Hyperliquid 오라클 가격의 보관 이력으로 구간을 재구성하고 같은 500개 최소 샘플 기준과 같은 평균 방식을 적용합니다. 두 소스 모두 샘플이 부족하면 상품은 Expired Pending Price 상태에 머무르고 결제는 대기합니다. Hypercall은 일부 구간이나 대체 가격으로 결제하지 않습니다.
이는 오라클 장애 중 포지션 평가 방식과는 별개입니다. 증거금 확인과 청산은 마지막으로 기록된 현물 가격으로 포지션을 계속 평가하며, 그 가격이 30초보다 오래되면 위험 증가 주문은 거부됩니다. 장애 모드를 참고하십시오. 마지막으로 기록된 가격이 결제가격으로 쓰이는 일은 없습니다.
결제금액 계산
결제금액은 결제가격 기준 옵션의 내재가치입니다.
콜옵션:
풋옵션:
여기서:
- = 결제가격
- = 행사가격
- = 포지션 수량 (부호 포함: 롱은 양수, 숏은 음수)
외가격 옵션은 0으로 결제되고 제거됩니다. 옵션 프리미엄은 거래 시점에 현금으로 지급되므로, 결제 시에는 내재가치만 이동합니다. 이는 표준 증거금 계정과 포트폴리오 증거금 계정 모두에 적용됩니다.
예시
롱 콜 (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분 결제가격
- 금액 계산: 각 포지션의 내재가치 산출
- 현금 이동: 같은 기초자산, 같은 만기의 모든 옵션이 하나의 배치로 결제되며 계정별로 상계됩니다
- 포지션 제거: 포지션이 종료되어 포트폴리오에서 제거됩니다
- 이벤트 발행:
portfolioWebSocket 채널로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_pnl | 취득원가를 차감한 결제 손익, 수수료 제외 |
마켓 만기
상품이 만기되면 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상태에 머무릅니다 - 거래는 이미 차단되어 있습니다
- 엔진은 1분마다 실행되는 만기 확인 때마다 재시도합니다
- 500개 샘플 규칙을 충족하는 결제가격이 존재해야만 현금이 이동합니다
시스템 재시작
결제 상태는 영구 저장됩니다. 시스템이 재시작되면 다음과 같이 처리됩니다.
- 시작 시 만기된 상품을 다시 불러옵니다
- 결제가 자동으로 이어서 진행됩니다
- 멱등성 보장으로 이중 결제를 방지합니다
파라미터
| 파라미터 | 값 | 설명 |
|---|---|---|
| 만기 확인 주기 | 60초 | 엔진이 만기를 확인하고 대기 중인 결제를 재시도하는 주기 |
| 결제 구간 | 30분 | 만기 시각에 종료 |
| 최소 샘플 수 | 500 | 이보다 적으면 해당 구간을 사용하지 않음 |
| 트림 | 양쪽 꼬리 각 5% | 평균 산출 전에 제외 |
권장 사항
- 만기 모니터링: 포트폴리오 엔드포인트로 보유 포지션의 만기일을 추적하십시오
- 사전 계획: 결제를 피하고 싶다면 만기 전에 포지션을 청산하십시오
- 마지막 30분 주시: 결제가격은 만기 순간의 가격이 아니라 해당 구간의 오라클 가격으로 결정됩니다
- WebSocket 구독: 실시간
PositionExpired이벤트를 받아 즉시 알림을 확인하십시오 - 증거금 여유분 유지: ITM 숏 포지션 결제에 대비해 충분한 현금 또는 증거금을 유지하십시오
함께 보기: