关于 options-payoff
options-payoff 是用于期权策略分析的技能,根据截图或文字提取策略参数,计算到期收益和 Black-Scholes 理论价值,并生成带交互控件的 HTML 图表。
主要功能
- 01识别期权策略及各腿参数
- 02计算到期收益与理论价值曲线
- 03支持多种价差及自定义策略
- 04提供参数滑块与实时损益统计
- 05生成交互式图表或独立 HTML 文件
适用场景
- 01评估垂直价差或蝶式策略的盈亏范围
- 02调整隐含波动率、到期天数和现货价格
- 03查看策略盈亏平衡点及最大收益或损失
- 04将期权策略参数转换为交互图表
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ himself65/ finance-skills --skill options-payoff安装后在 Claude Code 中输入/options-payoff确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdreferences/bs_code.mdstrategies.md详细介绍
期权收益曲线技能
如果宿主尚未执行下面的 shell 探测(例如,在 Codex 中),请先用其 shell 工具运行 ! 包裹的命令,再选择配置方式。请使用实际输出;如果无法访问 shell,请说明此限制。
使用宿主可用的可视化工具生成交互式 HTML 图表;在 Codex 中则生成独立的 HTML 文件,展示:
- 到期收益曲线(灰色虚线)——到期时的内在价值
- 理论价值曲线(实色线)——基于当前 DTE/IV 的 Black-Scholes 价格
- 所有关键参数的动态滑块
- 实时统计数据:最大利润、最大亏损、盈亏平衡点、当前标的价格下的 P&L
步骤 1:从用户输入中提取策略
用户提供截图或文本时,请提取以下信息:
| 字段 | 查找位置 | 缺失时的默认值 |
|---|---|---|
| 策略类型 | 标题栏/各腿描述 | "custom" |
| 标的 | 股票代码 | SPX |
| 行权价 | 标题或各腿表格中的 K1、K2、K3…… | 最接近的整数价位 |
| 支付/收取的权利金 | 成交价或平均价格 | 5.00 |
| 数量 | 持仓规模 | 1 |
| 乘数 | 股票期权为 100,SPX 为 100 | 100 |
| 到期日 | 标题中的日期 | 30 DTE |
| 标的价格 | 截图或文本中显示的当前标的价格 | 实时报价(见下文);仅在没有可用报价时使用中间行权价 |
| IV | 希腊值面板中显示的数值,或根据 vega 估算 | 20% |
| 无风险利率 | — | 4.3% |
截图中的标的价格:标的价格是标的当前价格,券商截图通常会省略该价格,或显示距离行权价较远的价格——不要从行权价标签读取。请使用截图中显示的价格,否则使用实时报价(SPX 使用下方探测结果,其他标的使用 yfinance)。仅在没有可用报价时才使用中间行权价,并告知用户。
当前 SPX 参考价格:
!`python3 -c "exec('try:\n import yfinance as yf\n p=yf.Ticker(\'^GSPC\').fast_info[\'lastPrice\']\n print(f\'SPX ≈ {p:.0f}\')\nexcept Exception:\n print(\'SPX price unavailable — check market data\')')"`
步骤 2:识别策略类型
将策略与以下支持的策略匹配,然后阅读 references/strategies.md 中对应的部分。
| 策略 | 各腿 | 关键特征 |
|---|---|---|
| 蝶式价差 | 买入 K1,卖出 2×K2,买入 K3 | 3 个行权价,标题中包含 "Butterfly" |
| 垂直价差 | 买入 K1,卖出 K2(相同到期日) | 2 个行权价,借记或贷记 |
| 日历价差 | 买入远期到期的 K,卖出近期期限的 K | 相同行权价,2 个到期日 |
| 铁鹰式 | 卖出 K2/K3,买入 K1/K4 保护腿 | 4 个行权价,2 个价差 |
| 跨式组合 | 买入看涨期权 K + 买入看跌期权 K | 相同行权价,两种类型 |
| 宽跨式组合 | 买入虚值看涨期权 + 买入虚值看跌期权 | 2 个行权价,均为虚值 |
| 备兑看涨期权 | 持有 100 股 + 卖出看涨期权 K | 股票 + 卖出看涨期权 |
| 裸卖看跌期权 | 卖出看跌期权 K | 单腿 |
| 比例价差 | 买入 1×K1,卖出 N×K2 | 数量不等 |
对于未列出的策略,请使用 custom 模式:分解为单独的各腿并汇总其 P&L。
步骤 3:计算收益
Black-Scholes 看跌期权价格
d1 = (ln(S/K) + (r + σ²/2)·T) / (σ·√T)
d2 = d1 - σ·√T
put = K·e^(-rT)·N(-d2) - S·N(-d1)
Black-Scholes 看涨期权价格(通过看跌看涨平价)
call = put + S - K·e^(-rT)
蝶式看跌期权收益(到期时)
if S >= K3: 0
if S >= K2: K3 - S
if S >= K1: S - K1
else: 0
每股净 P&L = 收益 − 已支付权利金
垂直价差(看涨期权借记)收益(到期时)
long_call = max(S - K1, 0)
short_call = max(S - K2, 0)
payoff = long_call - short_call - net_debit
日历价差理论价值
日历价差无法表示为简单的到期函数——始终使用 BS 定价计算两条腿:
value = BS(S, K, T_far, r, IV_far) - BS(S, K, T_near, r, IV_near)
对于日历价差的到期曲线:近期期限的腿到期时价值为零,远期到期的腿使用剩余期限 T 的 BS 价格。
铁鹰式收益(到期时)
put_spread = max(K2-S, 0) - max(K1-S, 0) // short put spread
call_spread = max(S-K3, 0) - max(S-K4, 0) // short call spread
payoff = credit_received - put_spread - call_spread
步骤 4:渲染组件
如果有 visualize:read_me,请在构建前读取模块 ["chart", "interactive"],并使用 visualize:show_widget 渲染。否则,请根据宿主文档说明使用可用的可视化工具。在 Codex 中,如果没有内嵌渲染器,请在工作区保存完整的 HTML 文档,包含图表依赖项和 CSS,并在浏览器可用时验证,然后返回可点击的文件链接。保留以下所有控件和计算。不要调用宿主未提供的工具。
必需的控件(滑块)
结构部分:
- 所有行权价(根据策略需要,包括 K1、K2、K3……)
- 已支付 / 已收取的权利金
- 数量
- 乘数(默认为 100,请明确显示)
定价变量部分:
- IV %(5–80%,步长为 0.5)
- DTE — 距到期天数(0–90)
- 无风险利率 %(0–8%)
现货价格:
- 全宽滑块,范围 = [最低行权价 - 20%,最高行权价 + 20%],默认值为当前实际现货价格
必需的统计卡片(实时更新)
- 最大盈利(到期时)
- 最大亏损(到期时)
- 盈亏平衡点(双边策略显示两个)
- 当前现货价格下的理论损益
图表规格
- X 轴:SPX / 标的价格
- Y 轴:美元总损益(而非每股损益)
- 蓝色实线 = 当前 DTE / IV 下的理论价值
- 灰色虚线 = 到期收益
- 绿色竖向虚线 = 行权价(K2 中间行权价用较亮颜色显示)
- 琥珀色竖向虚线 = 当前现货价格
- 零轴上方填充绿色,透明度为 10%;下方填充红色,透明度为 10%
- 工具提示:悬停时显示两条曲线
代码模板
在控件中使用以下 JS 结构,并根据策略调整 pnlExpiry() 和 bfTheory():
// Black-Scholes helpers (always include)
function normCDF(x) { /* Horner approximation */ }
function bsCall(S,K,T,r,sig) { /* standard BS call */ }
function bsPut(S,K,T,r,sig) { /* standard BS put */ }
// Strategy-specific expiry payoff (returns per-share value BEFORE premium)
function expiryValue(S, ...strikes) { ... }
// Strategy-specific theoretical value using BS
function theoreticalValue(S, ...strikes, T, r, iv) { ... }
// Main update() reads all sliders, computes arrays, destroys+recreates Chart.js instance
function update() { ... }
// Attach listeners
['k1','k2',...,'iv','dte','rate','spot'].forEach(id => {
document.getElementById(id).addEventListener('input', update);
});
update();
步骤 5:回复用户
渲染控件后,简要说明:
- 检测到的策略以及各条腿的对应方式
- 当前设置下的最大盈利 / 最大亏损
- 一个关键见解(例如:“现货价格目前比盈利区间低 950 点,明天到期”)
保持简洁——图表本身已说明一切。
参考文件
references/strategies.md— 各策略类型的详细收益公式和边界情况references/bs_code.md— 可直接复制粘贴的 Black-Scholes JS 实现,包含 normCDF
如果不确定某种策略的收益公式边界情况,请阅读相关参考文件。