diff options
author | montezdesousa <79287829+montezdesousa@users.noreply.github.com> | 2022-11-29 15:12:00 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-29 10:12:00 -0500 |
commit | 72aac683a128beb29d8139ab98a99a9818d05645 (patch) | |
tree | ae263c2730e7388384d5a6c2ae5b91e295445ee7 | |
parent | 58fb984b70c814075c2f22717b40e447dbb757aa (diff) |
Fix risk measure choices in SDK (#3630)
* remove hcp
* add check for risk measure
* linting
3 files changed, 30 insertions, 2 deletions
diff --git a/openbb_terminal/portfolio/portfolio_optimization/optimizer_helper.py b/openbb_terminal/portfolio/portfolio_optimization/optimizer_helper.py index 9f5a502ed41..c97832ce3fb 100644 --- a/openbb_terminal/portfolio/portfolio_optimization/optimizer_helper.py +++ b/openbb_terminal/portfolio/portfolio_optimization/optimizer_helper.py @@ -4,6 +4,9 @@ __docformat__ = "numpy" import argparse import pandas as pd +from openbb_terminal.portfolio.portfolio_optimization import statics +from openbb_terminal.rich_config import console + # These are all the possible yfinance properties valid_property_infos = [ "previousClose", @@ -128,3 +131,23 @@ def dict_to_df(d: dict) -> pd.DataFrame: df = pd.DataFrame.from_dict(data=d, orient="index", columns=["value"]) return df + + +def validate_risk_measure(risk_measure: str, warning: bool = True) -> str: + """Check that the risk measure selected is valid + + Parameters + ---------- + risk_measure : str + Risk measure to check + + Returns + ------- + str + Validated risk measure + """ + if risk_measure.lower() in statics.RISK_CHOICES: + return statics.RISK_CHOICES[risk_measure.lower()] + if warning: + console.print("[yellow]Risk measure not found. Using 'MV'.[/yellow]") + return "MV" diff --git a/openbb_terminal/portfolio/portfolio_optimization/optimizer_model.py b/openbb_terminal/portfolio/portfolio_optimization/optimizer_model.py index 282d267238d..f4a1ec0675d 100644 --- a/openbb_terminal/portfolio/portfolio_optimization/optimizer_model.py +++ b/openbb_terminal/portfolio/portfolio_optimization/optimizer_model.py @@ -449,7 +449,7 @@ def get_mean_risk_portfolio( covariance = kwargs.get("covariance", "hist") d_ewma = kwargs.get("d_ewma", 0.94) - risk_measure = risk_measure.upper() + risk_measure = optimizer_helper.validate_risk_measure(risk_measure) stock_prices = yahoo_finance_model.process_stocks( symbols, interval, start_date, end_date @@ -1496,6 +1496,7 @@ def get_ef( seed = kwargs.get("seed", 123) risk_free_rate = risk_free_rate / time_factor[freq.upper()] + risk_measure = optimizer_helper.validate_risk_measure(risk_measure) stock_prices = yahoo_finance_model.process_stocks( symbols, interval, start_date, end_date @@ -1715,6 +1716,7 @@ def get_risk_parity_portfolio( ) risk_free_rate = risk_free_rate / time_factor[freq.upper()] + risk_measure = optimizer_helper.validate_risk_measure(risk_measure) # Building the portfolio object port = rp.Portfolio(returns=stock_returns, alpha=alpha) @@ -2113,7 +2115,7 @@ def get_hcp_portfolio( alpha_tail = kwargs.get("alpha_tail", 0.05) leaf_order = kwargs.get("leaf_order", True) - risk_measure = risk_measure.upper() + risk_measure = optimizer_helper.validate_risk_measure(risk_measure) stock_prices = yahoo_finance_model.process_stocks( symbols, interval, start_date, end_date diff --git a/openbb_terminal/portfolio/portfolio_optimization/po_model.py b/openbb_terminal/portfolio/portfolio_optimization/po_model.py index 531ce966706..9b545f1944d 100644 --- a/openbb_terminal/portfolio/portfolio_optimization/po_model.py +++ b/openbb_terminal/portfolio/portfolio_optimization/po_model.py @@ -15,6 +15,7 @@ from riskfolio import rp from openbb_terminal.decorators import log_start_end from openbb_terminal.portfolio.portfolio_optimization import ( + optimizer_helper, optimizer_model, ) from openbb_terminal.portfolio.portfolio_optimization.statics import ( @@ -250,6 +251,8 @@ def get_portfolio_performance(weights: Dict, data: pd.DataFrame, **kwargs) -> Di "Sharpe ratio": sharpe, } + risk_measure = optimizer_helper.validate_risk_measure(risk_measure, warning=False) + if risk_measure != "MV": risk = rp.Sharpe_Risk( weights, |