期权期货交易系统设计
标准期货合约(有到期日交割)与期权合约(Call/Put)的完整交易系统架构设计,涵盖期货定价、Black-Scholes 期权定价、Greeks 风险指标、策略组合、保证金计算、结算交割与风控引擎。
1. 期权期货总览
交割期货 (Futures)
有明确到期日的标准化合约。到期时按结算价交割(现金或实物)。价格围绕现货 + 持有成本波动。常见季度/月度合约。
期权 (Options)
赋予买方在到期日以行权价买入(Call)或卖出(Put)标的资产的权利(非义务)。买方支付权利金,卖方收取权利金但承担义务。
核心区别
期货:双方都有义务。期权:买方有权利无义务,卖方有义务无权利。期货保证金双向收取,期权只收卖方保证金。
加密市场特点
Deribit 是最大加密期权交易所。BTC/ETH 期权流动性最好。加密期权波动率高(60-120%),远高于传统市场。
2. 期货合约基础
期货合约规格
// === 合约规格定义 ===
interface FuturesContract {
symbol: string; // "BTC-20240329" (标的-到期日)
underlying: string; // "BTC"
quoteCurrency: string; // "USDT"
contractSize: number; // 每张合约面值, e.g. 0.001 BTC
tickSize: number; // 最小价格变动, e.g. 0.1 USDT
minOrderQty: number; // 最小下单量, e.g. 1 张
maxLeverage: number; // 最大杠杆, e.g. 100x
// 到期与交割
listingDate: Date; // 上线日期
expiryDate: Date; // 到期日 (交割时间)
settlementType: "CASH" | "PHYSICAL"; // 结算方式
// 费率
makerFee: number; // 挂单费率, e.g. 0.01%
takerFee: number; // 吃单费率, e.g. 0.05%
settlementFee: number; // 交割费率, e.g. 0.015%
}
// === 交割期货 vs 永续合约 ===
//
// 维度 交割期货 永续合约
// ───────────────────────────────────────────────
// 到期日 有 (季度/月度/周) 无
// 价格锚定 基差到期收敛 资金费率
// 结算方式 到期交割 无交割
// 持仓成本 无资金费率 每8h资金费率
// 套利方式 基差套利 资金费率套利
// 适用场景 套期保值/远期锁价 投机/日内交易
// === 常见合约周期 ===
// 当周 (Weekly): 本周五 08:00 UTC 交割
// 次周 (Bi-weekly): 下周五 08:00 UTC 交割
// 当季 (Quarterly): 本季末月最后一个周五交割
// 次季 (Bi-quarterly): 下季末月最后一个周五交割期货交割流程
3. 期货定价与基差
持有成本定价模型
// === 期货理论价格 (Cost of Carry Model) === // F = S × e^((r + c - y) × T) // // F = 期货理论价格 // S = 现货价格 // r = 无风险利率 (年化) // c = 存储/持有成本 (年化, 加密货币通常为0) // y = 便利收益率 (持有现货的额外收益, 如 staking 收益) // T = 到期时间 (年) // 例: BTC 现货 42,000, 无风险利率 5%, 90天到期 // F = 42000 × e^(0.05 × 90/365) // F = 42000 × e^(0.01233) // F = 42000 × 1.01241 // F ≈ 42,521 USDT (理论上比现货贵 521) // === 基差 (Basis) === basis = futuresPrice - spotPrice basisRate = basis / spotPrice × 100% annualizedBasis = basisRate / T_years × 100% // basis > 0 → 升水 (Contango): 市场看涨或持有成本为正 // basis < 0 → 贴水 (Backwardation): 市场看跌或供给紧张 // basis → 0 → 到期收敛: 交割时基差趋近于零 // === 基差套利 (Cash-and-Carry Arbitrage) === // 当 F_market > F_theoretical (升水过大): // 1. 买入现货 (Spot) // 2. 卖出期货 (Short Futures) // 3. 到期交割, 基差收敛获利 // 4. 利润 = basis - 融资成本 - 交易费用 // // 当 F_market < F_theoretical (贴水过大): // 1. 卖出现货 / 做空现货 // 2. 买入期货 (Long Futures) // 3. 到期交割获利 (反向套利)
基差计算器
调整现货和期货价格,实时计算基差、年化收益和套利机会:
期限结构 (Term Structure)
远期合约价格 > 近期合约 > 现货。正常市场状态。反映了持有成本(资金利率、存储成本)。升水越大,套利空间越大。
远期合约价格 < 近期合约 < 现货。通常出现在市场恐慌或大幅下跌时。交易者急于卖出远期合约对冲风险。
无论升水还是贴水,到期时期货价格必然收敛到现货价格。这是基差套利的核心原理。收敛速度在最后一周加快。
做多近期 + 做空远期 = 日历价差策略。利用不同到期日合约间的价差变化获利。风险低于裸多/裸空。
4. 期权合约基础
期权合约规格
// === 期权合约定义 ===
interface OptionContract {
symbol: string; // "BTC-20240329-45000-C" (标的-到期日-行权价-类型)
underlying: string; // "BTC"
optionType: "CALL" | "PUT";
strikePrice: number; // 行权价, e.g. 45000 USDT
expiryDate: Date; // 到期日
exerciseStyle: "EUROPEAN" | "AMERICAN"; // 行权方式
contractSize: number; // 每张合约对应的标的数量, e.g. 1 BTC
settlementType: "CASH"; // 加密期权通常现金结算
// 交易参数
tickSize: number; // 最小价格变动
minOrderQty: number; // 最小下单量
}
// === 核心概念 ===
//
// 权利金 (Premium): 买方为获得权利所支付的价格
// Premium = 内在价值 + 时间价值
//
// 内在价值 (Intrinsic Value):
// Call: max(S - K, 0) 当 S > K 时有内在价值
// Put: max(K - S, 0) 当 S < K 时有内在价值
//
// 时间价值 (Time Value):
// = Premium - Intrinsic Value
// 距到期越远, 时间价值越大
// 到期时时间价值归零 (Theta Decay)
//
// 虚实状态 (Moneyness):
// ITM (实值): Call时 S>K, Put时 S<K → 有内在价值
// ATM (平值): S ≈ K → 时间价值最大
// OTM (虚值): Call时 S<K, Put时 S>K → 无内在价值
// === 行权方式 ===
// 欧式 (European): 只能在到期日行权 → 加密期权主流
// 美式 (American): 到期前任何时间可行权 → 较少见
//
// 自动行权: 到期时 ITM 期权自动行权(现金结算)
// 行权阈值: 通常内在价值 > 0.01% 才自动行权期权买方 (Long)
支付权利金获得权利。最大亏损 = 权利金(有限)。盈利空间大(Call理论无限)。不需要保证金,只需支付权利金。适合投机和保险。
期权卖方 (Short)
收取权利金承担义务。最大盈利 = 权利金(有限)。亏损空间大(Call理论无限)。需要缴纳保证金。适合做市和收取权利金。
看涨期权 (Call)
赋予买方以行权价K买入标的的权利。看涨时买入Call获利。预期不涨时卖出Call赚权利金。Delta为正值(0~1)。
看跌期权 (Put)
赋予买方以行权价K卖出标的的权利。看跌时买入Put获利。可用于对冲持仓风险(保险)。Delta为负值(-1~0)。
5. 期权定价 (Black-Scholes)
Black-Scholes 公式
// === Black-Scholes 期权定价模型 === // 前提假设: // 1. 标的价格服从几何布朗运动 (对数正态分布) // 2. 无交易成本和税收 // 3. 可以连续交易, 无卖空限制 // 4. 无风险利率恒定 // 5. 波动率恒定 (实际中波动率是变化的 → 隐含波动率) // === 核心公式 === d1 = (ln(S/K) + (r + σ²/2) × T) / (σ × √T) d2 = d1 - σ × √T // 看涨期权价格 Call = S × N(d1) - K × e^(-r×T) × N(d2) // 看跌期权价格 Put = K × e^(-r×T) × N(-d2) - S × N(-d1) // N(x) = 标准正态分布的累积分布函数 // === 例: BTC Call 期权 === // S = 42,000 (现货), K = 43,000 (行权价) // T = 30/365 ≈ 0.0822 (30天), r = 5%, σ = 80% // // d1 = (ln(42000/43000) + (0.05 + 0.64/2) × 0.0822) / (0.8 × √0.0822) // = (-0.02353 + 0.03123) / 0.22933 // = 0.03357 // d2 = 0.03357 - 0.22933 = -0.19576 // // Call = 42000 × N(0.0336) - 43000 × e^(-0.05×0.0822) × N(-0.1958) // = 42000 × 0.5134 - 42823 × 0.4224 // ≈ 21,563 - 18,088 // ≈ 3,475 USDT // === Put-Call Parity (买卖权平价) === // Call - Put = S - K × e^(-r×T) // 如果不成立 → 存在套利机会 // 用途: 从 Call 价格推导 Put 价格, 或检验定价一致性 // === 隐含波动率 (IV) === // 已知期权市场价格, 反向求解 σ (使用牛顿迭代法) // IV 是市场对未来波动率的预期 // IV > 历史波动率 → 市场预期波动加大 // IV Smile: OTM 和 ITM 的 IV 高于 ATM → 波动率微笑
期权定价计算器
输入参数实时计算 Black-Scholes 期权价格和 Greeks:
6. Greeks 风险指标
// === Greeks 详解 === // ① Delta (Δ) — 最重要的 Greek // 含义: 标的价格变动1单位, 期权价格变动多少 // Call Delta: 0 ~ +1 (ATM ≈ 0.5) // Put Delta: -1 ~ 0 (ATM ≈ -0.5) // // 用途: // - 对冲比率: 卖出1张Call需要持有 Δ 单位的标的来Delta中性 // - 近似概率: Delta ≈ 期权到期时为 ITM 的概率 // - 例: Delta = 0.4 → BTC涨 100, 期权涨 ~40 // ② Gamma (Γ) — Delta 的变化率 // 含义: 标的价格变动1单位, Delta 变动多少 // ATM 期权 Gamma 最大, 深度 ITM/OTM Gamma 接近 0 // 临期 ATM 期权 Gamma 极大 (Pin Risk) // // 风险管理: // - Gamma > 0 (买方): 价格大幅波动有利 // - Gamma < 0 (卖方): 价格大幅波动不利 → 需要频繁对冲 // ③ Theta (Θ) — 时间衰减 // 含义: 每过1天, 期权价值减少多少 (通常为负数) // ATM 期权 Theta 绝对值最大 // 临期时 Theta 加速衰减 (最后30天尤其明显) // // 卖方优势: 时间流逝对卖方有利 (收取 Theta) // 买方劣势: 即使标的不动, 期权价值也在减少 // ④ Vega (ν) — 波动率敏感度 // 含义: 隐含波动率变动1%, 期权价格变动多少 // ATM 长期期权 Vega 最大 // // 交易波动率: // - 买入期权 (Long Vega): 预期波动率上升时获利 // - 卖出期权 (Short Vega): 预期波动率下降时获利 // - Vega 是期权独有的风险维度, 期货没有 // ⑤ Rho (ρ) — 利率敏感度 // 含义: 利率变动1%, 期权价格变动多少 // 对短期期权影响较小 // 对长期深度 ITM 期权影响较大 // === 做市商的 Greek 管理 === // 目标: 维持组合的 Delta、Gamma、Vega 中性 // // Delta 对冲: 用标的或期货动态对冲 Delta // Gamma 对冲: 用其他期权对冲 Gamma (买入/卖出不同行权价) // Vega 对冲: 用不同到期日的期权对冲 Vega // // 对冲频率: // Delta → 实时 (几秒一次) // Gamma/Vega → 定期 (分钟级别)
通过对冲使组合 Delta = 0,消除方向性风险。只赚取 Theta(时间衰减)和 Vega(波动率变化)的收益。做市商的核心策略。
保持 Delta 中性,利用 Gamma 正值在标的波动时反复调仓获利。买入期权后,标的涨时卖出、跌时买入,每次调仓锁定利润。
卖出期权收取权利金,赚取每日时间衰减。需要管理 Gamma 和尾部风险。常用策略: 卖出 OTM Put (类现货+)。
不预测方向,只预测波动率。IV 低时买入期权 (Long Vega),IV 高时卖出 (Short Vega)。需要 Delta 对冲消除方向暴露。
7. 期权策略组合
常用策略详解
// === 1. 牛市看涨价差 (Bull Call Spread) === // 构成: 买入低行权价Call + 卖出高行权价Call (同到期日) // 例: 买入 BTC Call K=42000 (付 2500) + 卖出 Call K=46000 (收 1000) // 净支出: 2500 - 1000 = 1500 USDT // 最大盈利: (46000 - 42000) - 1500 = 2500 USDT (BTC ≥ 46000时) // 最大亏损: 1500 USDT (BTC ≤ 42000时) // 盈亏平衡: 42000 + 1500 = 43500 // === 2. 跨式 (Straddle) === // 构成: 同时买入相同行权价的 Call + Put (同到期日) // 例: 买入 Call K=42000 (付 2500) + 买入 Put K=42000 (付 2500) // 净支出: 5000 USDT // 盈亏平衡: 42000 ± 5000 → 37000 或 47000 // 适用: 预期大幅波动, 方向不确定 (如重大事件前) // 风险: 如果价格不动, 双份时间衰减 (Theta) // === 3. 铁鹰 (Iron Condor) === // 构成: 卖出 Put Spread + 卖出 Call Spread // 买入 Put K=38000 + 卖出 Put K=40000 // 卖出 Call K=44000 + 买入 Call K=46000 // 净收入: (1500-800) + (1500-800) = 1400 USDT // 最大盈利: 1400 (价格在40000-44000之间) // 最大亏损: 2000 - 1400 = 600 (价格超出46000或低于38000) // 适用: 预期低波动率, 价格区间震荡 // === 4. 保护性看跌 (Protective Put) === // 持有 1 BTC 现货 + 买入 Put K=40000 // 相当于为持仓买保险: 最大亏损 = (42000-40000) + 权利金 // 保留了上行空间, 限制了下行风险 // 成本: 权利金 (类似保险费) // === 5. Covered Call (备兑看涨) === // 持有 1 BTC 现货 + 卖出 Call K=45000 // 收取权利金增厚收益, 但上行空间受限 // 如果 BTC 涨超45000, 被迫以45000卖出 // 适用: 温和看涨或横盘时增强收益
策略损益分析器
选择策略,查看构成、到期损益图和盈亏平衡点:
| 操作 | 类型 | 行权价 | 权利金 | 现金流 |
|---|---|---|---|---|
| 买入 | 看涨 Call | 42,000 | 2,500 | -2,500 |
| 净权利金 | -2,500 USDT | |||
8. 保证金与结算
// === 期权保证金计算 (卖方) === // 方法一: SPAN-like 保证金 (CME 风格) // 扫描16种价格/波动率情景, 取最大亏损作为保证金 // 方法二: 简化公式 (Deribit 风格) // Call 卖方保证金: initialMargin_Call = max( premium + 0.15 * S - max(K - S, 0), // 公式A: 考虑实虚值 premium + 0.10 * S // 公式B: 最低保证金 ) // Put 卖方保证金: initialMargin_Put = max( premium + 0.15 * S - max(S - K, 0), premium + 0.10 * S ) // 组合保证金优化 (Portfolio Margin): // 对冲组合可减少保证金, 例: // Bull Call Spread: 保证金 = max(K_high - K_low, 0) - 净权利金收入 // Iron Condor: 保证金 = max(Call翼宽, Put翼宽) - 净权利金收入 // 比裸卖保证金大幅降低 // === 期权结算流程 === // 到期前: // T-1h: 停止新开仓 // T-0: 停止所有交易 // // 结算: // 结算价 = 到期前30分钟指数时间加权均价 // // ITM期权 (内在价值 > 阈值): // 自动现金结算 // Call: 买方收到 (结算价 - K) × 合约面值 // Put: 买方收到 (K - 结算价) × 合约面值 // // OTM期权: // 自动放弃, 价值归零 // 卖方保证金全额释放 // // 结算后: // 所有仓位清除 // 保证金释放 // PnL 结算到账户余额
期权买方在开仓时支付全部权利金,之后不需要额外保证金。最大亏损在开仓时已确定 = 权利金。不存在爆仓风险。
期权卖方承担义务,必须缴纳保证金。标的价格不利波动时,保证金要求增加。保证金不足会被强平。
对冲组合(如价差)的保证金远低于裸卖。系统识别组合关系,只收取最大净风险的保证金。大幅提高资金效率。
加密期权通常采用现金结算。到期时按结算价计算盈亏,以USDT/USDC直接结算,无需交割实际BTC。
9. 风控引擎
// === 期权风控特殊处理 ===
// 1. Delta 限制
// 单账户最大 Delta 暴露: ±500 BTC
// 避免单一方向性风险过大
maxDelta = sum(position.qty * option.delta for each position)
if abs(maxDelta) > MAX_DELTA_LIMIT:
reject("Delta exposure exceeds limit")
// 2. Vega 限制
// 单账户最大 Vega 暴露: ±100 BTC
// 避免波动率突变导致巨额亏损
maxVega = sum(position.qty * option.vega for each position)
// 3. 卖方保证金实时监控
function checkSellerMargin(account):
for position in account.shortOptionPositions:
currentMargin = calcMargin(position, markPrice, iv)
if account.availableBalance < currentMargin * 0.75:
triggerMarginCall(account, position)
if account.availableBalance < currentMargin * 0.50:
triggerLiquidation(account, position)
// 4. 隐含波动率风控
// 市场 IV 突然飙升 → 卖方保证金需求暴增
// 系统措施:
// - IV 变化 > 30% 在 5分钟内 → 暂停新开仓
// - IV > 200% → 提高保证金系数
// - IV < 10% → 提示价格可能异常
// 5. 到期日风控
// Pin Risk: 到期时标的价格接近行权价
// 大量期权在 ATM 附近, 行权/放弃的不确定性极大
// 措施:
// - 到期前 2h 提高 ATM 期权保证金
// - 到期前 30min 禁止新开仓
// - 自动行权阈值: 内在价值 > 0.01%10. 系统架构设计
关键服务设计
// === 1. 期权订单簿设计 ===
// 与现货/期货不同: 期权有大量交易对
// BTC期权: 10个到期日 × 20个行权价 × 2(Call/Put) = 400个订单簿
// 策略: 轻量级订单簿, 按需加载, 空闲超时回收
interface OptionOrderBook {
underlying: string; // "BTC"
expiryDate: Date; // 到期日
strikePrice: number; // 行权价
optionType: "CALL"|"PUT"; // 类型
bids: PriceLevel[]; // 买盘
asks: PriceLevel[]; // 卖盘
}
// 订单簿键: "BTC-20240329-45000-C"
// 按 underlying+expiryDate 分组, 同一到期日的所有行权价在一个引擎线程
// === 2. 定价服务 (Pricing Service) ===
// 职责: 计算理论价格, 提供报价参考, IV 曲面构建
class PricingService {
// 实时计算所有活跃合约的理论价格
calculateTheoPrice(option, spotPrice, iv):
return blackScholes(spotPrice, option.strike, option.T, r, iv, option.type)
// 从市场价格反推隐含波动率
impliedVolatility(marketPrice, S, K, T, r, type):
// Newton-Raphson 迭代
sigma = 0.5 // 初始猜测
for i in range(100):
price = blackScholes(S, K, T, r, sigma, type)
vega = calcVega(S, K, T, r, sigma)
sigma = sigma - (price - marketPrice) / vega
if abs(price - marketPrice) < 0.01: break
return sigma
// 构建 IV 曲面 (Volatility Surface)
buildIVSurface(options):
// X轴: 行权价/Moneyness
// Y轴: 到期时间
// Z轴: 隐含波动率
// 用于: 新合约定价, 异常检测, 风险评估
}
// === 3. Greeks 计算服务 ===
// 高频计算: 每秒更新所有活跃合约的 Greeks
// 批量计算: 标的价格变化时, 批量更新同一 underlying 的所有合约
// 缓存策略: Redis 存储, 100ms TTL
// === 4. 期权链 (Option Chain) 数据推送 ===
// T型报价: 按行权价排列, 左边 Call, 右边 Put
// 推送内容: 每个合约的 bid/ask/last/vol/OI/IV/Delta
// 频率: 100ms - 1s, 按标的分频道
// WebSocket: subscribe("option_chain:BTC:20240329")11. 期货期权 vs 永续合约
// === 完整对比: 现货 vs 永续 vs 交割期货 vs 期权 === // // ┌────────────┬──────────┬───────────┬───────────┬───────────┐ // │ 维度 │ 现货 │ 永续合约 │ 交割期货 │ 期权 │ // ├────────────┼──────────┼───────────┼───────────┼───────────┤ // │ 到期日 │ 无 │ 无 │ 有 │ 有 │ // │ 杠杆 │ 无(1x) │ 1-125x │ 1-100x │ 买方无限 │ // │ 方向 │ 只能做多 │ 多/空 │ 多/空 │ 4种组合 │ // │ 价格锚定 │ - │ 资金费率 │ 基差收敛 │ BS模型 │ // │ 保证金 │ 全额 │ 双方 │ 双方 │ 仅卖方 │ // │ 最大亏损 │ 全额 │ 保证金 │ 保证金 │ 买方:权利金│ // │ 最大盈利 │ 无限 │ 无限 │ 无限 │ 买方:无限 │ // │ 持仓成本 │ 无 │ 资金费率 │ 无 │ Theta衰减 │ // │ 交割 │ 即时 │ 无 │ 到期结算 │ 行权结算 │ // │ 复杂度 │ 低 │ 中 │ 中 │ 高 │ // │ 适用场景 │ 长期持有 │ 投机/对冲 │ 套保/套利 │ 风险管理 │ // └────────────┴──────────┴───────────┴───────────┴───────────┘ // === 产品选择指南 === // // 1. "我看好BTC会涨" // → 现货买入 (最安全) // → 永续做多 (加杠杆) // → 买入Call (有限亏损+杠杆) // // 2. "我想对冲持仓风险" // → 买入Put期权 (保险策略) // → 卖出期货锁定价格 // // 3. "我想赚取收益但不想承担大风险" // → 卖出OTM Call (Covered Call) // → Iron Condor (区间震荡获利) // // 4. "我预期大幅波动但不确定方向" // → 买入Straddle/Strangle // → 期权买方 (Long Gamma) // // 5. "我想无风险套利" // → 基差套利 (现货+期货) // → Put-Call Parity 套利 // → 跨交易所价差套利
结构简单,易于理解。到期日明确,基差可预测。适合套期保值和基差交易。与现货关联度高,流动性好。
到期必须交割/移仓。没有非线性收益。持续持仓需要不断换月(Roll)。爆仓风险与永续相同。
非线性收益结构,可精确定制风险。买方亏损有限。可交易波动率维度。策略组合丰富灵活。
定价复杂(BS模型/Greeks)。时间衰减(Theta)对买方不利。流动性通常不如期货。买卖价差较大。
12. 完整订单流程
数据模型
// === 期权仓位数据模型 ===
interface OptionPosition {
id: string;
userId: string;
contractSymbol: string; // "BTC-20240329-45000-C"
side: "LONG" | "SHORT"; // 买方 or 卖方
quantity: number; // 持仓张数
avgPrice: number; // 平均成交价 (权利金)
// 卖方相关
margin: number; // 冻结保证金 (仅卖方)
maintenanceMargin: number; // 维持保证金
// 实时计算 (缓存在 Redis)
markPrice: number; // 标记价格 (BS计算)
unrealizedPnl: number; // 未实现盈亏
delta: number; // 仓位 Delta
gamma: number; // 仓位 Gamma
theta: number; // 仓位 Theta
vega: number; // 仓位 Vega
createdAt: Date;
updatedAt: Date;
}
// === 期权交割记录 ===
interface OptionSettlement {
id: string;
contractSymbol: string;
settlementPrice: number; // 结算价
settlementType: "EXERCISE" | "EXPIRE_WORTHLESS" | "CASH_SETTLE";
// 每个仓位的结算明细
positions: {
userId: string;
side: "LONG" | "SHORT";
quantity: number;
pnl: number; // 结算盈亏
marginReleased: number; // 释放的保证金
}[];
settledAt: Date;
}
// === 期货交割记录 ===
interface FuturesDelivery {
id: string;
contractSymbol: string; // "BTC-20240329"
deliveryPrice: number; // 交割结算价
totalVolume: number; // 参与交割的总量
positions: {
userId: string;
side: "LONG" | "SHORT";
quantity: number;
entryPrice: number;
pnl: number; // (deliveryPrice - entryPrice) * qty * direction
marginReleased: number;
}[];
deliveredAt: Date;
}