1

使用 Python,我可以访问大多数 Alpha Vantage API,并以元组或字典的形式获取结果。我想要的只是某个时间点的股票价格。例如,使用“全局报价”,我获得了所有数据,但无法将元组/字典解析或划分为单个项目。

有人做过吗?我会很感激看到代码。

API 返回以下数据;它是dict带有 len的类型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

4 回答 4

0

您提供的数据最后似乎有一个小问题(有一个尾随逗号和开放引号)。假设实际数据没有这个问题,您可以将价格提取到一个浮点变量中,如下所示:

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条目本身就是一个字典。

于 2018-11-19T22:22:28.917 回答
0

谢谢 - 我没有认为这是一种可能性,即元组中的字典。我是 Linux 和 Python 的新手,所以我想这是一个业余错误。不过,我真的很感激花时间做出回应。我希望在不久的将来偿还。

顺便说一句,如果我编码错误,我注意到使用 Python 有时我不会收到错误 - 完全正确。例如,如果我发出打印语句进行调试并且没有正确引用上述项目,则打印命令不会执行但我没有收到错误代码。事实上,攻击性打印语句后面的代码也可能不会执行;我可能会直接去EOJ。那有意义吗?注意 - 我还没有编译;仍在解释模式下运行。

于 2018-11-21T17:50:24.843 回答
0

The best way I found to get the price data is this

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]
于 2021-02-06T21:12:30.080 回答
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
于 2020-09-07T08:26:08.677 回答