蒙特卡洛期权定价matlab,finnerty期权定价模型
期权是一种契约,赋予买方在未来某个时刻以特定价格买卖资产的权利。本文会用到蒙特卡罗模拟期权定价,感兴趣的朋友可以看看。
00-1010期权,其价值风险中性估值模拟资产价格期权定价是实物期权定价。完全模拟期权是一种合约,赋予买方在未来某个时刻以特定价格买卖资产的权利。这些被称为衍生产品的合同因许多原因而被交易,但一个常见的用途是当资产价格以不利的方式变化时对冲风险。
期权,即买入或卖出的权利,也是有价格的。Black Scholes模型描述了一种确定期权公允价格的方法,但是还有许多其他的方法来确定价格。
目录
欧式期权只有在未来达到一个预定的日期(称为到期日)后才能使用(或行使),这个日期可以用字母t来表示。
看涨期权赋予期权持有者以已知价格买入的权利。如果资产的到期价格(用ST表示)高于执行价格K,看涨期权就赚钱,否则就不值钱。
CT=最大值(0,ST K)
同样,看跌期权是出售资产的权利。当到期日资产价格ST低于履约价格K时,看跌期权就赚钱,否则就不值钱。
PT=max(0,K ST)
以下是看跌期权和看涨期权到期时的收益图。我们的资产价格是x轴,我们的回报是y轴。
期权,及其价值
为了使用蒙特卡罗模拟对期权定价,我们使用风险中性估值,其中衍生品的公允价值是其未来收益的预期价值。
因此,在到期日之前的任何一天,用T表示,期权的价值就是其到期收益的预期现值T。
Ct=PV(E[max(0,ST K)])
Pt=PV(E[max(0,K ST)])
在风险中性估值下,我们假设标的资产平均会得到无风险利率。因此,要计算任意时刻T的期权收益,我们必须以这个利率贴现收益。现在我们有了计算现值PV的方法。
在上面的公式中,除了St,所有这些变量都是已知的,所以St就是我们的模拟将提供的。
为了给期权定价,我们将创建一个模拟来为资产ST的最终价格提供许多观察值。通过平均所有回报,我们得到回报的预期值。
风险中性估值
Black Scholes模型中使用的股票价格行为模型假设我们有一个已知的波动率,我们有一个无风险利率,资产价格遵循几何布朗运动。
几何布朗运动是一个随机过程,其中随机变量的对数服从正态分布。这种类型的过程通过对数正态分布来分配价格。
现在我们有一个方法来计算t时刻的资产价格:
为此,我们需要知道:
r是我们要贴现的无风险利率。是波动率,即股票收益的年化标准差。(T-t)给出了年到期时间。例如,对于30天选项,这将是30/365=0.082.s是t时刻资产的价格,这是我们的随机值。其分布必须是标准正态(均值0.0,标准差1.0)。
模拟资产价格
为了在模拟过程中对期权进行定价,我们生成许多资产可能到期的价格,计算每个生成价格的期权收益,对它们进行平均,然后对最终价值进行贴现。
在创建一个完整的模拟之前,我们将通过一个10次运行的小例子。假设我们有一项资产,价值如下:S=100.00美元,=20%。我们想给半年到期的看涨期权定价。执行价格为110.00美元,我们的无风险利率为1%。
可变资产价格收益的贴现收益1.3620120.6410 . 6410.58-0.778489.130 . 000.00-0.940888.11110 . 000.0000001 . 5001
/td>
将折扣收益值平均,得出我们的看涨期权价格为 2.38 美元。 我们执行的模拟越多,价格就越准确。
现在我们可以看到模拟如何生成价格,让我们构建一个可以为期权定价的小型 Python 脚本,看看它是否与真实情况相符。 让我们看一下实际的例子。
为真实期权定价
在下图中,我们有一个谷歌看涨期权的报价,行使价为 860.00 美元,将于 2013 年 9 月 21 日到期。我们还可以看到它的最后交易价格是14.50 美元。这个例子给了我们尝试定价时,期权的一个目标价格。
此处未指定的是波动性、无风险利率、当前的股票价格。 波动率是一个相当复杂的话题,因此就本文而言,我们将假设我们知道该特定期权的波动率为 20.76%。而股票当前价格可以通过查看各种来源找到,为857.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 pricev = 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 datetimefrom 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
程序运行结果如下,这与我们在市场上观察到的此 Google 期权的价格相匹配。
Price: 14.5069
需要注意的是,我们刚刚计算的谷歌期权实际上是一个美式期权,我们只是把它定价成欧式期权,没有考虑期权可以提前行权的可能性,尽管如此,我们仍然得出了正确的价格。
这是因为,非派息股票(例如文中举例的 Google)的美式看涨期权的价格与欧式看涨期权的价格相同。理论上,当股票不支付股息时,提前行权并不是最佳选择。 如果期权永远不会提前行权,那么美式期权的价格可以像欧式期权一样进行计算。
到此这篇关于Python利用蒙特卡罗模拟期权定价 的文章就介绍到这了,更多相关Python期权定价 内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。