mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-10-29 13:32:08 +00:00
Merge pull request #4145 from OpenBB-finance/hotfix/fix4144
Fix portfolio optimization Ticker.info bug
This commit is contained in:
@@ -302,14 +302,12 @@ def get_property_weights(
|
||||
prop = {}
|
||||
prop_sum = 0
|
||||
for stock in symbols:
|
||||
stock_prop = yf.Ticker(stock).info[s_property]
|
||||
if stock_prop is None:
|
||||
stock_prop = 0
|
||||
stock_prop = get_prop(symbol=stock, prop=s_property)
|
||||
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()}
|
||||
@@ -317,6 +315,48 @@ def get_property_weights(
|
||||
return weights, stock_returns
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def get_prop(symbol, prop) -> float:
|
||||
"""Get property from yfinance
|
||||
|
||||
Parameters
|
||||
----------
|
||||
symbol : str
|
||||
Stock ticker
|
||||
prop : str
|
||||
Property to get
|
||||
|
||||
Returns
|
||||
-------
|
||||
dict
|
||||
Ticker info
|
||||
"""
|
||||
prop = yahoo_finance_model.fast_info_map.get(prop, prop)
|
||||
|
||||
try:
|
||||
info = yf.Ticker(symbol).info
|
||||
except Exception as _: # noqa
|
||||
info = None
|
||||
|
||||
try:
|
||||
fast_info = yf.Ticker(symbol).fast_info
|
||||
except Exception as _: # noqa
|
||||
fast_info = None
|
||||
|
||||
info_dict = {}
|
||||
if info:
|
||||
info_dict.update(dict(info))
|
||||
if fast_info:
|
||||
info_dict.update(dict(fast_info))
|
||||
|
||||
if info_dict:
|
||||
value = info_dict.get(prop, 0.0)
|
||||
if not value:
|
||||
return 0.0
|
||||
return value
|
||||
return 0.0
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def get_mean_risk_portfolio(
|
||||
symbols: List[str],
|
||||
@@ -1365,6 +1405,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
|
||||
|
||||
|
||||
@@ -19,9 +19,29 @@ 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",
|
||||
"twoHundredDayAverage",
|
||||
"trailingAnnualDividendYield",
|
||||
"payoutRatio",
|
||||
@@ -30,7 +50,6 @@ yf_info_choices = [
|
||||
"navPrice",
|
||||
"averageDailyVolume10Day",
|
||||
"totalAssets",
|
||||
"regularMarketPreviousClose",
|
||||
"fiftyDayAverage",
|
||||
"trailingAnnualDividendRate",
|
||||
"open",
|
||||
@@ -47,11 +66,9 @@ yf_info_choices = [
|
||||
"priceHint",
|
||||
"currency",
|
||||
"trailingPE",
|
||||
"regularMarketVolume",
|
||||
"lastMarket",
|
||||
"maxSupply",
|
||||
"openInterest",
|
||||
"marketCap",
|
||||
"volumeAllCurrencies",
|
||||
"strikePrice",
|
||||
"averageVolume",
|
||||
|
||||
Reference in New Issue
Block a user