yfinance api возвращает несколько тикерных данных

Я пытаюсь извлечь несколько тикеров из yfinance API и сохранить их в файл csv (всего у меня есть 1000 тикеров, для которых мне нужно получить данные, эти данные представляют собой всю таблицу даты, открытую, высокую, низкую, close, volume и т. д. и т. д.), пока я могу успешно получить данные для 1 тикера, используя следующий код Python:

import yfinance as yf

def yfinance(ticker_symbol):
    ticker_data = yf.Ticker(ticker_symbol)
    tickerDF = ticker_data.history(period='1d', start='2020-09-30', end='2020-10-31')
    
    print(tickerDF)

yfinance('000001.SS')

Однако, если я попробую использовать несколько тикеров, это не сработает. Следуя документации yfinance, в которой говорится, что для использования нескольких тикеров необходимо:

tickers = yf.Tickers('msft aapl goog')
# ^ returns a named tuple of Ticker objects

# access each ticker using (example)
tickers.tickers.MSFT.info
tickers.tickers.AAPL.history(period="1mo")
tickers.tickers.GOOG.actions

У меня есть пара проблем, в документах используется строка, такая как 'aapl', все тикеры имеют цифровой формат, например '000001.SS', часть .SS оказывается проблемой при передаче ее в код:

tickers.tickers.000001.SS.history(period="1mo")
# Clearly this wont for for a start

Следующая проблема, с которой я столкнулся, заключается в том, что даже если я передаю, например, 3 тикера моей функции, например:

yfinance('000001.SS 000050.KS 00006.KS')
# similar to yfinance docs of tickers = yf.Tickers('msft aapl goog')

Я получаю такие ошибки, как:

AttributeError: 'Tickers' object has no attribute '000001.SS'

(Я также пытался запустить их в цикле for и передать каждое из них объекту Tickers, но получил ту же ошибку.)

Я застрял, я не знаю, как передать несколько тикеров в yfinance и получить обратно данные, которые мне нужны, а документы не очень полезны.

Кто-нибудь может мне с этим помочь?


person Nav    schedule 12.12.2020    source источник
comment
см. stackoverflow.com/questions/57317760/   -  person balderman    schedule 12.12.2020
comment
Хорошо, спасибо, я попробую это немного позже и доложу   -  person Nav    schedule 12.12.2020


Ответы (1)


Не могли бы вы просто сохранить их в массиве, указав тип как объект dtype, а затем использовать его для извлечения данных.

import yfinance as yf
import numpy as np

tickers = ['msft', 'aapl', 'goog']

totalPortfolio = np.empty([len(tickers)], dtype=object)

num = 0
for ticker in tickers:
    totalPortfolio[num] = yf.download(ticker, start='2020-09-30', end='2020-10-31', interval="1d")
    num = num + 1
person Scott    schedule 13.12.2020
comment
Привет, Скотт, спасибо за ответ. У меня есть 1000 тикеров в CSV-файле, который находится в ведре s3 на AWS, поэтому в настоящий момент, чтобы прочитать их, я использую boto3 и цикл for для заполнения пустого списка тикеров. Как здесь помогает numpy? просто интересно узнать? - person Nav; 14.12.2020
comment
Я использовал его, чтобы массив соответствующей длины был пустым, и я мог идентифицировать dtype как объект, чтобы в нем можно было хранить тикеры. Если есть более эффективный способ сделать это, опуская numpy, дайте мне знать. Я сделал это, основываясь на знакомстве. - person Scott; 14.12.2020