Matlab 基于根解的Black和Scholes隐含波动率估计
我的作业的一个子问题要求通过Black和Scholes期权估值公式计算隐含波动率σ,该公式为:Matlab 基于根解的Black和Scholes隐含波动率估计,matlab,solver,Matlab,Solver,我的作业的一个子问题要求通过Black和Scholes期权估值公式计算隐含波动率σ,该公式为: y=C-(exp(-div*T))*S_0*normcdf(d1)+K*(exp(-rf/T))*normcdf(d2); % ↑ 更具体地说,当所有参数都给定值时,需要通过σ的根解数值求解方程 我试图使用MATLAB的fzero函数来估计σ。我创建了两个脚本 第一个脚本包括: S_0 = 1403; % Sto
y=C-(exp(-div*T))*S_0*normcdf(d1)+K*(exp(-rf/T))*normcdf(d2);
% ↑
更具体地说,当所有参数都给定值时,需要通过σ的根解数值求解方程
我试图使用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);
% ↑
给那个家伙一枚奖章!!!谢谢!很好用@Sardar_Usama:你知道我如何避免保存和加载部分,并通过BlackScholes=@BSF传递固定值S_0,K等;[imp_vol,y]=fzeroBlackScholes,imp_vol_ini通过保持它们的稳定并只优化σ?只是好奇,你是如何制作这些漂亮的箭头的?@Cebri hah