使用MATLAB fsolve的隐含波动率

时间:2018-11-09 18:35:30

标签: matlab optimization options finance quantitative-finance

我正在尝试在MATLAB中查找隐含波动率。我使用的是fsolve而不是blsimpv。我收到此错误:

  

警告:FSOLVE的Trust-region-dogleg算法无法处理   非正方形系统;而是使用Levenberg-Marquardt算法。

     

fsolve停止了,因为根据   梯度,但函数值的向量不接近零   用功能公差的默认值测量。

我导入的数据是35种不同的执行价格和看跌价格。非常感谢您提供有关我的代码不正确之处的反馈。 K是行使价。

hw_3_dat=[homework3{1:32,1:2}];

iniGuess = 1;   

Interest (1:32,1)=.004

Stock(1:32,1)=158.69  

timetomaturity=1/35  

put_price=hw_3_dat(:,2)

K=hw_3_dat(:,1) 

volatility = fsolve(@(x) myfunc(x,put_price,Interest,Stock, K, timetomaturity),iniGuess);




%% 

function C = bs ( Interest, Volatility, Stock, StrikePrice, TimeToMaturity )

d1 = (log(Stock ./ StrikePrice) + (Interest + (Volatility .^ 2) ./ 2) .* TimeToMaturity) ./ (Volatility .* sqrt(TimeToMaturity));

d2 = (log(Stock ./ StrikePrice) + (Interest - (Volatility .^ 2) ./ 2) .* TimeToMaturity) ./ (Volatility .* sqrt(TimeToMaturity));

C = normcdf(d1) .* Stock - normcdf(d2) .* StrikePrice .* exp(-Interest .* TimeToMaturity);

end


%% 



function F = myfunc(vol,C,Interest, Stock, StrikePrice, TimeToMaturity)    
F = C - bs(Interest,vol,Stock,StrikePrice,TimeToMaturity);    
end

0 个答案:

没有答案