Получение котировок акций при помощи Python

Привет, Хабр! Представляю вашему вниманию перевод статьи «Historical Stock Price Data in Python» автора Ishan Shah.

Статья о том, как получить ежедневные исторические данные по акциям, используя yfinance, и минутные данные, используя alpha vantage.


Как вы знаете, акции относятся к очень волатильному инструменту и очень важно тщательно анализировать поведение цены, прежде чем принимать какие-либо торговые решения. Ну а сначала надо получить данные и python может помочь в этом.

Биржевые данные могут быть загружены при помощи различных пакетов. В этой статье будут рассмотрены yahoo finance и alpha vantage.

Yahoo Finance


Сначала испытаем yfianance пакет. Его можно установить при помощи команды pip install yfinance. Приведенный ниже код показывает, как получить данные для AAPL с 2016 по 2019 год и построить скорректированную цену закрытия (скорректированная цена закрытия на дивиденды и сплиты) на графике.

# Import the yfinance. If you get module not found error the run !pip install yfianance from your Jupyter notebook
import yfinance as yf

# Get the data for the stock AAPL
data = yf.download('AAPL','2016-01-01','2019-08-01')

# Import the plotting library
import matplotlib.pyplot as plt
%matplotlib inline

# Plot the close price of the AAPL
data['Adj Close'].plot()
plt.show()

image

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

# Define the ticker list
import pandas as pd
tickers_list = ['AAPL', 'WMT', 'IBM', 'MU', 'BA', 'AXP']

# Import pandas
data = pd.DataFrame(columns=tickers_list)

# Fetch the data

for ticker in tickers_list:
    data[ticker] = yf.download(ticker,'2016-01-01','2019-08-01')['Adj Close']

# Print first 5 rows of the data
data.head()

image

# Plot all the close prices
((data.pct_change()+1).cumprod()).plot(figsize=(10, 7))

# Show the legend
plt.legend()

# Define the label for the title of the figure
plt.title("Adjusted Close Price", fontsize=16)

# Define the labels for x-axis and y-axis
plt.ylabel('Price', fontsize=14)
plt.xlabel('Year', fontsize=14)

# Plot the grid lines
plt.grid(which="major", color='k', linestyle='-.', linewidth=0.5)
plt.show()

image

Для значений по российским акциям есть небольшая тонкость. К названию акцию добавляется точка и заглавными буквами ME. Спасибо знатоки на смартлабе подсказали.

image

Получение минутных данных при помощи Alpha vantage


К сожалению, бесплатная версия Yahoo Finance не позволяет получить данные с периодичностью меньше, чем дневная. Для этого можно использовать пакет Alpha vantage, которые позволяет получить такие интервалы, как 1 мин, 5 мин, 15 мин, 30 мин, 60 мин.

image

В дальнейшем эти данные можно проанализировать, создать торговую стратегию и оценить эффективность при помощи пакета pyfolio. В нем можно оценить коэффициент Шарпа, коэффициент Сортино, максимальную просадку и многие другие необходимые показатели.

Надеюсь, что мой перевод оригинальной статьи будет для Вас полезен. Код был проверен и все работает. Но пока для меня остался вопрос в возможности использования Alpha vantage для российского рынка.
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 9

    +2
    Чужие сервисы юзать для таких дел так себе идея. Такую чувствительную информацию нужно получать напрямую с бирж ( причем с разных параллельно и с честным таймстампом ). Хотя если таймфрейм дневной- то, наверное, вполне сойдет.
      0
      Интервал конечно дневной использую, а внутридневной больше для интереса
        0
        Какой длины ряды подаёте в нейросеть, если не секрет? и какова топология? А насчет частотности- учитывая что иногда выполняются заявки, которые, судя по графикам выполниться были не должны — процессы внутри весьма занятны. Люто завидую тру-HFT-шникам (например вот: habr.com/ru/post/414037), ибо сам недотягиваю до такого уровня.
          0
          Пока сетями и не пользуюсь. Большей частью старые, добрые алгоритмы ML. Пока от краткосрочной торговли ушел в сторону инвестирования.
      0
      Без цикла тоже работает:

      import yfinance as yf
      ticker = ['AAPL', 'WMT', 'IBM', 'MU', 'BA', 'AXP']
      data= yf.download(ticker,'2016-01-01','2019-08-01')['Adj Close']
      data.head()
        0
        Спасибо
        0
        Но пока для меня остался вопрос в возможности использования Alpha vantage для российского рынка.

        Для российского рынка использую Финам. Есть как фондовый, валютный так и срочный рынки. Вот, например, фьючерс на индекс РТС www.finam.ru/profile/mosbirzha-fyuchersy/rts/export
        Результат выдает в текстовом файле, далее за 5 мин пишется простой парсер.
          0
          На гите есть код который тянет данные с финама. Но так как я пока долгосрочный инвестор, то пользуюсь вашим способом.
            0
            Вот здесь интересные данные (сделки с миллисекундами и ордербуки), но только по избранным инструментам, да и скачивать удобно:
            www.qscalp.ru/qsh-service

            Данные в формате qscalp, но на сайте можно скачать бесплатный конвертер
            P.S. было время на сервере ММВБ по ошибке в открытом доступе лежали все их данные (что они платно продают), жаль не додумался тогда их скачать

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое