這幾天工作不忙閑著玩ChatGPT,請教怎麽下載股票信息。
Ticker | Start Price | End Price | Price Return | Dividend Return | Gross Return |
---|---|---|---|---|---|
AAPL | 192.53 | 181.91 | -5.52% | -5.52% | |
NVDA | 495.22 | 479.98 | -3.08% | -3.08% | |
PFE | 28.79 | 29.09 | 1.04% | 1.04% |
"""Python program to download stock price from Yahoo Finance and calculate return""" import yfinance as yf import pandas as pd import datetime def get_period_return(tickers: list[str], start_date: datetime.date, end_date: datetime.date) -> pd.DataFrame: hist = yf.download(tickers=tickers, start=f'{start_date:%Y-%m-%d}', end=f'{end_date:%Y-%m-%d}', actions=True) hist.fillna(method='backfill', inplace=True) d0 = hist.index[0] d1 = hist.index[-1] p0 = hist.loc[d0, 'Close'] p1 = hist.loc[d1, 'Close'] p_rt = p1/p0 - 1 dvd = hist.loc[:, ('Dividends', slice(None))].sum() dvd.index = dvd.index.get_level_values(level=1) dvd_rt = dvd/p0 g_rt = p_rt + dvd_rt p0.name = f'Start Price' p1.name = f'End Price' p_rt.name = f'Price Return' dvd_rt.name = f'Dividend Return' g_rt.name = f'Gross Return' res = pd.concat([p0, p1, p_rt, dvd_rt, g_rt], axis=1) res = res.rename_axis('Ticker').reset_index() res.loc[res['Dividend Return']==0, 'Dividend Return'] = pd.NA return res # Usage start_date = datetime.date(2023, 12, 29) end_date = datetime.date(2024, 1, 5) tickers = ['AAPL', 'PFE', 'NVDA'] period_return = get_period_return(tickers, start_date, end_date) # do whatever you want with period_return dataframe. e.g. period_return.to_clipboard() # and then paste to spreadsheet