Python для Финансов: Алгоритмический трейдинг / торговля. Binance

Это руководство по Python for Finance познакомит Вас с алгоритмическим трейдингом или алгоритмической торговлей на площадке Binance.

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

Среди самых популярных языков программирования для финансов вы найдете R и Python, а также такие языки, как C ++, C # и Java. Из этого руководства вы узнаете, как начать работу с Python для финансов. Учебник будет охватывать следующее:

  • В основах , что вам нужно , чтобы начать работу: для тех , кто являются новыми для финансирования, вы будете первым узнать больше о запасах и торговых стратегиях, в какое время данные серий являются и то , что вам нужно настроить свое рабочее место.
  • Введение в данные временных рядов и некоторые из наиболее распространенных финансовых анализов , таких как движущиеся окна, расчет волатильности,… с пакетом Python Pandas.
  • Разработка простой импульсной стратегии : сначала вы пройдете процесс разработки шаг за шагом и начнете с формулировки и кодирования простой алгоритмической торговой стратегии.
  • Далее вы протестируете сформулированную торговую стратегию с Pandas, zipline и Quantopian.
  • После этого вы увидите, как можно оптимизировать свою стратегию, чтобы она работала лучше, и в конечном итоге вы оцените ее эффективность и надежность.

Загрузите блокнот Jupyter этого руководства здесь.

Начало работы с Python для финансов

Прежде чем вы начнете заниматься торговыми стратегиями, неплохо бы сначала ознакомиться с основами. Эта первая часть руководства будет посвящена объяснению основ Python, которые вам необходимы для начала работы. Это не означает, однако, что вы начнете с нуля: вы должны были, по крайней мере, пройти бесплатный вводный курс DataCamp « Введение в Python for Data Science» , в котором вы узнали, как работать со списками, пакетами и NumPy Python. Кроме того, желательно знать основы Pandas, популярного пакета для обработки данных Python, но это не является обязательным требованием.

Тогда я бы посоветовал вам пройти курс DataCamp Intro to Python for Finance, чтобы изучить основы финансов в Python. Если вы хотите применить свои новые навыки «Python for Data Science» к реальным финансовым данным, подумайте о прохождении курса « Импорт и управление финансовыми данными в Python» .

Акции и торговля

Когда компания хочет расти и предпринимать новые проекты или расширяться, она может выпускать акции для привлечения капитала. Акция представляет собой долю в собственности компании и выпускается в обмен на деньги. Акции покупаются и продаются: покупатели и продавцы обменивают существующие ранее выпущенные акции. Цена, по которой продаются акции, может изменяться независимо от успеха компании: цены вместо этого отражают спрос и предложение. Это означает, что всякий раз, когда акция считается «желательной» из-за успеха, популярности,… цена акции будет расти.

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

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

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

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

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

Данные временного ряда

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

Вы видите, что даты расположены на оси X, а цена указана на оси Y. «Последовательные равные интервалы времени» в этом случае означают, что дни, показанные на оси х, разделены на 14 дней: обратите внимание на разницу между 3/7/2005 и следующей точкой, 31.03.2005, и 05.05.2005 и 19.04.2005.

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

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

Настройка рабочего пространства

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

Возьмите, например, Anaconda , высокопроизводительный дистрибутив Python и R, который включает в себя более 100 самых популярных пакетов Python, R и Scala для науки о данных. Кроме того, установка Anaconda предоставит вам доступ к более чем 720 пакетам, которые можно легко установить с помощью conda, нашего известного менеджера пакетов, зависимостей и среды, который включен в Anaconda. И, кроме всего прочего, вы получите Jupyter Notebook и Spyder IDE вместе с ним.

Это звучит как хорошая сделка, верно?

Вы можете установить Anaconda отсюда и не забудьте проверить, как настроить ноутбук Jupyter, в учебнике DataCamp’s Jupyter Notebook: полное руководство .

Конечно, Anaconda — не единственный вариант: вы также можете проверить дистрибутив Canopy Python (который не распространяется бесплатно) или попробовать Quant Platform .

Последний предлагает вам несколько дополнительных преимуществ по сравнению, например, с использованием Jupyter или Spyder IDE, поскольку он предоставляет вам все, что вам нужно для финансовой аналитики в вашем браузере! С помощью Quant Platform вы получите доступ к графическому инжинирингу на основе графического интерфейса, финансовой аналитике на основе Python и своей собственной библиотеке аналитики на основе Python. Более того, у вас также будет доступ к форуму, где вы можете обсудить решения или вопросы со сверстниками!

Основы Python для финансов: Pandas

Когда вы используете Python для финансов, вы часто сталкиваетесь с использованием пакета манипулирования данными, Pandas. Но и другие пакеты, такие как NumPy, SciPy, Matplotlib,… будут проходить, как только вы начнете копать глубже.

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

Импорт финансовых данных в Python

pandas-datareaderПакет позволяет для чтения в данных из таких источников, как Google, Всемирный банк, … Если вы хотите иметь обновленный список источников данных, которые доступны с этой функцией, перейдите к документации . Раньше вы могли получить доступ к данным из Yahoo! Финансирование напрямую, но с тех пор оно устарело. Чтобы получить доступ к Yahoo! Финансовые данные, посмотрите это видео Мэтта Макарти, которое показывает обходной путь. Для этого урока вы будете использовать пакет для чтения данных из Yahoo! Финансы. Обязательно сначала установите пакет, установив последнюю версию выпуска через pip с помощью pip install pandas-datareader.

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

import pandas_datareader as pdr
import datetime 
aapl = pdr.get_data_yahoo('AAPL', 
                          start=datetime.datetime(2006, 10, 1), 
                          end=datetime.datetime(2012, 1, 1))
Карлин Виллемс
23 января 2019 г.
ДОЛЖНЫ ПРОЧИТАТЬ
ПИТОН

1

Python для финансов: алгоритмический трейдинг

Это руководство по Python for Finance знакомит вас с алгоритмической торговлей и многим другим.

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

Среди самых популярных языков программирования для финансов вы найдете R и Python, а также такие языки, как C ++, C # и Java. Из этого руководства вы узнаете, как начать работу с Python для финансов. Учебник будет охватывать следующее:

Загрузите блокнот Jupyter этого руководства здесь .

Учебник по Python для финансов

Начало работы с Python для финансов

Прежде чем вы начнете заниматься торговыми стратегиями, неплохо бы сначала ознакомиться с основами. Эта первая часть руководства будет посвящена объяснению основ Python, которые вам необходимы для начала работы. Это не означает, однако, что вы начнете с нуля: вы должны были, по крайней мере, пройти бесплатный вводный курс DataCamp « Введение в Python for Data Science» , в котором вы узнали, как работать со списками, пакетами и NumPy Python. Кроме того, желательно знать основы Pandas, популярного пакета для обработки данных Python, но это не является обязательным требованием.

Тогда я бы посоветовал вам пройти курс DataCamp Intro to Python for Finance, чтобы изучить основы финансов в Python. Если вы хотите применить свои новые навыки «Python for Data Science» к реальным финансовым данным, подумайте о прохождении курса « Импорт и управление финансовыми данными в Python» .

Акции и торговля

Когда компания хочет расти и предпринимать новые проекты или расширяться, она может выпускать акции для привлечения капитала. Акция представляет собой долю в собственности компании и выпускается в обмен на деньги. Акции покупаются и продаются: покупатели и продавцы обменивают существующие ранее выпущенные акции. Цена, по которой продаются акции, может изменяться независимо от успеха компании: цены вместо этого отражают спрос и предложение. Это означает, что всякий раз, когда акция считается «желательной» из-за успеха, популярности,… цена акции будет расти.

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

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

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

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

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

Данные временного ряда

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

Вы видите, что даты расположены на оси X, а цена указана на оси Y. «Последовательные равные интервалы времени» в этом случае означают, что дни, показанные на оси х, разделены на 14 дней: обратите внимание на разницу между 3/7/2005 и следующей точкой, 31.03.2005, и 05.05.2005 и 19.04.2005.

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

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

Настройка рабочего пространства

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

Возьмите, например, Anaconda , высокопроизводительный дистрибутив Python и R, который включает в себя более 100 самых популярных пакетов Python, R и Scala для науки о данных. Кроме того, установка Anaconda предоставит вам доступ к более чем 720 пакетам, которые можно легко установить с помощью conda, нашего известного менеджера пакетов, зависимостей и среды, который включен в Anaconda. И, кроме всего прочего, вы получите Jupyter Notebook и Spyder IDE вместе с ним.

Это звучит как хорошая сделка, верно?

Вы можете установить Anaconda отсюда и не забудьте проверить, как настроить ноутбук Jupyter, в учебнике DataCamp’s Jupyter Notebook: полное руководство .

Конечно, Anaconda — не единственный вариант: вы также можете проверить дистрибутив Canopy Python (который не распространяется бесплатно) или попробовать Quant Platform .

Последний предлагает вам несколько дополнительных преимуществ по сравнению, например, с использованием Jupyter или Spyder IDE, поскольку он предоставляет вам все, что вам нужно для финансовой аналитики в вашем браузере! С помощью Quant Platform вы получите доступ к графическому инжинирингу на основе графического интерфейса, финансовой аналитике на основе Python и своей собственной библиотеке аналитики на основе Python. Более того, у вас также будет доступ к форуму, где вы можете обсудить решения или вопросы со сверстниками!

Основы Python для финансов: панды

Когда вы используете Python для финансов, вы часто сталкиваетесь с использованием пакета манипулирования данными, Pandas. Но и другие пакеты, такие как NumPy, SciPy, Matplotlib,… будут проходить, как только вы начнете копать глубже.

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

Импорт финансовых данных в Python

pandas-datareaderПакет позволяет для чтения в данных из таких источников, как Google, Всемирный банк, … Если вы хотите иметь обновленный список источников данных, которые доступны с этой функцией, перейдите к документации . Раньше вы могли получить доступ к данным из Yahoo! Финансирование напрямую, но с тех пор оно устарело. Чтобы получить доступ к Yahoo! Финансовые данные, посмотрите это видео Мэтта Макарти, которое показывает обходной путь. Для этого урока вы будете использовать пакет для чтения данных из Yahoo! Финансы. Обязательно сначала установите пакет, установив последнюю версию выпуска через pip с помощью pip install pandas-datareader.

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

import pandas_datareader as pdr
import datetime 
aapl = pdr.get_data_yahoo('AAPL', 
                          start=datetime.datetime(2006, 10, 1), 
                          end=datetime.datetime(2012, 1, 1))

Обратите внимание, что конечная точка API Yahoo недавно изменилась и что, если вы хотите уже начать работать с библиотекой самостоятельно, вам необходимо установить временное исправление, пока патч не будет объединен с основной веткой, чтобы начать извлечение данных. из Yahoo! Финансы с pandas-datareader. Убедитесь в том , чтобы читать по этому вопросу здесь , прежде чем начать свой собственный!

Не беспокойтесь, однако, для этого урока данные были загружены для вас, чтобы вы не столкнулись с какими-либо проблемами при изучении финансов в Python с помощью Pandas.

Тем не менее, разумно учитывать, что, несмотря на то, что он pandas-datareaderпредлагает множество опций для извлечения данных в Python, это не единственный пакет, который вы можете использовать для извлечения финансовых данных: вы также можете использовать библиотеки, такие как Quandl, для Например, чтобы получить данные из Google Finance:

import quandl 
aapl = quandl.get("WIKI/AAPL", start_date="2006-10-01", end_date="2012-01-01")

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

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

Ознакомьтесь с Руководством по Python Excel для DataCamp : Подробное руководство для получения дополнительной информации.

Работа с данными временного ряда

Первое, что вы хотите сделать, когда у вас наконец появятся данные в вашем рабочем пространстве, — это испачкать руки. Однако теперь, когда вы работаете с данными временных рядов, это может показаться не таким простым, поскольку ваш индекс теперь содержит значения DateTime.

Не беспокойтесь, хотя! Давайте начнем пошагово и сначала исследуем данные с некоторыми функциями, которые вы, возможно, уже знаете, если у вас есть опыт программирования на R или вы ранее работали с Pandas.

В любом случае, вы увидите, что это довольно просто!

Как вы видели в фрагменте кода выше, вы использовали pandas_datareaderдля импорта данных в вашу рабочую область. Результирующий объект aaplпредставляет собой DataFrame, который представляет собой двумерную помеченную структуру данных со столбцами потенциально разных типов. Теперь, одна из первых вещей , которые вы , вероятно , когда у вас есть регулярные DataFrame на руках, запустив head()и tail()функцию загляните на первый и последнюю строку вашего DataFrame. К счастью, это не меняется, когда вы работаете с данными временных рядов!

Совет : также обязательно используйте describe()функцию, чтобы получить некоторую полезную сводную статистику о ваших данных.

Как вы видели во введении, эти данные содержат четыре столбца с ценами открытия и закрытия за день и экстремальными максимальными и минимальными движениями цены акций Apple за каждый день. Кроме того, вы также получаете два дополнительных столбца: Volumeи Adj Close.

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

Обратите внимание, как метки индекса или строки содержат даты, и как ваши столбцы или метки столбцов содержат числовые значения.

Подсказка : если вы сейчас хотите сохранить эти данные в CSV-файл с помощью to_csv()функции pandasи использовать эту read_csv()функцию для чтения данных обратно в Python. Это очень удобно в тех случаях, когда, например, конечная точка API Yahoo изменилась, и у вас больше нет доступа к вашим данным 🙂

import pandas as pd
aapl.to_csv('data/aapl_ohlc.csv')
df = pd.read_csv('data/aapl_ohlc.csv', header=0, index_col='Date', parse_dates=True)

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

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

Помните, что структура DataFrame была двумерным помеченным массивом со столбцами, которые потенциально могут содержать различные типы данных.

Проверьте все это в упражнении. Во- первых, использовать indexи columnsатрибуты , чтобы посмотреть на индекс и столбцов ваших данных. Затем установите Close подколонку, выбрав только последние 10 наблюдений для DataFrame. Используйте квадратные скобки, []чтобы выделить последние десять значений. Возможно, вы уже знаете этот способ поднабора из других языков программирования, таких как R. В заключение, присвойте последний переменной, tsа затем проверьте, какой это тип ts, используя type() функцию:

# Inspect the index 
aapl.index

# Inspect the columns
aapl.columns

# Select only the last 10 observations of `Close`
ts = aapl['Close'][-10:]

# Check the type of `ts` 
type(ts)

Квадратные скобки могут быть полезны для подмножества ваших данных, но они, возможно, не самый идиоматичный способ сделать что-то с Pandas. Вот почему вы должны также взглянуть на loc()и iloc()функциях: вы используете бывший для индексации на основе меток , а второй для позиционной индексации.

На практике это означает , что вы можете передать метку строки меток, таких , как 2007и 2006-11-01, к loc()функции, в то время как вы передаете целые числа , такие , как 22и 43в iloc()функции.

Пример:

# Inspect the first rows of November-December 2006
print(aapl.loc[pd.Timestamp('2006-11-01'):pd.Timestamp('2006-12-31')].head())

# Inspect the first rows of 2007 
print(aapl.loc['2007'].head())

# Inspect November 2006
print(aapl.iloc[22:43])

# Inspect the 'Open' and 'Close' values at 2006-11-01 and 2006-12-01
print(aapl.iloc[[22,43], [0, 3])

Совет : если вы внимательно посмотрите на результаты поднабора, вы заметите, что в данных отсутствуют определенные дни; Если вы посмотрите более внимательно на шаблон, вы увидите, что обычно два или три дня не хватает; Эти дни традиционно являются выходными или праздничными днями и не являются частью ваших данных. Это не о чем беспокоиться: это совершенно нормально, и вам не нужно заполнять эти пропущенные дни.

Помимо индексации, вы можете также изучить некоторые другие методы, чтобы лучше узнать ваши данные. Вы никогда не знаете, что еще появится. Давайте попробуем сэмплировать около 20 строк из набора данных, а затем повторим выборку данных, чтобы aaplтеперь на месячном уровне вместо ежедневного. Вы можете использовать sample()и resample()функцию , чтобы сделать это:

# Sample 20 rows
sample = aapl.sample(20)

# Print `sample`
print(sample)

# Resample to monthly level 
monthly_aapl = aapl.resample('M').mean()

# Print `monthly_aapl`
print(monthly_aapl)

Очень просто, не правда ли?

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

Совет : попробуйте сами в консоли IPython вышеупомянутого блока DataCamp Light. Пройдите, aapl.asfreq("M", method="bfill")чтобы увидеть, что происходит!

Наконец, прежде чем перейти к следующему уровню исследования данных и начать с визуализации ваших данных и выполнения некоторых общих финансовых анализов ваших данных, вы уже можете начать рассчитывать разницу между ценами открытия и закрытия в день. Вы можете быстро выполнить эту арифметическую операцию с помощью панд; Просто вычтите значения в Openстолбце ваших aaplданных из значений в Closeстолбце этих же данных. Или, другими словами, вычесть aapl.Closeиз aapl.Open. Вы сохраняете результат в новом столбце с aaplименем DataFrame diff, а затем удаляете его снова с помощью del:

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

Это хорошо знать на данный момент, но пока не беспокойтесь об этом; Вы углубитесь в это немного позже!

Этот раздел познакомил вас с некоторыми способами сначала изучить ваши данные, прежде чем приступить к выполнению некоторых предыдущих анализов. Тем не менее, вы все еще можете пойти гораздо дальше в этом; Если хотите узнать больше, рассмотрите возможность нашего анализа данных Python .

Визуализация данных временного ряда

Рядом с изучения данных с помощью head()tail(), индексации, … Вы также можете визуализировать ваши данные временных рядов. Благодаря интеграции Pandas с Matplotlib эта задача становится легкой; Просто используйте plot()функцию и передайте ей соответствующие аргументы. Кроме того, вы также можете добавить gridаргумент, чтобы указать, что график также должен иметь сетку на заднем плане.

Общий финансовый анализ

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

В оставшейся части этого раздела вы узнаете больше о возвратах, перемещающихся окнах, расчете волатильности и Регулярной регрессии наименьших квадратов (OLS).

Возвращает

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

# Import `numpy` as `np`
import numpy as np

# Assign `Adj Close` to `daily_close`
daily_close = aapl[['Adj Close']]

# Daily returns
daily_pct_change = daily_close.pct_change()

# Replace NA values with 0
daily_pct_change.fillna(0, inplace=True)

# Inspect daily returns
print(daily_pct_change)

# Daily log returns
daily_log_returns = np.log(daily_close.pct_change()+1)

# Print daily log returns
print(daily_log_returns)

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

Зная, как рассчитать ежедневное процентное изменение, приятно, но что, когда вы хотите узнать ежемесячную или квартальную доходность? В таких случаях вы можете воспользоваться тем resample(), что вы уже видели в первой части этого урока.

# Resample `aapl` to business months, take last observation as value 
monthly = aapl.resample('BM').apply(lambda x: x[-1])

# Calculate the monthly percentage change
monthly.pct_change()

# Resample `aapl` to quarters, take the mean as value per quarter
quarter = aapl.resample("4M").mean()

# Calculate the quarterly percentage change
quarter.pct_change()

Использование pct_change()довольно удобно, но также затеняет, как именно рассчитываются ежедневные проценты. Вот почему вы можете использовать shift()функцию Pandas вместо использования pct_change(). Затем вы делите daily_closeзначения на daily_close.shift(1) -1. Однако, используя эту функцию, вы останетесь со NAзначениями в начале результирующего кадра данных.

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

# Daily returns
daily_pct_change = daily_close / daily_close.shift(1) - 1

# Print `daily_pct_change`
print(daily_pct_change)

Совет : рассчитайте дневной доход с помощью функции Pandas shift(). Попробуйте это в консоли IPython этого блока DataCamp Light! (Для тех, кто не может найти решение , попробуйте эту строку кода:) daily_log_returns_shift = np.log(daily_close / daily_close.shift(1)).

Для справки, расчет ежедневного процентного изменения основан на следующей формуле: рTзнак равнопTпT11где p — цена, t — время (в данном случае день), а r — доход.

Кроме того, вы можете построить график распределения daily_pct_change:

# Import matplotlib
import matplotlib.pyplot as plt

# Plot the distribution of `daily_pct_c`
daily_pct_change.hist(bins=50)

# Show the plot
plt.show()

# Pull up summary statistics
print(daily_pct_change.describe())

Распределение выглядит очень симметрично и нормально распределено: центр ежедневных изменений вокруг корзины 0,00. Обратите внимание, как вы можете и должны использовать результатыdescribe() функции, примененной daily_pct_c, чтобы правильно интерпретировать результаты гистограммы. Вы увидите, что среднее значение очень близко к бину 0,00, а стандартное отклонение составляет 0,02. Кроме того, взгляните на процентили, чтобы узнать, сколько ваших точек данных упадут ниже -0,010672, 0,001677 и 0,014306.

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

# Calculate the cumulative daily returns
cum_daily_return = (1 + daily_pct_change).cumprod()

# Print `cum_daily_return`
print(cum_daily_return)

Обратите внимание, что вы можете использовать снова использовать Matplotlib для быстрого построения cum_daily_return; Просто добавьте plot()к нему функцию и, при необходимости, определите figsizeразмер или размер рисунка:

# Import matplotlib
import matplotlib.pyplot as plt 

# Plot the cumulative daily returns
cum_daily_return.plot(figsize=(12,8))

# Show the plot
plt.show()

3.5 6 голоса
Рейтинг статьи
Шамаев Иван
Разработчик аналитических решений QlikView/Qlik Sense/Power BI; Python Data Scientist; Разработчик интеграционных решений на PHP, Python, JavaScript.
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x