Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 基于根解的Black和Scholes隐含波动率估计_Matlab_Solver - Fatal编程技术网

Matlab 基于根解的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

我的作业的一个子问题要求通过Black和Scholes期权估值公式计算隐含波动率σ,该公式为:

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