Альфа Vantage - Изолировать Цена акций
Используя Python, я могу получить доступ к большинству API Alpha Vantage и получить результаты в виде кортежа или команды. То, что я хочу, это просто цена акций в определенный момент времени. Например, с помощью "глобальной цитаты" я получаю все данные, но не могу разобрать или разделить кортеж / dict на отдельные элементы.
Кто-нибудь делал это? Я был бы благодарен, чтобы увидеть код.
API возвращает следующие данные; это тип dict
с лен 1
, Что мне нужно, так это цена (108.29) в нормальной переменной с плавающей запятой.
(' data ', {u'Global Quote': {u'05. price': u'108.2900', u'08. previous close': u'107.2800', u'10. change percent': u'0.9415%', u'03. high': u'108.8800', u'07. latest trading day': u'2018-11-16', '}})
4 ответа
Представленные вами данные, похоже, имеют небольшую проблему в конце (есть запятая и открытая кавычка). Предполагая, что фактические данные не имеют этой проблемы, вы можете извлечь цену в переменную с плавающей запятой следующим образом:
data = (' data ', {u'Global Quote': {u'05. price': u'108.2900', u'08. previous close': u'107.2800', u'10. change percent': u'0.9415%', u'03. high': u'108.8800', u'07. latest trading day': u'2018-11-16'}})
price = float(data[1]['Global Quote']['05. price'])
print(price)
Это будет отображать цену как:
108.29
Похоже, что API извлекает кортеж, который состоит из слова data, а затем словаря, содержащего все значения. Итак, первое использование [1]
чтобы получить доступ к словарю. Global Quote
Сама запись представляет собой словарь.
Спасибо - я не рассматривал это как возможность, то есть диктат в кортеже. Я новичок как в Linux, так и в Python, так что, думаю, это какая-то любительская ошибка. Тем не менее, я действительно ценю время, потраченное на ответ. Я надеюсь вернуть это в ближайшем будущем.
Просто, кстати, я замечаю, что с Python, если я что-то кодирую неправильно, иногда я не получаю ошибку - точно. Например, если я выполняю инструкцию print для отладки и неправильно ссылаюсь на вышеуказанный элемент, команда print не выполняется, но я не получаю код ошибки. Фактически, код, следующий за оскорбительным оператором печати, также может не выполняться; Я мог бы просто пойти в EOJ. Имеет ли это смысл? NB - я еще не скомпилировал; все еще работает в интерпретирующем режиме.
Привет, ниже - это функция, которую я написал, чтобы легко извлечь исторические цены на акции из Alpha Vantage. Все, что вам нужно сделать, это вставить свой символ и жетон. Если вам нужна цена акций за определенный день, вам нужно будет отфильтровать этот день в итоговом фрейме данных. Дополнительные функции по извлечению данных Alpha Vantage см. По моей ссылке: https://github.com/hklchung/StockPricePredictor/blob/master/2020/alphavantage_funcs.py.
def request_stock_price_hist(symbol, token, sample = False):
if sample == False:
q_string = 'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol={}&outputsize=full&apikey={}'
else:
q_string = 'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol={}&apikey={}'
print("Retrieving stock price data from Alpha Vantage (This may take a while)...")
r = requests.get(q_string.format(symbol, token))
print("Data has been successfully downloaded...")
date = []
colnames = list(range(0, 7))
df = pd.DataFrame(columns = colnames)
print("Sorting the retrieved data into a dataframe...")
for i in tqdm(r.json()['Time Series (Daily)'].keys()):
date.append(i)
row = pd.DataFrame.from_dict(r.json()['Time Series (Daily)'][i], orient='index').reset_index().T[1:]
df = pd.concat([df, row], ignore_index=True)
df.columns = ["open", "high", "low", "close", "adjusted close", "volume", "dividend amount", "split cf"]
df['date'] = date
return df
Я нашел лучший способ получить данные о ценах:
from alpha_vantage.timeseries import TimeSeries
import pandas as pd
import time
import random
import numpy as np
import math
import datetime as dt
import requests
import os
import json
stock_ticker="TSLA"
apikey=""
ts = TimeSeries (key=apikey, output_format = "pandas")
### STOCK TIME SERIES > DAILY ADJUSTED ###
# Date / Open / High / Low / Close / Adjusted Close / Volume / Dividend / Split
data_daily, meta_data = ts.get_daily_adjusted(symbol=stock_ticker, outputsize ='full')
# data_daily['column name'][row number]
data_daily_lastOpenPrice = data_daily['1. open'][0]
data_daily_lastHighPrice = data_daily['2. high'][0]
data_daily_lastLowPrice = data_daily['3. low'][0]
data_daily_lastAdjustedClosingPrice = data_daily['5. adjusted close'][0]
data_daily_lastTradingVolume = data_daily['6. volume'][0]
data_daily_lastDividendAmount = data_daily['7. dividend amount'][0]