Aleks
Aleks личный блог
08 февраля 2020, 19:13

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

Статья о том, как получить ежедневные исторические данные по акциям, используя 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()
Получение котировок акций при помощи Python


Ну а если необходимо получить по нескольким акциям, то необходимо внести небольшое дополнение в код. Для хранения значений используется 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()
Получение котировок акций при помощи Python
# 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()
Получение котировок акций при помощи Python
Получение минутных данных при помощи Alpha vantage

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

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

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

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

34 Комментария
  • Вадим Мигов
    08 февраля 2020, 19:24
  • Тимофей Мартынов
    08 февраля 2020, 19:30
    Альфа вантаж вроде платный ж
    • iddqd3n
      08 февраля 2020, 21:13
      Тимофей Мартынов, последний раз было 5 раз/мин и 500/день бесплатно.
      • Тимофей Мартынов
        08 февраля 2020, 22:18
        Денис Г., ну да
        маловато
      • yul yul
        09 февраля 2020, 20:09
        Денис Г., так и есть

        платный доступ

        from 30 api per minute — 30$ month

        to 1200 api per minute — 250$ month
  • old schooler
    08 февраля 2020, 21:11
    а какую глубину 5-минуток он даёт?
    • JBJ
      09 февраля 2020, 00:04
      Zmey56, 
      Установок глубины нету похоже.
      Неделя минуток, 3 недели 5 минуток.
  • Replikant_mih
    08 февраля 2020, 23:51

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

    А щас прочитав название и глянув по диагонали на пост, код и графики подумал: ну это изи. 

    Я про что: приятно расти и развиваться! ))

  • Mark Filippov
    09 февраля 2020, 01:34
    Вот бы такое, но для российских акций…
    • Sergey
      09 февраля 2020, 12:01
      Марк Филиппов, yahoo finance умеет в российские бумаги.
        • yul yul
          09 февраля 2020, 19:58
          Zmey56,

          tickers_list = [

          'TTLK.ME',

          'GMKN.ME',

          'LSRG.ME',

          'TATNP.ME',

          'MSTT.ME',

          'YNDX.ME',

          ]
    • yul yul
      09 февраля 2020, 19:57
      Марк Филиппов, для российских акций -

      tickers_list = [

      'TTLK.ME',

      'GMKN.ME',

      'LSRG.ME',

      'TATNP.ME',

      'MSTT.ME',

      'YNDX.ME',

      ]
      • Mark Filippov
        09 февраля 2020, 21:34
        yul yul, Я с помощью финама котировки достаю. github.com/layonez/finam-scraper а вот как раз хороший парсер который все сделает в автоматическом режиме. То есть фактически можно получить все котировки (включая облигахи, пифы и тд) в любых временных интервалах на любых таймфреймах в 1 кнопку.
        • yul yul
          09 февраля 2020, 22:48
          Марк Филиппов, спасибо за наводку. Попробую
    • iddqd3n
      09 февраля 2020, 21:26
      Марк Филиппов, у мосбиржи есть свой api, покопайтесь на их сайте. Даже с примерами был помнится.
      • yul yul
        09 февраля 2020, 22:49
        Денис Г., вот такую статью на днях читал про апи Мосбиржи habr.com/ru/post/486716/
  • Ерошкин Алексей
    09 февраля 2020, 12:28
    Интересно, а в виде свечей возможен вывод?
  • Dmitry 500% Sheptalin
    09 февраля 2020, 14:04
    а через что вывод происходит? где график строится?
  • For_post
    09 февраля 2020, 14:10
    Бойцы, вы знаете, что я хочу вам сказать. А я знаю, что вы хотите мне ответить)
  • yul yul
    09 февраля 2020, 19:35
    для alpha vantage нужно выполнить этот код





    # убрать комментарии для установки alpha_vantage



    #!pip install alpha_vantage



    # импорт библиотеки



    from alpha_vantage.timeseries import TimeSeries



    # initialize TS object with API key and output format

    # инициализация объекта TS с ключом API key форматом вывода



    ts = TimeSeries(key='Your-API-Key', output_format='pandas')



    # получение данных для тикера майкрософт



    data, meta_data = ts.get_intraday(symbol='MSFT',interval='1min', outputsize='compact')



    # вывод данных



    print(data.head())
  • yul yul
    09 февраля 2020, 22:46
    Я думаю, они ставят этот токен, как заглушку для единичных примеров — а как пойдут десятки запросов начнут рубить связь
  • Емельянов Иван
    02 мая 2020, 21:35
    Не подскажите, можно ли с  помощью данного модуля узнать текущую цену бумаги?
      • Емельянов Иван
        07 мая 2020, 19:00
        Zmey56, Да именно это!) Не подскажите парочку модулей?)

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

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