Подразумеваемая волатильность с использованием MATLAB fsolve - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь найти подразумеваемую волатильность в MATLAB. Я использую fsolve вместо blsimpv. Я получаю эту ошибку:

Предупреждение: алгоритм Trust-region-dogleg FSOLVE не может обработать неквадратные системы; используя вместо этого алгоритм Левенберга-Марквардта.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...