Skip to content

Commit

Permalink
Portfolio optimization - plot, show and load endpoints (#3443)
Browse files Browse the repository at this point in the history
* minor changes

* add spaces to print help

* start _show refactoring

* partial refactor po

* fix ef view

* refactor plot

* remove some unused stuff

* refactor charts

* forgot this

* validate input type

* change func name

* rename some endpoints

* move statics

* turn some args to kwargs

* rewrite equal docstring

* equal docstring again

* add docstrings and move some statics

* fix maxsharpe terminal bug

* refactor show

* fix ef

* add integration tests

* fix category bug

* fill some examples

* add more examples and fix nco

* add more examples

* add one more example

* add examples file

* add examples to load

* add detail to example

* add integration tests

* fix doc

* fix teste

* black

* flake

* pylint

* Linting

* Fix return

* Trying to fix display_plot

* display_rc_chart -> display_rc

Co-authored-by: Chavithra PARANA <chavithra@gmail.com>
  • Loading branch information
montezdesousa and Chavithra authored Nov 18, 2022
1 parent 570e579 commit 1d3e468
Show file tree
Hide file tree
Showing 14 changed files with 4,208 additions and 903 deletions.
2 changes: 1 addition & 1 deletion openbb_terminal/keys_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ def first_time_user() -> bool:
If this is true, it also adds an env variable to make sure this does not run again.
Returns
----------
-------
bool
Whether or not the user is a first time user
"""
Expand Down
45 changes: 24 additions & 21 deletions openbb_terminal/miscellaneous/library/trail_map.csv
Original file line number Diff line number Diff line change
Expand Up @@ -331,27 +331,30 @@ portfolio.perf,openbb_terminal.portfolio.portfolio_model.get_performance_vs_benc
portfolio.var,openbb_terminal.portfolio.portfolio_model.get_var,
portfolio.es,openbb_terminal.portfolio.portfolio_model.get_es,
portfolio.om,openbb_terminal.portfolio.portfolio_model.get_omega,openbb_terminal.portfolio.portfolio_view.display_omega
portfolio.po.load,openbb_terminal.portfolio.portfolio_optimization.excel_model.load_allocation,
portfolio.po.load_bl_views,openbb_terminal.portfolio.portfolio_optimization.excel_model.load_bl_views,
portfolio.po.maxsharpe,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_max_sharpe,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.display_max_sharpe
portfolio.po.minrisk,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_min_risk,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.display_min_risk
portfolio.po.maxutil,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_max_util,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.display_max_util
portfolio.po.maxret,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_max_ret,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.display_max_ret
portfolio.po.maxdiv,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_max_diversification_portfolio,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.display_max_div
portfolio.po.maxdecorr,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_max_decorrelation_portfolio,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.display_max_decorr
portfolio.po.blacklitterman,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_black_litterman_portfolio,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.display_black_litterman
portfolio.po.ef,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_ef,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.display_ef
portfolio.po.riskparity,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_risk_parity_portfolio,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.display_risk_parity
portfolio.po.relriskparity,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_rel_risk_parity_portfolio,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.display_rel_risk_parity
portfolio.po.meanrisk,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_mean_risk_portfolio,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.display_mean_risk
portfolio.po.hrp,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_hrp,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.display_hrp
portfolio.po.herc,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_herc,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.display_herc
portfolio.po.nco,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_nco,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.display_nco
portfolio.po.hcp,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_hcp_portfolio,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.display_hcp
portfolio.po.equal,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_equal_weights,
portfolio.po.property,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_property_weights,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.display_property_weighting
portfolio.po.get_properties,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_properties,
portfolio.po.plot,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.additional_plots,openbb_terminal.portfolio.portfolio_optimization.optimizer_view.additional_plots
portfolio.po.load,openbb_terminal.portfolio.portfolio_optimization.po_model.generate_portfolio,,
portfolio.po.file,openbb_terminal.portfolio.portfolio_optimization.po_model.load_parameters_file,,
portfolio.po.show,openbb_terminal.portfolio.portfolio_optimization.po_model.show,,
portfolio.po.load_bl_views,openbb_terminal.portfolio.portfolio_optimization.excel_model.load_bl_views,,
portfolio.po.maxsharpe,openbb_terminal.portfolio.portfolio_optimization.po_model.get_maxsharpe,,
portfolio.po.minrisk,openbb_terminal.portfolio.portfolio_optimization.po_model.get_minrisk,,
portfolio.po.maxutil,openbb_terminal.portfolio.portfolio_optimization.po_model.get_maxutil,,
portfolio.po.maxret,openbb_terminal.portfolio.portfolio_optimization.po_model.get_maxret,,
portfolio.po.maxdiv,openbb_terminal.portfolio.portfolio_optimization.po_model.get_maxdiv,,
portfolio.po.maxdecorr,openbb_terminal.portfolio.portfolio_optimization.po_model.get_maxdecorr,,
portfolio.po.blacklitterman,openbb_terminal.portfolio.portfolio_optimization.po_model.get_blacklitterman,,
portfolio.po.ef,openbb_terminal.portfolio.portfolio_optimization.po_model.get_ef,openbb_terminal.portfolio.portfolio_optimization.po_view.display_ef,
portfolio.po.riskparity,openbb_terminal.portfolio.portfolio_optimization.po_model.get_riskparity,,
portfolio.po.relriskparity,openbb_terminal.portfolio.portfolio_optimization.po_model.get_relriskparity,,
portfolio.po.hrp,openbb_terminal.portfolio.portfolio_optimization.po_model.get_hrp,,
portfolio.po.herc,openbb_terminal.portfolio.portfolio_optimization.po_model.get_herc,,
portfolio.po.nco,openbb_terminal.portfolio.portfolio_optimization.po_model.get_nco,,
portfolio.po.hcp,openbb_terminal.portfolio.portfolio_optimization.po_model.get_hcp,,
portfolio.po.equal,openbb_terminal.portfolio.portfolio_optimization.po_model.get_equal,,
portfolio.po.mktcap,openbb_terminal.portfolio.portfolio_optimization.po_model.get_mktcap,,
portfolio.po.dividend,openbb_terminal.portfolio.portfolio_optimization.po_model.get_dividend,,
portfolio.po.property,openbb_terminal.portfolio.portfolio_optimization.po_model.get_property,,
portfolio.po.get_properties,openbb_terminal.portfolio.portfolio_optimization.optimizer_model.get_properties,,
portfolio.po.plot,openbb_terminal.portfolio.portfolio_optimization.po_view.display_plot,openbb_terminal.portfolio.portfolio_optimization.po_view.display_plot,
stocks.ba.cnews,openbb_terminal.stocks.behavioural_analysis.finnhub_model.get_company_news,
stocks.ba.snews,openbb_terminal.stocks.behavioural_analysis.finnhub_model.get_headlines_sentiment,openbb_terminal.stocks.behavioural_analysis.finnhub_view.display_stock_price_headlines_sentiment
stocks.ca.sentiment,openbb_terminal.stocks.comparison_analysis.finbrain_model.get_sentiments,openbb_terminal.stocks.comparison_analysis.finbrain_view.display_sentiment_compare
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[OPENBB]
interval=3y
log_returns=0
freq=d
maxnan=0.05
threshold=0.3
alpha=0.05
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
portfolio
po
load OpenBB_Portfolio_Template_v1.0.0.xlsx
file --file OpenBB_Parameters_Template_v1.0.0.xlsx
file -f defaults.ini
params
set maxsharpe
arg log_returns True
..
maxsharpe
minrisk
maxutil
maxret
maxdiv
maxdecorr
ef
riskparity
relriskparity
hrp
herc
nco
equal
load 60_40_Portfolio.xlsx
maxsharpe -s 2022-10-20
minrisk -r 0.05
maxutil -a 0.1
maxret -e 2022-11-20
maxdiv -mn 0.1
maxdecorr -lr
ef -t
equal -th 0.1
riskparity -p 1y
relriskparity -de 0.9
hrp -cd spearman
herc -at 0.1
nco -rm MAD
show RP_1
plot -pf MAXSHARPE_0 -pi
plot -pf MAXSHARPE_0 -hi
plot -pf MAXSHARPE_0 -dd
plot -pf MAXSHARPE_0 -rc
plot -pf MAXSHARPE_0 -he
rpf NAME_6
exit
6 changes: 4 additions & 2 deletions openbb_terminal/portfolio/portfolio_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@
from openbb_terminal.portfolio import portfolio_view
from openbb_terminal.portfolio import portfolio_helper
from openbb_terminal.portfolio import attribution_model
from openbb_terminal.portfolio.portfolio_optimization import po_controller
from openbb_terminal.portfolio.portfolio_optimization.po_controller import (
PortfolioOptimizationController,
)
from openbb_terminal.rich_config import console, MenuText
from openbb_terminal.common.quantitative_analysis import qa_view

Expand Down Expand Up @@ -392,7 +394,7 @@ def call_po(self, _):
else:
tickers = self.portfolio.tickers_list
self.queue = self.load_class(
po_controller.PortfolioOptimizationController,
PortfolioOptimizationController,
tickers,
None,
None,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
__docformat__ = "numpy"

import argparse
import pandas as pd

# These are all the possible yfinance properties
valid_property_infos = [
Expand Down Expand Up @@ -105,3 +106,25 @@ def check_valid_property_type(check_property: str) -> str:
return check_property

raise argparse.ArgumentTypeError(f"{check_property} is not a valid info")


def dict_to_df(d: dict) -> pd.DataFrame:
"""Convert a dictionary to a DataFrame
Parameters
----------
d : dict
Dictionary to convert
Returns
-------
pd.DataFrame
DataFrame with dictionary
"""

if not d:
return pd.DataFrame()

df = pd.DataFrame.from_dict(data=d, orient="index", columns=["value"])

return df
Loading

0 comments on commit 1d3e468

Please sign in to comment.