Блог им. Zmey56
Статья о том, как получить ежедневные исторические данные по акциям, используя 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()
Ну а если необходимо получить по нескольким акциям, то необходимо внести небольшое дополнение в код. Для хранения значений используется 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()
# 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()
К сожалению, бесплатная версия Yahoo Finance не позволяет получить данные с периодичностью меньше, чем дневная. Для этого можно использовать пакет Alpha vantage, которые позволяет получить такие интервалы, как 1мин, 5мин, 15мин, 30мин, 60мин.
В дальнейшем эти данные можно проанализировать, создать торговую стратегию и оценить эффективность при помощи пакета pyfolio. В нем можно оценить коэффициент Шарпа, коэффициент Сортино, максимальную просадку и многие другие необходимые показатели.
Надеюсь, что мой перевод оригинальной статьи будет для Вас полезен. Код был проверен и все работает. Но пока для меня остался вопрос в возможности использования Alpha vantage для российского рынка.
маловато
платный доступ
from 30 api per minute — 30$ month
to 1200 api per minute — 250$ month
Но надо еще тестировать и изучать отдельно — я то пользовался дефолтными настройками. Возможно там есть установки глубины.
Установок глубины нету похоже.
Неделя минуток, 3 недели 5 минуток.
Год назад, увидев код, описание реализованных функциональных возможностей и увидев графики подумал бы: мм, классно, жалко я так не умею.
А щас прочитав название и глянув по диагонали на пост, код и графики подумал: ну это изи.
Я про что: приятно расти и развиваться! ))
tickers_list = [
'TTLK.ME',
'GMKN.ME',
'LSRG.ME',
'TATNP.ME',
'MSTT.ME',
'YNDX.ME',
]
tickers_list = [
'TTLK.ME',
'GMKN.ME',
'LSRG.ME',
'TATNP.ME',
'MSTT.ME',
'YNDX.ME',
]
# убрать комментарии для установки 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())