Альфа 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]
Другие вопросы по тегам