Анализ процесса ценообразования опционов
Основная характеристика составляющих опционной премии. Проведение исследования зависимости доходности опциона от цены базового актива. Разработка алгоритма и программы для расчета теоретических стоимостей финансовых договоров по модели Блэка-Шоулза.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 30.09.2016 |
Размер файла | 334,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Оглавление
Глоссарий
Введение
1. Факторы ценообразования опционов
1.1 Составляющие опционной премии
1.2 Зависимость доходности опциона от цены базового актива
1.3 Расчёт подразумеваемой волатильности
2. Тестирование программы на экспериментальном наборе данных
Заключение
Список литературы
Приложение
Глоссарий
Базовый актив - финансовый инструмент, на основе стоимости которого формируется стоимость производного финансового инструмента.
Производный финансовый инструмент - договор (контракт), на основании которого стороны берут обязательство или получают право по совершению определённых действий в отношении базового актива. Цена производного финансового инструмента не всегда линейно зависит от цены базового актива. Возможно существование производного инструмента на другие производные инструменты, такие как опцион на фьючерс.
Фьючерс - производный финансовый инструмент. Стандартный биржевой контракт на покупку или продажу базового актива по определённой цене с поставкой в определённый срок в будущем. Является разновидностью форвардного контракта.
Форвард - производный финансовый инструмент. Контракт, согласно которому продавец базового актива обязуется в определённый срок, указанный в договоре, передать базовый актив покупателю. Покупатель в свою очередь обязуется оплатить и принять базовый актив. Цена базового актива, курс валют и прочие условия фиксируются на момент заключения сделки. В отличие от фьючерса, форвардный контракт не стандартизован, то есть не имеет обращения на бирже.
Опцион - производный финансовый инструмент. Контракт, дающий право на покупку или продажу в определенное время по определенной цене базовый актив.
Дата экспирации - время, после наступления которой сделки по контракту прекращаются.
Цена исполнения (цена страйк) - цена, по которой в момент экспирации опциона будет произведён расчёт по базовому активу.
Опционная премия - денежная сумма, уплачиваемая покупателем опциона в момент покупки. Является также котировочной ценой.
Ставка дисконтирования - процентная ставка, которая используется для перерасчёта стоимости денег в будущем. Изменение денежной стоимости связано с тем, что те же самые деньги могли бы принести доход после их инвестирования, а также с влиянием инфляции.
Безрисковая процентная ставка - ставка дисконтирования, которая равна доходности инвестиций, доходность по которым практически гарантирована.
Волатильность - свойство финансового инструмента, характеризующее изменчивость цены.
Введение
В данной работе произведён обзор процесса ценообразования опционов и влияющих на него факторов, модели Блэка-Шоулза для расчёта теоретических цен и отличие модели от других существующих.
Цель данной работы заключается в создании инструмента, позволяющего на основе существующих цен страйков одного опционного контракта вычислять теоретические цены тех страйков, котировки по которым в данный момент отсутствуют на рынке.
Для реализации намеченной цели в работе поставлены следующие задачи:
· рассмотреть сущность опционов, их свойства и факторы, влияющие на процесс ценообразования;
· произвести обзор существующих моделей ценообразования опционов, выяснить их достоинства и недостатки;
· исследовать модель Блэка-Шоулза;
· разработать алгоритм и программу для расчёта теоретических цен опционов по модели Блэка-Шоулза.
Программная реализация модели написана на языке Python 3 с использованием сторонних библиотек для реализации математических функций. Для демонстрации работы программы были использованы биржевые котировки по опциону LO, торгующемуся на бирже NYMEX, а также безрисковая процентная ставка, действующая на момент времени, соответствующему котировкам.
Практическая значимость работы. Была разработана и протестирована на реальных данных программа для расчёта теоретических цен европейских опционов. Данная программа может применяться для принятия инвестиционных решений.
Опцион является производным финансовым инструментом, то есть его стоимость зависит от стоимости базового актива. Особенностью опционов является возможность получения неограниченной прибыли при ограниченных возможных убытках, поэтому становится важной задача определения цены.
По времени исполнения различают:
· европейский опцион - может быть исполнен только в момент экспирации;
· американский опцион - может быть исполнен в любой момент до экспирации.
По стороне контракта различают опцион колл, дающий право покупки базового актива, и опцион пут, дающий право продажи.
Опцион характеризуется следующими параметрами:
1. Цена исполнения или цена страйк - цена, по которой будет произведена покупка или продажа базового актива.
2. Дата экспирации - дата окончания торговли по контракту. По истечению этого времени контракт считается недействительным, в случае его неисполнения.
3. Базовый актив - финансовый инструмент, на котором основывается инструмент.
4. Премия по опциону или котировочная цена - цена, уплачиваемая в момент продажи опциона.
Вся математические модели для расчёта цен опционов основаны на идее эффективного рынка. Это означает, что «справедливая» опционная премия соответствует стоимости, при которой ни продавец, ни покупатель опциона, в среднем не получают прибыли.
1. Факторы ценообразования опционов
Цена базового актива или цена спот. Непосредственно связана с премией: при увеличении цены базового актива, цена опциона колл увеличивается, а цена опциона пут уменьшится.
Цена исполнения опциона или цена страйк. По мере уменьшения цены страйк, происходит увеличение цены колл опциона и уменьшение цены опциона пут.
Волатильность цены базового актива. С увеличением волатильности, то есть с увеличением скорости изменения цены базового актива, возрастает неопределённость в оценке будущей цены, поэтому и опционная премия пут и колл опционов также возрастает.
Безрисковая процентная ставка. Опционы колл можно представить как форму заимствования денег. Не смотря на то, что покупатель уплачивает премию, в действительности осуществляется заём активов. Поскольку процентная ставка представляет собой затраты продавца на содержание, то увеличение процентной ставки приводит к увеличению цены колл опционов и уменьшению цены опционов пут.
Время до экспирации контракта. Чем больше период времени до экспирации, тем дороже стоят опционы пут и колл.
Дивиденды. В случае выплаты дивидендов, цена акции уменьшается на эту же сумму, так как фактически стоимость активов компании уменьшилась. Соответственно, при выплате дивидендов, опционы колл падают в цене, а опционы пут - дорожать.
1.1 Составляющие опционной премии
Размер опционной премии определяется суммой двух составляющих: временной стоимости и внутренней стоимости.
Внутренняя стоимость опциона определяется как разница между ценой базового актива и ценой страйк для опциона колл, и разница между ценой страйк и ценой базового актива для опциона пут. В случае отрицательного значения, внутренняя стоимость полагается равной нулю.
С внутренней стоимостью связан показатель цены опциона, называемый денежностью. Различают следующие виды денежности:
1. Опцион “в деньгах” (англ. in the money - ITM) - внутренняя стоимость выше цены базового актива.
2. Опцион “на деньгах” (англ. at the money - ATM) - внутренняя стоимость равна цене базового актива.
3. Опцион “вне денег” (англ. out of the money - OTM) - внутренняя стоимость меньше цены базового актива.
Рисунок 1. Денежность опциона
Временная стоимость опциона - стоимость возможности, которую предоставляет опцион за определённый период. Непосредственно зависит от времени, оставшегося до экспирации контракта и волатильности базового актива. Чем дальше находится дата экспирации, тем больше вероятность сильного изменения цены, поэтому опционная премия также выше. Таким образом, эта часть стоимости является платой за риск, связанный со временем. Процесс уменьшения опционной премии со временем называется временным распадом.
1.2 Зависимость доходности опциона от цены базового актива
Доходность по опциону определяется ценой страйк, размером опционной премии и ценой базового актива.
Рассмотрим примеры продажи и покупки опционов на акцию со страйком 85 и опционной премией 5. При продаже опциона пут (рис. 2), продавец имеет фиксированный размер прибыли, равный размеру опционной премии. В случае, если цена базового актива начинает падать и становится меньше цены страйк, продавец начинает нести убытки, максимальный размер которых ограничен размером стоимости базового актива.
Рисунок 2. Кривая доходности при продаже опциона пут
Покупатель опциона пут (рис. 3) имеет ограничение на убытки, равное размеру опционной премии. Убытки начинают уменьшаться, когда цена базового актива становится меньше цены страйк и становятся равны нулю при достижении точки безубыточности, равной разнице между ценой страйк и размером премии. Максимальный доход покупателя опциона пут ограничен размером стоимости базового актива.
Рисунок 3. Кривая доходности при покупке опциона пут
Размер прибыли продавца опциона колл (рис. 4) ограничен размером опционной премии. Прибыль начинает падать, когда цена базового актива начинает расти и становится равна цене страйк. При пересечении точки безубыточности, равной сумме цены страйк и размера опционной премии, продавец начинает нести убытки, которые не ограничены в размере.
Рисунок 4. Кривая доходности при продаже опциона колл
Убыток покупателя опциона колл ограничен размером опционной премии. Он начинает уменьшаться, когда цена базового актива поднимается выше цены страйк. Точка безубыточности достигается при цене базового актива, равной сумме цены страйк и размера опционной премии. Прибыль покупателя опциона колл не ограничена.
Рисунок 5. Кривая доходности при покупке опциона колл
Волатильность
Волатильность представляет собой меру рыночного риска.
Основные виды волатильности - историческая волатильность и подразумеваемая волатильность.
Историческая волатильность рассчитывается на основе исторических (реальных рыночных котировках, существовавших в прошлом) данных за определённый период и определяется как среднеквадратичное отклонение цены за период.
Подразумеваемая волатильность рассчитывается на основе текущих данных. Значение подразумеваемой волатильности, подставленное в модель оценки опционов позволяет получить теоретическое значение цены, которое должно быть равно текущей цене опциона. Подразумеваемая волатильность представляет собой субъективную оценку рынком будущей волатильности базового актива.
Разница между значениями подразумеваемой и исторической волатильности может служить индикатором настроения рынка - если подразумеваемая волатильность выше, это показывает неуверенность рынка, а если историческая выше - наоборот.
Во всех моделях ценообразования опционов предполагается, что каждому страйку опциона соответствует одна и та же волатильность - волатильность базового актива. Однако, в реальности оказывается, что у каждого страйка своя волатильность, а волатильности разных экспираций также отличаются. Если для опционов одной экспирации построить график зависимости между ценой страйк и волатильности, то эта зависимость будет квадратичной или монотонной. Для страйков, сильно отличающихся от цены базового актива, то есть для страйков глубоко в деньгах (ITM) и вне денег (OTM), волатильность оказывается выше. Из-за сходства кривой волатильности с изображением улыбки, такая зависимость получила название улыбки волатильности (рис. 6).
Улыбка волатильности показывает, что рынок оценивает опционы колл с большей прибылью и опционы пут с большим убытком дороже, чем это предполагается логнормальным распределением. Форма кривой волатильности также зависит от времени и становится менее выраженной по мере приближения экспирации. Отличие кривых волатильности на разных экспирациях связано с ожиданием рынком воздействия событий, влияющих на цену базового актива. Таким событием может быть выпуск компанией отчёта о прибыли. За период, предшествующий этому событию, волатильность возрастает, а вскоре после события падает, так как цена базового актива уже учитывает этот фактор. Наибольшее влияние такие события оказывают на ближайшие экспирации.
Для наглядности часто используют поверхность волатильности, на которой по оси Z отображается текущая подразумеваемая волатильности, по оси Y цены страйк, а по оси X - оставшееся время до экспирации.
Синтетический форвард
Форвардная цена базового актива - это та цена, по которой должен быть поставлен базовый актив в будущем.
При одновременной покупке опциона колл на некотором страйке и продаже опциона пут на этом же страйке, образуется позиция, которая по своим свойствам эквивалентна позиции по форвардному контракту. Формула для расчёта стоимости синтетического форварда имеет вид:
С учётом фактора дисконтирования приходим к формуле расчёта
Обзор литературных источников
Гипотеза эффективного рынка основана на предположении, что цена актива не зависит от данных о ценах в прошлом, то есть невозможно предсказать будущие цены на основе прошлых, то есть процесс изменения цены представляет собой случайное блуждание. Так как все участники рынка имеют возможность анализировать историю цен, то любая возможность заработать на прогнозируемых движениях была бы использована, поэтому в процессе реализации этих попыток, предсказуемые кривые начнут исчезать.
Впервые ценообразование опционов освещается в работах Луи Башелье (1). В основу концепции положена гипотеза о статистической независимости временных рядов котировок активов, когда корреляция между двумя соседними рядами равна нулю. Такой процесс называется броуновским движением или случайным блужданием. Временной ряд - последовательность протекающих во времени процессов, то есть таких процессов, значения которые меняются во времени. Процесс случайного блуждания описывается формулой: ,
где - независимые и одинаково распределённые случайные величины с постоянной дисперсией и нулевым математическим ожиданием, при этом приращения распределены нормально.
Недостатком модели случайного блуждания является тот факт, что независимо от начального условия , ряд может принимать отрицательные значения. Башелье впоследствии предложил использовать вместо цен их логарифмы. В этом случае, при положительном начальном условии, цены будет всегда положительны.
Наиболее значимое место в списке работ по процессу ценообразования опционов занимает модель Блэка-Шоулза (2). Распределение цены актива является логнормальным. В работе Талеба и Хауга приводится версия (3), что эта модель в действительности основана на практически идентичной формуле Бонесса (4). Тем не менее, Блэк и Шоулз предложили оригинальный подход к выводу формулы, используя принципы динамического хэджирования и риск-нейтральные вероятности. При одновременной покупке акций и продажи опционов колл на эти акции, можно сформировать безрисковую позицию, когда убытки по акции будут компенсироваться прибылью по опционам и наоборот. Ставка доходности по безрисковой хеджированной позиции должна быть равна безрисковой процентной ставке, иначе могла бы существовать возможность получения арбитражной прибыли. Осуществляя эту возможность, инвесторы приводили бы цену к равновесному уровню.
После адаптации, произведённой Мертоном становится возможным использовать модель для опционов на акции с выплачиваемыми дивидендами.
Модель Блэка-Шоулза основана на целом ряде допущений относительно ценовой динамики. Многими авторами было отмечено, что волатильность со временем изменяется и распределение доходностей не является нормальным (5).
В дальнейшем Хестон предложил использовать стохастическую волатильность вместо постоянной (6). Возможно также моделирование волатильности с использованием понятия гетероскедастичности - свойства стохастической компоненты регрессии, выражающегося в изменении дисперсии во времени. Дюан предлагает использовать волатильность по процессу обобщённой авторегрессионной условной гетероскедастичности (GARCH) (7). Успех модели с использованием GARCH-волатильности основывается на том, что учитывается как корреляция между доходностью и волатильностью, так и зависимость текущей волатильности от прошлой динамики (8).
Следующий метод оценки с использованием биноминальной решётки был предложен Коксом (9). При использовании большого числа повторений, биноминальное распределение аппроксимирует нормальное распределение, поэтому эта модель позволяет получить схожие результаты с моделью Блэка-Шоулза. Основным преимуществом новой модели становится возможность оценки американских опционов.
Ещё более эффективные оценки обеспечиваются моделью с использованием триномиальной решётки, предложенной Боулом и мультиноминальной решётки Камрада и Риччкена (10). Тревор и Ричкен адаптировали метод триномиальной решётки к волатильности по процессу GARCH (11).
Развитие математического аппарата и вычислительной техники приводит к появлению новых методов оценки параметров ценовой динамики, необходимых для вычисления цен опционов. Существуют полупараметрические, параметрические и непараметрические модели, позволяющие оценивать тренд и волатильность (12).
Описание модели ценообразования опционов Блэка-Шоулза
Модель Блэка-Шоулза является самой известной моделью для оценки стоимости опционов. Блэк и Шоулз вывели общую формулу для оценки стоимости европейского колл опциона на акции.
Модель учитывает следующие параметры опциона: цену исполнения, цену базового актива, время до экспирации контракта, безрисковую процентную ставку и стандартное отклонение курса базового актива (акции). При этом не учитывается ожидаемый доход на акции. Ожидаемая доходность на все бумаги является одинаковой и равна безрисковой процентной ставке, используемой для оценки будущей дисконтированной стоимости доходов. При выводе формулы были сделаны следующие допущения:
· в течение всего срока действия контракта по акции не выплачиваются дивиденды;
· транзакционные затраты, связанные с покупкой или продажей акции и опциона отсутствуют;
· безрисковая процентная ставка известна и не изменяется в течение всего срока действия опциона;
· рынок является эффективным;
· распределение цены акции является логнормальным;
· торговля базовым активом ведётся непрерывно.
Формула для расчёта цены европейского опциона колл имеет следующий вид:
,
,
,
Исходя из пут/колл паритета, цена европейского опциона пут определяется следующей формулой:
Обозначения:
· C(S,t) - текущая стоимость колл опциона в момент t до окончания срока контракта;
· S - текущая цена базового актива;
· N(x) - кумулятивная функция стандартного нормального распределения;
· r - безрисковая процентная ставка;
· K - цена страйк опциона;
· T - t - оставшееся время до окончания срока действия контракта;
· - волатильность базового актива (квадратный корень из дисперсии);
· - фактор дисконтирования цены.
При выводе формулы были зафиксированы все переменные, кроме цены акции и времени. Ключевая идея, позволившая вывести формулу Блэка-Шоулза, заключается в том, что можно создать синтетический опцион, используя комбинацию из акции и денежного займа.
Проанализировав формулу, можно заметить, что цена опциона возрастает при возрастании цены акции, волатильности, безрисковой процентной ставки, времени до экспирации, и убывает при возрастании цены страйк. Все необходимые для расчёта параметры, за исключением значения волатильности, могут быть взяты из рыночных данных. Значение волатильности необходимо рассчитать на основе этих же рыночных данных.
Характеристики чувствительности цены опциона
Для оценки влияние изменения величин на размер опционной премии были введены коэффициенты, называемые “греками” (англ greeks). Существуют следующие коэффициенты.
Коэффициент дельта. Позволяет оценить на сколько изменится цена опциона, если произойдёт небольшое изменение цены базового актива. Опционы “вне денег” имеют близкую к нулю дельту. Дельта опциона “в деньгах” близка к 1. Коэффициент дельта для опционов колл рассчитывается следующим образом:
,
Коэффициент дельта для опционов пут рассчитывается следующим образом:
,
Коэффициент гамма. Используется для оценки скорости изменения дельты при изменения цены базового актива. Коэффициент гамма для опционов колл и пут рассчитывается по формуле:
,
Коэффициент вега. Показывает зависимость цены опциона от изменения волатильности.
Коэффициент вега для опционов пут и колл рассчитывается по формуле:
,
Коэффициент тета. Позволяет оценить зависимость цены опциона от изменения времени до экспирации. Коэффициент для опционов колл рассчитывает по формуле:
,
Коэффициент тета для опционов пут рассчитывает по формуле:
,
Коэффициент ро. Зависимость цены опциона от изменения процентной ставки. Коэффициент для опциона колл рассчитывается по формуле:
,
Коэффициент ро для опциона пут рассчитывается по формуле:
Равенство формул расчёта коэффициентов гамма и вега для обоих типов опционов не случайно, так как оно такая закономерность следует из теории паритета пут и колл опционов.
Формула Блэка
Вместо цены спот базового актива возможно использование подразумеваемой форвардной цены. Таким образом, формулы расчёта теоретических цен принимают следующий вид.
,
,
,
Постановка задачи
В рамках данной работы необходимо программно реализовать модель Блэка-Шоулза. Программа должна представлять собой приложение, способное на основе данных из файла вычислить теоретические цены для опционной серии и записать их файл.
Задачами данной работы являются:
1. Анализ математических моделей опционов.
2. Разработка вычислительного метода для расчёта теоретических цен опционов.
3. Программная реализация метода.
4. Тестирование разработанной программы и сравнение результатов работы с реальными рыночными данными.
Входные данные
Входные данные представлены в виде текста в формате JSON.
Он содержит следующую информацию:
1. Котировки по опционной серии контракта.
2. Безрисковая процентная ставка.
3. Время экспирации контракта.
4. Время, на которое производится расчёт.
Данные по котировкам имеют следующую структуру:
{"strikes": {STRIKE_1: {"put": PRICE_SET1, "call": PRICE_SET2},
…,
STRIKE_N: {"put": PRICE_SET3, "call": PRICE_SET4}},
"rfr": 0.00731654676635081,
"time": "2016-04-25 07:28:00.575Z",
"expiry_time": "2016-09-19 23:59:59.000"}}
Где:
· STRIKE1, STRIKEN - числа, соответствующие ценам страйк;
· PRICE_SET1, PRICE_SETN - массивы чисел вида [bid, ask], представляющих собой цены спроса (bid) и предложения (ask).
· rfr - безрисковая процентная ставка на момент расчёта;
· time, expiry_time - время в формате ISO8601 в часовом поясе UTC+0.
Выходные данные
Выходные данные представлены в виде текста в формате JSON. Файл имеет следующую структуру:
{STRIKE_1: {"put": teo_put_price1, "call": teo_call_price1},
…,
STRIKE_N: {"put": teo_put_pricen, "call": teo_call_pricen}},
Где: опционный премия доходность программа
· STRIKE1, STRIKEN - числа, соответствующие ценам страйк;
· teo_put_price1, teo_put_pricen, teo_call_price1, teo_call_pricen - теоретический цены опционов пут и колл.
Описание состава программных средств
Программа для расчёта теоретических цен опционов по модели Блэка-Шоулза реализована на языке программирования Python 3.
Выбор данного языка обусловлен следующими причинами:
1. Автоматическое управление памятью и динамическая типизация позволяют сократить размер и скорость написания алгоритма.
2. Написанный алгоритм без каких-либо доработок возможно запустить на любой операционной системе, для которой выпущен интерпретатор Python 3.
Для языка Python 3 разработаны наборы библиотек, реализующих математические функции: numpy, scipy, что также повлияло на выбор языка.
В библиотеке numpy реализованы оптимизированные вычислительные алгоритмы для работы с числовыми массивами, что позволяет ускорить вычисления при её использовании. Множество других библиотек предполагают использование массивов numpy вместо стандартных списков Python.
В библиотеке scipy реализованы вычислительные алгоритмы для выполнения инженерных и научных расчётов. Реализованы методы статистики, такие как вычисление значения функции нормального распределения и значения функции плотности вероятности, используемые в расчётах в данной работе.
Разработка алгоритма расчёта по модели Блэка-Шоулза
Для расчёта теоретической цены требуются следующие входные данные:
· цена страйк;
· время до исполнения контракта;
· безрисковая процентная ставка;
· цена спот базового актива;
· подразумеваемая волатильность.
Чтобы избавиться от необходимости наличия данных по ценам базового актива, используется альтернативная формулировка модели (формула Блэка), описанная в формулах (7), (8), (9), (10), в которой вместо цены спот базового актива используется подразумеваемая цена форварда.
Фильтрация входных данных
При любых расчётах необходимо использовать корректные данные. Для этого предполагается отбрасывать данные, попадающие под следующие условия:
1. Существует цена bid и ask, при этом ask >= bid.
2. Для данного страйка существуют корректные цены для контрактов пут и колл.
Расчёт подразумеваемой цены форварда
Подразумеваемую цену форварда можно рассчитать на основе имеющихся цен опционной серии конкретной экспирации. Для этого используется формула (1). Алгоритм расчёта следующий: данные по котировкам фильтруются, производится расчёт подразумеваемой цены для каждого страйка из прошедших фильтр. Далее рассчитывается среднее арифметическое полученных значений и используется в дальнейшем как подразумеваемая цена форварда.
Расчёт теоретических цен
Для расчёта теоретических цен применяются формулы (7), (8), (9), (10).
На вход функции подаются следующие параметры: цена страйк, подразумеваемая цена форварда, время до экспирации в долях года, безрисковая процентная ставка, подразумеваемая волатильность.
На выходе функции получаются значения теоретических цен для опциона колл и опциона пут, а также значение параметра vega, используемого в расчёте подразумеваемой волатильности.
1.3 Расчёт подразумеваемой волатильности
Подразумеваемая волатильность для страйков, по которым имеются цены, рассчитывается методом Ньютона через формулу Блэка-Шоулза.
На вход функции подаются следующие значения: котировка, на основании которой производится расчёт, цена страйк, подразумеваемая цена форварда, время до экспирации, безрисковая процентная ставка.
Метод Ньютона - это итерационный численный метод для нахождения нуля (корня) заданной функции. Поиск корня основан на методе простой итерации и осуществляется при помощи построения последовательных приближений. Он обладает квадратичной сходимостью.
Алгоритм нахождения решения сводится к итерационной процедуре вычисления:
,
Где:
- функция вычисления теоретических цен.
- первая производная функции, или параметр vega.
Расчёт теоретических цен с использованием параметра производится до тех пор, пока погрешность между действительным значением цены и расчётным не станет достаточно малой. В данной программе выбрано значение . Экспериментальным путём установлено, что ограничение количества итераций в 1000 является достаточным для решения данной задачи.
Интерполяционная функция подразумеваемых волатильностей
Для страйка, по которому необходимо произвести расчёт теоретических цен, требуется найти подразумеваемую волатильность.
Для этого, используя подразумеваемые волатильности имеющихся страйков, методом кубических сплайнов интерполируется значение, которое затем подставляется в формулу Блэка-Шоулза для вычисления теоретических цен. Рассмотрим метод интерполяции.
Сплайн - функция, непрерывная на всём отрезке [a, b] и на каждом частичном отрезке представляет собой некоторый алгебраический многочлен. Степень сплайна - максимальная степень из всех многочленов по всем частичным отрезкам. Дефект сплайна - разница между степенью сплайна и порядком наивысшей непрерывной производной на отрезке [a, b]. Наиболее часто используются кубические сплайны - сплайны степени три, у которых непрерывна по крайней мере первая производная. Величина носит название наклона сплайна в точке .
Если в узлах заданы значения , которые принимает сплайн, то на частичном отрезке он будет принимать вид:
,
Если многочлен третьей степени в точках принимает значения , и в этих очках имеются производные , то эти многочлены совпадают. Таким образом, для задания кубического сплайна на отрезке, необходимо задать значения в N+1 в узле .
Если кубический сплайн принимает в узлах те же значения, что и функция , то такой сплайн называется интерполяционным. Он служит для аппроксимации функции на отрезке [a, b].
Для вычисления интерполяционного значения подразумеваемой волатильности используется функция interpolate.interp1d из пакета scipy.
В случае, если страйк не входит в границы рассчитанных подразумеваемых волатильтостей, то есть он не удовлетворяет условию, , произвести расчёт теоретической цены для этого страйка не представляется возможным.
Расчёт теоретических цен с использованием интерполяционной функции
В качестве нижней и верхней границы для диапазона вычислимых страйков принимается минимальный и максимальный страйки, для которых был произведён расчёт подразумеваемых волатильностей. Из данного диапазона исключаются страйки, по которым уже имеются данные по котировкам. Для всех остальных страйков из полученного массива производится вычисление подразумеваемой волатильности через интерполяционную функцию. На основании полученного значения производится расчёт теоретических цен опционов.
Описание программы
Программа для расчёта теоретических цен по модели Блэка-Шоулза разработана под операционную систему Windows версии XP и выше.
Программа написана на объектно-ориентированном языке программирования высокого уровня Python 3.
Программа представляет собой приложение, позволяющее производить расчёт теоретических цен опционов на основе имеющихся данным по котировкам. Рассмотрим ядро программы, производящее вычисления.
Программа состоит из модуля __main__.py. Модуль содержит следующие процедуры:
- Процедура calc_time_to_expiry - применяется для расчёта времени до экспирации опциона.
- Процедура ifp_calc - применяется для вычисления подразумеваемой цены форварда данного страйка.
- quote_filter и check_quote - применяются для фильтрации данных по котировкам.
- Процедура bs_calc - применяется для расчёта теоретических цен опционов по формуле Блэка-Шоулза.
- Процедура iv_calc - применяется для вычисления подразумеваемой волатильности страйка на основе данных по котировкам. В данной процедуре реализован метод Ньютона для поиска подразумеваемой волатильности через формулу Блэка-Шоулза.
Полный текст программы представлен в приложении.
Создание тестовых примеров для проверки программы
В качестве исходных данных для демонстрации работы программы взяты рыночные котировки опциона LO (лёгкая сырая нефть) биржи NYMEX экспирации 17 августа 2016 года за 23 мая 2016 года, момент времени 23:03:15.334Z. В данном наборе присутствуют все возможные варианты данных по котировкам: отсутствующие котировки, котировки, не удовлетворяющие условию корректности (bid > ask), односторонние котировки (есть только bid или ask), отсутствующие котировки по одному из типов контракта.
2. Тестирование программы на экспериментальном наборе данных
В процессе тестирования программы на экспериментальном наборе данных получены результаты расчётов теоретических цен для тех страйков, по которым отсутствуют данные по котировкам.
Для тестирования корректности расчётов было произведено сравнение полученных цен OTM страйков с имеющимися рыночными ценами.
Результаты сравнения представлены на рисунках 8 и 9.
Рисунок 8. Сравнение реальных и расчётных цен опционов колл вне денег
Рисунок 9. Сравнение реальных и расчётных цен опционов пут вне денег
По виду графиков расчётных цен можно сделать следующие выводы:
1. С приближением страйка к цене спот, то есть когда денежность опциона находится близко к ATM и переходит через него, расчёты по модели перестают отображать рыночную ситуацию.
2. Область применения модели ограничена OTM страйками.
Заключение
В настоящей работе был описан процесс ценообразования опционов.
Рассмотрено понятие опционного контракта и факторов, влияющих на его ценообразование. Определены такие понятия, как волатильность финансового актива, подразумеваемая волатильность, принцип паритета опционов пут и колл. Произведён обзор модели ценообразования Блэка-Шоулза и других моделей. Рассмотрены отличия данных моделей от модели Блэка-Шоулза, их преимущества и недостатки.
Разработана и протестирована на рыночных данных программная реализация модели Блэка-Шоулза. Разработанная программа может быть использована для оценки стоимости опционов и принятия инвестиционных решений.
Недостатком данной реализации является необходимость получения в качестве входных данных не только данных по котировкам опциона, но и значения безрисковой процентной ставки. Для устранения этого недостатка необходимо разработать алгоритм вычисления процентной ставки на основе данных по котировкам опционов на валюту, для которой требуется рассчитать процентную ставку.
Список литературы
1. L., Bachelier. Theory of Speculation. б.м. : MIT Press., 1964 [1900].
2. Black F., Scholes M. The Pricing of Options and Corporate Liabilities. б.м. : Journal of Political Economy, 1973.
3. Haug E., Taleb N. Why We Have Never Used the Black-Scholes-Merton Option Pricing Formula. б.м. : Wilmott Magazine, 2008.
4. A., Boness. Elements of a Theory of Stock-Option Value. б.м. : Journal of Political Economy, 1964.
5. Option Pricing when the Variance is changing. Johnson H., Shanno D. 22, б.м. : Journal of Financial and Quantitative Analysis, 1987 r.
6. A Closed-Form Solution for Options with Stochastic Volatility, with Applications to Bond and Currency Options. S., Heston. 6, б.м. : Review of Financial Studies, 1993 r.
7. The GARCH option pricing model. J., Duan. 5, б.м. : Mathematical Finance, 1995 r.
8. A Closed-Form GARCH Option Valuation Model. Heston S., Nandi S. 13, б.м. : Review of Financial Studies, 2000 r.
9. Option Pricing: A Simplified approach. Cox J., Ross S., Rubinstein M. 7, б.м. : Journal of Financial Economics, 1979 r.
10. Multinomial Approximating Models for Options with k State Variables. Kamrad B., Ritchken P. 37, б.м. : Management Science, 1991 r.
11. Pricing Options under Generalized GARCH and Stochastic Volatility Processes . Ritchken P., Trevor R. 54, б.м. : Journal of Finance, 1999 r.
12. Continuous Time Processes. O., Linton. б.м. : Financial Econometrics Lecture Notes, 2007 r.
13. Стечкин С. Б., Субботин Ю. Н. Сплайны в вычислительной математике. Москва : Наука, 1976.
Приложение
import simplejson
from pprint import pprint as pp
import math
from scipy.stats import norm
from scipy import interpolate
from datetime import datetime as dt
import numpy as np
import sys
time_format = "%Y-%m-%d %H:%M:%S.%fZ"
mpi = 4
class OptionTypes:
Put = "P"
Call = "C"
class Quote:
def __init__(self,
option_type,
bid_price,
ask_price):
self.bid_price = bid_price
self.ask_price = ask_price
self.option_type = option_type
@property
def mid_price(self):
if self.ask_price and self.bid_price:
mid = round((self.ask_price + self.bid_price)/2, mpi)
else:
mid = None
return mid
class Strike:
def __init__(self,
call_quotes,
put_quotes):
self.call = call_quotes
self.put = put_quotes
def check_quote(quote):
check_result = False
if quote[1] and quote[0]: # если котировки есть и они не пустые/односторонние
if quote[1] >= quote[0]: #если ask >= bid
check_result = True
return check_result
def quote_filter(put, call):
# отфильтровываются все однокрылые котировки, а также котировки не проходящие по спред фильтру
# отфильтровываются все страйки не имеющие цены для Call и Put одновременно
# для каждого страйка рассчитывается F
# из полученного набора значений отфильтровывается верхний и нижний Nй квантиль
# берется среднее арифметическое из полученных значений
valid = False
if not (put is None or call is None):
put_valid = check_quote(put)
call_valid = check_quote(call)
if put_valid and call_valid:
valid = True
return valid
def bs_calc(strike_price,
implied_forward_price,
time_to_expiry,
risk_free_rate,
iv):
"""
strike_price - расчётная цена данного опциона
implied_forward_price - подразумеваемая цена базового актива
time_to_expiry - время в годах до момента экспирации опциона, определяется как отношение количества календарных минут
между текущим временем и датой экспирации инструмента) и количеством минут в году
risk_free_rate - безрисковая процентная ставка
volatility - текущее значение волатильности
"""
discount_factor = math.e**(-time_to_expiry*risk_free_rate)
expiry_sqrt = math.sqrt(time_to_expiry)
n1 = iv*expiry_sqrt
d1 = (math.log(implied_forward_price/strike_price) + (time_to_expiry*iv**2)/2)/n1
d2 = d1 - n1
teo_call = round(discount_factor * (norm.cdf(d1)*implied_forward_price - norm.cdf(d2)*strike_price), mpi) #call
teo_put = round(discount_factor * (norm.cdf(-d2)*strike_price - norm.cdf(-d1)*implied_forward_price), mpi) #put
vega = implied_forward_price * discount_factor * norm.pdf(d1) * expiry_sqrt
return teo_call, teo_put, vega
def iv_calc(quote_call,
quote_put,
strike_price,
implied_forward_price,
time_to_expiry,
risk_free_rate):
"""
вычисление подразумеваемой волатильности методом Ньютона по формле Блэка-Шоулза
"""
epsilon = math.pow(10, -14)
discount_factor = math.e**(-time_to_expiry*risk_free_rate)
# выбор начального значения
p = norm.ppf(((quote_call.mid_price/discount_factor + strike_price))/(implied_forward_price + strike_price)) / math.sqrt(time_to_expiry)
q = 2 * abs(math.log(implied_forward_price/strike_price))/time_to_expiry
lower_bound = p + math.sqrt(max(p * p - q, 0))
upper_bound = p + math.sqrt(p * p + q)
iv_pivot = (lower_bound + upper_bound)/2
def calc_iv(quote):
left = 1000
delta = quote.mid_price
iv_n1 = iv_pivot
iv_n = iv_n1
while abs(delta) > epsilon and left > 0:
teo_call_price, teo_put_price, vega = bs_calc(strike_price,
implied_forward_price,
time_to_expiry,
risk_free_rate,
iv_n)
if quote.option_type == OptionTypes.Call:
teo_price = teo_call_price
else:
teo_price = teo_put_price
delta = teo_price - quote.mid_price
left -= 1
iv_n1 = iv_n - delta/vega
iv_n = iv_n1
if abs(delta) > epsilon:
result = None
else:
result = iv_n
return result
iv_call = calc_iv(quote_call)
iv_put = calc_iv(quote_put)
if iv_call and iv_put:
iv = min(iv_put, iv_call)
else:
iv = iv_call or iv_put
return iv
def calc_time_to_expiry(expiry_t, current_time):
expiry = dt.strptime(expiry_t, time_format)
current = dt.strptime(current_time, time_format)
delta_t = expiry - current
delta_s = delta_t.total_seconds()/60
time_to_expiry = delta_s/(365*24*60)
return time_to_expiry
def ifp_calc(call_quote,
put_quote,
risk_free_rate,
strike_price,
time_to_expiry):
#call_ask_price - цена ask колл опциона
#put_bid_price - цена bid пут опциона
#strike_price - цена страйк
#time_to_expiry - время до экспирации в долях года
if not call_quote.ask_price and put_quote.bid_price:
fp = None
else:
fp = (call_quote.ask_price - put_quote.bid_price) * math.e**(risk_free_rate * time_to_expiry) + strike_price
return fp
if __name__ == "__main__":
result_file_name = "result.json"
input_file_name = "sample.json"
with open(sys.argv[1], 'r') as sample_file:
sample_data = simplejson.load(sample_file)
quotes = sample_data["strikes"]
risk_free_rate = sample_data["rfr"]
time_to_expiry = calc_time_to_expiry(sample_data["expiry_time"], sample_data["time"])
filtered = {}
for strike_price, strike_data in quotes.items():
if quote_filter(**strike_data):
filtered[int(strike_price)] = Strike(Quote(OptionTypes.Call, *strike_data["call"]),
Quote(OptionTypes.Put, *strike_data["put"]))
#для начала нужно найти implied_forward_price
forward_prices = []
for strike_price, strike_data in filtered.items():
forward_price = ifp_calc(strike_data.call, strike_data.put, risk_free_rate, strike_price, time_to_expiry)
if forward_price is not None:
forward_prices.append(forward_price)
#берём среднее из расчитанных ifp
implied_forward_price = sum(forward_prices)/len(forward_prices)
#далее, нужно расчитать iv по всем имеющимся котировкам, прошедшим фильтр
strikes = []
ivs = []
for strike_price, strike_data in sorted(filtered.items()):
try:
calculated_iv = iv_calc(strike_data.call,
strike_data.put,
strike_price,
implied_forward_price,
time_to_expiry,
risk_free_rate)
strikes.append(strike_price)
ivs.append(calculated_iv)
except:
pass
#инициализируем функцию интерполяции
iv_interpolate = interpolate.interp1d(x=np.array(strikes), y=np.array(ivs), kind=cubic")
calculated_prices = {}
pp("диапазон страйков, для которых возможно произвести расчёт: {} - {}".format(min(strikes), max(strikes)))
#вычислим теоретические цены для отсутствующих страйков
for new_strike in range(min(strikes), max(strikes) + 1):
if new_strike not in strikes:
calculated_iv = iv_interpolate(new_strike)
teo_call, teo_put, vega = bs_calc(strike_price=new_strike,
implied_forward_price=implied_forward_price,
time_to_expiry=time_to_expiry,
risk_free_rate=risk_free_rate,
iv=calculated_iv)
calculated_prices[new_strike] = {"put": teo_put, "call": teo_call}
with open(result_file_name, "w") as result_file:
simplejson.dump(calculated_prices, result_file)
pp(calculated_prices)
Размещено на Allbest.ru
...Подобные документы
Опцион на фьючерс, акции без дивидендов и маржируемый фьючерс. Улыбка и ухмылка волатильности. Нарушения предположений модели Блэка-Шоуза. Принятие риска трейдерами. Существование арбитражных возможностей. Факторы, влияющие на ценообразование опциона.
курсовая работа [2,0 M], добавлен 20.01.2016Разработка автоматизированной программы расчета страховой премии и оформления страховых документов при добровольном страховании имущества граждан и гражданской ответственности владельцев жилых помещений по индивидуальным условиям в среде Visual Basic.
дипломная работа [2,3 M], добавлен 23.01.2012Расчет тепловой схемы с применением методов математического моделирования. Разработка алгоритма реализации модели. Составление программы для ПЭВМ, ее отладка и тестирование. Проведение численного исследования и параметрическая оптимизация системы.
курсовая работа [2,8 M], добавлен 01.03.2013Этапы процедуры принятия решений. Разработка математического алгоритма. Блок-схема алгоритма работы программы. Разработка программы на языке программирования С++ в среде разработки MFC. Текст программы определения технического состояния станка с ЧПУ.
курсовая работа [823,0 K], добавлен 18.12.2011Разработка модели лифта, алгоритма и программы на языке JavaScript. Возможность использования модели при проектировании промышленных лифтов и отладки управляющих программ. Основные принципы построения модели лифта, выполнение вычислительного эксперимента.
курсовая работа [495,8 K], добавлен 09.06.2013Создание и реализация алгоритма решения транспортной задачи методом наименьших стоимостей. Схема алгоритма основной программы. Основные шаги алгоритма решения транспортной задачи. Инструкция по эксплуатации программы и обзор результатов ее выполнения.
курсовая работа [2,0 M], добавлен 12.02.2013Принцип работы алгоритма бинарного поиска в массиве. Способы исследования алгоритма "прямое включение". Формулы зависимости числа сравнений от элементов в массиве. Графики среднего числа сравнений и перемещений практических и теоретических измерений.
курсовая работа [646,1 K], добавлен 07.01.2014Вычисление физических параметров реальной электрической цепи посредством преобразования её к эквивалентной. Схема алгоритма программы и ее разработка на языках программирования СИ и С++, результаты расчета зависимостей эквивалентных сопротивлений.
курсовая работа [19,9 K], добавлен 15.10.2010Разработка алгоритма и программы управления поворотной платформой лифта при помощи языка программирования Java Script. Проектирование приложения к браузеру в среде Adobe Dreamweaver CS5. Схема алгоритма, текст программы для двухмерной модели лифта.
курсовая работа [353,1 K], добавлен 18.05.2013Методология структурного проектирования, создание функциональной модели процесса учета договоров на предприятии ООО "УралСтройПроект"; разработка информационной модели логической структуры базы данных для организации электронного документооборота.
курсовая работа [1,6 M], добавлен 10.04.2011Проведение сравнительного анализа языков программирования. Создание алгоритма и специфика составления математической модели программы "Механические часы, показывающие текущее время" в среде Microsoft Visual Studio 2010, на базе языка программирования С++.
курсовая работа [408,9 K], добавлен 11.03.2013Формальная схема и закон функционирования моделируемой вычислительной системы для обработки программ. Составление алгоритма моделирующей программы на языке GPSS и листинга программы для стохастической модели. Верификация программы и анализ результатов.
курсовая работа [347,3 K], добавлен 21.01.2013Описание формальной модели алгоритма на основе рекурсивных функций. Разработка аналитической и программной модели алгоритма для распознающей машины Тьюринга. Разработка аналитической модели алгоритма с использованием нормальных алгоритмов Маркова.
курсовая работа [1,5 M], добавлен 07.07.2013Рассмотрение теоретических аспектов решения задач средствами пакетов прикладных программ. Разработка алгоритма проведения вычислений, необходимых для расчета израсходованной электроэнергии. Основы организации удобного интерфейса созданной программы.
курсовая работа [1,2 M], добавлен 09.07.2015Анализ функции и разработка алгоритма по ее вычислению. Программирование отдельных блоков и структур алгоритма. Структура Паскаль-программы. Раздел описаний, подпрограммы, тело программы. Полная Паскаль-программа в соответствии с разработанным алгоритмом.
курсовая работа [241,8 K], добавлен 30.01.2016Обоснование выбора программного обеспечения Borland Delphi. Проектирование информационной модели базы данных в ERWIN в стандарте IDEF1X. Разработка физической модели базы данных заключения договоров с поставщиками на оптовый склад. Листинг программы.
курсовая работа [435,1 K], добавлен 18.02.2011Методика системного исследования реальной динамической сложной системы посредством разработки ее имитационной модели. Разработка программы реализации алгоритма имитационного моделирования системы массового обслуживания "Интернет-провайдерская фирма".
курсовая работа [2,0 M], добавлен 20.01.2010Разработка концептуальной модели, выявление основных элементов системы и элементарных актов взаимодействия. Создание алгоритма и написание программы. Планирование и проведение компьютерных экспериментов. Аналитическое и имитационное моделирование.
курсовая работа [784,0 K], добавлен 01.12.2012Разработка процесса автоматизации взаимодействия преподавателя и студента через сайт и ведение централизованного процесса обработки данных. Создание графического интерфейса программы и физической модели базы данных. Расчет цены программного продукта.
дипломная работа [6,1 M], добавлен 27.06.2011Разработка и написание программы по моделированию движения снаряда при заданных параметрах пути, максимальной высоты, времени полета и траектории. Анализ методов построения модели, разработка алгоритма, написание и отладка программы в среде Delphi.
курсовая работа [214,5 K], добавлен 11.02.2011