
Originariamente Scritto da
marcobrasich
Ieri ho aperto un thread sul FOL (
qui) perchè ho il problema di recuperare (x qualche giorno all'anno) dati realtime (o quasi... ...cioè, andrebbero bene anche dati ritardati di 15 minuti) da qualche sito web (ad esempio yahoo o investing.com) .
Questi dati intraday dovrei aggiungerli, tramite la grafica di un indicatore, nel mio software di borsa al mio chart daily del titolo che seguo.
In pratica vorrei il mio solito grafico daily con sul lato dx (oltre l'ultima barra daily completa) una barra daily fittizia (disegnata dall'indicatore) in continua formazione, ottenuta (come dicevo) tramite i dati realtime, della giornata di borsa in corso. Dati ottenuti da qualche script in python.
Quindi sarei interessato anch'io alle funzioni di cui parli.
Se si possono avere ti ringrazio moltissimo.
PS: Messo questo thread fra i preferiti... ...sono interessato anch'io ad una infarinatura di python.
L'unica mia conoscenza di linguaggio vero di programmazione è un po' di C++. Poi, conosco un po' di easylinguage di TS2000 e un po' di AFL di amibroker.
I dati streaming da Yahoo è difficile, quello che ho io è una banale funzione per scaricare i dati storici di tutte le azioni SP500 o SP100 in un dataframe Pandas. Ovviamente basta rieseguire lo script per aggiornare, quindi se costruisci un semplice timer che automaticamente ogni tot lo esegue forse ci riesci. Il resto è roba di GUI di cui non mi occupo, spero che tu l'abbia già implementata.
Sulla singola azione rimando banalmente alle istruzioni della libreria: yfinance * PyPI
Per tutto l'SP100 puoi fare questo:
Codice:
resp = requests.get("https://en.wikipedia.org/wiki/S%26P_100")
convert_soup = bs.BeautifulSoup(resp.text, 'lxml')
table = convert_soup.find('table',{'class':'wikitable sortable'})
tickers = []
for rows in table.findAll('tr')[1:]:
ticker = rows.findAll('td')[0].text.strip()
tickers.append(ticker)
all_data = pd.DataFrame()
test_data = pd.DataFrame()
no_data = []
for i in tickers:
try:
print(i)
test_data = pdr.get_data_yahoo(i, start = dt.datetime(2000,1,1), end = dt.date.today())
test_data['symbol'] = i
all_data = all_data.append(test_data)
clear_output(wait = True)
except:
no_data.append(i)
clear_output(wait = True)
Questo per fare la stessa cosa su SP500 con dati anche intraday:
Codice:
table=pd.read_html('https://en.wikipedia.org/wiki/List_of_S%26P_500_companies',flavor='html5lib')
df = table[0]
df.to_csv('S&P500-Info.csv')
df.to_csv("S&P500-Symbols.csv", columns=['Symbol'])
df = pd.read_csv('S&P500-Symbols.csv')
df2 = pd.read_csv('S&P500-Info.csv')
symbols = df['Symbol'].values.tolist()
prices = yf.download( # or pdr.get_data_yahoo(...
# tickers list or string as well
tickers = symbols,
# use "period" instead of start/end
# valid periods: 1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max
# (optional, default is '1mo')
period = "10y",
# fetch data by interval (including intraday if period < 60 days)
# valid intervals: 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo
# (optional, default is '1d')
interval = "1d",
# group by ticker (to access via data['SPY'])
# (optional, default is 'column')
group_by = 'column',
# adjust all OHLC automatically
# (optional, default is False)
auto_adjust = True,
# download pre/post regular market hours data
# (optional, default is False)
prepost = True,
# use threads for mass downloading? (True/False/Integer)
# (optional, default is True)
threads = True,
# proxy URL scheme use use when downloading?
# (optional, default is None)
proxy = None
)