Формула Блэка-Шоулза за цену колл-опциона

В этом примере показано, как вычислить цену колл-опциона с помощью формулы Блэка-Шоулза. Этот пример использует vpasolve численно решить задачи нахождения спотовая цена и подразумеваемая волатильность от формулы Блэка-Шоулза.

Найдите цену колл-опциона

Формула Блэка-Шоулза моделирует цену европейских колл-опционов [1]. Для базового запаса "не оплата дивиденда", параметры формулы заданы как:

  • S текущий курс акций или спотовая цена.

  • K осуществление или цена исполнения опциона.

  • σ стандартное отклонение постоянно составляемых ежегодных возвратов запаса, который называется энергозависимостью.

  • T время для опции, чтобы истечь в годах.

  • r пересчитанная на год безрисковая процентная ставка.

Цена колл-опциона C в терминах параметров Блэка-Шоулза

C=N(d1)×S-N(d2)×PV(K),

где:

  • d1=1σT[log(SK)+(r+σ22)T]

  • d2=d1-σT

  • PV(K)=Kexp(-rT)

  • N(d) стандартная нормальная кумулятивная функция распределения, N(d)=12π-dexp(-t2/2)dt.

Найдите цену европейского фондового опциона, который истекает за три месяца с ценой исполнения 95$. Примите, что базовый запас не выплачивает дивиденда, стоит на уровне 100$ и имеет энергозависимость 50% в год. Безрисковый уровень составляет 1% в год.

Используйте sym создать символьные числа, которые представляют значения параметров Блэка-Шоулза.

syms t d
S = sym(100);        % current stock price (spot price)
K = sym(95);         % exercise price (strike price)
sigma = sym(0.50);   % volatility of stock
T = sym(3/12);       % expiry time in years
r = sym(0.01);       % annualized risk-free interest rate

Вычислите цену опции без приближения. Создайте символьный функциональный N(d) это представляет стандартную нормальную кумулятивную функцию распределения.

PV_K = K*exp(-r*T);
d1 = (log(S/K) + (r + sigma^2/2)*T)/(sigma*sqrt(T));
d2 = d1 - sigma*sqrt(T);
N(d) = int(exp(-((t)^2)/2),t,-Inf,d)*1/sqrt(2*sym(pi))
N(d) = 

erf(2d2)2+12erf ((sqrt (sym (2)) *d)/2)/2 + sym (1/2)

Csym = N(d1)*S - N(d2)*PV_K
Csym = 

50erf(24log(2019)+272002)-95e-1400erf(24log(2019)-232002)2+12+5050*erf ((sqrt (sym (2)) * (4*log (sym (20/19)) + sym (27/200)))/2) - 95*exp ((-sym (1/400))) * (erf ((sqrt (sym (2)) * (4*log (sym (20/19)) - sym (23/200)))/2)/2 + sym (1/2)) + 50

Чтобы получить числовой результат с переменной точностью, используйте vpa. По умолчанию, vpa возвращает номер с 32 значительными цифрами.

Cvpa = vpa(Csym)
Cvpa = 12.52792339252145394554497137187vpa ('12.52792339252145394554497137187')

Чтобы изменить точность, используйте digits. Цена опции к 6 значительным цифрам составляет 12,5279$.

digits(6)
Cvpa = vpa(Csym)
Cvpa = 12.5279vpa ('12.5279')

Постройте цену колл-опциона

Затем предположите, что для того же фондового опциона время к изменениям истечения и ежедневному курсу акций неизвестно. Найдите цену этого колл-опциона в течение времени истечения T это варьируется от 0 до 0,25 лет и спотовой цены S это варьируется от 50$ до 140$. Используйте значения для уровня осуществления (K), энергозависимость (sigma), и процентная ставка (r) от предыдущего примера. В этом случае используйте время для истечения T и ежедневный курс акций S как переменные количества.

Задайте символьное выражение C представлять цену колл-опциона T и S как неизвестные переменные.

syms T S

PV_K = K*exp(-r*T);
d1 = (log(S/K) + (r + sigma^2/2)*T)/(sigma*sqrt(T));
d2 = d1 - sigma*sqrt(T);
Nd1 = int(exp(-((t)^2)/2),-Inf,d1)*1/sqrt(2*pi);
Nd2 = int(exp(-((t)^2)/2),-Inf,d2)*1/sqrt(2*pi);
C = Nd1*S - Nd2*PV_K;

Постройте цену колл-опциона в зависимости от времени истечения и спотовой цены.

fsurf(C,[50 140 0 0.25])
xlabel('Spot price')
ylabel('Expiry time')
zlabel('Call option price')

Figure contains an axes. The axes contains an object of type functionsurface.

Вычислите цену колл-опциона со временем истечения 0,1 года и спотовая цена 105$. Используйте subs заменять значениями T и S к выражению C. Возвратите цену как числовой результат с помощью vpa.

Csym = subs(C,[T S],[0.1 105]);
Cvpa = vpa(Csym)
Cvpa = 12.5868vpa ('12.5868')

Найдите спотовую цену

Рассмотрите случай, где цена опции изменяется, и вы хотите знать, как это влияет на базовый курс акций. Это - задача нахождения S от формулы Блэка-Шоулза, учитывая известные параметры K, σ, T, r, и C.

Например, после одного месяца, цена того же колл-опциона теперь стоит на уровне 15,04$ со временем истечения двух месяцев. Найдите спотовую цену базового запаса. Создайте символьный функциональный C(S) это представляет формулу Блэка-Шоулза неизвестным параметром S.

syms C(S) d1(S) d2(S) Nd1(S) Nd2(S)

K = 95;         % exercise price (strike price)
sigma = 0.50;   % volatility of stock
T = 2/12;       % expiry time in years
r = 0.01;       % annualized risk-free interest rate

PV_K = K*exp(-r*T);
d1(S) = (log(S/K) + (r + sigma^2/2)*T)/(sigma*sqrt(T));
d2(S) = d1 - sigma*sqrt(T);
Nd1(S) = int(exp(-((t)^2)/2),-Inf,d1)*1/sqrt(2*pi);
Nd2(S) = int(exp(-((t)^2)/2),-Inf,d2)*1/sqrt(2*pi);
C(S) = Nd1*S - Nd2*PV_K;

Используйте vpasolve численно решить для спотовой цены базового запаса. Ищите решения только в положительных числах. Спотовая цена базового запаса составляет 106,162$.

S_Sol = vpasolve(C(S) == 15.04,S,[0 Inf])
S_Sol = 106.162vpa ('106.162')

Найдите подразумеваемую волатильность

Рассмотрите случай, где цена опции изменяется, и вы хотите знать то, что является подразумеваемой волатильностью. Это - задача нахождения значение σ от формулы Блэка-Шоулза, учитывая известные параметры S, K, T, r, и C.

Рассмотрите тот же фондовый опцион, который истекает за три месяца с ценой исполнения 95$. Примите, что базовые отрасли запаса на уровне 100$ и безрисковый уровень составляют 1% в год. Найдите подразумеваемую волатильность в зависимости от цены опции, которая лежит в диапазоне от 6$ до 25$. Создайте вектор для области значений цены опции. Создайте символьный функциональный C(sigma) это представляет формулу Блэка-Шоулза неизвестным параметром sigma. Используйте vpasolve численно решить для подразумеваемой волатильности.

syms C(sigma) d1(sigma) d2(sigma) Nd1(sigma) Nd2(sigma)

S = 100;        % current stock price (spot price)
K = 95;         % exercise price (strike price)
T = 3/12;       % expiry time in years
r = 0.01;       % annualized risk-free interest rate
C_Range = 6:25; % range of option price
sigma_Sol = zeros(size(C_Range));

PV_K = K*exp(-r*T);
d1(sigma) = (log(S/K) + (r + sigma^2/2)*T)/(sigma*sqrt(T));
d2(sigma) = d1 - sigma*sqrt(T);
Nd1(sigma) = int(exp(-((t)^2)/2),-Inf,d1)*1/sqrt(2*pi);
Nd2(sigma) = int(exp(-((t)^2)/2),-Inf,d2)*1/sqrt(2*pi);
C(sigma) = Nd1*S - Nd2*PV_K;
for i = 1:length(C_Range)
    sigma_Sol(i) = vpasolve(C(sigma) == C_Range(i),sigma,[0 Inf]);
end

Постройте подразумеваемую волатильность в зависимости от цены опции.

plot(C_Range,sigma_Sol)
xlabel('Option price')
ylabel('Implied volatility')

Figure contains an axes. The axes contains an object of type line.

Ссылка

[1] https://en.wikipedia.org/wiki/Black–Scholes_model