Опционы - вид ценных бумаг, вызывающих постоянный интерес даже у
начинающих трейдеров. Об опционах написано немало статей, поэтому
мы опустим ознакомительную часть и будем считать, что читатель
знаком с основными терминами опционной торговли. Если что, то их
толкование несложно найти в интернете.
После первого знакомства с теорией у начинающих торговцев
опционами возникает вопрос: а при каких условиях данный набор
опционов даст прибыль, и какую. Даже опытный опционщик сходу не
сможет ответить на этот вопрос, если у вас более одного опциона.
Для этого необходим анализ опционного портфеля ( набора опционов и
, возможно, фьючерсов), который нагляднее всего делается в
графическом виде, на диаграмме зависимости прибыли/убытка от
стоимости базового актива. В настоящее время существует несколько
сайтов для этого, а также отдельных программ.
Автор статьи реализовал анализ опционов с помощью телеграмм-бота, что дает
возможность быстрого получения информации об инвестиционном
портфеле на смартфоне.
Будем считать, что, кроме опционов, читатель знаком с телеграмм
ботами. Поэтому здесь не будет описания создания бота от получения
токена до обработки клавиатуры. Вместо этого перечислим
концептуальные проблемы, которые возникли при создании программы, и
способы их решения.
Запоминание состояния бота между вебхуками
Бот получает сообщения от пользователя через встроенный в
телеграмм механизм вебхуков. Каждый вебхук заново запускает
программу, но для каждого пользователя необходим свой набор данных.
Идентификация пользователей осуществляется через просмотр потока
ввода:
$id_init = file_get_contents('php://input');$id=sbs($id_init, '"from":{"id":',',"is_bot":'); //в эту переменную записываем уникальный номер пользователяfunction sbs ($str,$m1,$m2){ //из строки str возвращает подстроку между двумя метками-словами m1 и m2$p1=strpos($str,$m1)+strlen($m1); //длина слова-метки слева$p2=strpos($str,$m2);return substr($str,$p1,$p2-$p1);}
Для каждого пользователя строится следующая структура
данных:
-
файл состояния: переменные флажки , которые описывают в
частности, идентификационные номера сообщений ( message_Id) для
дальнейшей их редакции, актуальное состояние ( ввод количества,
ввод страйка и т.д.), вспомогательные данные для построения
графика
-
файл данных по составу портфеля ( идентификационный номер ценной
бумаги, тип, количество, цена, дата экспирации)
-
файлы для построения графика
После каждого вебхука происходит инициация данных в программе из
указанных файлов.
Построение графика для анализа портфеля
График строится по состоянию на момент экспирации опционов, что
дает возможность упрощенно представить график каждого инструмента в
виде y=kx+b,
где y это размер прибыли/убытка на момент экспирации
х стоимость базового актива
После записи данных в портфель создаются файлы с расширением png
с помощью библиотеки GD в несколько этапов:
1) определение Х-координат всех точек перелома на графике
(очевидно, что сумма всех линий даст ломанную кривую)
2) определение масштаба изображения (средняя всех координат
точек перелома по оси Х, максимальное отклонение от среднего, и
максимальный размер по оси Y)
3) создание ассоциативного массива точек, в котором координата X
это ключ, координата Y величина, для всей цифровой
полуплоскости:
$typ опцион колл, пут или фьючерс
$q количество ( отрицательное продажа)
$cena цена приобретения ценной бумаги
$strike страйк для опционов
$x0 начальная координата по оси Х
$sx масштаб по оси Х
function pparr($typ, $q, $cena, $strike,$x0,$sx){ //функция выдает одномерный массив - координаты x=>y точек по //типу цб, направлению (покупка продажа), цене приобретения и страйку (для опционов) if ($q<0) { $q=-$q; $drct='-'; } else $drct='+'; $a=array(); $b=array(); $delta=$sx; //расстояние между точками равно масштабу $scalx for ($i=0;$i<740;$i++){ //кол во точек 740 определено заранее $xkk=$x0+$delta*$i; //значение по оси X if ($typ=='fut') { if ($drct=='+') $a[$xkk]=($xkk-$cena)*$q; else $a[$xkk]=(-$xkk+$cena)*$q; } if ($typ=='call'){ if ($drct=='+') { if ($xkk<=$strike) $a[$xkk]=-$cena*$q; else $a[$xkk]=$q*($xkk-$strike-$cena);} else { if ($xkk<=$strike) $a[$xkk]=$q*$cena; else $a[$xkk]=(-$xkk+$strike+$cena)*$q;} } if ($typ=='put'){ if ($drct=='+') { if ($xkk<=$strike) $a[$xkk]=(-$xkk+$strike-$cena)*$q; else $a[$xkk]=-$q*$cena;} else { if ($xkk<=$strike) $a[$xkk]=($xkk-$strike+$cena)*$q; else $a[$xkk]=$cena*$q;} } $b[(string)$xkk]=(string)$a[$xkk]; }return $b; };
4) создание файлов изображений, при этом одновременно строится
график для каждой строки из портфеля ( зеленый цвет) и
результирующий для портфеля ( красный цвет). Кроме того, know-how
заключается в том, что одновременно строится еще четыре изображения
для увеличения/уменьшения изображения по оси Х и по оси Y. За счет
этого достигается эффект работы он-лайн с клавишами X+,X-,Y+,Y- под
графиком. Таким образом, для каждого пользователя в каждый момент
времени существует пять файлов изображения.
Анализ рисков опционного портфеля
В тесной связи с прибыльностью находится понятие риска. В
количественном выражении риск по опционному портфелю выражается в
сумме так называемого гарантийного обеспечения. Гарантийное
обеспечение та сумма, которая списывается со счета трейдера при
совершении сделки. Фактически, исходя из данных на текущий момент,
блокируется сумма максимального убытка (потерь). Однако, и это
самое главное, сумма гарантийного обеспечения, списанная с вашего
счета, пересчитывается после каждого клиринга ( утро, обед и
вечер). Она может как увеличиваться, так и уменьшаться. При
спокойном течении торгов (в пределах какого-то диапазона) вы можете
увидеть, что сумма на вашем счете растет за счет уменьшения ГО.
Однако, ГО может резко вырасти в экстренных ситуациях ( стихийные
бедствия, санкции, войны) и не только в экстренных (праздники) . В
этом случае у вас может быть списана дополнительная сумма в рамках
увеличения ГО. Если денег на вашем счете не хватит для оплаты
увеличившегося ГО, наступает маржин-колл, в рамках которого ваши
ценные бумаги будут принудительно списаны по текущей рыночной цене,
что ведет к обнулению счета.
В телеграмм-боте встроен блок расчета гарантийного обеспечения,
в котором реализован следующий подход.
Гарантийное обеспечение для фьючерсов считается по формуле,
которая предложена самой Московской биржей:
ГО=БГО+(Цена-Расчетная_Цена)*БП;
где Расчетная_Цена определяется по результатам клиринга и
практически равна цене базового актива на момент клиринга,
определяется в пунктах
БП стоимость пункта в рублях, зависит, в частности, от курса
доллара,
БГО базовое гарантийное обеспечение, определяется биржей, может
произвольно увеличиваться, например, перед праздниками
Таким образом, по фьючерсам ГО считается достаточно просто,
поскольку все данные есть в открытом доступе. Что касается опционов
и тем более сочетаний их в разных комбинациях, Московская биржа не
дает однозначного рецепта, вернее не дает данных для их расчета, а
предлагает купить модуль расчета ГО.
В телеграмм-боте предлагается следующий подход: риск по опциону
такой же , как по фьючерсу, в той мере, насколько опцион похож на
фьючерс. При этом понятно, что нас интересуют только убытки, то
есть нижняя полуплоскость нашего графика. Попробуем пояснить с
помощью графиков.
Вот как выглядит покупка колла в нашем боте:
Запись в портфеле покупки опциона "колл"
страйк 75000 дата экспирации 03.06.2021 по цене 25
График зависимости прибыли/убытка по
купленному опциону "колл" в зависимости от стоимости базового
актива на дату экспирации
Гарантийное обеспечение=23.
Что нам показывает график: если стоимость базового актива ( в
данном случае стоимость фьючерса на курс рубля к доллару) [вечером]
03.06.2021 будет 75000 и ниже, то наш убыток составит 23 . При
повышении этой стоимости до 75023 мы выйдем в безубыток, при
дальнейшем росте получим прибыль.
Что мы имеем с точки зрения риска: не при каких обстоятельствах
наш убыток не превысит сумму 23. Следовательно, наш опцион
совершенно не похож на фьючерс, и в расчете ГО мы можем записать
просто сумму 23.
Покупка пута примерно та же картина.
Продажа пута.
Запись в портфеле продажи опциона "пут"
страйк 72750 по цене 44 с датой экспирации 03.06.2021
График зависимости прибыли/убытка по
проданному опциону "пут" от стоимости базового актива на дату
экспирации
Гарантийное обеспечение= 5436.
Можно убедиться, что при стоимости базового актива выше 72750 мы
имеем прибыль 44. При снижении стоимости БА до 72706 мы выходим в
ноль. При дальнейшем падении стоимости БА наш убыток НИЧЕМ НЕ
ОГРАНИЧИВАЕТСЯ.
С точки зрения рисков это фьючерс, купленный по цене 72706.
Подставляем это число в формулу ГО для фьючерса и получаем ГО для
опциона! Этот ГО достаточно велик (5436), но может превратится в
прибыль в течение нескольких дней.
Стоит ли овчинка выделки? Если при условных затратах сегодня
5436 мы получим через несколько дней 44? Мне кажется, риск очень
велик. С другой стороны, курс рубля к доллару был таким примерно 3
месяца назад.
С продажей колла будет аналогичная ситуация.
А если одновременно продать пут и кол?
Запись в портфеле продажи опциона "пут"
страйк 72750 и продажи опциона "колл" страйк 75000
График зависимости прибыли/убытка по
портфелю от стоимости базового актива на дату экспирации
Гарантийное обеспечение не изменилось!
С точки зрения риска понятно почему может реализоваться только
один из сценариев либо по фьючерсу, купленному по примерно по 72700
(левая нога) либо по фьючерсу проданному по 75190 ( правая нога).
Из них выбираем вариант
с наибольшим ГО , оно и будет мерилом риска.
На графике можно увидеть, что прибыль мы имеем при стоимости
базового актива в диапазоне от примерно 72700 до 75190, в остальных
случаях получаем убыток, который ничем не ограничивается.
Интерфейс телеграмм-бота
На экране отображаются следующие группы данных:
-
подробная инструкция по работе с ботом
-
текущие котировки ближайших фьючерсов по трем базовым
активам
-
таблица Портфель, отображающая состав портфеля, сделанная с
помощью интерфейса телеграмм ( можно редактировать)
-
значение гарантийного обеспечения
-
таблица, дублирующая состав портфеля, построенная как
изображение формата png, которую можно копировать и сохранять
-
нижняя клавиатура, которую можно скрывать, с кнопками: Добавить
позицию в портфель, Анализ портфеля с помощью графика, Обновить
котировки
Таблица Портфель создана с помощью InlineKeyboard.
При нажатии на клавиши в этой таблице происходят следующие
действия:
-
клавиша в столбце К-во редактирует количество ценных бумаг,
соответствующее строке, в которой нажата клавиша
-
клавишами в столбце Цена можно ввести реальную цену приобретения
ценной бумаги. По умолчанию цена вставляется по данным биржи, и для
опционов она может значительно отличаться от рыночной
-
клавишей Х можно удалить строку.
Прочие клавиши в таблице заблокированы и служат только для
передачи информации.
Значение гарантийного обеспечения пересчитывается каждый раз,
когда вы нажимаете кнопку Записать в портфель( не показана,
возникает в конце процедуры редактирования или добавления
инструмента).
Заключение
В телеграмм-боте реализовано запоминание портфеля ценных бумаг
для каждого пользователя. Под ценными бумагами понимаются опционы и
фьючерсы, базовым активом для которых являются: курс рубля к
доллару (Si), стоимость нефти брент (BR), а также индекс РТС (RI).
Это самые высоколиквидные деривативы на московской бирже.
В телеграмм-бот заложен алгоритм подсчета гарантийного
обеспечения, которое является мерой риска.
С помощью телеграмм-бота можно анализировать опционный портфель
на графике прибылей/убытков (P/L график).
Протестировать телеграмм-бота можно по ссылке
t.me/@test09062020bot. Или попробовать найти в
телеграмме по названию опционный портфель.