Python для финансистов
Қосымшада ыңғайлырақҚосымшаны жүктеуге арналған QRRuStore · Samsung Galaxy Store
Huawei AppGallery · Xiaomi GetApps

автордың кітабын онлайн тегін оқу  Python для финансистов

 

Ив Хилпиш
Python для финансистов
2023

Переводчик С. Черников


 

Ив Хилпиш

Python для финансистов. — СПб.: Питер, 2023.

 

ISBN 978-5-4461-2250-9

© ООО Издательство "Питер", 2023

 

Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

 

Введение

Python быстро становится языком науки о данных, машинного обучения и обработки естественного языка. Его использование постоянно открывает источники инноваций. У Python есть многочисленное сообщество разработчиков приложений с открытым исходным кодом, что позволяет быстро внедрять и адаптировать передовые технологии1.

Киндман и Тейлор (2021)

Почему именно эта книга?

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

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

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

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

Целевая аудитория

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

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

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

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

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

Краткое описание книги

Книга состоит из следующих глав.

  • Глава 1. Финансы и Python. Эта глава формирует основу всей книги. В ней кратко излагается история финансов, освещается подход к Python как к инструменту для финансовых расчетов, показывается, как работать с базовой инфраструктурой Python, на примере кода, представленного в интерактивных блокнотах Jupyter.
  • Глава 2. Экономика с двумя состояниями. Здесь рассматривается наиболее простая модель экономики, в которой возможен финансовый анализ в условиях неопределенности, когда есть только две релевантные даты и два неопределенных состояния в будущем. Иногда ее называют статической экономикой с двумя состояниями. Несмотря на свою простоту, она позволяет представить такие базовые финансовые понятия, как чистая приведенная стоимость, ожидаемая доходность, волатильность, условные требования, репликация опционов, арбитражное ценообразование, мартингальная мера, полнота рынка, риск-нейтральный подход к ценообразованию и портфели Марковица.
  • Глава 3. Экономика с тремя состояниями. В этой главе в модель добавляется третье неопределенное состояние в будущем и анализируется статическая экономика с тремя состояниями, что позволяет рассмотреть такие понятия, как неполнота рынка, неопределенность мартингальных мер, суперрепликация условных требований и аппроксимирующая репликация условных требований. Вдобавок здесь представлена модель ценообразования капитальных активов (Capital Asset Pricing Model, CAPM) в качестве подхода к равновесному ценообразованию финансовых активов.
  • Глава 4. Оптимальность и равновесие. Основной темой здесь являются экономические агенты с их индивидуальными проблемами принятия решений. Анализ здесь опирается на доминирующую парадигму финансов для принятия решений в условиях неопределенности — максимизацию ожидаемой полезности. Через так называемого репрезентативного агента вводятся понятия равновесия, демонстрируется связь между оптимальностью и равновесием, с одной стороны, и мартингальными мерами и риск-нейтральным подходом к ценообразованию — с другой. Ко всему прочему, использование концепции репрезентативного агента представляет собой один из способов преодоления трудностей, возникающих в экономиках с неполными рынками.
  • Глава 5. Статическая экономика. Обобщает рассмотренные понятия и сводит полученные результаты к конечному (возможно, большому) числу неопределенных будущих состояний. Для анализа такой обобщенной статической экономики требуется немного больше математических формул.
  • Глава 6. Динамическая экономика. Основываясь на анализе обобщенной статической экономики, здесь в финансовое моделирование добавляется динамика, что позволяет рассмотреть два частных случая динамической экономики в дискретном времени. Основная идея заключается в том, что неопределенность относительно будущих состояний экономики в целом разрешается постепенно с течением времени. Это можно смоделировать с помощью стохастических процессов, например биномиального процесса, который можно представить в виде биномиального дерева.
  • Глава 7. Что дальше? В заключительной главе приводится множество дополнительных материалов для изучения из области математики, теории финансов и программирования на Python, также читателю даются рекомендации о дальнейших действиях.

Условные обозначения

В книге используются следующие условные обозначения.

Курсив

  1. Служит для выделения новых понятий.

    Интерфейс

  2. Применяется для выделения URL-адресов, электронных адресов.

    Моноширинный шрифт

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

    Этот рисунок обозначает обычное примечание.

    А этот — предупреждение или предостережение.

    Этим рисунком обозначена важная информация.

Примеры кода, использованные в книге

Все вспомогательные материалы — примеры кода, упражнения и т.д. — можно скачать здесь: https://finpy.pqp.io.

По техническим вопросам или проблемам, связанным с примерами кода, можно обращаться по адресу bookquestions@oreilly.com.

В общем случае все примеры кода из книги вы можете использовать в своих программах и в документации. Вам не нужно обращаться в издательство за разрешением, если вы не собираетесь воспроизводить существенные части программного кода. Если вы разрабатываете программу и используете в ней несколько фрагментов кода из книги, вам не нужно обращаться за разрешением. Но для продажи или распространения примеров из книги вам потребуется разрешение от издательства O’Reilly. Вы можете отвечать на вопросы, цитируя данную книгу или примеры из нее, но для включения существенных объемов программного кода из книги в документацию вашего продукта потребуется разрешение.

Мы рекомендуем, но не требуем добавлять ссылку на первоисточник при цитировании. Под ссылкой на первоисточник мы подразумеваем указание авторов, издательства и ISBN.

За получением разрешения на использование значительных объемов программного кода из книги обращайтесь по адресу permissions@oreilly.com.

Благодарности

В книге приведены ценные отзывы участников наших сертификационных программ по Python для финансовых расчетов.

Благодарю научных редакторов за их полезные комментарии. Они помогли внести многочисленные улучшения.

Я также признателен всей команде O’Reilly за помощь и поддержку.

Эта книга посвящена моей жене Сандре. Ты — любовь всей моей жизни.

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу comp@piter.com (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.


1 Kindman A., Taylor Т. Why We Rewrote Our USD30 Billion Asset Management Platform in Python. March 29, 2021. https://oreil.ly/GghS6.

2 Хилпиш И. Python для финансовых расчетов. — 2021.

3 Pemberton M., Rau N. Mathematics for Economists: An Introductory Textbook. 4th ed. — Manchester University Press, 2016.

4 Русскоязычным читателям рекомендуем главную книгу по финансовой математике в России: Ширяев А.Н. Основы стохастической финансовой математики. В двух томах. Том 1. Факты. Модели. Том 2. Теория. — М.: МЦНМО, 2016. — Примеч. науч. ред.

Pemberton M., Rau N. Mathematics for Economists: An Introductory Textbook. 4th ed. — Manchester University Press, 2016.

Русскоязычным читателям рекомендуем главную книгу по финансовой математике в России: Ширяев А.Н. Основы стохастической финансовой математики. В двух томах. Том 1. Факты. Модели. Том 2. Теория. — М.: МЦНМО, 2016. — Примеч. науч. ред.

3, 4
3, 4

Python быстро становится языком науки о данных, машинного обучения и обработки естественного языка. Его использование постоянно открывает источники инноваций. У Python есть многочисленное сообщество разработчиков приложений с открытым исходным кодом, что позволяет быстро внедрять и адаптировать передовые технологии1.

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

Kindman A., Taylor Т. Why We Rewrote Our USD30 Billion Asset Management Platform in Python. March 29, 2021. https://oreil.ly/GghS6.

Хилпиш И. Python для финансовых расчетов. — 2021.

Глава 1. Финансы и Python

История теории финансов — интересный пример взаимосвязи между абстрактным теоретизированием и практическим применением.

Франк Мильне (1995)

Благодаря современным технологиям в последние годы хедж-фонды поглотили десятки миллиардов долларов инвестиций. Эти же технологии приносят прибыль людям, принимающим финансовые решения в таких организациях.

Лоуренс Флетчер (2020)

Цель главы 1 состоит в том, чтобы заложить основы для последующих глав, поэтому в ней дается краткий обзор освещаемых тем. Она начинается с раздела «Краткая история финансов», в котором в общих чертах рассказывается об истории развития и современном состоянии финансов. В разделе «Главные тенденции в области финансов» рассматриваются основные тенденции, касающиеся математики, технологий, данных, искусственного интеллекта и определяющие развитие финансов в долгосрочной перспективе. В связи с этим раздел «Четырехъязычная сфера» говорит о том, что финансы в наше время — это дисциплина, состоящая из четырех тесно связанных между собой типов языков: естественного (в большей мере английского), языка финансов, математического и языка программирования. Далее объясняется, как устроена книга (раздел «Структура книги»). А в последнем разделе, «Вводная информация о Python», рассказывается об установке окружения Python на компьютер и об альтернативном варианте работы с ним: весь код может использоваться и исполняться через обычный браузер на Quant Platform.

Краткая история финансов

Чтобы лучше понять текущее состояние финансов и финансовой отрасли, нужно взглянуть, как они развивались. В 2006 году Рубинштейн условно разделил историю финансов как науки на три периода.

  • Древний период (до 1950 года). Период, характеризующийся в основном неформальными рассуждениями, эмпирическими правилами и опытом субъектов финансового рынка.
  • Классический период (1950–1980 годы). В это время произошло внедрение в финансы более строгих обоснований и математики. Были разработаны финансовые модели, например модель ценообразования опционов Блэка — Шоулза (1973), а также заложены некоторые основы, например риск-нейтральный подход к ценообразованию Харрисона и Крепса (1979).
  • Современный период (1980–2000 годы). Это период прогресса в отдельных областях финансов, например в финансовой инженерии, и решения проблем, связанных с важными эмпирическими явлениями на финансовых рынках, такими как стохастическая модель процентных ставок (Кокс, Ингерсолл и Росс, 1985) или модель стохастической волатильности (Хестон, 1993).

Сейчас, спустя 15 лет после публикации книги Рубинштейна, можно выделить четвертый и пятый периоды, которые обеспечили появление и нынешнюю популярность Python в финансах.

  • Вычислительный период (2000–2020 годы). В это время произошел переход от теоретической направленности финансов к вычислительной, что обусловлено развитием программно-технических средств. Эту смену парадигмы хорошо иллюстрирует численный алгоритм для оценки американских опционов методом Монте-Карло, представленный в работе Лонгстаффа и Шварца в 2001 году. Алгоритм требует больших вычислительных ресурсов, поскольку для оценки стоимости всего одного опциона нужны сотни тысяч численных моделирований и анализ множества обычных регрессий методом наименьших квадратов (см.: Хилпиш, 2018).
  • Период использования искусственного интеллекта (после 2020 года). Прогресс в области искусственного интеллекта (ИИ) и связанные с ним истории успеха подстегнули интерес к использованию возможностей ИИ в финансовой сфере. Несмотря на существование эффективных приложений в данной области (см.: Хилпиш, 2020), можно предположить, что с 2020 года парадигма планомерно смещается в сторону финансовых систем, основанных на ИИ. Таким образом, мы становимся свидетелями перехода от простых, в основном линейных, финансовых моделей к сложным моделям и использованию алгоритмов ИИ (глубоких нейронных сетей или обучения с подкреплением) для фиксации, описания и объяснения финансовых явлений.

Главные тенденции в области финансов

Как и многие другие предметы и отрасли, наука о финансах со временем стала формализованной научной дисциплиной. Этому прогрессу посодействовали растущая популярность формальной математики, развитие технологий, доступность данных и усовершенствованные алгоритмы, например ИИ-алгоритмы. В целом в эволюции финансов можно выделить четыре основных направления.

  • Математика. Начиная с 1950-х годов наука о финансах становится все более формализованной дисциплиной, в которой систематически используются знания из различных областей математики, например линейной алгебры и стохастического исчисления. Появление портфельной теории Марковица (1952) стало прорывом в количественном анализе и точкой перехода от древнего периода с его неформальными рассуждениями к классическому периоду.
  • Технологии. Благодаря рабочим станциям, серверам и компьютерам, которые начали широко использоваться в конце 1980-х — начале 1990-х годов, технологии стали проникать и в финансовую отрасль. И если сначала техника имела довольно небольшую вычислительную мощность, то сейчас даже самые сложные финансовые задачи можно решить с помощью специальной программы, не прибегая к специальным моделям и методам, характерным для классического и современного периодов. Кредо стало таким: «Обновляйте оборудование и используйте современное программное обеспечение вместе с правильными вычислительными методами». При этом большинство современных компьютеров, предназначенных для использования массовым потребителем, уже обладает мощностью, необходимой для высокопроизводительной работы (например, для параллельной обработки), что значительно упрощает изучение финансовой инженерии и взаимодействие с финансовыми системами, основанными на ИИ.
  • Данные. Если в древний и классический периоды теоретики и практики черпали информацию, касающуюся финансов, в основном из специализированных печатных изданий (здесь можно вспомнить Wall Street Journal или Financial Times), то сегодня возросла доступность массива финансовых данных в электронном виде. Массивы высокочастотных внутридневных данных стали нормой и заменили цены на момент закрытия биржи в качестве основной базы для эмпирических исследований. Каждый торговый день одна акция может генерировать массивы внутридневных данных, содержащие более 100 000 значений, что приблизительно эквивалентно ценам на момент закрытия биржи для той же акции за 400 лет (250 торговых дней в году умножить на 400 лет). Вдобавок с недавнего времени наблюдается распространение открытых массивов данных, что также значительно снижает порог входа в финансовую инженерию, алгоритмическую торговлю или финансовую эконометрику.
  • Искусственный интеллект. Увеличение объема финансовых данных (возникновение «больших финансовых данных») в наши дни делает применение алгоритмов искусственного интеллекта: алгоритмов машинного обучения, глубокого обучения или обучения с подкреплением (см.: Хилпиш, 2020) — не только возможным, но и во многих случаях необходимым подходом к работе с финансами. Традиционные статистические методы из финансовой эконометрики уже не подходят для решения большинства современных проблем, возникающих на финансовых рынках. В условиях нелинейной, многомерной, постоянно меняющейся финансовой среды алгоритмы на основе искусственного интеллекта нередко становятся единственным средством обнаружения релевантных взаимосвязей и закономерностей, получения важных данных и использования улучшенных возможностей прогнозирования.

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

Python и финансы

Все чаще основой финансовых расчетов становятся алгоритмы, требу­ющие больших вычислительных ресурсов, постоянно растущая доступность данных и искусственный интеллект. Python оказался подходящим языком программирования и технологической платформой для удовлетворения потребностей и решения задач, обусловленных тенденциями развития финансовой сферы.

Четырехъязычная сфера

На фоне перечисленных выше тенденций финансы стали сферой применения четырех языков.

  • Естественный язык. Сегодня основным языком публикуемых финансовых исследований, книг, статей и новостей является английский.
  • Финансовый язык. Как и в любой другой области, в финансах есть свои технические термины, понятия и выражения, описывающие определенные финансовые явления или понятия.
  • Математический язык. Математика — самый удобный языковой инструмент для формализации финансовых понятий и концепций.
  • Язык программирования. Как отмечается в эпиграфе к введению, Python — лучший из существующих языков программирования для работы в финансовой индустрии.

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

Структура книги

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

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

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

Финансы

Математика

Python

Неопределенность

Вероятностное пространство

ndarray

Финансовые активы

Векторы, матрицы

ndarray

Достижимые условные требования

Линейная оболочка векторов, базис векторного пространства

ndarray

Чтобы проиллюстрировать общую структуру книги, далее приведу пример описания финансового понятия, который будет рассматриваться подробнее в следующих главах.

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

2. Векторное пространство — это набор объектов (векторов), для которых определены сложение и скалярное умножение. Формально вектор v можно представить следующим образом:

.

Здесь предполагается, что оба векторных элемента являются неотрицательными вещественными (действительными) числами vu, vd

0. Другими словами, если неопределенная, зависящая от состояния экономики цена акций, на которые выписан европейский колл-опцион, определяется как:

,

а цена исполнения опциона K = 15, то выплата C по европейскому колл-опциону будет равна:

.

Вот так понятия неопределенной цены акции и зависящей от состояния экономики выплаты по европейскому опциону могут быть математически смоделированы в виде вектора. Дисциплина, занимающаяся векторами и векторными пространствами в математике, называется линейной алгеброй.

Как же все это перевести на Python? Во-первых, вещественные числа в нем представлены как числа с плавающей запятой или объекты float:

In [1]: vu = 1.5

In [2]: vd = 3.75

In [3]: type(vu)

Out[3]: float

In [4]: vu + vd

Out[4]: 5.25

Определение переменной vu и ее значения 1.5.

Определение переменной vd и ее значения 3.75.

Поиск и вывод типа объекта vu (float).

Сложение значений vu и vd.

Во-вторых, наборы объектов одного типа в программировании обычно называются массивами. Поддержку таких структур данных в Python обеспечивает библиотека NumPy (http://numpy.org/). Основной структурой данных в ней является ndarray — аббревиатура для n-мерного массива (n-dimensional array). NumPy легко моделирует векторы с вещественными значениями:

In [5]: import numpy as np

In [6]: v = np.array((vu, vd))

In [7]: v

Out[7]: array([1.5 , 3.75])

In [8]: v.dtype

Out[8]: dtype('float64')

In [9]: v.shape

Out[9]: (2,)

In [10]: v + v

Out[10]: array([3. , 7.5])

In [11]: 3 * v

Out[11]: array([ 4.5 , 11.25])

Импорт библиотеки NumPy.

Создание объекта ndarray.

Вывод хранимых в объекте данных.

Поиск и вывод типа данных всех элементов.

Поиск и вывод формы объекта.

Сложение векторов.

Скалярное умножение.

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

In [12]: S = np.array((20, 5))

In [13]: K = 15

In [14]: C = np.maximum(S - K, 0)

In [15]: C

Out[15]: array([5, 0])

Обозначение неопределенной цены акции как объект ndarray.

Определение цены исполнения опциона через переменную Python с целочисленным значением (объект int).

Поэлементное вычисление функции максимума.

Итоговые данные, хранящиеся в объекте ndarray, обозначенном C.

Таким образом, при написании книги использовался следующий подход.

  1. Вводятся финансовые понятия и концепции.
  2. Дается их математическое представление и модель.
  3. Математическая модель переводится в исполняемый код Python.

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

Вводная информация о Python

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

  • NumPy (http://numpy.org/). Позволяет эффективно работать с большими n-мер­ными массивами числовых данных.
  • pandas (http://pandas.pydata.org/). Предназначен в первую очередь для эффективной работы с табличными наборами данных и финансовыми временными рядами. В данной книге pandas не будет задействован, однако стоит отметить его особую популярность в области финансов.
  • SciPy (http://scipy.org/). Является набором научных функций, необходимых, например, для решения типичных задач, связанных с оптимизацией.
  • SymPy (http://sympy.org/). Позволяет использовать символьную математику, что иногда бывает полезно в работе с финансовыми моделями и алгоритмами.
  • matplotlib (http://matplotlib.org/). Представляет собой стандартную библиотеку Python для визуализации данных. Она позволяет создавать и настраивать различные типы графиков, например линейные графики, столбчатые диаграммы и гистограммы.

Кроме того, для начала работы с интерактивным кодированием на Python требуются еще два инструмента.

  • IPython (http://ipython.org/). Самая популярная среда для интерактивного кодирования на Python в командной строке (в терминале, оболочке shell).
  • JupyterLab (http://jupyter.org/). Интерактивная среда для интерактивного кодирования и разработки на Python в браузере.

Технические требования для изучения программирования на Python минимальны. Есть два варианта запуска кода Python.

  • Quant Platform. На бесплатной платформе Quant Platform (http://finpy.pqp.io/) находится полноценная среда для интерактивной финансовой аналитики с помощью Python. На ней можно запускать код из данной книги через браузер, что делает ненужной установку программы на компьютер. После бесплатной регистрации вы получаете автоматический доступ ко всему коду и всем блокнотам Jupyter Notebook, используемым в книге, что дает возможность сразу выполнять код в браузере.
  • Локальная среда Python. В настоящее время несложно установить локальную среду Python, которая позволит вам погрузиться в финансовую аналитику и выполнить код из книги на своем компьютере. Далее описано, как произвести установку.

    Выбор между локальной средой Python и Quant Platform

    Практика показывает, что локальная установка правильной среды Python иногда может вызвать сложности у новичков в программировании. Поэто­му, если на начальном этапе установка Python на компьютер вызывает какие-то проблемы, лучше не тратить слишком много времени на нее, а воспользоваться платформой Quant Platform (http://finpy.pqp.io/). К установке Python на компьютер можно вернуться позже, когда у вас будет больше опыта.

Простым и современным способом установки Python является использование менеджера пакетов и среды под названием conda (рис. 1.1).

Рис. 1.1. Веб-страница conda

Обычно conda и базовый интерпретатор Python устанавливаются с помощью дистрибутива Miniconda (https://oreil.ly/NI0Wi). На странице загрузки (https://oreil.ly/gaWTP) представлены установочные пакеты последних версий Python для основных операционных систем (рис. 1.2). Дополнительные опции, например, для чипов Apple M1 (из серии Apple Silicon) предоставляются Miniforge (https://oreil.ly/gKeo3).

После установки Miniconda или Miniforge необходимо открыть оболочку или командную строку и проверить доступность conda. Вот, например, результат, полученный на базе conda, установленной через Miniforge на компьютере Apple Mac с чипом M1:

(base) minione:finpy yves$ conda --version

conda 4.10.3

(base) minione:finpy yves$

Рис. 1.2. Страница загрузки Miniconda

Обратите внимание на основную часть запроса, которая характерна для установки Python посредством conda. Следующим шагом будет создание новой среды Python (с подтверждением запросов с помощью значения y):

pro:finpy yves$ conda create --name finpy python=3.9

...

Preparing transaction: done

Verifying transaction: done

Executing transaction: done

#

# To activate this environment, use

#

#     $ conda activate finpy

#

# To deactivate an active environment, use

#

#     $ conda deactivate

Затем следует активизировать среду:

(base) minione:finpy yves$ conda activate finpy

(finpy) minione:finpy yves$

Обратите внимание на то, как изменился запрос. Далее устанавливаем инструменты IPython и JupyterLab и подтверждаем появляющиеся запросы с помощью значения y:

(finpy) minione:finpy yves$ conda install ipython jupyterlab

...

После этого следует установить основные библиотеки и пакеты Python, необходимые для работы с финансовыми данными (флаг -y позволяет избежать запроса на подтверждение):

(finpy) minione:finpy yves$ conda install -y numpy pandas matplotlib scipy sympy

...

Здесь представлены наиболее важные библиотеки и пакеты Python для анализа данных в целом и финансовой аналитики в частности. Проверить, все ли установлено, можно следующим образом:

(finpy) minione:finpy yves$ conda list

# packages in environment at /Users/yves/Python/envs/finpy:

#

# Name                    Version                   Build    Channel

anyio                     3.3.0            py39h2804cbe_0    conda-forge

appnope                   0.1.2            py39h2804cbe_1    conda-forge

argon2-cffi               20.1.0           py39h5161555_2    conda-forge

...

jupyterlab                3.1.12             pyhd8ed1ab_0    conda-forge

...   

numpy                     1.21.2           py39h1f3b974_0    conda-forge

...

python                    3.9.7        h54d631c_1_cpython    conda-forge

...

zipp                      3.5.0              pyhd8ed1ab_0    conda-forge

zlib                      1.2.11            h31e879b_1009    conda-forge

zstd                      1.5.0                h861e0a7_0    conda-forge

(finpy) minione:finpy yves$

Затем с помощью команды python можно запустить интерактивную сессию Python:

(finpy) minione:finpy yves$ python

Python 3.9.7 | packaged by conda-forge | (default, Sep 14 2021, 01:14:24)

[Clang 11.1.0 ] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> print('Hello Finance World.')

Hello Finance World.

>>> exit()

(finpy) minione:finpy yves$

IPython предоставляет расширенную интерактивную оболочку, которую можно запустить командой ipython:

(finpy) minione:finpy yves$ ipython

Python 3.9.7 | packaged by conda-forge | (default, Sep 14 2021, 01:14:24)

Type 'copyright', 'credits' or 'license' for more information

IPython 7.27.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from numpy.random import default_rng

In [2]: rng = default_rng(100)

In [3]: rng.random(10)

Out[3]:

array([0.83498163, 0.59655403, 0.28886324, 0.04295157, 0.9736544 ,

       0.5964717 , 0.79026316, 0.91033938, 0.68815445, 0.18999147])

In [4]: exit

(finpy) minione:finpy yves$

Однако начинающим пользователям рекомендуется работать в браузерном JupyterLab. Для этого необходимо ввести команду jupyter lab в оболочке операционной системы, которая должна выдать сообщение, похожее на следующее:

(finpy) minione:finpy yves$ jupyter lab

...

[I 2021-09-16 14:18:21.774 ServerApp] Jupyter Server 1.11.0 is running at:

[I 2021-09-16 14:18:21.774 ServerApp] http://localhost:8888/lab

[I 2021-09-16 14:18:21.774 ServerApp]  or http://127.0.0.1:8888/lab

[I 2021-09-16 14:18:21.774 ServerApp] Use Control-C to stop this server

         and shut down all kernels (twice to skip confirmation).

Как правило, эта команда автоматически открывает новую вкладку браузера со стартовой страницей JupyterLab (рис. 1.3).

Теперь можно открыть новый блокнот Jupyter Notebook и начать интерактивное кодирование на Python (рис. 1.4). Осталось щелкнуть на ячейке, ввести в нее код и выполнить его, нажав Shift+Enter, Ctrl+Enter или Alt+Enter (вы заметите разницу).

Рис. 1.3. Стартовая страница JupyterLab

Рис. 1.4. Новый блокнот Jupyter Notebook

Кроме того, можно открыть уже существующий блокнот Jupyter Notebook, представленный в этой книге (рис. 1.5).

Рис. 1.5. Блокнот Jupyter Notebook из книги

В этом разделе представлены лишь самые основы начала работы с Python и связанными с ним инструментами IPython и JupyterLab. Более подробную информацию (например, о том, как работать с IPython) можно получить из книги Вандерпласа5 (2016).

Резюме

Наука о финансах может похвастаться длинной историей. Период с 1950 по 1980 год характеризуется внедрением строгого математического анализа в эту область. Начиная с 1980-х годов, и особенно в 2000-х, роль компьютеров и финансовой инженерии значительно возросла. Тенденция дальнейшей компьютеризации будет только усиливаться в связи с распространением искусственного интеллекта с его алгоритмами машинного (machine lear­ning, ML) и глубокого обучения (deep learning, DL), требующими больших вычислительных ресурсов.

В финансовой сфере используются четыре типа языка: естественный (по большей части английский), финансовый (понятия и выражения, используемые в данной сфере), математический (например, линейная алгебра или теория вероятностей) и язык программирования (например, Python).

Книга построена таким образом, чтобы познакомить читателя с параллельными понятиями из финансов, математики и программирования. Требования для использования Python минимальны, при этом основным инструментом управления средой чаще всего является conda.

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

Справочные материалы

В этой главе были упомянуты следующие статьи и книги.

  • Cox J., Ingersoll J., Ross S. A Theory of the Term Structure of Interest Rates // Econometrica, 1985. — № 53 (2). — Р. 385–407.
  • Fletcher L. Hedge Funds Exploit Technology to Reduce Cost and Waste. Financial Times, December 15, 2020. https://oreil.ly/HE4Cc.
  • Heston S. A Closed-Form Solution for Options with Stochastic Volatility with Applications to Bond and Currency Options // The Review of Financial Studies, 1993. — № 6 (2). — Р. 327–343.
  • Hilpisch Y. Python for Finance: Mastering Data-Driven Finance. 2nd ed. — O’Reilly, 20186.
  • Hilpisch Y. Artificial Intelligence in Finance: A Python-Based Guide. — O’Reilly, 2020.
  • Longstaff F., Schwartz E. Valuing American Options by Simulation: A Simple Least Squares Approach // Review of Financial Studies, 2001. — № 14 (1). — Р. 113–147.
  • Markowitz H. Portfolio Selection // Journal of Finance, 1952. — № 7 (1). — Р. 77–91.
  • Milne F. Finance Theory and Asset Pricing. — N.Y.: Oxford University Press, 1995.
  • Rubinstein M. A History of the Theory of Investments. — Wiley Finance, 2006.

5 Vanderplas J. Python Data Science Handbook. — O’Reilly, 2016.

6 Хилпиш И. Python для финансовых расчетов.

Хилпиш И. Python для финансовых расчетов.

Vanderplas J. Python Data Science Handbook. — O’Reilly, 2016.

В этом разделе представлены лишь самые основы начала работы с Python и связанными с ним инструментами IPython и JupyterLab. Более подробную информацию (например, о том, как работать с IPython) можно получить из книги Вандерпласа5 (2016).

  • Hilpisch Y. Python for Finance: Mastering Data-Driven Finance. 2nd ed. — O’Reilly, 20186.
  • Глава 2. Экономика с двумя состояниями

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

    Даррелл Дуффи (1988)

    Понятие арбитража играет крайне важную роль в современной теории финансов.

    Дельбаен и Шахермайер (2006)

    Эта глава посвящена анализу самой простой модели экономики с двумя релевантными моментами времени и двумя неопределенными будущими состояниями. Несмотря на свою простоту, она позволяет объяснить большое количество важных финансовых понятий и концепций, а также некоторые важные достижения, сделанные в финансовой экономике, в частности фундаментальную теорему ценообразования финансовых активов7.

    Модель экономики с двумя состояниями позволяет формально представить иногда довольно абстрактные математические и финансовые понятия с минимальным использованием технических моментов. После объяснения таких концепций обычно несложно перейти к более реалистичным финансовым моделям.

    Здесь будут рассмотрены следующие темы из области финансов, математики и программирования на Python.

    Финансы

    Математика

    Python

    Время

    Натуральные числа ℕ

    int, type

    Деньги (валюта)

    Вещественные числа ℝ

    float

    Денежный поток

    Кортеж

    tuple, list

    Доход, проценты

    Вещественные числа ℝ

    abs

    (Чистая) приведенная стоимость

    Функция

    def, return

    Неопределенность

    Векторное пространство ℝ2

    NumPy, ndarray, np.array

    Финансовый актив

    Процесс

    ndarray, tuple

    Риск

    Вероятность, пространство состояний, булеан (показательное множество), отображение

    ndarray

    Ожидание, ожидаемая доходность

    Скалярное произведение

    np.dot

    Волатильность

    Дисперсия, стандартное отклонение

    np.sqrt

    Условные требования

    Случайная величина

    np.arange, np.maximum, plt.plot

    Репликация, арбитраж

    Линейные уравнения, матричная форма

    ndarray(2d), np.linalg.solve, np.dot

    Полнота рынка, ценные бумаги Эрроу — Дебре

    Линейная независимость, линейная оболочка

    np.linalg.solve

    Ценообразование по мартингалу

    Мартингал, мартингальная мера

    np.dot

    Среднее отклонение

    Математическое ожидание, дисперсия, стандартное отклонение

    np.linspace, .std(), [x for y in z]

    Экономика

    Основой финансовой модели является идея экономики. Экономика — это абстрактное понятие, включающее в себя отдельные элементы финансовой модели: активы (реальные и финансовые), агентов (люди и учреждения) или деньги. Как и в реальном мире, экономику нельзя увидеть или потрогать. Ее невозможно представить в какой-то одной определенной форме — обобщающий термин служит скорее для упрощения коммуникации8.

    Реальные активы

    В эконом

    ...