Блог им. AVBacherov

Считаю портфель. Теперь автоматически. Python и SQL приходят на помощь...

Всё что можно автоматизировать, стоит автоматизировать.

Я уже не раз писал и рассказывал, что в период пандемии и самоизоляции изучаю питон, пишу на нем различные программы для анализа и расчетов, а также поднял свой SQL Server для удобства работы с первичными данными и их хранением. Всё это привело к возможности автоматизировать оценку своего портфеля и портфелей клиентов. Теперь мне нет необходимости делать отдельные отчеты для них и себя, и существенно сокращает время на предварительную подготовку данных. В ближайшем будущем, я постараюсь скомпилировать код в исполняемый модуль, чтобы клиенты могли со своих компьютеров смотреть на свои портфели в удобное для них время.

Сегодня я расскажу о версии отчета для меня как управляющего, так как клиентская версия это всего лишь выжимка. Сделаю я это на примере собственного портфеля (ещё больше открытости, а то в комментариях к моим выступлениям часто говорят, что я скрытен и не делюсь идеями).
Шаг 1. На нем клиент (или я) вводит свой идентификатор, и из базы SQL выгружается структура его портфеля и история. Историю поначалу не видно, она будет использована дальше для визуализации полученных результатов (Шаги 8 — 10). Поскольку базовые активы в портфеле меняются нечасто, то добавления в базу происходят только на дату таких изменений. Клиенту же предлагается скорректировать остатки по деньгам. Это сделано для того, чтобы учесть изменения денежных позиций на случай если такое произошло после даты последней структуры. Денежные остатки могли измениться, например, если брокер заимствовал наши средства и выплачивал процент, или же из-за изменения денежных позиций на срочном рынке, когда покупались страховки (использовались фьючерсы, опционы для хеджа). Дальше несколько технических вопросов, потому что далеко не всегда нужно выводить графики или историческую таблицу доходности.

Расчет инвестиционного портфеля на примере собственных инвестиций

После Шага 1 начинается процесс загрузки данных из базы SQL по тем инструментам, которые входят в портфель клиента и делаются расчеты. В каких-то случаях нужны только котировки, но для облигаций приходится загружать и другие данные, чтобы посчитать текущий НКД и учесть его в стоимости портфеля.
процесс загрузки данных для расчета стоимости портфеля

Шаг 2. После того как все данные загружены и проведены расчеты, выводится диаграмма и таблица с распределением портфеля клиента по активам в двух валютах.Структура портфеля по активам

Шаг 3. Выводится таблица где показан доход/убыток по отношению к цене приобретения актива, а так же структура по номиналу базового актива. Такая структура нужно на тот случай, если я хочу страховать валютные риски. Например, фонд FXGD — котируется в рублях, однако вкладывает он в золото, которое изначально номинировано в долларах. Поэтому, чтобы правильно рассчитать размер хеджа рублевой части, мне необходимо не учитывать FXGD. И такая структура отлично помогает в решении задачи.Структура портфеля по валюте актива

Шаг 4. На этом шаге представлена структура по типу активов.Структура портфеля по типу актива
Шаг 5 более интересен, чем шаг 4. На нем видна структура по типу аллокации. Так как фонды держат диверсифицированные портфели ценных бумаг, то интересно посмотреть куда вложены деньги клиента именно по конечным бумагам или товарам.Считаю портфель. Теперь автоматически. Python и SQL приходят на помощь...

Шаг 6. Дает представления о секторе вложений или типе товаров. При этом:
  • для облигаций будет установлена градация: Государственные/Корпоративные
  • для акций — по секторам экономики
  • для фондов — посложнее (здесь описывать не буду)
Это структура позволяет легче застраховать какую-то часть портфеля. Например, в моем портфеле есть золото (конкретно, золотые фонды), если я буду ожидать падения цен на золото, то взглянув на данную структуру, мне очень легко посчитать, сколько мне нужно продать фьючерсных контрактов на золото или купить пут спредов.
Считаю портфель. Теперь автоматически. Python и SQL приходят на помощь...

Шаг 7. Здесь структура представлена по стране размещения. В большей части, мне она несильно нужна как управляющему, однако клиентам иногда удобно смотреть, поскольку они для себя отдельно считают портфель на России и портфель на Америке.Считаю портфель. Теперь автоматически. Python и SQL приходят на помощь...

Шаг 8. На этом шаге идет исторический расчет доходности, изменения капитала портфеля и его визуализация в виде графика. При этом доходность в этом случае посчитана правильно, то есть с учетом взносов и изъятий денег. Многие недобросовестные управляющие грешат очень часто в этой части. На этом шаге отдельно считается рублевый портфель. Вернее сказать тот, который существует или существовал на российском рынке. В конце таблицы дается период существования портфеля и итоговая цифра доходности в % годовых, посчитанная по методу сложного процента.Стоимость портфеля и его доходность

Шаг 9. Как и Шаг 8, но только для портфеля на Америке. Его я открыл на своем счете год назад, и намеренно старался не говорить об этом в своих публичных выступлениях. Эксперимент для меня завершился и теперь я готов этим поделиться.Считаю портфель. Теперь автоматически. Python и SQL приходят на помощь...

Шаг 10 как несложно догадаться — это совокупный портфель (Россия + США). Расчеты аналогичные Шаг 8 и 9 только для совокупного портфеля и для двух валют.Считаю портфель. Теперь автоматически. Python и SQL приходят на помощь...

Почему было необходимо написать такой софт? По большей части все дело в том, что активы клиентов, как и мои собственные далеко не всегда размещены на одном счете, у одного брокера, да и не всегда торгуются на бирже. Хотя в последнее время появление ETF и биржевых фондов позволяет полностью уйти от внебиржы. Такой софт позволяет легко всё свести в единый портфель и эффективно им управлять не взирая на указанные неудобства.

Конечно, у меня уже есть ещё пара идей, как можно улучшить эту программу:
  • добавить расчет дюрации и выпуклости части портфеля состоящего из облигаций
  • добавить расчеты волатильности и ожидаемой доходности портфеля
  • добавить сравнения с бенчмарками
  • добавить моделирование поведение портфеля с помощью метода Монте Карло
Какие-то заготовки у меня есть и их можно использовать, какие-то придется писать с нуля. Как известно, нет предела совершенству.
★2
6 комментариев
Хорошее развлечение.
ИМХО, толку от него для прибыли — ноль. Но интересно.
avatar
Turbo Pascal, не скажите. Удобства управления портфелем позволяет совершать меньше ошибок, что в долгосрочной перспективе ведет к хоршим результатам. Тем более когда у Вас не один портфель (клиент) и у них разные стратегии (так как зависят сроков и рисков, которые готов принять клиент).
avatar
Python + SQL Server — на фига этот монстр? Для ваших задач в самый раз Python + SQLite.И, кстати, при необходимости вся эта конструкция хорошо ложится на интернет серверы.
avatar
3Qu, мы уже с Вами этот вопрос обсуждали в комментариях к другому моему посту  https://smart-lab.ru/blog/628432.php
avatar
Алексей Бачеров, да, было такое, но не помнил конкретики с кем именно.
avatar
Интересно, почему администратор поставил спецтэг — торговые роботы, это ближе к торговому софту
avatar

теги блога Алексей Бачеров

....все тэги



UPDONW
Новый дизайн