Блог им. 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 для российского рынка.

10.7К | ★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

Читайте на SMART-LAB:
Фото
Какой наш канал в MAX растет быстрее всего?
Естественно после блокировки телеги пришлось зарегистрировать все наши каналы в MAX. Всего их 5 штук. Но быстрее всего стал расти естественно...
Комментарий по работе с одним из наших контрагентов
⚡️В связи с информацией из СМИ, мы остановили исполнение контрактов с подрядчиками по использованию системы VIJU. ✅ Как один из крупнейших и...
Фото
💡 Как конфликт на Ближнем Востоке изменил перспективы рынков
🔹 Конфликт на Ближнем Востоке длится уже почти месяц, как и перекрытие Ормузского пролива. Но его влияние на финансовые рынки не ограничилось...
Фото
Россети Ленэнерго. Отчет МСФО. Считаем дивидендную базу
Компания Россети Ленэнерго опубликовала финансовый отчет за 2025г. по МСФО. Отчет МСФО и РСБУ у сетевых компаний очень похожи, а так...

теги блога Aleks

....все тэги



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