布莱克斯和斯科尔斯通过根解法暗示波动率估计

时间:2017-02-10 15:55:13

标签: matlab solver

我的任务的子问题需要通过Black和Scholes期权估值公式计算隐含波动率σ,该公式为:

BS Formula

更具体地说,当所有参数都给定值时,它需要通过对σ进行根解来数值求解方程。

我正在尝试使用MATLAB的fzero函数来估算σ。我创建了两个脚本。

第一个脚本包括:

S_0 = 1403; % Stock Price
K = 1350    ;  % Strike Price 
rf = 0.0534; % Risk Free Rate 
div=0.0118; % Divident Rate
T=0.1028; % Maturity Period
C=81;% Call option value
fixed_input=[S_0,K,rf,div,T,C];% Construct vector input values
save ('fixed_input.mat','fixed_input');
imp_vol_ini=0.1; % Initial Implied Volatility Value
BlackScholes = @BSF;
[imp_vol,y]=fzero(BlackScholes,imp_vol_ini)

虽然第二个脚本包含代码:

function y=BSF(imp_vol)
load fixed_input
S_0=fixed_input(1);
K=fixed_input(2);
rf=fixed_input(3);
div=fixed_input(4);
T=fixed_input(5);
C=fixed_input(6);
d1_nominator=log(S_0/K)+(rf-div+(imp_vol^2)/2)*T;
d1_denominator=imp_vol*sqrt(T);
d1=d1_nominator/d1_denominator;
d2=d1-imp_vol*sqrt(T);
y=C-(exp(-div*T))*S_0*normcdf(d1)+K*(exp(-rf/T))*normcdf(d2);
end

代码有效,但数字不合理。通常,在求解之后,y应接近零,而σ应位于区间[0.1,0.3]之间,但事实并非如此。我检索的数字是y=81 σ=-2.7018e-16

我觉得这与fzero的约束和选项有关。你能帮我吗?

1 个答案:

答案 0 :(得分:1)

错误位于BSF函数的最后一行,即:

y=C-(exp(-div*T))*S_0*normcdf(d1)+K*(exp(-rf/T))*normcdf(d2)‌​;
%                                           ↑

你写了一个/而不是*。应该是这样的:

y=C-(exp(-div*T))*S_0*normcdf(d1)+K*(exp(-rf*T))*normcdf(d2)‌​;
%                                           ↑