[PHP, Разработка мобильных приложений, Визуализация данных, Финансы в IT] Телеграмм-бот для анализа опционов
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Опционы - вид ценных бумаг, вызывающих постоянный интерес даже у начинающих трейдеров. Об опционах написано немало статей, поэтому мы опустим ознакомительную часть и будем считать, что читатель знаком с основными терминами опционной торговли. Если что, то их толкование несложно найти в интернете.После первого знакомства с теорией у начинающих торговцев опционами возникает вопрос: а при каких условиях данный набор опционов даст прибыль, и какую. Даже опытный опционщик сходу не сможет ответить на этот вопрос, если у вас более одного опциона. Для этого необходим анализ опционного портфеля ( набора опционов и , возможно, фьючерсов), который нагляднее всего делается в графическом виде, на диаграмме зависимости прибыли/убытка от стоимости базового актива. В настоящее время существует несколько сайтов для этого, а также отдельных программ.Автор статьи реализовал анализ опционов с помощью телеграмм-бота, что дает возможность быстрого получения информации об инвестиционном портфеле на смартфоне. Будем считать, что, кроме опционов, читатель знаком с телеграмм ботами. Поэтому здесь не будет описания создания бота от получения токена до обработки клавиатуры. Вместо этого перечислим концептуальные проблемы, которые возникли при создании программы, и способы их решения.Запоминание состояния бота между вебхукамиБот получает сообщения от пользователя через встроенный в телеграмм механизм вебхуков. Каждый вебхук заново запускает программу, но для каждого пользователя необходим свой набор данных. Идентификация пользователей осуществляется через просмотр потока ввода:
$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. Или попробовать найти в телеграмме по названию «опционный портфель».
===========
Источник:
habr.com
===========
Похожие новости:
- [Программирование, Геоинформационные сервисы, Математика, Визуализация данных, Научно-популярное] Построение достоверных геологических моделей
- [Производство и разработка электроники, Физика, DIY или Сделай сам, Электроника для начинающих] Радиация: детекторы. Как подружить сцинтиллятор и SiPM
- [Разработка веб-сайтов, Фриланс, Карьера в IT-индустрии, Читальный зал] Длинная история про то, как мы веб-разработчика на фрилансерских сайтах искали, но так и не нашли
- [Управление проектами, Управление персоналом, Карьера в IT-индустрии] Работа в малом бизнесе в ИТ: 7 важных уроков
- [Разработка мобильных приложений, Разработка под Android, Исследования и прогнозы в IT, История IT] Долгая дорога к быстрым обновлениям Android
- [Разработка систем связи] Зачем британскому провайдеру полое оптоволокно
- [Тестирование IT-систем, Анализ и проектирование систем, Управление разработкой, Софт, Визуальное программирование] RPA инструменты и не только…
- [Разработка веб-сайтов, Анализ и проектирование систем] UML умер, а никто и не заметил? (перевод)
- [Разработка робототехники, Робототехника] Исследование методов SLAM для навигации мобильного робота внутри помещений. Опыт исследования R2 Robotics. (продолжение)
- [Беспроводные технологии, Производство и разработка электроники, Робототехника] Приемник с АФАР для БЛА
Теги для поиска: #_php, #_razrabotka_mobilnyh_prilozhenij (Разработка мобильных приложений), #_vizualizatsija_dannyh (Визуализация данных), #_finansy_v_it (Финансы в IT), #_telegramm (телеграмм), #_bot (бот), #_optsiony (опционы), #_fjuchersy (фьючерсы), #_grafik (график), #_pribylnost (прибыльность), #_riski (риски), #_php, #_razrabotka_mobilnyh_prilozhenij (
Разработка мобильных приложений
), #_vizualizatsija_dannyh (
Визуализация данных
), #_finansy_v_it (
Финансы в IT
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 23:32
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Опционы - вид ценных бумаг, вызывающих постоянный интерес даже у начинающих трейдеров. Об опционах написано немало статей, поэтому мы опустим ознакомительную часть и будем считать, что читатель знаком с основными терминами опционной торговли. Если что, то их толкование несложно найти в интернете.После первого знакомства с теорией у начинающих торговцев опционами возникает вопрос: а при каких условиях данный набор опционов даст прибыль, и какую. Даже опытный опционщик сходу не сможет ответить на этот вопрос, если у вас более одного опциона. Для этого необходим анализ опционного портфеля ( набора опционов и , возможно, фьючерсов), который нагляднее всего делается в графическом виде, на диаграмме зависимости прибыли/убытка от стоимости базового актива. В настоящее время существует несколько сайтов для этого, а также отдельных программ.Автор статьи реализовал анализ опционов с помощью телеграмм-бота, что дает возможность быстрого получения информации об инвестиционном портфеле на смартфоне. Будем считать, что, кроме опционов, читатель знаком с телеграмм ботами. Поэтому здесь не будет описания создания бота от получения токена до обработки клавиатуры. Вместо этого перечислим концептуальные проблемы, которые возникли при создании программы, и способы их решения.Запоминание состояния бота между вебхукамиБот получает сообщения от пользователя через встроенный в телеграмм механизм вебхуков. Каждый вебхук заново запускает программу, но для каждого пользователя необходим свой набор данных. Идентификация пользователей осуществляется через просмотр потока ввода: $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); }
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; }; Запись в портфеле покупки опциона "колл" страйк 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, в остальных случаях получаем убыток, который ничем не ограничивается.Интерфейс телеграмм-ботаНа экране отображаются следующие группы данных:
Таблица «Портфель» создана с помощью InlineKeyboard. При нажатии на клавиши в этой таблице происходят следующие действия:
=========== Источник: habr.com =========== Похожие новости:
Разработка мобильных приложений ), #_vizualizatsija_dannyh ( Визуализация данных ), #_finansy_v_it ( Финансы в IT ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 23:32
Часовой пояс: UTC + 5