通过根求解的布莱克和斯科尔斯隐含波动率估计
Black and Scholes Implied Volatility estimation via rootsolving
我的作业的一个子问题需要通过 Black 和 Scholes 期权估值公式计算隐含波动率 σ,即:
更具体地说,需要在所有参数都给定值的情况下,通过对σ的根求解来对方程进行数值求解。
我正在尝试使用 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
的约束和选项有关。你能帮帮我吗?
错误出现在 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);
% ↑
我的作业的一个子问题需要通过 Black 和 Scholes 期权估值公式计算隐含波动率 σ,即:
更具体地说,需要在所有参数都给定值的情况下,通过对σ的根求解来对方程进行数值求解。
我正在尝试使用 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
的约束和选项有关。你能帮帮我吗?
错误出现在 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);
% ↑