Блог им. Zmey56

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

    • 08 февраля 2020, 19:13
    • |
    • Aleks
  • Еще

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

★67
34 комментария
avatar
Альфа вантаж вроде платный ж
Тимофей Мартынов, надо его конечно дальше изучать и более опытные коллеги может подскажут, но мне удалось получить данные бесплатно.
avatar
Тимофей Мартынов, последний раз было 5 раз/мин и 500/день бесплатно.
avatar
Денис Г., ну да
маловато
Денис Г., так и есть

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

from 30 api per minute — 30$ month

to 1200 api per minute — 250$ month
avatar
а какую глубину 5-минуток он даёт?
avatar
Протестировал, но сам пока не пользовался:


Но надо еще тестировать и изучать отдельно — я то пользовался дефолтными настройками. Возможно там есть установки глубины.
avatar
Zmey56, 
Установок глубины нету похоже.
Неделя минуток, 3 недели 5 минуток.
avatar

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

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

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

avatar
Вот бы такое, но для российских акций…
avatar
Марк Филиппов, yahoo finance умеет в российские бумаги.
avatar
Sergey, у меня не получилось подтянуть котировки российских акций, только с америки
avatar
Zmey56,

tickers_list = [

'TTLK.ME',

'GMKN.ME',

'LSRG.ME',

'TATNP.ME',

'MSTT.ME',

'YNDX.ME',

]
avatar
yul yul, спасибо за подсказку. все подтянуло.




avatar
Марк Филиппов, для российских акций -

tickers_list = [

'TTLK.ME',

'GMKN.ME',

'LSRG.ME',

'TATNP.ME',

'MSTT.ME',

'YNDX.ME',

]
avatar
yul yul, Я с помощью финама котировки достаю. github.com/layonez/finam-scraper а вот как раз хороший парсер который все сделает в автоматическом режиме. То есть фактически можно получить все котировки (включая облигахи, пифы и тд) в любых временных интервалах на любых таймфреймах в 1 кнопку.
avatar
Марк Филиппов, спасибо за наводку. Попробую
avatar
Марк Филиппов, у мосбиржи есть свой api, покопайтесь на их сайте. Даже с примерами был помнится.
avatar
Денис Г., вот такую статью на днях читал про апи Мосбиржи habr.com/ru/post/486716/
avatar
Странно возмущаться человеку, зарабатывающему деньги на бирже, что надо платить за доступ к информации. Или у вас не окупиться платный доступ? Тогда зачем он вам нужен?
avatar
Интересно, а в виде свечей возможен вывод?
Ерошкин Алексей, https://plot.ly/python/candlestick-charts/
avatar
а через что вывод происходит? где график строится?
avatar
Dmitry Sheptalin, я использую jupyter.
avatar
Бойцы, вы знаете, что я хочу вам сказать. А я знаю, что вы хотите мне ответить)
avatar
для 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())
avatar
yul yul, еще интересно, что у меня работал без изменения key='Your-API-Key', хотя ключ получил.
avatar
Я думаю, они ставят этот токен, как заглушку для единичных примеров — а как пойдут десятки запросов начнут рубить связь
avatar
Не подскажите, можно ли с  помощью данного модуля узнать текущую цену бумаги?
Емельянов Иван, не совсем понял вопрос. Если вам нужна актуальная цена в данный момент времени и что бы она изменялась в такт рынка, то это как правило другие модули и не всегда бесплатные.
avatar
Zmey56, Да именно это!) Не подскажите парочку модулей?)

Тайминг котировок какой требуется? Для чего? Почему не использовать стандартные платформы? Например QUIK? Раньше можно было и из него тянуть.
avatar

теги блога Aleks

....все тэги



UPDONW
Новый дизайн