Проблема с использованием файла Python для "получения внутридневных биржевых данных из Google Finance".
Как видно из названия, у меня возникли проблемы с использованием скрипта Python, который я нашел на GitHub, который должен извлекать внутридневные биржевые данные Теперь я не уверен, что я просто не понимаю код или у меня огромный пердеть, но я не могу понять вывод этого кода на всю жизнь. Когда я запускаю его, используя "AAPL" в качестве примера, вывод, который я получаю, не имеет смысла для меня. Все, что я хочу, - это возможность извлекать цену акции в определенное время дня (например, я хочу, чтобы торговая цена AAPL была в 13:26 EST).
Код можно найти здесь ( https://gist.github.com/lebedov/f09030b865c4cb142af1), но я просто опубликую здесь код автора:
#!/usr/bin/env python
"""
Retrieve intraday stock data from Google Finance.
"""
import csv
import datetime
import re
import pandas as pd
import requests
def get_google_finance_intraday(ticker, period=60, days=1):
"""
Retrieve intraday stock data from Google Finance.
Parameters
----------
ticker : str
Company ticker symbol.
period : int
Interval between stock values in seconds.
days : int
Number of days of data to retrieve.
Returns
-------
df : pandas.DataFrame
DataFrame containing the opening price, high price, low price,
closing price, and volume. The index contains the times associated
with the retrieved price values.
"""
uri = 'http://www.google.com/finance/getprices' \
'?i={period}&p={days}d&f=d,o,h,l,c,v&df=cpct&q={ticker}'.format (ticker=ticker,
period=period,
days=days)
page = requests.get(uri)
reader = csv.reader(codecs.iterdecode(page.content.splitlin(), "utf-8"))
columns = ['Close', 'High', 'Low', 'Open', 'Volume']
rows = []
times = []
for row in reader:
if re.match('^[a\d]', row[0]):
if row[0].startswith('a'):
start = datetime.datetime.fromtimestamp(int(row[0][1:]))
times.append(start)
else:
times.append(start+datetime.timedelta(seconds=period*int(row
[0])))
rows.append(map(float, row[1:]))
if len(rows):
return pd.DataFrame(rows, index=pd.DatetimeIndex(times, name='Date'),
columns=columns)
else:
return pd.DataFrame(rows, index=pd.DatetimeIndex(times,
name='Date'))
Например, если я позвоню по коду:
data = get_google_finance_intraday('AAPL',60,1)
Я ожидаю, что данные будут ценой AAPL в каждую минуту за прошедший день, но вместо этого я просто получаю:
Close High Low Open Volume
Date
2017-11-16 16:00:00 171.1 171.87 170.3 171.18 23590444.0
Не только это, хотя, когда я вызываю код так:
data = get_google_finance_intraday('AAPL',60,5)
Я получил:
Close High Low Open Volume
Date
2017-11-10 16:00:00 174.67 175.3800 174.27 175.11 25145500.0
2017-11-10 16:03:00 173.97 174.5000 173.40 173.50 16982080.0
2017-11-10 16:04:00 171.34 173.4800 171.18 173.04 24782487.0
2017-11-10 16:05:00 169.08 170.3197 168.38 169.97 29158070.0
2017-11-10 16:06:00 171.10 171.8700 170.30 171.18 23590444.0
Который, насколько я понимаю, это цена AAPL 10 ноября в 4:00,4:03,4:04,4:05,4:06... которая не имеет смысла для меня.
Если бы кто-то мог объяснить мне, где ошибка в моем понимании, я был бы очень признателен.