使用Python,我可以访问大多数Alpha Vantage API,并以元组或字典的形式获取结果。我想要的只是某个时间点的股价。例如,使用“全局引号”,我可以获取所有数据,但无法解析或将元组/字典分解为单独的项目。
有人这样做吗?我将不胜感激看到代码。
API返回以下数据;它是带有len dict
的{{1}}类型。我需要的是正常浮点变量中的价格(108.29)。
1
答案 0 :(得分:0)
您所提供的数据最后似乎有一个小问题(逗号和尾部用引号引起来)。假设实际数据不存在此问题,则可以按如下所示将价格提取到float变量中:
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似乎正在重现一个元组,该元组由单词数据和一个包含所有值的字典组成。因此,首先使用[1]
来访问字典。 Global Quote
条目本身就是字典。
答案 1 :(得分:0)
谢谢-我没有考虑过这种可能性,即元组中的命令。我是Linux和Python的新手,所以我猜这是一个业余错误。不过,我非常感谢您花时间做出回应。我希望能在不久的将来偿还。
顺便说一句,顺便说一句,如果我编写了错误的代码,我会注意到带有Python,但有时却不会出错-完全是。例如,如果我发出一条打印语句来调试并且没有正确引用上述项目,则打印命令将不会执行,但不会得到错误代码。实际上,冒犯性打印语句之后的代码也可能不会执行。我可能只是去EOJ。那有意义吗?注意:我还没有编译;仍在解释模式下运行。
答案 2 :(得分:0)
下面是我编写的一项功能,可以轻松地从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
答案 3 :(得分:0)
我发现获取价格数据的最佳方式是这个
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]