Формула Matlab Black Scholes, как получить волатильность по цене B&S

Я совсем начинаю с Matlab, и у меня есть вопрос, может быть, простой?

Я получил формулу Блэка и Шоулза, чтобы получить цену опциона колл со следующими входными параметрами: S = цена акции, K = страйк, r = курс, T = время до экспирации, сигма = волатильность.

Цена опциона колл определяется:

C(S,K,r,t,sigma) = S *N(d1) - K e^-rT *N(d2)
d1 = (1/sqrt(T))*(ln(S/K)+(r+0.5*sigma^2)*T)
d2 = d1 - sigma*sqrt(T)

У меня нет проблем с этой функцией, но мне нужно получить волатильность Блэка Скоулза.

У меня есть входы: S, K , r , T , BlackScholesPrice, и я хочу вернуть сигму.

Я попытался с "syms sig; решить ("blackscholesequation" == blacksholesprice, sig);" но делать нечего, постоянно ошибка

"Error using symfun>validateArgNames (line 211)
Second input must be a scalar or vector of unique symbolic variables.

Error in symfun (line 45)
            y.vars = validateArgNames(inputs);

Error in sym/subsasgn (line 762)
                C = symfun(B,[inds{:}]);

Error in normcdf>localnormcdf (line 100)
    p(sigma==0 & x<mu) = 0;

Error in normcdf (line 46)
[varargout{1:max(1,nargout)}] = localnormcdf(uflag,x,varargin{:});

Error in BlackScholesInverse (line 3)
solve(S0*normcdf((log(S0/K)+(r+0.5*sig*sig)*T)*(1/(sig*sqrt(T))))-K*exp(-r*T)*normcdf((log(S0/K)+(r+0.5*sig*sig)*T)*(1/(sig*sqrt(T)))-sig*sqrt(T))==
prixBS,sig)"

Если у кого-то есть идея, это было бы здорово. Спасибо всем


person Aloys Fortier    schedule 05.10.2014    source источник


Ответы (1)


Вы пытаетесь найти подразумеваемую волатильность. Для этого вы можете использовать blsimpv. Было бы проще использовать эту функцию, просто вам нужно ввести соответствующие данные.

person lakesh    schedule 05.10.2014
comment
Вы уверены, что волатильность в формуле B&S и подразумеваемый объем совпадают? - person Aloys Fortier; 05.10.2014
comment
Большое спасибо! - person Aloys Fortier; 05.10.2014