Vibe-Trading 期权策略框架实战指南:Black-Scholes 定价、Greeks 分析与多腿组合回测
Vibe-Trading 期权策略框架实战指南Black-Scholes 定价、Greeks 分析与多腿组合回测【免费下载链接】Vibe-TradingVibe-Trading: Your Personal Trading Agent项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading本指南围绕 Vibe-Trading 仓库中agent/src/skills/options-strategy/SKILL.md所定义的期权策略技能展开系统讲解如何基于标的资产价格序列用 Black-Scholes 模型合成理论期权价格完成覆盖保护、波动率交易、价差组合等多腿期权组合的回测、Greeks 暴露度分析与到期行权模拟。读完本文你将掌握OptionsSignalEngine信号引擎的编写规范、options_config关键参数调优、五大 Greeks 的实际用法以及回测产物与options_pricing/options_payoff工具的结合使用方式。一、框架定位从标的价格合成期权市场的回测模式该技能适用于期权组合策略的回测其核心思路是从标的underlying的日线价格序列出发用 Black-Scholes 模型合成理论期权价格再逐日模拟组合的 PnL、Greeks 暴露以及到期时的行权/过期结算。这是一种合成数据synthetic-data模式——引擎并不需要真实期权市场的成交数据而是用历史波动率替代隐含波动率、用模型理论价替代市场报价。其适用场景包括对冲策略备兑看涨covered call、保护性看跌protective put波动率交易跨式straddle、宽跨式strangle价差组合铁鹰iron condor、蝶式butterfly、日历价差calendar spread期权定价分析与 Greeks 敏感性研究。在 Vibe-Trading 中该能力的底层实现位于 options_portfolio.pyrun_options_backtest入口由 runner.py 在config[engine] options时自动路由调用BS 定价与 Greeks 统一收敛在 options.pybs_price/bs_greeks保证回测引擎、定价工具与期权到期收益工具共用同一套公式实现。二、支持的策略类型一览策略结构适用市场观点备兑看涨Covered Call持有标的 卖出看涨温和看涨赚取权利金保护性看跌Protective Put持有标的 买入看跌看涨但需要下行保护跨式Straddle买入同执行价看涨 看跌预期大幅波动方向不确定宽跨式Strangle买入不同执行价看涨 看跌预期大幅波动成本更低铁鹰Iron Condor卖出看跌价差 卖出看涨价差区间震荡赚取权利金蝶式Butterfly买低行权看涨 卖 2 份中行权看涨 买高行权看涨预期窄幅波动日历价差Calendar Spread同执行价卖近月 买远月利用时间衰减差异从源码结构看options_payoff.py中内置了bull_call_spread、long_straddle、iron_condor等组合构造器见 options_payoff.py方便做到期收益曲线的即席分析与回测引擎的多腿信号格式相互呼应。三、OptionsSignalEngine信号接口规范策略代码写在code/signal_engine.py类名必须是SignalEngine并实现generate方法class SignalEngine: Option strategy signal engine. def generate(self, data_map: dict) - list: Generate option trading instructions. Args: data_map: code - DataFrame (columns: open, high, low, close, volume) Returns: List of trading instructions. Each instruction has the format: { date: 2024-01-15, # Trading date action: open / close, # Open or close position underlying: BTC-USDT, # Underlying code legs: [ # List of option legs { type: call / put, # Option type strike: 50000, # Strike price expiry: 2024-02-15, # Expiration date qty: 1 # Quantity (positive long, negative short) } ] } 引擎会为每个code传入带open/high/low/close/volume列的 DataFrame策略基于这些数据产生指令列表。引擎端在 options_portfolio.py 调用engine.generate(data_map)获取信号再按日期索引逐日执行。3.1 信号字段的源码级约定actionopen开仓、close平仓平仓时若不写qty默认平掉整个仓位若写了qty则只平指定数量不足时截断到持仓量这一部分平仓行为由引擎在匹配持仓后按实际平仓数量缩放现金与 PnL见 options_portfolio.py。legs[].type引擎在定价、匹配与记录之前统一折叠为小写Call会被按看涨定价、按看涨结算未知类型如拼写错误不会被静默当成 put而是直接抛错避免以 call 定价、以 put 结算的灾难性错误见 options.py 的normalise_option_type。underlying缺省时回退到codes[0]strike缺省时用当日 spot。3.2 多腿组合示例铁鹰Iron Condor开仓信号{ date: 2024-01-15, action: open, underlying: 000300.SH, legs: [ {type: put, strike: 3800, expiry: 2024-02-15, qty: -1}, # Sell put {type: put, strike: 3700, expiry: 2024-02-15, qty: 1}, # Buy protective put {type: call, strike: 4200, expiry: 2024-02-15, qty: -1}, # Sell call {type: call, strike: 4300, expiry: 2024-02-15, qty: 1}, # Buy protective call ] }四腿结构构成经典的有界风险卖出组合两端各有一个买方腿保护中间两个卖方腿风险被锁定在价差宽度之内。四、config.json配置格式与参数详解{ codes: [000300.SH], start_date: 2020-01-01, end_date: 2024-12-31, source: tushare, engine: options, initial_cash: 1000000, commission: 0.001, options_config: { risk_free_rate: 0.05, iv_source: historical, contract_multiplier: 1.0, same_day_fill: false, default_iv: 0.3 } }关键字段说明engine必须设置为optionsrunner 才会路由到期权回测引擎见 runner.py。options_config.risk_free_rate无风险利率默认0.05以年化连续复利形式进入 BS 定价。options_config.iv_source波动率来源当前支持historical——由标的收盘价计算 30 日滚动历史波动率年化rolling(30).std() * sqrt(252)见 options_portfolio.py 的historical_volatility。options_config.contract_multiplier合约乘数默认1.0。中国 A 股 ETF 期权常为 10000加密期权通常为 1必须按标的所在市场正确设置。options_config.same_day_fillfalse默认时T 日生成的信号在下一根 K 线收盘成交true则恢复同日成交的旧行为信号与成交共享 T 日收盘价和波动率。默认行为与股票引擎次日开盘成交不同期权引擎刻意选择次日收盘成交因为信号基于收盘后的端到端数据计算见 options_portfolio.py。options_config.default_iv滚动窗口不足warm-up 期或存在 NaN 缺口时使用的波动率默认0.3必须为有限正数否则引擎抛ValueError见 options_portfolio.py。4.1 引擎 v2 的扩展配置源码已实现的进阶参数从 options_portfolio.py 可以看出除上述参数外引擎还支持以下进阶项exercise_styleeuropean默认或american。美式模式下引擎会在每日检查内在价值 继续持有价值 × 1.02时触发提前行权启发式。iv_skew/iv_curvature微笑smile模型参数默认均为0即平坦波动率面。启用后按IV(K) base_iv skew * log(K/S) curvature * log(K/S)^2调整每个腿的定价波动率且开仓、盯市、Greeks、美式继续持有价值必须共用同一波动率否则会凭空记入虚假利润见 options_portfolio.py。margin_enabled默认true、margin_rate默认0.20、margin_floor_rate默认0.10对卖空腿施加 CBOE 风格保证金检查资金不足的开仓会以reject记录在trades.csv中并统计为options_rejected_opens指标研究用途可关闭。五、Black-Scholes 模型原理BS 公式欧式期权Call S * N(d1) - K * e^(-rT) * N(d2) Put K * e^(-rT) * N(-d2) - S * N(-d1) d1 [ln(S/K) (r sigma^2/2) * T] / (sigma * sqrt(T)) d2 d1 - sigma * sqrt(T)其中S为标的价格K为执行价T为以年为单位的剩余期限r为无风险利率sigma为波动率N()为标准正态分布的累积分布函数。引擎从标的日线序列出发用历史波动率代入 BS 公式计算理论期权价格——即前文所说的合成数据模式。仓库中该公式的唯一权威实现在 options.py并做了三处工程化处理退化输入到期T 0或 spot/strike 非正时直接返回内在价值波动率非正但仍有剩余期限时返回折现远期内在价值而不是抛异常——因为临期或零波动率的腿是回测中会正常走到的状态。Greeks 退化处理到期实值期权仍报告delta ±1S K时取单侧极限中点 0.5不会出现到期实值期权 delta 为 0的假象见 options.py。全量单位约定T以年计、r/q为年化连续复利theta按日历日、vega/rho按 1 个百分点、delta/gamma按 1.0 的 spot 计且不做任何舍入——四舍五入会毁掉隐含波动率求解器所需的 vega 精度。六、五大 Greeks 的含义与用法Greek含义用法Delta标的价格变动 1 单位时期权价格的变化方向性暴露管理、对冲比率计算Gamma标的价格变动 1 单位时 Delta 的变化衡量对冲稳定性高 Gamma 意味着需要频繁再平衡Theta期权价值每日的时间衰减通常为负时间价值管理卖方策略的收益来源Vega波动率变动 1 个百分点时期权价格的变化波动率交易的核心指标衡量波动率暴露Rho利率变动 1 个百分点时价格的变化利率敏感性对长到期限头寸影响更大引擎在每个交易日对组合内所有持仓腿计算并汇总上述 Greeks输出到greeks.csv。具体实现中组合级delta/gamma/theta/vega以及rho按每腿 Greeks × 持仓数量 × 合约乘数累加见 options_portfolio.pygreeks.csv还包含num_positions列便于观察持仓变化。七、常见陷阱与应对7.1 波动率微笑Volatility SmileBS 模型假设波动率恒定而真实市场中不同行权价与不同期限的隐含波动率并不相同微笑/偏斜。本引擎用历史波动率近似因此对深度虚值/深度实值期权定价可能存在偏差。策略设计应避免过度依赖极端行权价的定价精度。若需更贴近市场可使用iv_skew/iv_curvature打开微笑模型。7.2 时间衰减Theta Decay的非线性Theta 衰减不是线性的——越临近到期衰减越快最后 30 天远比之前的 30 天快。做空波动率策略从中受益但临近到期时 Gamma 风险也会急剧上升。7.3 提前行权Early Exercise默认引擎只支持欧式期权仅到期行权。对存在显著提前行权价值的场景如深度实值看跌、高分红标的的看涨定价会产生偏差。需要时可配置exercise_style: american启用提前行权启发式。7.4 流动性与滑点合成数据模式没有买卖价差与流动性约束。真实交易中深度虚值期权流动性差、价差宽回测结果会偏乐观实盘前应对此有预期。7.5 合约乘数不同市场的期权合约乘数差异很大中国 A 股 ETF 期权常见 10000加密通常为 1。务必正确设置options_config.contract_multiplier——该参数会同时放大权利金现金流、结算金额与组合 Greeks 聚合值。八、回测产物Artifacts说明回测完成后artifacts/目录会生成以下文件文件内容equity.csv每日净值、现金、持仓市值含margin_hold列启用保证金时为当日卖空腿保证金metrics.csv收益、Sharpe、最大回撤等指标含total_return、annual_return、max_drawdown、sharpe、calmar、sortino、trade_count、win_rate、profit_loss_ratio及warningstrades.csv逐笔交易记录开仓buy/sell、平仓close、到期exercise/expire、提前行权early_exercise、拒单rejectgreeks.csv每日组合 Greeks 聚合delta/gamma/theta/vega/rho与num_positionsohlcv_{code}.csv标的原始 K 线数据此外引擎还会调用write_run_card生成运行卡片run card记录配置、数据源、策略文件路径与内容过滤警告见 options_portfolio.py。指标计算逻辑集中在_calc_options_metrics见 options_portfolio.py对空净值路径、非有限终值、零波动率收益等边界情况都会输出 JSON 安全的undefined指标并附带 warnings不会因OverflowError或NaN崩溃。九、配套工具options_pricing与options_payoff9.1options_pricing单次定价工具Agent 可调用options_pricing工具做一次性定价例如Call the options_pricing tool with: spot: 50000 strike: 52000 expiry_days: 30 volatility: 0.6 option_type: call返回理论价格与五大 Greeks适合交互式分析。该工具实现位于 options_pricing_tool.py底层复用src.quantlib.options的bs_price/bs_greeks工具只负责合并与展示舍入。工具行为契约由 test_options_pricing_degenerate.py 固化正常路径返回status: ok价格与 Greeks 保留 6 位小数如 30 天平值看涨spot100、strike100、σ0.25理论价约 3.0626expiry_days 0被识别为合法到期状态返回status: degenerate与警示仍返回内在价值而不是报错σ ≤ 0、spot/strike ≤ 0、负期限、非法option_type、NaN/Inf 输入一律返回错误信封结果强制为严格 JSONallow_nanFalse杜绝NaN泄漏。9.2options_payoff到期收益与情景分析工具options_payoff工具见 options_payoff_tool.py基于 options_payoff.py 的expiry_payoff与scenario_grid可对一个多腿组合计算到期收益曲线按分段线性函数解析求解盈亏平衡点breakevens与连续零收益区间即使展示网格未包含某个行权价也能得到正确的盈亏平衡与有限极值见 options_payoff.py解析极值max_profit/max_loss并判断左右尾是否无界profit_unbounded/loss_unbounded情景矩阵在到期前任一时间点按 spot × 波动率网格计算逐腿 BS 盯市 PnL入场成本只按入场 spot/IV 固定一次。内置的bull_call_spread、long_straddle、iron_condor构造器与参数校验qty必须为非零整数、strike 必须为正有限值等可避免手工拼装组合时的低级错误。十、端到端使用流程小结在code/signal_engine.py中实现SignalEngine.generate返回符合上文的指令列表编写config.json将engine设为options并按需配置options_config运行回测runner.py自动路由到 options_portfolio.py 的run_options_backtest在artifacts/中检查equity.csv、metrics.csv、trades.csv、greeks.csv与ohlcv_{code}.csv用options_pricing做单点定价校验用options_payoff做组合到期收益与情景敏感性分析验证策略结构是否符合预期。该框架适用于加密货币与股票期权两大类标的前者如BTC-USDT乘数通常为 1、无到期结算的现货交割差异小后者如 A 股000300.SH期权需注意合约乘数与欧式行权约束。无论是研究备兑/保护类对冲策略还是验证铁鹰、蝶式等波动率中性结构这条合成数据 BS 定价 多腿信号的链路都能在无真实期权行情的前提下给出结构完整、可复现的理论验证结果。【免费下载链接】Vibe-TradingVibe-Trading: Your Personal Trading Agent项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考