主页 > imtoken苹果手机不能下载 > Python 如何使用蒙特卡罗模拟期权定价

Python 如何使用蒙特卡罗模拟期权定价

imtoken苹果手机不能下载 2023-01-17 15:08:13

本文主要介绍Python如何使用蒙特卡罗模拟期权定价的相关知识。内容详细易懂,操作简单快捷,具有一定的参考价值。相信看完这篇文章,在Python定价文章中如何使用蒙特卡洛模拟选项会有收获,一起来看看吧。

期权是一种合同,它赋予买方在未来某个时间点以特定价格购买或出售资产的权利。这些被称为衍生品的合约出于多种原因进行交易,但其中一个常见用途是对冲资产价格以不利方式变动时产生的风险。

期权,买或卖的权利,也有价格。 Black Scholes 模型描述了一种确定期权公平价格的方法,但还有许多其他方法可以确定价格。

选项及其价值

欧式期权只能在未来预定日期(称为到期日)之后使用(或行权),可以用字母 T 表示。

看涨期权赋予期权持有人以已知价格购买的权利。如果资产的到期价格(以 ST 表示)高于行使价 K,则看涨期权赚钱,否则它一文不值。

CT=max(0,ST−K)

同样,看跌期权是出售资产的权利。看跌期权在到期日资产价格 ST 低于行使价 K 时赚钱,否则一文不值。

PT=max(0,K−ST)

以下是看跌期权和看涨期权到期时的收益图。我们的资产价格在 x 轴上,回报在 y 轴上。

Python怎么利用蒙特卡罗模拟期权定价

风险中性估值

为了使用蒙特卡洛模拟为期权定价,我们使用风险中性估值,其中衍生品的公允价值是其未来收益的预期值。

因此,在到期前的任何日期,表示为 t,期权的价值是其到期时预期收益的现值,T。

Ct=PV(E[max(0,ST−K)])

Pt=PV(E[max(0,K−ST)])

在风险中性估值下,我们假设标的资产将获得平均无风险利率。因此,为了计算任何时间 t 的期权收益,我们以该利率折现收益。现在我们有了计算现值 PV 的方法。

Python怎么利用蒙特卡罗模拟期权定价

在上面的公式中,所有这些变量都是已知的,除了 St,所以我们的模拟将提供 St。

为了给期权定价,我们将创建一个模拟,为资产 St 的最终价格提供多个观察值。通过平均所有回报,我们得到回报的预期值。

资产价格建模

Black Scholes 模型中使用的股票价格行为模型假设我们有一个已知的波动率,我们有一个无风险利率,并且资产的价格遵循几何布朗运动。

几何布朗运动是一个随机过程,其中随机变量的对数服从正态分布。这种类型的过程通过对数正态分布分配价格。

所以现在我们有一种方法可以计算资产在时间 T 的价格:

Python怎么利用蒙特卡罗模拟期权定价

为此,我们需要知道:

r 是我们想要折现的无风险利率。 σ 是波动率,股票收益的年化标准差。 (T-t) 为我们提供了年化的到期时间。例如,对于 30 天期权,这将是 30/365=0.082...S 是时间 t 的标的资产的价格。 ε 是我们的随机值。它的分布必须是标准正态分布(均值 0.0,标准差 1.0)

期权定价

为了模拟过程中的期权定价,我们生成了许多资产可能到期的价格,计算每个生成价格的期权收益,取平均值,并折现最终价值。

在创建完整的模拟之前,我们将通过一个 10 次运行的小示例。假设我们有一个具有以下价值的资产:S = 100.$00 和 σ = 20%,我们想为半年到期的看涨期权定价,行使价为 $110.00,我们的无风险利率为 1%。

贴现随机可变资产价格收益率

1.3620

p>

120.64

10.64

10.58

-0.7784

89.13

0.00

0.00

-0.9408

87.11

0.00

0.00

p>

0.2227

102.69

0.00

0.00

-0.0364

98.99

0.00

0.00

-1.4303

81.28

0.00

0.00

-0.8306

88.47

0.00

0.00

1.5155

123.28

13.28

13.21

-1.5679

79.71

0.00

0.00

-1.6718

78.55

0.00

0.00

平均折现收益率值得出我们的看涨期权价格为2.$38。我们执行的模拟越多,价格就越准确。

现在我们可以看到模拟如何生成价格,让我们构建一个小的 Python 脚本,它可以为期权定价并查看它是否与真实的东西相匹配。让我们看一个实际的例子。

为实物期权定价

在下图中,我们有一份执行价格为 86 美元0.00 的 Google 看涨期权报价,到期日为 2013 年 9 月 21 日。我们还可以看到它的最后交易价格为 $14.$50。这个例子在尝试定价时为我们提供了一个期权的目标价格。

Python怎么利用蒙特卡罗模拟期权定价

此处未指定波动率、无风险利率、当前股价。波动率是一个相当复杂的话题,因此出于本文的目的,我们假设我们知道这个特定选项的波动率为 20.76%。通过查看各种来源可以找到该股票的当前价格为85美元7.29美元。

对于无风险利率,我们可以使用与我们选择到期的相同的美国 LIBOR 利率;我们的期权在三周左右到期,由于没有三周利率,我们将使用两周的利率近似值期权合约怎么赚钱,即0.14%。

接下来是Python代码的实现,首先我们将写下我们将如何生成资产价格。

def generate_asset_price(S,v,r,T):
    return S * exp((r - 0.5 * v**2) * T + v * sqrt(T) * gauss(0,1.0))

我们知道所有的输入值期权合约怎么赚钱,所以我们可以这样设置它们:

S = 857.29 # underlying price
v = 0.2076 # vol of 20.76%
r = 0.0014 # rate of 0.14%
T = (datetime.date(2013,9,21) - datetime.date(2013,9,3)).days / 365.0
print generate_asset_price(S,v,r,T)
>>> 862.1783726682384

现在我们需要能够计算这个生成价格的回报。回想一下,我们说过看涨期权在到期时价值 ST-K 或 0,我们将其表示为一个函数并将其应用于我们生成的资产的价格。

def call_payoff(S_T, K):
    return max(S_T - K, 0.0)
print call_payoff(862.18, 860)
>>> 2.1799999999

完整的模拟

现在让我们组合模块并为 Google 选项定价。

import datetime
from random import gauss
from math import exp, sqrt
def generate_asset_price(S,v,r,T):
    return S * exp((r - 0.5 * v**2) * T + v * sqrt(T) * gauss(0,1.0))
def call_payoff(S_T,K):
    return max(0.0,S_T-K)
S = 857.29 # underlying price
v = 0.2076 # vol of 20.76%
r = 0.0014 # rate of 0.14%
T = (datetime.date(2013,9,21) - datetime.date(2013,9,3)).days / 365.0
K = 860.
simulations = 90000
payoffs = []
discount_factor = math.exp(-r * T)
for i in xrange(simulations):
    S_T = generate_asset_price(S,v,r,T)
    payoffs.append(
        call_payoff(S_T, K)
    )
price = discount_factor * (sum(payoffs) / float(simulations))
print 'Price: %.4f' % price

运行程序的结果如下,与我们在市场上观察到的谷歌选项的价格相符。

价格:14.5069

需要注意的是,我们刚刚计算的谷歌期权实际上是美式期权,我们只是将其定价为欧式期权,没有考虑期权可以提前行权的可能性,但我们还是得出了正确的价格.

这是因为文章中对 Google 等非派息股票的美式看涨期权的价格与欧式看涨期权的价格相同。从理论上讲,当股票不支付股息时,提前行权并不是最佳选择。如果期权从未提前行权,美式期权的价格可以像欧式期权一样计算。

《Python如何使用蒙特卡罗模拟期权定价》一文的内容介绍到这里,感谢阅读!相信大家对《Python如何使用蒙特卡洛模拟期权定价》有一定的了解。想了解更多,请关注易宿云行业资讯频道。