从今天开始学量化 1.Black-Scholes原理 以及 Trigeorgis二叉树模型的实现

今天开始复习(学习)量化相关知识,记点笔记以防下次忘了又学,又想半天
对于一个股票,认为股票价格变化服从布朗运动
d S ( t ) S ( t ) = μ d t + σ d B ( t ) {dS(t)\over S(t)} = μdt+σdB(t) S(t)dS(t)=μdt+σdB(t)
B(t)是从0到t时刻的偏移量
dB(t)是t时刻的偏移量

个人理解:视dB(t)服从N(0, dt),则可以认为 d 2 B ( t ) = d t d^2B(t)=dt d2B(t)=dt

假设期权的价格与股票价格和时间有关,利用泰勒展开:
d C t = ∂ C t ∂ t d t + 1 2 ∂ 2 C t ∂ t 2 d t 2 + . . . + ∂ C t ∂ S ( t ) d S ( t ) + 1 2 ∂ 2 C t ∂ S 2 ( t ) d S 2 ( t ) + . . . dC_t={\partial C_t\over \partial t}dt+{1 \over 2}{ \partial ^2 C_t\over \partial t^2}dt^2+...+{\partial C_t \over \partial S(t)}dS(t)+{1 \over 2}{\partial ^2 C_t \over \partial S^2(t)}dS^2(t)+... dCt=tCtdt+21t22Ctdt2+...+S(t)CtdS(t)+21S2(t)2CtdS2(t)+...
其中, d t 2 dt^2 dt2项及之后的项因为是高阶小量,所以忽略,而 d S 2 ( t ) = S 2 ( t ) ( μ 2 d 2 t + 2 μ σ d t d B ( t ) + σ 2 d 2 B ( t ) ) dS^2(t)=S^2(t)(μ^2d^2t+2μσdtdB(t)+σ^2d^2B(t)) dS2(t)=S2(t)(μ2d2t+2μσdtdB(t)+σ2d2B(t)),其后的项因高阶小而忽略,但 d 2 B ( t ) = d t d^2B(t)=dt d2B(t)=dt要留下

所以有
d C t = ( ∂ C t ∂ t + μ S ( t ) ∂ C t ∂ S ( t ) + 1 2 σ 2 S 2 ( t ) ∂ 2 C t ∂ S 2 ( t ) ) d t + σ S ( t ) ∂ C t ∂ S ( t ) d B ( t ) dC_t = ({\partial C_t \over \partial t}+μS(t){\partial C_t \over \partial S(t)}+{1 \over 2}σ^2S^2(t){ \partial ^2 C_t \over \partial S^2(t)})dt + σS(t){\partial C_t \over \partial S(t)}dB(t) dCt=(tCt+μS(t)S(t)Ct+21σ2S2(t)S2(t)2Ct)dt+σS(t)S(t)CtdB(t)

利用期权 d C t dC_t dCt和股票 d S ( t ) dS(t) dS(t)构建投资组合,使 d B ( t ) dB(t) dB(t)项被消除
因此我们做多1单位期货做空 ∂ C t ∂ S ( t ) \partial C_t \over \partial S(t) S(t)Ct的股票
我们持有的投资组合P,有
d P t = ( ∂ C t ∂ t + μ S ( t ) ∂ C t ∂ S ( t ) + 1 2 σ 2 S 2 ( t ) ∂ 2 C t ∂ S 2 ( t ) − μ S ( t ) ∂ C t ∂ S ( t ) ) d t dP_t= ({\partial C_t \over \partial t}+μS(t){\partial C_t \over \partial S(t)}+{1 \over 2}σ^2S^2(t){ \partial ^2 C_t \over \partial S^2(t)}-μS(t){\partial C_t \over \partial S(t)})dt dPt=(tCt+μS(t)S(t)Ct+21σ2S2(t)S2(t)2CtμS(t)S(t)Ct)dt
d P t = ( ∂ C t ∂ t + 1 2 σ 2 S 2 ( t ) ∂ 2 C t ∂ S 2 ( t ) ) d t dP_t= ({\partial C_t \over \partial t}+{1 \over 2}σ^2S^2(t){ \partial ^2 C_t \over \partial S^2(t)})dt dPt=(tCt+21σ2S2(t)S2(t)2Ct)dt
这个投资组合是无风险的,所以其收益率应当等于无风险收益率(无套利原则),故
d P t d t = r P t {dP_t \over dt}=rP_t dtdPt=rPt
∂ C t ∂ t + 1 2 σ 2 S 2 ( t ) ∂ 2 C t ∂ S 2 ( t ) = r C t − r S ( t ) ∂ C t ∂ S ( t ) {\partial C_t \over \partial t}+{1 \over 2}σ^2S^2(t){ \partial ^2 C_t \over \partial S^2(t)}=rC_t-rS(t){\partial C_t \over \partial S(t)} tCt+21σ2S2(t)S2(t)2Ct=rCtrS(t)S(t)Ct
r C t = ∂ C t ∂ t + r S ( t ) ∂ C t ∂ S ( t ) + 1 2 σ 2 S 2 ( t ) ∂ 2 C t ∂ S 2 ( t ) rC_t={\partial C_t \over \partial t}+rS(t){\partial C_t \over \partial S(t)}+{1 \over 2}σ^2S^2(t){ \partial ^2 C_t \over \partial S^2(t)} rCt=tCt+rS(t)S(t)Ct+21σ2S2(t)S2(t)2Ct
#得到了BS微分方程

利用极限二叉树法推导期权定价公式,假设有一个欧式看涨C,标的物的初始价格为S,执行价格为K,到期时间为T,无风险利率r。将时间分为n步,从初始到到期,每一步或上涨u或下跌d,根据前面的假设
u = e x p ( σ T n ) , d = e x p ( − σ T n ) u=exp(σ \sqrt {T \over n}), d=exp(-σ \sqrt {T \over n}) u=exp(σnT ),d=exp(σnT )
假设每一步,股票上涨的概率是p,则股票上涨i次下跌n-i次的概率为:
n ! ( n − i ) ! i ! p i ( 1 − p ) n − i {n! \over (n-i)!i!}p^i(1-p)^{n-i} (ni)!i!n!pi(1p)ni
到期时期权的期望收益为:
∑ i = 0 n n ! ( n − i ) ! i ! p i ( 1 − p ) n − i m a x ( S u i d n − i − K , 0 ) \sum_{i=0}^n {n! \over (n-i)!i!}p^i(1-p)^{n-i}max(Su^id^{n-i}-K,0) i=0n(ni)!i!n!pi(1p)nimax(SuidniK,0)
由于仅在 S u i d n − i − K > 0 Su^id^{n-i}-K>0 SuidniK>0时期权才可以行权

S e ( 2 i − n ) σ T n > K Se^{ (2i-n)σ \sqrt {T \over n}}>K Se(2in)σnT >K
解之可得,仅在 i > n 2 + l n ( K S ) 2 σ T n i>{n \over 2}+{ln({K \over S}) \over 2σ \sqrt {T \over n}} i>2n+2σnT ln(SK)时(令该值为 a a a),期权可以行权
故,期权的期望收益可以改写为:
∑ i > a n n ! ( n − i ) ! i ! p i ( 1 − p ) n − i m a x ( S u i d n − i − K ) \sum_{i>a}^n {n! \over (n-i)!i!}p^i(1-p)^{n-i}max(Su^id^{n-i}-K) i>an(ni)!i!n!pi(1p)nimax(SuidniK)

p怎么计算呢?
因为无套利,所以期望的收益率是无风险利率:
p u + ( 1 − p ) d = r pu+(1-p)d=r pu+(1p)d=r
p = ( r − d ) ( u − d ) p={(r-d) \over (u-d)} p=(ud)(rd)
p = e r T n − e − σ T n e σ T n − e − σ T n p={{e^{r{T \over n}}-e^{-σ \sqrt {T \over n}}} \over {e^{σ \sqrt {T \over n}}}-e^{-σ \sqrt {T \over n}}} p=eσnT eσnT ernTeσnT

再来看期望收益,首先看K的部分,定义
U 1 = ∑ i > a n n ! ( n − i ) ! i ! p i ( 1 − p ) n − i U_1=\sum_{i>a}^n {n! \over (n-i)!i!}p^i(1-p)^{n-i} U1=i>an(ni)!i!n!pi(1p)ni
是一个二项分布B(n,p)涨的次数大于 a a a的概率,当n趋于无穷是,二项分布可以看做正态分布N(np,np(1-p)),故当n趋于无穷时,
U 1 = N ( n p − a n p ( 1 − p ) ) U_1=N{({{np-a}\over {\sqrt {np(1-p)}}})} U1=N(np(1p) npa)

注:N()是正态分布的累积分布函数

代入 a = n 2 + l n ( K S ) 2 σ T n a={n \over 2}+{ln({K \over S}) \over 2σ \sqrt {T \over n}} a=2n+2σnT ln(SK)

U 1 = N ( − l n ( K S ) 2 σ T p ( 1 − p ) + n ( p − 1 2 ) p ( 1 − p ) ) U_1=N(-{ln({K \over S}) \over {2σ \sqrt T {\sqrt {p(1-p)}} }}+{\sqrt n{(p-{1\over 2})}\over{\sqrt {p(1-p)}} }) U1=N(2σT p(1p) ln(SK)+p(1p) n (p21))

再回到p,
现在p看起来很复杂,我们使用x来代替 T n \sqrt {T \over n} nT ,得到:
p = e r x 2 − e − σ x e σ x − e − σ x p={{e^{rx^2}-e^{-σ x}} \over {e^{σx}}-e^{-σx}} p=eσxeσxerx2eσx

根据泰勒展开,
e x = x + 1 2 x 2 + . . . e^x=x+{1 \over 2}x^2+... ex=x+21x2+...
所以,我们把p泰勒展开,省略高阶项(>3)可得:
p = σ x + ( r − 1 2 σ 2 ) x 2 2 σ x p={{σx+(r-{1 \over 2}σ^2)x^2} \over {2σx}} p=2σxσx+(r21σ2)x2
当n趋于无穷时,x趋于0,p趋于 1 2 1\over 2 21 p ( 1 − p ) \sqrt {p(1-p)} p(1p) 趋于 1 4 1\over 4 41,代入 n = T x n={\sqrt T\over x} n=xT n ( p − 1 2 ) = T ( r − 1 2 σ 2 ) 2 σ \sqrt n{(p-{1\over 2})}={\sqrt T(r-{1\over2}σ^2)\over 2σ} n (p21)=2σT (r21σ2)
故当n趋于无穷时,
U 1 = N ( l n ( S K ) + ( r − 1 2 σ 2 ) T σ T ) U_1=N({ ln({S \over K})+(r- {1 \over 2}σ^2)T \over σ \sqrt T }) U1=N(σT ln(KS)+(r21σ2)T)

括号里的数就是BS期权定价公式里的 d 2 d_2 d2

然后我们转到S的部分,S前面的参数我们定义为:
U 2 = ∑ i > a n n ! ( n − i ) ! i ! p i ( 1 − p ) n − i u i d n − i U_2=\sum_{i>a}^n {n! \over (n-i)!i!}p^i(1-p)^{n-i}u^id^{n-i} U2=i>an(ni)!i!n!pi(1p)niuidni
U 2 = [ p u + ( 1 − p ) d ] n ∑ i > a n n ! ( n − i ) ! i ! ( p u p u + ( 1 − p ) d ) i ( ( 1 − p ) d p u + ( 1 − p ) d ) n − i U_2=[pu+(1-p)d]^n\sum_{i>a}^n {n! \over (n-i)!i!}({pu \over {pu+(1-p)d}})^i({(1-p)d \over {pu+(1-p)d}})^{n-i} U2=[pu+(1p)d]ni>an(ni)!i!n!(pu+(1p)dpu)i(pu+(1p)d(1p)d)ni
因为无套利,故 p u + ( 1 − p ) d = e r T n pu+(1-p)d=e^{r {T\over n}} pu+(1p)d=ernT
p ∗ = p u p u + ( 1 − p ) d p^*={pu \over {pu+(1-p)d}} p=pu+(1p)dpu,则
U 2 = e r T ∑ i > a n n ! ( n − i ) ! i ! ( p ∗ ) i ( 1 − p ∗ ) n − i U_2=e^{rT}\sum_{i>a}^n {n! \over (n-i)!i!}(p^*)^i(1-p^*)^{n-i} U2=erTi>an(ni)!i!n!(p)i(1p)ni
这样就得到了同 U 1 U_1 U1时的式子,按照同样的推导,我们可以得到:
U 2 = e r T N ( l n ( S K ) + ( r + 1 2 σ 2 ) T σ T ) U_2=e^{rT}N({ ln({S \over K})+(r+ {1 \over 2}σ^2)T \over σ \sqrt T }) U2=erTN(σT ln(KS)+(r+21σ2)T)
括号中的内容就是BS期权定价公式里的 d 1 d_1 d1

由此我们可以得到期权的期望收益为:
S e r T N ( d 1 ) − K N ( d 2 ) Se^{rT}N(d_1)-KN(d_2) SerTN(d1)KN(d2)
折旧到发行日,乘 e − r T e^{-rT} erT可得到期权的初始价格:
C = S N ( d 1 ) − K e − r T N ( d 2 ) C=SN(d_1)-Ke^{-rT}N(d_2) C=SN(d1)KerTN(d2)
其中,
d 1 = l n ( S K ) + ( r + 1 2 σ 2 ) T σ T d_1={ ln({S \over K})+(r+ {1 \over 2}σ^2)T \over σ \sqrt T } d1=σT ln(KS)+(r+21σ2)T
d 2 = l n ( S K ) + ( r − 1 2 σ 2 ) T σ T d_2={ ln({S \over K})+(r- {1 \over 2}σ^2)T \over σ \sqrt T } d2=σT ln(KS)+(r21σ2)T

今天又学废了呢。

然后想起来之前上课用C++,根据Trigeorgis(1992)(TRG)编写的二叉树定价模型,一起放在这里,也算有点关系吧

#include <iostream>
#include <cmath>
using namespace std;

double maxi(double a, double b){
	return (a>b)? a:b;
}

double btPricer(double s, double k, double T, double vol, double r, int n){// call option
//输入标的物价格,执行价格,到期时间,波动率,无风险利率,n step
	double dt = T/n;
	double nu = r-0.5*vol*vol;// r - 0.5sigma^2
	double delta = sqrt(dt*vol*vol+nu*nu*dt*dt);//增长的比率,参考Trigeorgis
	double p = 0.5+0.5*nu*dt/delta;
	
	double* St = new double[n+1]; //二叉树的叶结点 
	double* V = new double[n+1]; //option price
	int i, j;
	//at maturity
	St[0]=s*exp(-n*delta);//最低价格
	for(i=1;i<=n;i++){
		St[i] = St[i-1]*exp(2*delta);//每个可能的价格
	}
	for (i=0;i<=n;i++){
		V[i]=maxi(St[i]-k,0);//在期末时的payoff,计算看跌修改这句就好了
	}
	
	for(j=n-1;j>=0;j--){
		for(i=0;i<=j;i++){
			V[i] = exp(-r*dt)*(p*V[i+1]+(1-p)*V[i]);//一步一步往前推,计算每个结点的期权价格,有点抽象,建议思考一下
		}
	}
	double price = V[0];//0时刻的价格
	delete[] St;//free up the memory 
	delete[] V;
	return price;
} 

int main(){
	cout << btPricer(100,100,1,0.2,0.01,100)<<endl;
	return 0;
}

输出8.X的样子,上Computaitonal Finance时写的了
(写给自己:代码原理看不懂的时候记得翻翻week1,不要在那里自己想了,想不出来的)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

端午节放纸鸢

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

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

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

打赏作者

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

抵扣说明:

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

余额充值