Files
OpenBB/gamestonk_terminal/portfolio/yfinance_model.py
Colin Delahunty f3d6dd1db1 Added Report Text (#886)
* Added basic paragraph

* Updated rmr with new format

* Added beta text

* Simplified get_rolling_beta

* Didier changes

* Removed advice and lowercased strings

* Didn't wait

* Fixed wording

* Added quantity multiplication

* Removed plot_ef, I don't think its operating properly

* wording changes, fixed beta

* Fixed cash error

* Added docstrings

Co-authored-by: Colin Delahunty <colindelahunty@Colins-Air.indiana.edu>
Co-authored-by: Colin Delahunty <colindelahunty@Colins-MacBook-Air.local>
2021-11-03 12:30:43 -04:00

86 lines
2.0 KiB
Python

"""Yfinance model"""
__docformat__ = "numpy"
from typing import List
from datetime import datetime, timedelta
import yfinance as yf
import pandas as pd
def get_stocks(tickers: List[str], start: datetime) -> pd.DataFrame:
"""Gets historic data for list of tickers
Parameters
----------
tickers : List[str]
Tickers to get data for
start : datetime
First date in stock filtered dataframe
Returns
----------
data : pd.DataFrame
Historic daily prices for stocks
"""
df = yf.download(
tickers=tickers,
start=start - timedelta(days=365),
interval="1d",
progress=False,
)
df = df["Adj Close"]
if len(tickers) > 1:
df.columns = df.columns.str.lower()
arrays = [["Close" for _ in df.columns], [x.lower() for x in df.columns]]
tuples = list(zip(*arrays))
headers = pd.MultiIndex.from_tuples(tuples, names=["first", "second"])
df.columns = headers
if len(tickers) == 1:
df = df.to_frame(name=("Close", tickers[0]))
return df
def get_dividends(tickers: List[str]) -> pd.DataFrame:
"""Past dividends for list of tickers
Parameters
----------
tickers : List[str]
Tickers to get data for
Returns
----------
data : pd.DataFrame
Historic dividends for stocks
"""
dfs = []
for ticker in tickers:
tick = yf.Ticker(ticker)
df = tick.dividends.to_frame(name=("Dividend", ticker))
dfs.append(df)
return pd.concat(dfs)
def get_market(start: datetime, ticker: str = "SPY") -> pd.DataFrame:
"""Get historical data for market asset
Parameters
----------
ticker : str
Ticker to get data for
start : datetime
First date in stock filtered dataframe
Returns
----------
data : pd.DataFrame
Historic prices for SPY
"""
tick = yf.Ticker(ticker)
df = tick.history(
start=start - timedelta(days=365),
interval="1d",
)["Close"]
return df.to_frame(name=("Market", "Close"))