金融数值计算系列:4布莱克-舒尔斯模型


#1

布莱克-舒尔斯模型(英语:Black-Scholes Model),简称BS模型,又称布莱克-舒尔斯-墨顿模型(Black–Scholes–Merton model),是一种为期权或权证等金融衍生工具定价的数学模型,由美国经济学家迈伦·舒尔斯与费雪·布莱克首先提出,并由罗伯特·C·墨顿修改模型于有派发股利时亦可使用而更完善。由此模型可以推导出布莱克-舒尔斯公式,并由此公式估算出欧式期权的理论价格。此公式问世后带来了期权市场的繁荣。该公式被广泛使用,虽然在很多情况下被使用者进行一定的改动和修正。很多经验测试表明这个公式足够贴近市场价格,然而也有会出现差异的时候,如著名的“波动率的微笑”。

关于公式推导,知乎这个帖子第一个回答是正确的:https://www.zhihu.com/question/20917206/answer/21520810
详细背景和推导请见 A Course in Derivative Securities by Kerry Back

以下code展示了布莱克-舒尔斯模型在Julia的写法

using SpecialFunctions

function normcdf(x)
	return (1.0+erf(x/sqrt(2.0)))/2.0
end

println(normcdf(0)) # check if normcdf is correct


function blsprice(S0, K, r, T, σ, d = 0.0, FlagIsCall = true)
	d1=(log(S0/K)+(r-d+σ*σ*0.5)*T)/(σ*sqrt(T))
	d2=d1-σ*sqrt(T)
	Price=0.0
	if FlagIsCall
	Price=S0*exp(-d*T)*normcdf(d1)-K*exp(-r*T)*normcdf(d2)
	else
	Price=-S0*exp(-d*T)*normcdf(-d1)+K*exp(-r*T)*normcdf(-d2)
	end
    return Price
end

#Define input data
spot=10;K=10;r=0.02;T=2.0;σ=0.2;d=0.01;


Price=blsprice(spot,K,r,T,σ,d)
println(Price)
#Price=1.1912013169995816

#2

话说BS模型的这些SDE,我记得没错的话 @ChrisRackauckas 应该有求解这些方程的package吧?感觉如果能利用已有的package展示会更好(也许更简单?)。


#3

StochasticDiffEq.jl


#4

这个有closed form解,不需要用numerical. 但是除了这个以外的其他金融随机模型,基本都要靠numerical. 我以后会用列出一些带Stochastic volatility和jump的模型,我自己解不了,看看大家能不能解