В этом примере показано, как рассчитать опционную цену колла по формуле Блэка-Шоулза. В этом примере используется vpasolve для численного решения проблем нахождения спотовой цены и подразумеваемой волатильности из формулы Блэка-Шоулза.
Формула Блэка-Шоулза моделирует цену европейских колл-опционов [1]. Для андерлаинга, не выплачивающего дивиденды, параметры формулы определяются как:
- текущая цена акций или спотовая цена.
- цена упражнения или удара.
- стандартное отклонение непрерывно скомпонованной годовой доходности запаса, которое называется волатильностью.
- это время истечения срока действия опции через несколько лет.
- годовая безрисковая процентная ставка.
Цена колл-опциона с точки зрения параметров Блэка-Шоулза составляет
× PV (K),
где:
+ start22) T]
d1-σT
-rT)
) - стандартная функция нормального кумулятивного распределения, 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) =
Csym = N(d1)*S - N(d2)*PV_K
Csym =
Для получения числового результата с переменной точностью используйте vpa. По умолчанию vpa возвращает число с 32 значимыми цифрами.
Cvpa = vpa(Csym)
Cvpa =
Для изменения точности используйте команду digits. Цена опциона до 6 значащих цифр - $12,5279.
digits(6) Cvpa = vpa(Csym)
Cvpa =
Далее предположим, что для того же опциона на акции время истечения срока действия изменяется, а повседневная цена акций неизвестна. Найдите цену этого варианта колла для времени истечения T, которое варьируется от 0 до 0,25 лет, и спотовую цену , которая варьируется от 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')

Рассчитайте опционную цену колла со сроком действия 0,1 года и спотовой ценой 105 долларов. Использовать subs для замены значений T и S в выражение C. Возврат цены в виде числового результата с помощью vpa.
Csym = subs(C,[T S],[0.1 105]); Cvpa = vpa(Csym)
Cvpa =
Рассмотрим случай, когда цена опциона изменяется, и вы хотите знать, как это влияет на базовую цену акций. Это проблема нахождения из формулы Блэка-Скоулза, учитывая известные параметры , , , и .
Например, после одного месяца цена того же колл-опциона теперь торгуется на уровне $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 =
Рассмотрим случай, когда цена опциона изменяется и вы хотите знать, что является подразумеваемой волатильностью. Это проблема нахождения значения из формулы Блэка-Скоулза, учитывая известные параметры , , , и .
Рассмотрим тот же опцион на акции, который истекает через три месяца с ценой исполнения $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')
