功能说明
本代码实现了基于指数期权执行价格的量化交易策略分析框架,主要功能包括:1) 计算期权希腊字母指标(Delta、Gamma、Theta等);2) 构建执行价格与标的资产价格关系的定价模型;3) 生成基于执行价格偏离度的套利信号;4) 回测不同执行价格组合的收益风险特征。该工具用于帮助交易者理解执行价格在期权定价和策略构建中的核心作用,适用于波动率套利、价差交易等场景。潜在风险包括模型假设失效导致的定价误差、流动性不足引发的滑点风险以及极端市场条件下的策略失效。
执行价格的理论地位与市场实践
执行价格作为期权合约的核心要素
执行价格(Strike Price)是期权合约中约定的未来买卖标的资产的价格,其设定直接决定了期权的内在价值和时间价值。在Black-Scholes-Merton模型中,执行价格K与标的资产价格S的关系通过d1和d2参数体现,构成了期权定价的基础。当S=K时,期权处于平值状态,此时时间价值占比最高;实值期权(S>K for call)具有内在价值,虚值期权(S<K for call)则完全依赖时间价值。
执行价格间距的市场设计逻辑
交易所对执行价格间距的设置遵循严格的数学规则,通常采用BSJAM(Binomial Strike Justification and Management)算法动态调整。例如,标普500指数期权(SPX)的执行价格间距根据前一交易日收盘价的百分比阈值确定,当标的资产价格超过$250时,间距扩展为$25。这种设计确保了流动性在不同执行价格上的合理分布,同时控制了挂单簿的深度。
执行价格与隐含波动率曲面的关系
通过观察不同执行价格对应的隐含波动率,可以构建波动率微笑或偏斜曲线。以VIX指数期权为例,低执行价格(价外看跌)的隐含波动率显著高于高执行价格,反映了市场对尾部风险的溢价。这种偏斜度可通过Skew Index量化,其计算公式为:
defcalculate_skew_index(option_chain,spot_price):""" 计算期权隐含波动率偏斜指数 :param option_chain: 包含不同执行价格的期权数据字典 :param spot_price: 标的资产当前价格 :return: Skew Index (0-100) """atm_iv=option_chain[spot_price]['implied_volatility']lower_strike_iv=option_chain[spot_price*0.9]['implied_volatility']upper_strike_iv=option_chain[spot_price*1.1]['implied_volatility']skew=((lower_strike_iv-atm_iv)+(upper_strike_iv-atm_iv))/(2*atm_iv)returnmin(max(skew*100,0),100)执行价格影响定价模型的关键维度
Delta值与执行价格的非线性关系
Delta衡量期权价格对标的资产价格变动的敏感度,其与执行价格的关系呈现典型的"S"型曲线。对于看涨期权,当S>>K时,Delta趋近于1;当S<<K时,Delta趋近于0。在Python中,可通过数值微分法精确计算Delta:
importnumpyasnpfromscipy.statsimportnormdefblack_scholes_delta(S,K,T,r,sigma,option_type='call'):""" 计算Black-Scholes模型下的Delta值 :param S: 标的资产价格 :param K: 执行价格 :param T: 到期时间(年) :param r: 无风险利率 :param sigma: 波动率 :param option_type: 'call' or 'put' :return: Delta值 """d1=(np.log(S/K)+(r+0.5*sigma**2)*T)/(sigma*np.sqrt(T))ifoption_type=='call':returnnorm.cdf(d1)else:returnnorm.cdf(d1)-1Gamma风险与执行价格的选择
Gamma表示Delta对标的资产价格变化的二阶导数,反映套期保值的误差风险。平值期权(ATM)的Gamma值最大,随着执行价格远离现货价格,Gamma迅速衰减。在跨式组合(Straddle)中,选择多个执行价格可分散Gamma风险,但需权衡权利金成本。以下代码演示如何优化Gamma中性组合:
defoptimize_gamma_neutral_portfolio(option_chain,target_gamma=0.1):""" 构建Gamma中性期权组合 :param option_chain: 期权链数据 :param target_gamma: 目标Gamma值 :return: 最优执行价格组合及权重 """strikes=sorted(option_chain.keys())gamma_matrix=np.array([[option_chain[k]['gamma']forkinstrikes]for_instrikes])weights=np.linalg.solve(gamma_matrix,target_gamma)return{strikes[i]:weights[i]foriinrange(len(strikes))}Theta衰减速度的执行价格依赖性
Theta衡量期权价值随时间流逝的变化率,其绝对值与执行价格密切相关。价外期权(OTM)的Theta衰减较慢,而平值期权的Theta衰减最快。在蝶式价差(Butterfly Spread)中,通过买入两个中间执行价格的期权并卖出一个更低和一个更高的执行价格,可实现Theta收益的最大化。
基于执行价格的交易策略实现
垂直价差策略的量化建模
垂直价差(Vertical Spread)通过同时买入和卖出相同类型但不同行权价的期权,限制最大损失的同时保留部分上行收益。以牛市看涨价差(Bull Call Spread)为例,策略构建步骤如下:
- 选择两个执行价格K1 < K2
- 买入1手K1看涨期权,支付权利金C1
- 卖出1手K2看涨期权,获得权利金C2
- 净权利金支出= C1 - C2
- 最大收益= (K2 - K1) - (C1 - C2)
Python实现代码:
classBullCallSpread:def__init__(self,lower_strike,upper_strike,quantity=1):self.lower_strike=lower_strike self.upper_strike=upper_strike self.quantity=quantity self.net_premium=Noneself.max_profit=Noneself.breakeven_point=Nonedefcalculate_payoff(self,spot_price,option_prices):""" 计算策略在不同标的资产价格下的收益 :param spot_price: 标的资产价格 :param option_prices: 各执行价格对应的期权价格字典 :return: 策略总收益 """lower_call_price=option_prices[self.lower_strike]upper_call_price=option_prices[self.upper_strike]self.net_premium=lower_call_price-upper_call_price self.max_profit=(self.upper_strike-self.lower_strike)-self.net_premium self.breakeven_point=self.lower_strike+self.net_premiumifspot_price<=self.lower_strike:return-self.net_premium*self.quantityelifself.lower_strike<spot_price<self.upper_strike:return(spot_price-self.lower_strike-self.net_premium)*self.quantityelse:returnself.max_profit*self.quantity执行价格偏离度的统计套利
通过监测标的资产价格与执行价格的相对位置,可构建均值回归策略。定义执行价格偏离度指标:
D e v i a t i o n = S − K K × 100 Deviation = \frac{S - K}{K} \times 100Deviation=KS−K×100
当Deviation超过±2σ时触发交易信号,具体实现如下:
defdeviation_strategy(historical_data,current_spot,strike_price,window=20):""" 执行价格偏离度统计套利策略 :param historical_data: 历史价格序列 :param current_spot: 当前标的资产价格 :param strike_price: 目标执行价格 :param window: 计算窗口大小 :return: 交易信号(-1, 0, 1) """deviations=[(p-strike_price)/strike_price*100forpinhistorical_data]mean_dev=np.mean(deviations[-window:])std_dev=np.std(deviations[-window:])current_dev=(current_spot-strike_price)/strike_price*100ifcurrent_dev>mean_dev+2*std_dev:return-1# 卖出标的资产/买入看跌期权elifcurrent_dev<mean_dev-2*std_dev:return1# 买入标的资产/卖出看涨期权else:return0多执行价格组合的风险对冲
使用Delta-Gamma-Vega中性组合对冲单一执行价格头寸的风险。首先计算各执行价格期权的希腊字母矩阵,然后求解线性方程组得到对冲比例。示例代码:
defhedge_single_option(option_to_hedge,option_chain,risk_metrics=['delta','gamma','vega']):""" 使用其他执行价格期权对冲单一期权头寸 :param option_to_hedge: 需要对冲的期权字典 {'strike': price, ...} :param option_chain: 可用对冲期权集合 :param risk_metrics: 需要对冲的风险指标列表 :return: 对冲比例字典 """# 构建希腊字母矩阵greek_matrix=[]forstrikeinoption_chain:greeks=[option_chain[strike][g]forginrisk_metrics]greek_matrix.append(greeks)greek_matrix=np.array(greek_matrix)# 目标希腊字母向量target_greeks=[option_to_hedge[g]forginrisk_metrics]# 求解最小二乘解hedge_ratios,residuals,rank,singular_values=np.linalg.lstsq(greek_matrix,target_greeks,rcond=None)return{list(option_chain.keys())[i]:hedge_ratios[i]foriinrange(len(option_chain))}执行价格相关风险的量化管理
流动性风险的执行价格敏感性
不同执行价格的期权流动性差异显著,通常用买卖价差(Bid-Ask Spread)和订单簿深度衡量。以下函数计算执行价格的流动性评分:
defliquidity_score(option_chain,strike_price,depth=5):""" 计算指定执行价格的流动性评分(0-100) :param option_chain: 期权链数据 :param strike_price: 目标执行价格 :param depth: 考虑的订单簿深度层数 :return: 流动性评分 """ifstrike_pricenotinoption_chain:return0bid_ask_spread=option_chain[strike_price]['bid']-option_chain[strike_price]['ask']order_book_depth=sum([level['volume']forlevelinoption_chain[strike_price]['order_book'][:depth]])# 标准化处理max_spread=max(abs(o['bid']-o['ask'])foroinoption_chain.values())max_depth=max(sum(level['volume']forlevelino['order_book'][:depth])foroinoption_chain.values())spread_score=100*(1-bid_ask_spread/max_spread)depth_score=100*(order_book_depth/max_depth)return(spread_score*0.4)+(depth_score*0.6)执行价格跳空风险的情景分析
在剧烈波动市场中,标的资产价格可能快速穿越多个执行价格区间,导致原有策略失效。通过蒙特卡洛模拟生成极端价格路径,评估执行价格跳空带来的风险敞口:
defmonte_carlo_jump_risk(option_portfolio,num_simulations=10000,days=30):""" 蒙特卡洛模拟评估执行价格跳空风险 :param option_portfolio: 期权投资组合字典 {strike: position} :param num_simulations: 模拟次数 :param days: 预测天数 :return: VaR值和ES值 """# 获取标的资产价格过程参数S0=get_spot_price()mu=get_drift_rate()sigma=get_volatility()# 生成随机价格路径paths=np.zeros((num_simulations,days+1))paths[:,0]=S0fortinrange(1,days+1):z=np.random.normal(0,1,num_simulations)paths[:,t]=paths[:,t-1]*np.exp((mu-0.5*sigma**2)*dt+sigma*np.sqrt(dt)*z)# 计算每个模拟路径的最大损失losses=[]forpathinpaths:final_price=path[-1]portfolio_value=sum(option_portfolio[strike]*calculate_option_price(final_price,strike,remaining_days)forstrike,positioninoption_portfolio.items())initial_value=sum(option_portfolio[strike]*calculate_option_price(S0,strike,total_days)forstrike,positioninoption_portfolio.items())loss=initial_value-portfolio_value losses.append(loss)# 计算VaR和ESvar_95=np.percentile(losses,95)es_95=np.mean([lforlinlossesifl>=var_95])return{'VaR_95':var_95,'ES_95':es_95}