- PVSM.RU - https://www.pvsm.ru -
Статья адресована и будет полезна в первую очередь тем, кто начал изучать опционы и хочет разобраться в их ценообразовании. Ну и во вторую очередь тем, кто ещё не использует инструмент VBA в своих расчётах в екселе, но хочет научиться — вы увидите, как это на самом деле просто.
Для начала кратко о сути и ценообразовании опционов. Опцион имеет четыре основных параметра:
1. Базовый актив
2. Тип опциона (Колл или Пут)
3. Цена страйка (цена исполнения опциона)
4. Дата экспирации (истечения) опциона
Для покупателя опциона он представляет собой право купить (опцион Колл) или продать (опцион Пут) базовый актив по цене страйка в день экспирации. Для продавца опциона он представляет собой обязанность продать (опцион Колл) или купить (опцион Пут) базовый актив по цене страйка в день экспирации. Фактически опцион представляет собой страховку от изменения цены базового актива (БА) от момента сделки до даты экспирации — в роли страховщика выступает продавец (в случае неблагоприятного изменения цены БА он выплачивает страховку покупателю опциона), а страхователем является покупатель опциона (он платит за страховку продавцу).
Как и цена страховки цена опциона полностью определяется вероятностью «страхового случая», т.е. исполнения опциона (исполнения права покупателя опциона). Основные составляющие, которые влияют эту вероятность и на цену опциона, на стоимость страховки, которую платит покупатель и получает продавец:
При этом зависимость цены опциона по каждой из этих трёх составляющих нелинейная. Ставшая общепринятой формула оценки опционов с учётом этих основных факторов была выведена Фишером Блэком и Майроном Шоулзом в 1973 году.
Формула Блэка-Шоулза имеет следующий вид (подробно можно посмотреть в Википедии):
Цена (европейского) опциона call:
Цена (европейского) опциона put:
Обозначения:
C(S,t) — текущая стоимость опциона call в момент t до истечения срока опциона (до экспирации);
S — текущая цена базового актива;
N(x) — вероятность того, что отклонение будет меньше в условиях стандартного нормального распределения (таким образом, и ограничивают область значений для функции стандартного нормального распределения);
K — цена исполнения опциона;
r — безрисковая процентная ставка;
T — t — время до истечения срока опциона;
— волатильность доходности (квадратный корень из дисперсии) базового актива.
Для оценки чувствительности цены опциона к цене БА, волатильности, и времени до экспирации, применяют коэффициенты, называемые Греками (коэффициенты в основном обозначаются греческими буквами, за исключением «веги»).
Греки в модели Блэка-Шоулза вычисляются следующим образом:
1. Дельта () — скорость изменения цены опциона от изменения цены БА. Для опциона Колл дельта равна , для опциона Пут . Дельта показывает текущий наклон кривой стоимости опциона в зависимости от цены БА.
2. Гамма ( ) — скорость изменения цены опциона от изменения Дельты (или ускорение от изменения цены БА). Гамма равна .
3. Вега ( ) — описывает зависимость цены опциона от изменения волатильности БА: . Вега отражает число пунктов изменения стоимости опциона на каждый процентный пункт (1%) изменения волатильности.
4. Тета ( ) — описывает снижение цены опциона в зависимости от времени до экспирации. Для Колла — , для Пута — .
Вышеприведенные формулы верны для общего случая, в том числе для случая опционов на акции. Для расчёта опционов на фьючерсные контракты безрисковая ставка r не применяется. Т.к. на Московской бирже торгуются опционы на фьючерсы, далее в расчётах процентную ставку не учитываем.
Итак, реализация модели Блэка-Шоулза в 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 FunctionFunction d_2(S, X, d, y, v)
T = d / y
d_2 = d_1(S, X, d, y, v) — v * (T ^ 0.5)
End FunctionFunction Nd_1(S, X, d, y, v)
Nd_1 = Application.NormSDist(d_1(S, X, d, y, v))
End FunctionFunction Nd_2(S, X, d, y, v)
Nd_2 = Application.NormSDist(d_2(S, X, d, y, v))
End FunctionFunction N_d_1(S, X, d, y, v)
N_d_1 = Application.NormSDist(-d_1(S, X, d, y, v))
End FunctionFunction N_d_2(S, X, d, y, v)
N_d_2 = Application.NormSDist(-d_2(S, X, d, y, v))
End FunctionFunction 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 FunctionFunction 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 FunctionFunction 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 FunctionFunction 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 FunctionFunction Gamma(S, X, d, y, v)
T = d / y
Gamma = N1d_1(S, X, d, y, v) / (S * (v * (T ^ 0.5)))
End FunctionFunction Vega(S, X, d, y, v)
T = d / y
Vega = (S * (T ^ 0.5) * N1d_1(S, X, d, y, v)) / 100
End Function
Готовый Excel-файл можно скачать по ссылке [1].
Теперь в екселевской ячейке можем вызывать любую прописанную нами функцию, например введя в ячейке =OptionPrice(«Put»;76870;90000;13;365;0.47) мы получим теоретическую цену опциона Пут при цене базового актива 76870, страйке 90000, предполагаемой волатильности 45% и за 13 дней до экспирации.
Итак, мы получили рабочий опционный калькулятор на VBA, который можно использовать как для изучения свойств опционов (строить диаграммы зависимостей цены и греков от разных параметров рынка), так и использовать для торговли и построения более сложных программ.
Автор: locos
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/80788
Ссылки в тексте:
[1] ссылке: http://mit.su/option-calc-vba.html
[2] Источник: http://habrahabr.ru/post/248949/
Нажмите здесь для печати.