Финансы в Excel+VBA. Калькулятор опционов по модели Блэка-Шоулза

 Статья адресована тем, кто начал изучать опционы.
image

Основы опционов

Для начала кратко о сути и ценообразовании опционов. Опцион имеет четыре основных параметра:

1. Базовый актив
2. Тип опциона (Колл или Пут)
3. Цена страйка (цена исполнения опциона)
4. Дата экспирации (истечения) опциона

Для покупателя опциона он представляет собой право купить (опцион Колл) или продать (опцион Пут) базовый актив по цене страйка в день экспирации. Для продавца опциона он представляет собой обязанность продать (опцион Колл) или купить (опцион Пут) базовый актив по цене страйка в день экспирации. Фактически опцион представляет собой страховку от изменения цены базового актива (БА) от момента сделки до даты экспирации — в роли страховщика выступает продавец (в случае неблагоприятного изменения цены БА он выплачивает страховку покупателю опциона), а страхователем является покупатель опциона (он платит за страховку продавцу).

Как и цена страховки цена опциона полностью определяется вероятностью «страхового случая», т.е. исполнения опциона (исполнения права покупателя опциона). Основные составляющие, которые влияют эту вероятность и на цену опциона, на стоимость страховки, которую платит покупатель и получает продавец:

  • Разница между ценой страйка и ценой базового актива. Т.е. при покупке Колла, чем выше его страйк, тем он дешевле (т.к. снижается вероятность того, что на момент экспирации БА будет выше цены страйка)
  • Волатильность базового актива. Чем выше волатильность (грубо размах колебаний цены) БА, тем выше вероятность достичь страйка до экспирации.
  • Время до экспирации. Чем больше времени до экспирации опциона, тем при покупке Колла выше вероятность что за это время цена базового актива уйдёт выше страйка, соответственно цена опциона выше.

При этом зависимость цены опциона по каждой из этих трёх составляющих нелинейная. Ставшая общепринятой формула оценки опционов с учётом этих основных факторов была выведена Фишером Блэком и Майроном Шоулзом в 1973 году.

Формула Блэка-Шоулза имеет следующий вид (подробно можно посмотреть в Википедии):

Цена (европейского) опциона call:
image
image
image
Цена (европейского) опциона put:
image

Обозначения:
C(S,t) — текущая стоимость опциона call в момент t до истечения срока опциона (до экспирации);
S — текущая цена базового актива;
N(x) — вероятность того, что отклонение будет меньше в условиях стандартного нормального распределения (таким образом, и ограничивают область значений для функции стандартного нормального распределения);
K — цена исполнения опциона;
r — безрисковая процентная ставка;
T — t — время до истечения срока опциона;
image — волатильность доходности (квадратный корень из дисперсии) базового актива.

Греки опционов

Для оценки чувствительности цены опциона к цене БА, волатильности, и времени до экспирации, применяют коэффициенты, называемые Греками (коэффициенты в основном обозначаются греческими буквами, за исключением «веги»).

Греки в модели Блэка-Шоулза вычисляются следующим образом:

1. Дельта (image) — скорость изменения цены опциона от изменения цены БА. Для опциона Колл дельта равна image, для опциона Пут image. Дельта показывает текущий наклон кривой стоимости опциона в зависимости от цены БА.

2. Гамма ( image) — скорость изменения цены опциона от изменения Дельты (или ускорение от изменения цены БА). Гамма равна image.

3. Вега ( image ) — описывает зависимость цены опциона от изменения волатильности БА: image. Вега отражает число пунктов изменения стоимости опциона на каждый процентный пункт (1%) изменения волатильности.

4. Тета ( image) — описывает снижение цены опциона в зависимости от времени до экспирации. Для Колла — image, для Пута — image.

Вышеприведенные формулы верны для общего случая, в том числе для случая опционов на акции. Для расчёта опционов на фьючерсные контракты безрисковая ставка r не применяется. Т.к. на Московской бирже торгуются опционы на фьючерсы, далее в расчётах процентную ставку не учитываем.

Реализация модели в MS Excel

Итак, реализация модели Блэка-Шоулза в Excel+VBA.

Для удобства создадим функцию для каждой переменной из модели БШ. В каждой функции будут входные переменные:

S — цена БА
X — цена страйка
d — число дней до экспирации
y — число дней в году
v — волатильность
OptionType — тип опциона «Call» или «Put» (только для расчета цены и дельты)

Запись обычной функции в VBA выглядит следующим образом:

Function НазваниеФункции(входные переменные через запятую)
… вычисления…
НазваниеФункции =… вычисления…
End Function

Такую функцию можно вызывать как из других функций, так и из листа Excel.
Функции записываются в созданный Модуль (запускаем VBA в Excel, например нажатием Alt+F11, выбираем Insert -> Module):

Function d_1(S, X, d, y, v)

T = d / y
d_1 = (Log(S / X) + (0.5 * (v ^ 2)) * T) / (v * (T ^ 0.5))
End Function

Function d_2(S, X, d, y, v)
T = d / y
d_2 = d_1(S, X, d, y, v) — v * (T ^ 0.5)
End Function

Function Nd_1(S, X, d, y, v)
Nd_1 = Application.NormSDist(d_1(S, X, d, y, v))
End Function

Function Nd_2(S, X, d, y, v)
Nd_2 = Application.NormSDist(d_2(S, X, d, y, v))
End Function

Function N_d_1(S, X, d, y, v)
N_d_1 = Application.NormSDist(-d_1(S, X, d, y, v))
End Function

Function N_d_2(S, X, d, y, v)
N_d_2 = Application.NormSDist(-d_2(S, X, d, y, v))
End Function

Function N1d_1(S, X, d, y, v)
T = d / y
N1d_1 = 1 / (2 * Application.Pi()) ^ 0.5 * (Exp(-0.5 * d_1(S, X, d, y, v) ^ 2))
End Function

Function OptionPrice(OptionType, S, X, d, y, v)
If OptionType = «Call» Then
OptionPrice = S * Nd_1(S, X, d, y, v) — X * Nd_2(S, X, d, y, v)
ElseIf OptionType = «Put» Then
OptionPrice = X * N_d_2(S, X, d, y, v) — S * N_d_1(S, X, d, y, v)
End If
End Function

Function Delta(OptionType, S, X, d, y, v)
If OptionType = «Call» Then
Delta = Application.NormSDist(d_1(S, X, d, y, v))
ElseIf OptionType = «Put» Then
Delta = Application.NormSDist(d_1(S, X, d, y, v)) — 1
End If
End Function

Function Theta(S, X, d, y, v)
T = d / y
Theta = -((S * v * N1d_1(S, X, d, y, v)) / (2 * (T ^ 0.5))) / y
End Function

Function Gamma(S, X, d, y, v)
T = d / y
Gamma = N1d_1(S, X, d, y, v) / (S * (v * (T ^ 0.5)))
End Function

Function Vega(S, X, d, y, v)
T = d / y
Vega = (S * (T ^ 0.5) * N1d_1(S, X, d, y, v)) / 100
End Function

 

Теперь в екселевской ячейке можем вызывать любую прописанную нами функцию, например введя в ячейке =OptionPrice(«Put»;76870;90000;13;365;0.47) мы получим теоретическую цену опциона Пут при цене базового актива 76870, страйке 90000, предполагаемой волатильности 45% и за 13 дней до экспирации.

Некоторые моменты, которые хотелось бы отметить

  • Полученные в нашей программе значения теорцены практически идентичны тем, что транслирует Мосбиржа, это значит что биржа в своих расчётах использует именно модель БШ.
  • На самом деле опцион (как и страховка) не имеет истинной справедливой стоимости — она для каждого своя, и зависит от того какая предполагается волатильность или например какое учитывать число дней (учитывать ли выходные, с каким весом учитывать разные дни недели, сколько дней в году использовать в формуле) и т.д.
  • Греки обладают замечательным свойством — чтобы получить значение греков для портфеля фьючерсов и опционов нужно просто сложить соответствующие греки для отдельных активов портфеля. Т.е. мы легко можем рассчитать, например, сколько нужно купить/продать базовых фьючерсов чтобы общая стоимость портфеля не изменялась при изменении цены этого фьючерса (т.н. выравнивание Дельты или дельта-хеджирование).
  • Не смотря на свою распространённость, модель БШ основана на допущении, что доходность актива имеет нормальное распределение, что на реальном рынке не выполняется никогда.

 

Итог

Итак, мы получили рабочий опционный калькулятор на VBA, который можно использовать как для изучения свойств опционов (строить диаграммы зависимостей цены и греков от разных параметров рынка), так и использовать для торговли и построения более сложных программ.