exponenta event banner

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

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

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

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

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

  • K - цена упражнения или удара.

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

  • T - это время истечения срока действия опции через несколько лет.

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

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

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

где:

  • d1 = 1σT [log (SK) + (r + start22) 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