Алексей Бачеров
Алексей Бачеров личный блог
11 сентября 2020, 14:35

Считаю портфель. Теперь автоматически. 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 и биржевых фондов позволяет полностью уйти от внебиржы. Такой софт позволяет легко всё свести в единый портфель и эффективно им управлять не взирая на указанные неудобства.

Конечно, у меня уже есть ещё пара идей, как можно улучшить эту программу:
  • добавить расчет дюрации и выпуклости части портфеля состоящего из облигаций
  • добавить расчеты волатильности и ожидаемой доходности портфеля
  • добавить сравнения с бенчмарками
  • добавить моделирование поведение портфеля с помощью метода Монте Карло
Какие-то заготовки у меня есть и их можно использовать, какие-то придется писать с нуля. Как известно, нет предела совершенству.
6 Комментариев
  • Turbo Pascal
    11 сентября 2020, 14:53
    Хорошее развлечение.
    ИМХО, толку от него для прибыли — ноль. Но интересно.
  • 3Qu
    11 сентября 2020, 14:55
    Python + SQL Server — на фига этот монстр? Для ваших задач в самый раз Python + SQLite.И, кстати, при необходимости вся эта конструкция хорошо ложится на интернет серверы.
      • 3Qu
        11 сентября 2020, 15:21
        Алексей Бачеров, да, было такое, но не помнил конкретики с кем именно.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн