BSM的两个基本问题与python实现(欧式期权定价公式) 您所在的位置:网站首页 欧式看跌期权定价公式计算题及答案 BSM的两个基本问题与python实现(欧式期权定价公式)

BSM的两个基本问题与python实现(欧式期权定价公式)

2024-07-09 18:51| 来源: 网络整理| 查看: 265

在我们的定义中,定量分析是数学或统计学方法在市场数据上的应用。 ——John Forman

BSM定价模型的两个基本问题:

隐含波动率 以某些到期日的期权报价倒推出这些期权的隐含波动率,并汇出图表——这是期权交易者和风险管理者每天都要面对的任务。蒙特卡洛模拟 欧式期权价值的计算。通过蒙特卡罗技术,模拟股票在一段时间中变化。 像Black-Scholes-Merton(1973)这样有深远影响的期权定价公式中,隐含波动率是在其他条件不变的情况下输入公式,得出不同期权行权价格和到期日测得市场报价的那些波动率值。

BSM公式(1-1)

C ( S t , K , t , T , r ) = S t ⋅ N ( d 1 ) − e − r ( T − t ) ⋅ K ⋅ N ( d 2 ) C(S_t,K,t,T,r)=S_t\cdot N(d_1)-e^{-r(T-t)} \cdot K\cdot N(d_2) C(St​,K,t,T,r)=St​⋅N(d1​)−e−r(T−t)⋅K⋅N(d2​) N ( d ) = 1 2 π ∫ − ∞ d e − 1 / 2 x 2 d x N(d)=\frac{1}{\sqrt{2\pi}}\int_{-\infty}^{d}{e^{-1/2}x^2}dx N(d)=2π ​1​∫−∞d​e−1/2x2dx d 1 = l o g ( s T / K ) + ( r + σ 2 / 2 ) ( T − t ) σ T − t d_1=\frac{log(s_T/K)+(r+\sigma^2/2)(T-t)}{\sigma\sqrt{T-t}} d1​=σT−t ​log(sT​/K)+(r+σ2/2)(T−t)​ d 2 = l o g ( s T / K ) + ( r − σ 2 / 2 ) ( T − t ) σ T − t d_2=\frac{log(s_T/K)+(r-\sigma^2/2)(T-t)}{\sigma\sqrt{T-t}} d2​=σT−t ​log(sT​/K)+(r−σ2/2)(T−t)​

不同参数有如下含义: S t S_t St​ 在时点t的标的物价格水平; σ \sigma σ 标的物固定波动率(也就是收益的标准差); K K K 期权行权价格; T T T 期权到期日; r r r 固定无风险短期利率; 现在考虑欧式看涨期权的一个报价 C ∗ C^* C∗已知的情况。隐含波动率 σ i m p \sigma^{imp} σimp是公式(1-1)中的隐式方程的解。 公式(1-2) 方程式数值化求根的牛顿迭代法 σ n + 1 i m p = σ n i m p − C ( σ n i m p ) − C ∗ ∂ C ( σ n i m p ) / ∂ σ n i m p \sigma_{n+1}^{imp}=\sigma_n^{imp}-\frac{C(\sigma_n^{imp})-C^*}{\partial C(\sigma_n^{imp})/\partial \sigma_n^{imp}} σn+1imp​=σnimp​−∂C(σnimp​)/∂σnimp​C(σnimp​)−C∗​

期权定价公式对于波动率的偏微分称作Vega,公式1-3给出了Vega的闭合方式。 公式1-3 BSM模型中欧式期权的Vega ∂ C ∂ σ = S t N ( d 1 ) T − t \frac{\partial C}{\partial \sigma}=S_tN(d_1)\sqrt{T-t} ∂σ∂C​=St​N(d1​)T−t ​

1. Black-Scholes-Merton python计算公式 import numpy as np from math import sqrt, log from scipy import stats # # 欧式期权BSM定价公式 def bsm_call_value(S0, K, T, r, sigma): """ Parameters: ========== S0: float 标的物初始价格水平 K: float 行权价格 T: float 到期日 r: float 固定无风险短期利率 sigma: float 波动因子 Returns ========== value: float """ S0 = float(S0) d1 = (np.log(S0 /K) + (r + 0.5 * sigma**2) * T )/(sigma * np.sqrt(T)) d2 = (np.log(S0 /K) + (r - 0.5 * sigma**2) * T )/(sigma * np.sqrt(T)) value = (S0 * stats.norm.cdf(d1, 0, 1) - K * np.exp(-r * T) * stats.norm.cdf(d2, 0, 1)) return value def bsm_vega(S0, K, T, r, sigma): """ Vega 计算 """ S0 = float(S0) d1 = (np.log(S0/K)) + (r+0.5*sigma**2)*T /(sigma*sqrt(T)) vega = S0 * stats.norm.cdf(d1, 0, 1) * np.sqrt(T) return vega def bsm_call_imp_vol(S0, K, T, r, C0, sigma_est, it=100): for i in range(it): sigma_est -= ((bsm_call_value(S0, K, T, r, sigma_est) - C0) / bsm_vega(S0, K, T, r, sigma_est)) return sigma_est S0 = 1 K = 2 T = 2 r = 0.01 sigma = 0.1 C0 = 1 bsm_call_imp_vol(S0, K, T, r, C0, sigma, it=2000) import pandas as pd h5 = pd.HDFStore('./vstoxx_data_31032014.h5','r') futures_data = h5['futures_data'] options_data = h5['options_data'] futures_data['DATE'] = pd.to_datetime(futures_data['DATE']) options_data['DATE'] = pd.to_datetime(options_data['DATE']) futures_data['MATURITY'] = pd.to_datetime(futures_data['MATURITY']) options_data['MATURITY'] = pd.to_datetime(options_data['MATURITY']) h5.close() V0 = 17.6639 r = 0.01 # imp_vol -> implied volality options_data['IMP_VOL'] = 0.0 tol = 0.5 #tolerance for option in options_data.index: item = options_data.loc[option] forward = futures_data[futures_data['MATURITY']== \ item['MATURITY']]['PRICE'].values[0] if (forward * (1 - tol)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有