diff --git a/openbb_terminal/portfolio/portfolio_optimization/optimizer_model.py b/openbb_terminal/portfolio/portfolio_optimization/optimizer_model.py index d75be71b8bf..3b0fdac3105 100644 --- a/openbb_terminal/portfolio/portfolio_optimization/optimizer_model.py +++ b/openbb_terminal/portfolio/portfolio_optimization/optimizer_model.py @@ -289,6 +289,7 @@ def get_property_weights( value = get_kwarg("value", kwargs) s_property = get_kwarg("s_property", kwargs, default="marketCap") + s_property = yahoo_finance_model.fast_info_map.get(s_property, s_property) stock_prices = yahoo_finance_model.process_stocks( symbols, interval, start_date, end_date @@ -305,14 +306,22 @@ def get_property_weights( prop = {} prop_sum = 0 for stock in symbols: - stock_prop = yf.Ticker(stock).info[s_property] + info = yf.Ticker(stock).info + fast_info = yf.Ticker(stock).fast_info + info_dict = {} + if info: + info_dict.update(dict(info)) + if fast_info: + info_dict.update(dict(fast_info)) + + stock_prop = info_dict.get(s_property, None) if stock_prop is None: stock_prop = 0 prop[stock] = stock_prop prop_sum += stock_prop if prop_sum == 0: - console.print(f"No {s_property} was found on list of tickers provided", "\n") + console.print(f"No '{s_property}' was found on list of tickers provided", "\n") return None, None weights = {k: value * v / prop_sum for k, v in prop.items()} @@ -1368,6 +1377,9 @@ def get_black_litterman_portfolio( value=value, ) + if benchmark is None: + return None, stock_returns + factor = time_factor[freq.upper()] risk_free_rate = risk_free_rate / factor diff --git a/openbb_terminal/portfolio/portfolio_optimization/yahoo_finance_model.py b/openbb_terminal/portfolio/portfolio_optimization/yahoo_finance_model.py index e54fe7133f9..98603d592c5 100644 --- a/openbb_terminal/portfolio/portfolio_optimization/yahoo_finance_model.py +++ b/openbb_terminal/portfolio/portfolio_optimization/yahoo_finance_model.py @@ -19,6 +19,27 @@ logger = logging.getLogger(__name__) # pylint: disable=R0912, E1101 +fast_info_map = { + "previousClose": "previous_close", + "twoHundredDayAverage": "two_hundred_day_average", + "regularMarketDayHigh": "day_high", + "averageDailyVolume10Day": "ten_day_average_volume", + "regularMarketPreviousClose": "regular_market_previous_close", + "fiftyDayAverage": "fifty_day_average", + "open": "open", + "averageVolume10days": "ten_day_average_volume", + "regularMarketDayLow": "day_low", + "currency": "currency", + "marketCap": "market_cap", + "averageVolume": "three_month_average_volume", + "dayLow": "day_low", + "volume": "last_volume", + "fiftyTwoWeekHigh": "year_high", + "fiftyTwoWeekLow": "year_low", + "dayHigh": "day_high", + "regularMarketPrice": "last_price", +} + yf_info_choices = [ "previousClose", "regularMarketOpen", @@ -30,7 +51,7 @@ yf_info_choices = [ "navPrice", "averageDailyVolume10Day", "totalAssets", - "regularMarketPreviousClose", + "regular_market_previous_close", "fiftyDayAverage", "trailingAnnualDividendRate", "open", @@ -51,7 +72,7 @@ yf_info_choices = [ "lastMarket", "maxSupply", "openInterest", - "marketCap", + "market_cap", "volumeAllCurrencies", "strikePrice", "averageVolume",