布莱克—斯科尔斯—默顿(BSM)模型

18 篇文章 21 订阅 ¥299.90 ¥399.90
    BSM模型是最常用的期权定价模型之一,虽然其假设不合符市场事实,但是该模型的提出奠定了现代金融衍生品法则的基石。
   该模型在学界的发展:
   早期的期权定价大多采用Black-Scholes(B-S)期权定价模型,B-S模型假定标的资产收益率服从正态分布且波动率是常数,但是这一假定无法解释“波动率微笑”和“杠杆效应”。在随后的研究中,不断有学者对B-S模型进行改进,例如修正常数波动率、重新刻画资产波动率分布等。
   随机波动率模型对B-S模型做出了优化,较为著名的模型有Heston、3/2、4/2模型。
   除了假设波动率是标的资产和时间的随机过程的随机波动率模型以外,还有一种模型是假设波动率是标的资产和时间的确定性函数的局部波动率。
   大量研究表明,随机波动性和价格跳跃是资产价格运动的内在特征。当市场上发生突发情况时,随机波动率模型中需要引入跳过程来描述这种突发情况。
   此外,尽管仿射型Heston随机波动模型在期权解析定价上带来极大便利,但是其无法较好地描述金融时间序列的非线性特征。通过在Heston模型方差过程的扩散项中引入非仿射参数建立非仿射随机波动率模型,可以刻画更丰富的资产价格行为。
   B-S模型认为期权的标的资产价格服从扩散模型,学者们不断对扩散模型进行改进并得到相应的期权定价模型,如跳扩散期权价格模型、随机波动率模型、非仿射随机波动率期权定价模型等,这些模型统称为基于参数扩散过程的期权定价模型。后有学者把扩散方程设定为非参数形式,建立了基于非参数扩散过程的期权定价模型。
   近年来学者们在期权定价模型上取得了长足进步,但是这些改进模型仍然忽略了一些重要的影响股价走势的因素,如大盘指数与个股走势存在着长期的均衡关系。国外学者建立了股灾期间的期权定价模型。
   以上的介绍来自于笔者阅读十余篇相关文献整理的资料的一部分。


 接下来介绍两中BSM模型
 1.不带股利的BSM模型
 2.带股利的BSM模型
 以不带股利的BSM模型为例,其表达式为:

在这里插入图片描述
带股利的模型则是将股利D贴现后,用股票在t时刻的价值减去股利现值。

接下来介绍两种模型的求解方法,使用python求解,代码为:

不带股利的BSM模型

# Black-Scholes-Merton (1973) European Call & Put Valuation

from pylab import plt
plt.style.use('seaborn')
%matplotlib inline
import math
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from scipy.integrate import quad
mpl.rcParams['font.family'] = 'serif'

#
# Helper Functions
#


def dN(x):
    ''' Probability density function of standard normal random variable x. ''' #标准正态随机变量 x 的概率密度函数
    return math.exp(-0.5 * x ** 2) / math.sqrt(2 * math.pi)


def N(d):
    ''' Cumulative density function of standard normal random variable x. '''
    return quad(lambda x: dN(x), -20, d, limit=50)[0]


def d1f(St, K, t, T, r, sigma):#设置函数d1
    ''' Black-Scholes-Merton d1 function.
        Parameters see e.g. BSM_call_value function. '''
    d1 = (math.log(St / K) + (r + 0.5 * sigma ** 2)* (T - t)) / (sigma * math.sqrt(T - t))
    return d1

#
# Valuation Functions
#

#欧式看涨期权函数
def BSM_call_value(St, K, t, T, r, sigma):
    ''' Calculates Black-Scholes-Merton European call option value.

    Parameters
    ==========
    St : float
        stock/index level at time t
    K : float
        strike price
    t : float
        valuation date
    T : float
        date of maturity/time-to-maturity if t = 0; T > t
    r : float
        constant, risk-less short rate
    sigma : float
        volatility

    Returns
    =======
    call_value : float
        European call present value at t
    '''
    d1 = d1f(St, K, t, T, r, sigma)
    d2 = d1 - sigma * math.sqrt(T - t)
    call_value = St * N(d1) - math.exp(-r * (T - t)) * K * N(d2)
    return call_value

#欧式看跌期权函数
def BSM_put_value(St, K, t, T, r, sigma):
    ''' Calculates Black-Scholes-Merton European put option value.

    Parameters
    ==========
    St : float
        stock/index level at time t
    K : float
        strike price
    t : float
        valuation date
    T : float
        date of maturity/time-to-maturity if t = 0; T > t
    r : float
        constant, risk-less short rate
    sigma : float
        volatility

    Returns
    =======
    put_value : float
        European put present value at t
    '''
    put_value = BSM_call_value(St, K, t, T, r, sigma) \
        - St + math.exp(-r * (T - t)) * K
    return put_value

# 赋值
St = 100.00  # initial index level
K = 100.00  # strike level
T = 1.  # call option maturity
r = 0.05  # constant short rate
sigma = 0.2  # constant volatility of diffusion
t=0
print('BSM模型求解的看涨期权价格为:',BSM_call_value(St, K, t, T, r, sigma))
print('BSM模型求解的看跌期权价格为:',BSM_put_value(St, K, t, T, r, sigma))

求解后的结果如下:
BSM模型求解的看涨期权价格为: 10.45058357218553
BSM模型求解的看跌期权价格为: 5.573526022256942

带股利的BSM模型
以上程序可以再次运行,修改参数即可
首先求出股票价格减去股利现值后的股票价格

Su=St-D*np.exp(-((t)*r))
Su

然后设置参数

# 赋值
St = 100.00  # initial index level
K = 100.00  # strike level
T = 1.  # call option maturity
r = 0.05  # constant short rate
sigma=0.2 # constant volatility of diffusion
t=20/360
D=2
print('BSM模型求解的看涨期权价格为:',BSM_call_value(St, K, t, T, r, sigma))
print('BSM模型求解的看跌期权价格为:',BSM_put_value(St, K, t, T, r, sigma))

结果如下:
BSM模型求解的看涨期权价格为: 10.090922223626734
BSM模型求解的看跌期权价格为: 5.478462396092041

最后,可以根据公式画出期权现值与行权价、到期日、短期利率、波动率的关系
以现值和执行价的代码为例

# C(K) plot现值与执行价的关系
    plt.subplot(221)
    klist = np.linspace(80, 120, points)
    vlist = [function(Su, K, t, T, r, sigma) for K in klist]
    plt.plot(klist, vlist)
    plt.grid(True)
    plt.xlabel('strike $K$')
    plt.ylabel('present value')

结果如下:
不带股利的BSM模型(看涨期权)
在这里插入图片描述
带股利的BSM模型(看跌期权)
在这里插入图片描述
这期分享就到这里,边学习变分享。

  • 11
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
KMV模型是一种用于评估企业信用风险的模型,它利用期权定价思路对贷款进行评估,并衡量违约风险。KMV模型认为,贷款的信用风险是由债务人的资产市场价值决定的,而资产的市场价值无法直接观测到。因此,KMV模型将银行的贷款问题倒转一个角度,从债务人的资产市场价值出发来评估信用风险。 在MATLAB中实现KMV模型,可以使用布莱克-斯科尔斯-莫顿公式(Black-Scholes-Merton Equation)对期权进行定价。这个公式是一个基于随机几何布朗运动的偏微分方程,可以用来计算期权的价格。通过将贷款视为一个期权,可以使用布莱克-斯科尔斯-莫顿公式来计算贷款的价值,并衡量违约风险。 以下是一个使用KMV模型的MATLAB算法的示例: ```matlab % KMV模型的MATLAB算法示例 % 输入参数 S = 100; % 资产市场价值 K = 100; % 贷款本金 r = 0.05; % 无风险利率 T = 1; % 贷款期限 sigma = 0.2; % 资产价格波动率 % 使用布莱克-斯科尔斯-莫顿公式计算期权价值 d1 = (log(S/K) + (r + 0.5*sigma^2)*T) / (sigma*sqrt(T)); d2 = d1 - sigma*sqrt(T); V = S*normcdf(d1) - K*exp(-r*T)*normcdf(d2); % 计算违约概率 PD = 1 - normcdf(d2); % 输出结果 disp(['贷款价值:', num2str(V)]); disp(['违约概率:', num2str(PD)]); ``` 这个示例代码中,我们假设资产市场价值为100,贷款本金为100,无风险利率为0.05,贷款期限为1年,资产价格波动率为0.2。通过计算布莱克-斯科尔斯-莫顿公式中的d1和d2,然后使用这些值计算期权价值V和违约概率PD。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马尔可夫宽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值