期权定价Python实现
Posted 最老程序员闫涛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了期权定价Python实现相关的知识,希望对你有一定的参考价值。
期权定价公式
期权定价通常使用BSM公式,如下所示:
C
(
S
t
,
K
,
t
,
T
,
r
,
σ
)
=
S
t
N
(
d
1
)
−
e
−
r
(
T
−
t
)
K
N
(
d
2
)
(1.1)
C(S_{t}, K, t, T, r, \\sigma)=S_{t} N(d_{1})-e^{-r(T-t)}KN(d_{2}) \\tag{1.1}
C(St,K,t,T,r,σ)=StN(d1)−e−r(T−t)KN(d2)(1.1)
其中
N
(
d
)
N(d)
N(d)为标准正态分布
x
∼
N
(
0
,
1
)
x \\sim N(0,1)
x∼N(0,1)时
x
<
d
x<d
x<d时的概率,如下所示:
N
(
d
)
=
1
2
π
∫
−
∞
d
e
−
1
2
x
2
d
x
(1.2)
N(d)=\\frac{1}{\\sqrt{2\\pi}} \\int^{d}_{-\\infty} e^{-\\frac{1}{2}x^{2}}dx \\tag{1.2}
N(d)=2π1∫−∞de−21x2dx(1.2)
式中
d
1
d_{1}
d1和
d
2
d_{2}
d2为两个常数,定义为:
d
1
=
log
S
t
K
+
(
r
+
σ
2
2
)
(
T
−
t
)
σ
T
−
t
(1.3)
d_{1}=\\frac{\\log \\frac{S_{t}}{K} + (r+\\frac{\\sigma^{2}}{2})(T-t) }{\\sigma \\sqrt{T-t}} \\tag{1.3}
d1=σT−tlogKSt+(r+2σ2)(T−t)(1.3)
d
2
=
log
S
t
K
+
(
r
−
σ
2
2
)
(
T
−
t
)
σ
T
−
t
(1.4)
d_{2}=\\frac{\\log \\frac{S_{t}}{K} + (r-\\frac{\\sigma ^{2}}{2})(T-t)}{\\sigma \\sqrt{T-t}} \\tag{1.4}
d2=σT−tlogKSt+(r−2σ2)(T−t)(1.4)
上式中的符号说明如下所示:
- C:期权价格;
- S t S_{t} St:标的资产价格;
- K:期权行权价格;
- t:当前时间;
- T:期权到期时间;
- r:短期无风险利率;
- σ \\sigma σ:波动率;
迭代法
我们在初始状态下,先设定
σ
\\sigma
σ为一个随机值
σ
0
i
m
p
\\sigma ^{imp}_{0}
σ0imp,其中上标imp代表是隐含波动率,下标代表是第0步。将
σ
0
i
m
p
\\sigma ^{imp} _{0}
σ0imp代入上面的公式,就可以求出一个期权的计算值
C
^
\\hat{C}
C^,其与当前市场上的期权价格
C
C
C的差值可以用来代表我们当初随机取的
σ
0
i
m
p
\\sigma ^{imp}_{0}
σ0imp接近真实值的程度。 以上是关于期权定价Python实现的主要内容,如果未能解决你的问题,请参考以下文章
我们可以通过牛顿法来求解,我们首先求出
∂
C
∂
σ
\\frac{\\partial{C}}{\\partial{\\sigma}}
∂σ∂C:
v
e
g
a
=
∂
C
∂
σ
=
S
t
N
′
(
d
1
)
)
T
−
t
(1.5)
vega=\\frac{\\partial{C}}{\\partial{\\sigma}} = S_{t} N'(d_{1})) \\sqrt{T-t} \\tag{1.5}
vega=∂σ∂C=StN′(d1))T−t(1.5)
我们可以通过迭代法来找到更好的
σ
\\sigma
σ的值:
σ
n
+
1
i
m
p
=
σ
n
i
m
p
−
1
v
e
g
a
(
C
^
n
−
C
)
(1.6)
\\sigma ^{imp}_{n+1} = \\sigma ^{imp}_{n} - \\frac{1}{vega}(\\hat{C}_{n}-C) \\tag{1.6}
σn+1imp=σnimp−vega1(C^n−C)(1.6)
上式中
n
n
n代表迭代步数,C代表期权的真实价格,
C
^
n
\\hat{C}_{n}
<