VBA金融建模——期权定价

期权定价的原理

期权是什么:
8月,某黑心商人要去老王那里进一批玉米,玉米的价格为3000元/斤。但是该黑心商人害怕3个月后玉米涨价,就先付了1000元定金(权利金),跟老王说我要3个月后仍旧以这个价格3000元/斤买入你的玉米。3个月后,只有两个结果,第一个,涨价到了5000元/斤了,那商人美滋滋,还是以3000元/斤的价格买入。第二个,跌到了2000元/斤,那肯定不买了,但是定金(权利金)也不退还。
期权按分类:
按期权的权利划分:看涨期权和看跌期权。按期权的种类划分:欧式期权和美式期权。按行权时间划分:欧式期权、美式期权、百慕大期权。

划分标准 名称
期权的权利 看涨期权:购买,也就是上面黑心商人进行的就是看涨期权的购买
期权的权利 看跌期权:卖出
期权的种类 欧式期权:只能在到期日当天,也就是黑心商人进行的
期权的种类 美式期权:可以在到期日和到期日之前的任何时间

期权定价:
期权有不同的定价方式。
B-S期权定价
B-S-M定价模型的计算是建立在“资产价格服从正态分布”、“资产价格的波动率为常数”等前提之上。
以欧式看涨期权为例,也就是我们前文中提到的黑心商人买卖玉米这个期权交易事件。

c—期权价格,就是玉米的价格在3个月内每时每刻的价格,可以理解为一个瞬间值
K—行权价
S0—标的物现价,就是前面交易时候的3000元/斤
T—期权年化到期时间
r—年化连续复利利率
σ^2—年化方差
N(x)—正态分布累积分布函数
c = S 0 N ( d 1 ) − K e − r T N ( d 2 ) c=S0N(d1)-Ke^{-rT}N(d2) c=S0N(d1)KerTN(d2)
d 1 = l o g ( S 0 / K ) + ( r + σ 2 / 2 ) T σ T d1=\frac{log(S0/K)+(r+\sigma^2/2)T}{\sigma\sqrt{T}} d1=σT log(S0/K)+(r+σ2/2)T
d 2 = l o g ( S 0 / K ) + ( r − σ 2 / 2 ) T σ T = d 1 − σ T d2=\frac{log(S0/K)+(r-\sigma^2/2)T}{\sigma\sqrt{T}}=d1-\sigma\sqrt{T} d2=σT log(S0/K)+(rσ2/2)T=d1σT

数学有关推导可以见知乎专栏,需要用到很多高级的数学知识,反正我也没看懂:Black-Scholes期权定价模型推导方法汇总
二叉树定价
暂空
henston frame
暂空

VBA实战

B-S期权定价
低维情况
直接无脑代入公式就可以,对于每个textbox输入参数值就可以了。

Function BSCall(Stock As Double, Exercise As Double, Rate As Double, Sigma As Double, Time As Double) As Double
Dim d1 As Double, d2 As Double
    With Application
        d1 = (.Ln(Stock / Exercise) + (Rate + (Sigma ^ 2) / 2) * Time) / (Sigma * Sqr(Time))
        d2 = (.Ln(Stock / Exercise) + (Rate - (Sigma ^ 2) / 2) * Time) / (Sigma * Sqr(Time))
        BSCall = Stock * .Norm_S_Dist(d1, True) - Exercise * Exp(-Rate * Time) * .Norm_S_Dist(d2, True)
    'Norm_S_Dist表示标准正太分布
    End With
End Function

高维情况
其中n为样本容量,或简而言之,采样次数。收敛速度越快,便意味着达到同样精度需要的采样次数越少,算法便越快。这便是使用蒙特卡洛方法对一揽子期权进行定价的优越性。 简单的代入数值在低维情况显然是不可取的。

参考网址

1、excel of finance

你可能感兴趣的:(VBA金融建模实战,算法)