В этом примере показано, как вычислить цену колл-опциона с помощью формулы Блэка-Шоулза. Этот пример использует vpasolve
численно решить задачи нахождения спотовая цена и подразумеваемая волатильность от формулы Блэка-Шоулза.
Формула Блэка-Шоулза моделирует цену европейских колл-опционов [1]. Для базового запаса "не оплата дивиденда", параметры формулы заданы как:
текущий курс акций или спотовая цена.
осуществление или цена исполнения опциона.
стандартное отклонение постоянно составляемых ежегодных возвратов запаса, который называется энергозависимостью.
время для опции, чтобы истечь в годах.
пересчитанная на год безрисковая процентная ставка.
Цена колл-опциона в терминах параметров Блэка-Шоулза
,
где:
стандартная нормальная кумулятивная функция распределения, .
Найдите цену европейского фондового опциона, который истекает за три месяца с ценой исполнения 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 =
Затем предположите, что для того же фондового опциона время к изменениям истечения и ежедневному курсу акций неизвестно. Найдите цену этого колл-опциона в течение времени истечения это варьируется от 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')