Новости

17.05.2023

Книга «Python для финансистов»

Почему именно эта книга?
Эта книга обучает финансам и языку программирования Python (http://python.org/) с нуля. Сейчас финансы и программирование — тесно переплетенные дисциплины, а Python — один из наиболее часто используемых в финансовой отрасли языков программирования. Здесь комплексно изложены основы математики, финансов и программирования в понятном для обычных людей виде. Долгое время теория финансов и финансовая инженерия были отдельными дисциплинами. Однако то, что программирование (например, на Python и C++) стало неотъемлемой частью магистратуры по финансовой инженерии и подобных университетских программ, доказывает, насколько важным стал этот навык в данной области.

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

Тем не менее все еще довольно часто основы математики, теория финансов и основы программирования преподаются независимо друг от друга и только в самом конце обучения — в комплексе с финансовой инженерией. В этой книге используется другой подход: финансовые концепции и методы программирования представлены во взаимосвязи с математическими понятиями (например, из линейной алгебры и теории вероятностей). Таким образом, абстрактные математические понятия объясняются с двух различных точек зрения — финансов и программирования. Вдобавок такой подход позволяет получить новый полезный опыт, поскольку и математические, и финансовые понятия могут быть переведены непосредственно в исполняемый код и исследованы в интерактивном режиме.

Несколько человек, прочитавших одну из моих предыдущих книг, «Python для финансовых расчетов», справедливо отметили, что она не подходит тем, кто только начинает знакомство с теорией финансов и программированием на Python. Действительно, предполагается, что читатель той книги имеет хотя бы небольшой опыт в данных сферах. Книга «Python для финансистов» восполняет этот пробел, поскольку фокусируется на основах и тем самым естественным образом подготавливает к прочтению «Python для финансовых расчетов», что в дальнейшем позволит развиваться и совершенствовать навыки работы с Python применительно к финансовым расчетам. Более подробно об этом рассказано в последней главе.



Целевая аудитория
Об использовании Python в финансовой сфере я написал несколько книг, а моя компания, The Python Quants, предлагает соответствующее онлайн-обучение. И книги, и курсы предполагают, что читатель или слушатель уже обладает определенными знаниями в области финансов и программирования на Python или аналогичном ему языке.

Эта же книга знакомит читателя с данными темами с нуля, и ему нужны лишь базовые знания в области математики, в частности математического анализа, линейной алгебры и теории вероятностей. Материал содержит практически полную информацию обо всех описанных в нем математических понятиях. Тем не менее может пригодиться вводный учебник математики, например учебник Пембертона и Рау.

Книга предназначена для студентов, ученых и специалистов, которые хотят получить знания по теории финансов, финансовому моделированию и использованию Python в финансовой инженерии. Она также может послужить систематически выстроенной основой для создания более сложных книг и курсов по этим темам.

Даже если читатель не собирается переходить к более сложным темам финансовой инженерии, вычислительных финансов, алгоритмической торговли или управления активами, знания по Python и финансам, которые он почерпнет из этой книги, можно использовать при выполнении стандартных финансовых задач, например, при составлении инвестиционных портфелей в соответствии с современной портфельной теорией (modern portfolio theory, MPT). Книга также рассказывает об оценке опционов и других деривативов с помощью стандартных методов, таких как портфельная репликация или риск-нейтральный подход к ценообразованию.
Эта книга подойдет руководителям, которые хотят узнать о применении Python в области финансов. В то же время она будет полезна тем, кто уже владеет Python или другим языком программирования и хочет узнать, как их можно использовать в данной сфере.



Логарифмическая полезность


В этом разделе представлена функция, которая хорошо подходит для финансового анализа, основанного на максимизирующем полезность агенте, — натуральный логарифм u(x) = ln x. Она удовлетворяет трем условиям, приведенным в предыдущем подразделе, и регулярно используется в финансах для моделирования пользы, которую агент получает от денег (или потребления). При условии, что x ∈ R>0, получается следующее.

image


Python позволяет графически изобразить три рассмотренные нами функции посредством библиотеки NumPy в сочетании с векторными вычислениями. На рис. 4.2 показан график, сгенерированный следующим кодом:

In [15]: x = np.linspace(0.5, 10, 50) ➊

In [16]: x[:5] ➋
Out[16]: array([0.5 , 0.69388, 0.88776, 1.08163, 1.27551])

In [17]: u = np.log(x) ➌

In [18]: u1 = 1 / x ➍

In [19]: u2 = -1 / x ** 2 ➎

In [20]: plt.figure(figsize=(10, 6)) ➏
             plt.plot(x, u, label='$u$') ➐
             plt.plot(x, u1, '--', label='$du/dx$') ➑
             plt.plot(x, u2, '-.', label='$d^2u/dx^2$') ➑
             plt.legend(loc=0); ➓


❶ Создание объекта ndarray с числами с плавающей запятой от 0,5 до 10 и равномерным интервалом для получения 50 значений.

❷ Вывод выборки из полученных чисел.

❸ Вычисление значений для функции полезности.

❹ И для ее первой производной, а также…

❺ …Для второй производной.

❻ Создание нового холста для построения графика и задание параметров размера.

❼ Нанесение на график функции полезности.

❽ Нанесение на график первой производной.

❾ Нанесение на график второй производной.

❿ Размещение условных обозначений в оптимальном месте (loc=0).

image

 

Аддитивная полезность относительно времени


С учетом натурального логарифма, использованного в качестве функции для моделирования полезности денег для агента, предпочтения агента относительно планов экономии c = (c0, c1) могут быть описаны как аддитивная функция полезности относительно времени следующего вида:

image


Предполагается, что κ ∈ R≥0 принимает значения 0 < κ ≤ 1 и представляет собой временные предпочтения агента. Суть данной функции в том, что деньги и потребление сегодня ценятся выше, чем через год: например, 100 долларов сейчас предпочтительнее 100 долларов через год независимо от того, какая точная функция описывает полезность (при условии постоянства предпочтений с течением времени). Ее также можно рассматривать как неденежный коэффициент дисконтирования. Вдобавок на основе частных производных по отношению к c0 и c1 легко убедиться, что эта функция удовлетворяет трем условиям, описанным ранее: она является дважды дифференцируемой, вогнутой и возрастающей.

При наличии у агента первоначального капитала w задача на условный экстремум имеет следующий вид:

image


таким образом:

image


или:

image


Необходимыми условиями оптимальности первого порядка в таком случае являются:

image


результатом которых становится:

image


Оптимальный план экономии теперь отражает временные предпочтения в том, что потребление через год c1 — это κ · c0. Также верны равенства:

image


и

image


Обязательным условием является бюджетное ограничение:

image


Следующий код решает задачу на оптимизацию в числовом виде при w = 10. Полученный оптимальный план отражает временные предпочтения агента:

In [21]: import math

In [22]: from scipy.optimize import minimize

In [23]: kappa = 10 / 11

In [24]: def U(c):
             return -(math.log(c[0]) +  kappa * math.log(c[1])) ❶

In [25]: w = 10

In [26]: cons = ({'type': 'eq', 'fun': lambda c: c[0] + c[1] - w})❷

In [27]: opt = minimize(U, (1, 1), constraints=cons)

In [28]: opt
Out[28]:      fun: -3.0747286083026886
              jac: array([-0.19091, -0.19091])
          message: 'Optimization terminated successfully'
             nfev: 18
              nit: 6
             njev: 6
           status: 0
          success: True
                x: array([5.23811, 4.76189])

In [29]: opt['x'] ❸
Out[29]: array([5.23811, 4.76189])

In [30]: -opt['fun'] ❹
Out[30]: 3.0747286083026886


❶ Функция полезности со знаком минус для достижения максимизации через минимизацию.

❷ Бюджетное ограничение в виде ограничения типа равенства для выполнения функции minimize.

❸ Оптимальный план экономии, отражающий временные предпочтения, при котором c0 больше c1 ровно на 10 %.

❹ Максимальная полезность, получаемая по оптимальному плану.

Ожидаемая полезность


Перейдем к статической экономике с двумя состояниями и неопределенностью. Предположим, что у агента есть некоторый первоначальный капитал w ∈ R>0, пользу от которого он получит только за счет денег, доступных через год. Полезность этих денег разнится в зависимости от того, какое из двух возможных состояний материализуется. Данная ситуация представляет собой задачу на чистую инвестицию, где весь имеющийся первоначальный капитал должен быть вложен в оптимальные торгуемые финансовые активы.

Допустим, что торгуются два финансовых актива: безрисковая облигация с процессом ценообразования:

image


и рисковая акция с процессом ценообразования:

image


Финансовые активы являются средством переноса первоначального капитала с сегодняшнего дня на более поздний момент времени. Основная проблема агента при принятии решения заключается в том, чтобы определиться, какая часть денежных средств должна быть расходована в любом из будущих состояний.

Модель инвестиционной задачи, с которой сталкивается агент в условиях неопределенности, задается ожидаемой полезностью для агента, которая должна быть максимизирована с учетом значения w. Функция ожидаемой полезности имеет вид:

image


С вектором цен агент может распределить свой первоначальный капитал, исходя из следующего условия:

image


где вторая часть — составленный агентом портфель, содержащий безрисковую облигацию и рисковую акцию. Данное бюджетное ограничение всегда будет обязательным условием из-за бесконечности спроса агента. Помимо этого, запрещены продажи без покрытия («короткие» продажи).

Матрица рыночных выплат представлена как:

image


Сколько денег будет у агента в любом из состояний через год? Сумма определяется составленным им портфелем:

image


который можно преобразовать в:

image


или

image


Полная задача принятия агентом решений касательно выбора оптимального портфеля может быть представлена в виде задачи условного экстремума:

image


которую можно упростить до:

image


Согласно теореме Лагранжа эту задачу можно преобразовать в задачу безусловного экстремума:

image


где агент выбирает b и s для максимизации ожидаемой полезности с учетом бюджетного ограничения.

Теория ожидаемой полезности

Спустя десятилетия после разработки и внедрения теория ожидаемой полезности (Expected Utility Theory, EUT) все еще остается доминирующей парадигмой принятия финансовых решений, несмотря на то что одно из ее основных допущений — агенты имеют полное представление о возможных будущих состояниях и вероятности их реализации — практически никогда не выполняется в реальности. Тем не менее для многих EUT является интеллектуально привлекательной теоремой с приятными результатами, которые часто легко понять и интерпретировать. Подробнее о проблемах данной парадигмы в финансах можно узнать у Хилпиша (2020, главы 3 и 4).


Более подробно с книгой можно ознакомиться на сайте издательства.


Комментарии: 0

Пока нет комментариев


Оставить комментарий






CAPTCHAОбновить изображение

Наберите текст, изображённый на картинке

Все поля обязательны к заполнению.

Перед публикацией комментарии проходят модерацию.