Начинаем цикл статей, в которых соберем ключевые вопросы по опционам. Материал будет иллюстрироваться примерами из TSLab и в каком-то смысле служит неформальным введением в торговлю с помощью нашей платформы, а также в разработку опционных роботов.
Если текст покажется сложным, непонятным или какие-то моменты будут раскрыты поверхностно, рекомендуем несколько книг, в которых можно найти более подробное изложение этих вопросов. Учитывая, что опционами торгуют много десятилетий, все основные идеи уже где-то разобраны. Однако, имеются технические особенности реализации стандартных идей, которые иногда будут определять разницу между понятной прибылью и непонятным убытком.
В сети можно найти много материалов Алексея Каленковича, посвященных техническим вопросам вычислений и конкретным торговым тактикам. Он проводит ежемесячные бесплатные вебинары, на которых можно получить ответ на любой вопрос по опционам.
Книги (их можно купить в магазине или найти в электронном виде):
Натенберг "Опционы. Волатильность и оценка стоимости." ISBN 978-5-9614-1442-4
Коннолли "Покупка и продажа волатильности" ISBN 5-93855-007-6
Балабушкин "Опционы и фьючерсы" скачать с сайта Московской биржи
Самые искушенные в математическом плане читатели могут обратиться к курсу Кирилла Ильинского. Он исчерпывающе и на высоком уровне объясняет где найти дорогое для продажи, дешевое для покупки и почему при этом трейдер может рассчитывать на прибыль.
По материалам статьи был проведен вебинар.
Во время трансляции было задано несколько интересных вопросов. Ответы на них публикуем отдельно.
На первый взгляд, цена Базового Актива (коротко, БА) – самое простое, что есть в опционах. Действительно, мы привыкли открывать график фьючерса РТС или акции Сбербанка и видеть аккуратную цепочку баров на всех таймфреймах вплоть до М1. Но при ближайшем рассмотрении возникают чисто практические сложности. Например, если речь идет о малоликвидных фьючерсах (CHZ7, FSZ7, MEZ7 и т.д.) – у них даже с часовыми барами могут быть проблемы. Мало того, что становится трудно измерить волатильность. Мы даже не знаем цену инструмента в какие-то моменты времени. А нам нужно выравнивать дельту. По какой цене ставить лимитную заявку?
Чтобы работать в этих условиях в TSLab реализован блок "Цена БА" == "Base Price". В него заложены различные алгоритмы определения цены фьючерса (последняя сделка, середина спреда между аском и бидом, по ценам опционов). В Редакторе Скрипта выделяем блок этого типа и ставим настройку "Алгоритм" == "Algorythm". Подробности можно посмотреть в документации на блоки, задать вопрос на форуме или обратиться в тех.поддержку.
Для примера посмотрим график фьючерса FSZ7. За час было совершено примерно 5 (пять) сделок.
На верхнем графике:
Сплошная тонкая красная – бары фьючерса по сделкам. Видно, что очень редко происходят события.
Сплошная тонкая голубая – цена посередине спреда. Намного живее все происходит. Основная проблема этого режима – если спред резко расширится в одну сторону (ММ отменят все офера к примеру, а биды оставят).
Сплошная жирная белая – на основании теоретических цен опционов. Используется колл-пут паритет, который позволяет узнать цену БА, если известны цены опционов. А цены опционов мы "знаем" потому что Московская биржа публикует теоретические цены всех опционов даже если в их стаканах нет ни одной заявки. Этот алгоритм быстрее чем по сделкам и стабильней, чем по стакану. К сожалению, тут мы будем вынуждены полностью полагаться на мнение Биржи.
На нижнем графике три линии сливаются в одну – это цена фьючерса на основании опционов разных серий. Для фьючерса FSZ7 это не очень показательно, но для опционов с несколькими сериями можно попробовать искать (и ловить) несогласованности между ними.
Прикладываю 91 - Compare FutPx.tscript, в котором построены эти графики. Импортируете его в TSLab и создаете на его основе агент. Запускаете, смотрите графики.
Есть как минимум еще один вариант получить цену фьючерса, но он применим только во время основной торговой сессии с 10:00 до 18:40. Если это Ваша мечта – обращайтесь, мы его тоже реализуем. Или Вы можете сами реализовать свой алгоритм вычисления цены фьючерса на основании каких-то своих соображений с помощью программирования блоков на языке C#. После того как блок станет виден в TSLab – Вы можете в опционных торговых роботах заменить нашу модель цены на свою авторскую. Для этого в готовом торговом роботе меняете ровно один блок.
Второй важный фактор, который мало освещают в литературе, это время до экспирации (до истечения) опциона. Везде подразумевается, что время течет "равномерно и прямолинейно". За один календарный день истекает один ... день. Но уже здесь начинаются разночтения. В классической литературе (например, в Коннолли) в главе про историческую волатильность можно встретить такое рассуждение: "вычисляем приращение логарифмов цен закрытия по дневным барам. Получаем доходности. Вычисляем дисперсию доходностей – это дает дневную волатильность. Чтобы перевести ее в годовое исчисление, нужно умножить на корень из числа торговых дней в году. Торговых дней в году 252, поэтому приближенно умножаем на 16".
А вот Московская биржа считает, что в году ровно 365 дней. И когда Вы видите в своем терминале теоретическую волатильность опционов – эта волатильность получена из теоретической цены именно с использованием плоского календарного времени.
Это две крайности, между которыми расположены другие варианты рассуждений. Например, можно сказать, что в году есть выходные дни (суббота и воскресенье). Тогда их нужно исключить из расчета и получить те самые 252 дня.
В TSLab за вычисление времени отвечает блок "Время до экспирации" == "Time to expiry" этот режим расчета времени называется плоское календарное время без выходных.
Потом можно вспомнить, что у нас иногда бывают выходные дни на неделе и рабочие дни в субботу / воскресенье. Чтобы это учесть, нужно брать расписание работы Биржи на каждый год и при подсчете времени до экспирации все эти переносы учитывать. Это режим равномерное календарное время без выходных и праздничных дней.
Но и этого недостаточно! Многолетний практический опыт Алексея Каленковича показал, что при приближении даты истечения такой точности уже недостаточно. Во-первых, опционы истекают в середине календарных суток. например, в 16:00 или в 18:45. И если Вы торгуете в этот последний день, то уже должны учитывать время с точностью до минуты. Точный учет расписания Московской биржи вместе с дневным и вечерним клирингом реализован в режиме торговое время ФОРТС. В данный момент это основная модель расчета торгового времени. В Доске Опционов и в торговых роботах по умолчанию используется именно она.
Но и это еще не конец истории. Сам Алексей использует взвешенное время. Идея состоит в том, что ночной интервал с 23:50 до 10:00 – это тоже время и ночью возможен геп. Но рынки закрыты. Поэтому этот промежуток времени получает некий вес и тоже учитывается. Еще бывает, что наш рынок закрыт, а западные площадки работают – тогда это не совсем обычный выходной. Если наш рынок торгует, а зарубежные рынки отдыхают – значит у нас скорее всего в этот день будет сниженная волатильность. И так далее. В TSLab этот режим времени называется Liquid.Pro (ФОРТС).
Для примера посмотрим график время до экспирации для фьючерса на индекс РТС RIZ7 за однy торговую неделю:
На верхнем графике выведены минутные свечи индекса РТС RIZ7 с Московской биржи.
На нижнем графике голубая сплошная линия – время до экспирации в биржевой модели времени. Видно как сильно проваливается эта оценка при переходе с пятницы на понедельник.
На нижнем графике красная сплошная линия – время в соответствии с расписанием ФОРТС. Ночь и выходные не учитываются, поэтому это прямая линия без скачков.
На нижнем графике белая сплошная линия – время в модели Liquid.Pro (ФОРТС). Видны небольшие скачки ночью и на выходных, поскольку эти интервалы времени имеют ненулевой вес. Но в целом эти две модели ведут себя очень близко.
У блока "Время до экспирации" == "Time to expiry" довольно много настроек, но все имеют понятное название и расширенное описание прямо в Редакторе Скриптов. Если документации окажется недостаточно – спрашивайте на форуме. Ответим и дополним.
Прикладываю 91 - Compare dT.tscript, в котором построены эти графики. Импортируете его в TSLab и создаете на его основе агент. Запускаете, смотрите графики.
К сожалению, понятие волатильность имеет много значений и смыслов, часто используется в совершенно разных контекстах. Мы будем стараться употреблять его в узком смысле в одном из двух значений:
Если речь идет о подразумеваемой волатильности, то это "параметр сигма ( σ ), который нужно подставить в формулу Блека-Шолза, чтобы получить теоретическую цену опциона".
Если речь идет об исторической волатильности, то это (в строгом соответствии с определением) "оценка дисперсии доходностей цены" (те самые приращения логарифмов).
Подразумеваемая волатильность (параметр σ ) возникает в модели геометрического броуновского движения (более полная статья на английском языке). Согласно этой модели, эволюция цены БА состоит из фиксированного (детерминированного) тренда μ и случайных колебаний вокруг него. По построению принимается, что случайные колебания вокруг "основного" тренда распределены по нормальному закону с нулевым средним. Поэтому у них есть единственный свободный параметр – дисперсия. Дисперсия (также известная как второй момент распределения) – это вполне строгое математическое понятие. Помимо прочего, оно дает конструктивную процедуру для её оценки на основании наблюдаемых на рынке цен. Если мы смотрим на цены акции или фьючерса и затем на основании этих цен делаем оценку второго момента распределения доходностей, то получаем оценку исторической волатильности изучаемого БА. Ниже вернемся к этому подробнее.
В модели геометрического броуновского движения удается вывести простые формулы для теоретических цен опционов пут и колл европейского типа. В этих формулах параметр σ играет ключевую роль, связывая скрытый параметр распределения вероятностей с реальными наблюдаемыми ценами. К сожалению, в этот момент дисперсию начинают называть "волатильность" и забывают о ее первоначальном смысле. После чего начинают применять к реальному рынку, который совершенно точно не является геометрическим броуновским движением – и получается малосъедобная окрошка. Но "ничего лучше еще не придумали", поэтому опционщикам приходится работать с общепринятыми величинами.
Достаточно удачная статья про формулу Блека-Шолза содержит все необходимые формулы и пояснения. Здесь мы должны сделать одну важную оговорку: формулы вычисления греков неверны. Забудьте про них и даже не пытайтесь запомнить. Вычисление дельты или гаммы по этим формулам – грубейшая ошибка, которая будет высасывать деньги из Вашего депозита. В TSLab греки вычисляются правильным способом.
Подразумеваемая волатильность возникает следующим образом: мы знаем цену опциона (посмотрели ее в стакане), знаем цену фьючерса и время до экспирации (воспользовались блоками в TSLab) и остается один неизвестный параметр в уравнении – сигма ( σ ). Компьютер просто перебирает разные значения σ и вычисляет теоретические цены, пока не получит результат близкий к известной нам цене опциона. Эта простая идея позволяет перейти в другое пространство координат и в удобном виде нарисовать на графике сразу все опционы одной серии (по горизонтальной оси X откладывают страйки опционов, по вертикальной оси Y – подразумеваему волатильность σ).
Легенда гласит, что во времена вывода этой формулы волатильность всех опционов в одной серии лежала на горизонтальной линии. Поэтому маркет-мейкеру было очень удобно котировать опционы и торговать с другими участниками рынка: все, что ему нужно было делать – это удерживать свои заявки покупки ниже этой линии, заявки продажи – выше. Его контрагенты совершали с ним сделки, хеджируя свои риски или преследуя спекулятивные цели, они получали удовлетворение своих потребностей, а маркет-мейкер получал потенциальную прибыль. Чтобы эту прибыль реализовать, ему нужно было дождаться противоположной сделки, а чтобы баланс счета не слишком проваливался в минус – регулярно выравнивать дельту своей суммарной позиции. Потом случилось резкое падение рынка 1987 года, и продавцы путов с тех пор стали ставить свои заявки выше, чем предполагалось в модели Б-Ш. Так появилась улыбка (подразумеваемой) волатильности.
Для разных страйков рынок закладывает разную волатильность.
В добавок к этому имеется неявная зависимость от модели времени: в разном времени одна и та же теоретическая цена соответствует разной волатильности.
Из всех точек на улыбке есть одна выделенная – волатильность-на-деньгах. Это волатильность гипотетического опциона, страйк которого в точности совпадает с текущей ценой БА. Удобно сохранять эту величину в виде функции от времени и потом выводить в качестве индикатора на обычном графике. В TSLab за это отвечают блоки "IV ATM" и "IV ATM (все серии)" == "IV ATM (all series)". Название происходит от английского "Implied Volatility at the Money". Первый блок вычисляет и записывает на жесткий диск (в так называемый "Глобальный Кеш") волатильность на деньгах одной серии опционов. Второй блок – записывает на диск волатильность сразу всех серий. Это удобно, например, для опционов на индекс РТС или курс рубль/доллар, потому что имеются месячные серии и даже недельные (одновременно до 7 серий на каждый фьючерс!).
Для примера посмотрим график подразумеваемой волатильности на деньгах для фьючерса на нефть брент BRX7 за один неполный торговый день:
На верхнем графике выведены минутные свечи нефти BRX7 с Московской биржи.
На среднем графике – волатильность в биржевой модели времени. Последнее значение: 25.73%
На нижнем графике – волатильность в модели времени ФОРТС. Последнее значение: 24.35%
Этот пример наглядно показывает важность времени: в одной модели опцион может быть дешевым и пригодным для продажи, а в другой – дорогим и пригодным для покупки. И только систематически получая месяц за месяцем результат торговли в денежном выражении Вы сможете сделать предположение о том, какая модель времени более удачна и лучше соответствует реальности.
Прикладываю 91 - Collect IV (RW).tscript, в котором построены эти графики. Импортируете его в TSLab и создаете на его основе агент. Запускаете, смотрите графики. В качестве упражнения, можете добавить еще одну панель с линейным графиком и вывести на него подразумеваемую волатильность в модели времени Liquid.Pro (FORTS).
Можем порекомендовать вебинар Алексея, где он рассказывает про опционную улыбку и различные нюансы при пересчете цен опционов в волатильность.
Как было сказано выше, в узком смысле историческая волатильность возникает в модели геометрического броуновского движения в качестве второго момента распределения случайной величины. Измерительная процедура подробно описана во многих источниках (например, видеозапись выступления Алексея на конференции). В TSLab стандартная процедура выполняется с некоторыми улучшениями:
вместо дневных баров используются минутные бары М1 с глубиной истории 810 штук (это один торговый день на ФОРТС)
в этом окне вычисляется дисперсия доходностей минутных баров и с её помощью вычисляется минутная волатильность
принимается, что в году (после вычета праздников и выходных) остается 204 120 торговых минут (252 торговых дня по 810 минут каждый)
минутная волатильность переводится в годовую умножением на 452 (корень из 204 120 примерно равен 451.796)
есть два варианта расчета: когда берутся все бары подряд или когда учитываются только соседние значения с расстоянием между ними ровно 1 минута
В свое время мы проанализировали другие модели оценки дисперсии. В частности, "продвинутые" модели с использованием минимума/максимума бара, с учетом цены открытия и т.д. И пришли к выводу, что все эти модели оценивания совершенно непригодны для реального рынка. Если Вы очень их любите/используете, можете реализовать сами с помощью C# API или заказать разработку у нас. Мы эти модели решительно отвергаем и включать в стандартную поставку TSLab не планируем.
Поскольку базовый актив один на несколько разных серий опционов и поскольку на одной серии можно торговать сразу несколько торговых агентов, удобно сохранять историческую волатильность в виде функции от времени и потом выводить в качестве индикатора на обычном графике. В TSLab за это отвечают блоки "HV (из учебника)" == "HV (from book)". Название происходит от английского "Historical Volatility". блок вычисляет и записывает на жесткий диск (в так называемый "Глобальный Кеш") историческую волатильность указанного базового актива. Кстати, это может быть акция. Например, если фьючерс очень неликвидный можно сделать оценку его исторической волатильности через оценку волатильности его акции.
Сервис Liquid.Pro использует взвешенное время. У них в году получается 220 000 торговых минут. Также в последнее время стали использовать экспоненциальную историческую волатильность (придавать свежим измерениям больший вес). В TSLab эта модель оценки исторической волатильности появится или как встроенный блок, или мы будем получать ее непосредственно с этого Сервиса, чтобы исключить возникновение разночтений (экспоненциальная волатильность вообще говоря зависит от стартовой точки и нам хочется этого избежать).
Для примера посмотрим график исторической волатильности для фьючерса на нефть брент BRX7 за одну торговую неделю:
Зеленый график – минутные свечи нефти BRX7 с Московской биржи.
Розовая жирная линия – историческая волатильность только по соседним свечам
Пунктирная красная линия – историческая волатильность по всем свечам подряд, то есть включая ночные гепы, геп через дневной и вечерний клиринг и т.д.
Этот пример наглядно показывает важность быстрой оценки исторической волатильности: если мерять волатильность по дневным барам, трейдер только утром в понедельник отреагирует на пятничное падение нефти. При этом как мы видим, уже все закончилось. В итоге, "дневной трейдер" ошибается дважды: сначала когда опаздывает за ростом волатильности, и потом когда опаздывает за ее падением. Постоянный внутридневной расчет на барах М1 позволяет намного быстрее реагировать на происходящие изменения. При этом экспоненциальная волатильность, судя по всему, будет реагировать еще быстрее.
Прикладываю 91-HV-RW.tscript, в котором построены эти графики. Импортируете его в TSLab и создаете на его основе агент. Запускаете, смотрите графики.
Более подробная информация о скриптах в комплекте поставки TSLab Опционы содержится в сопроводительной документации на нашем форуме.
91-Compare-FutPx.tscript – различные способы получить цену БА
91-Compare-dT.tscript – различные способы получить время до экспирации
91-Collect-IV-RW.tscript – оценить волатильность-на-деньгах всех серий одного опциона и записать в Глобальный Кеш на жесткий диск
91-HV-RW.tscript – оценить историческую волатильность одного БА и записать в Глобальный Кеш на жесткий диск