From aacb202546864d5c21a86803406ff99f9af85d99 Mon Sep 17 00:00:00 2001 From: mjvakili Date: Mon, 25 Aug 2025 23:13:36 +0200 Subject: [PATCH 1/3] risk-return budget constraints + improved docs --- penfolioop/optimizers.py | 475 ++++++++++++++++++++++++++++++++------- penfolioop/portfolio.py | 64 +++++- tests/test_optimizers.py | 28 +-- 3 files changed, 457 insertions(+), 110 deletions(-) diff --git a/penfolioop/optimizers.py b/penfolioop/optimizers.py index 1b00378..dc7520d 100644 --- a/penfolioop/optimizers.py +++ b/penfolioop/optimizers.py @@ -1,13 +1,105 @@ # Copyright (c) 2025 Mohammadjavad Vakili. All rights reserved. -"""Portfolio optimization algorithms and utilities. - -This module provides various optimization functions for pension fund portfolio optimization, including: -- max_surplus_sharp_ratio_optimizer: Maximizes the surplus portfolio return to surplus portfolio risk -- surplus_mean_variance_optimizer: Mean-variance optimization for surplus portfolios -- max_surplus_return_optimizer: Maximizes surplus return -- min_surplus_variance_optimizer: Minimizes surplus variance -- efficient_frontier: Find the efficient frontier +r"""Portfolio optimization and objective functions. + +This module provides various objective functions for pension fund portfolio optimization, including: + +- `max_surplus_sharp_ratio_optimizer`: + +This function Maximizes the surplus portfolio return to surplus portfolio risk. + +- `surplus_mean_variance_optimizer`: + +Mean-variance optimization for surplus portfolios. + +- `max_surplus_return_optimizer`: + +Maximizes surplus return with the option of an upper limit on the surplus variance. + +- `min_surplus_variance_optimizer`: + +Minimizes surplus variance with the option of a lower limit on the surplus return. + +- `efficient_frontier`: + +Finds the efficient frontier portfolios. + + +In all these problems, we aim to find the weight vector that optimally allocates assets in the portfolio. +The weight vector is always an array of asset weights plus a liability weight (the last element of the weight vector), +where the liability weight is always set to -1. + +Let's assume that we have $n_{assets}$ in our portfolio. Therefore, the weight vector +is a $n_{assets} + 1$ dimensional vector, where the first $n_{assets}$ elements are the asset weights +and the last element is the liability weight. + +$$ +\mathbf{w} = \begin{bmatrix} +w_1 \\ +w_2 \\ +\vdots \\ +w_{n_{assets}} \\ +w_L +\end{bmatrix} = \begin{bmatrix} +w_1 \\ +w_2 \\ +\vdots \\ +w_{n_{assets}} \\ +-1 +\end{bmatrix} +$$, + +where \( w_i \) is the weight of asset \( i \) and \( w_L \) is the weight of the liabilities, which is set to -1. + +In a similar fashion, we define the expected return vector as an array containing the +expected returns of the assets and liabilities. This is a \(n_{assets} + 1\) dimensional vector, +where the first \(n_{assets}\) elements are the expected returns of the assets and the +last element is the expected return of the liabilities. + +$$ +\mathbf{R} = \begin{bmatrix} +r_1 \\ +r_2 \\ +\vdots \\ +r_n \\ +r_L +\end{bmatrix}, +$$ + +where \( r_i \) is the expected return of asset \( i \) and \( r_L \) is the expected return of the liabilities. + +The covariance matrix is defined as the covariance matrix of assets and liability returns. +This matrix is a \(n_{assets} + 1\) by \(n_{assets} + 1\) square matrix, where the first \(n_{assets}\) +rows and columns correspond to the assets and the last row and column correspond to the liabilities. + +$$ +\mathbf{\Sigma} = \begin{bmatrix} + \Sigma_{A} , \Sigma_{AL} \\ + \Sigma_{AL} , \sigma^{2}_{L} +\end{bmatrix}, +$$ + +where \( \Sigma_{A} \) is a covariance matrix of the assets, +\( \Sigma_{AL} \) is the covariance between the assets and liabilities, +and \( \sigma^{2}_{L} \) is the variance of the liabilities. +\( \Sigma_{A} \) is a \(n_{assets}\) by \(n_{assets}\) square matrix, where each element +represents the covariance between the returns of two assets. +\( \Sigma_{AL} \) is a \(n_{assets}\) dimensional vector, where each element represents the +covariance between the returns of an asset and liability return. +\( \sigma^{2}_{L} \) is the variance of the liability return. + +With these conventions at hand, we can compute the surplus return (return of the portfolio in excess of liabilities) +and the surplus variance (variance of the surplus returns) in the following way. + +$$ +\begin{align*} +\text{Surplus Return} &= \mathbf{W}^{T} \mathbf{R} = \sum_{i=1}^{n_{assets}} w_{i} r_{i} - r_{L} \\ +\text{Surplus Variance} &= \mathbf{W}^{T} \mathbf{\Sigma} \mathbf{W} = \sum_{i=1}^{n_{assets}} \sum_{j=1}^{n_{assets}} w_{i} w_{j} \big(\Sigma_{A}\big)_{ij} - 2 \sum_{i=1}^{n_{assets}} w_{i} \big(\Sigma_{AL}\big)_{i} + \sigma^{2}_{L} +\end{align*} +$$ + +For the sake of clarity on the conventions used in this module, we repeat some of these definitions in the documentation of individual functions. + """ from __future__ import annotations @@ -24,9 +116,9 @@ def _negative_surplus_sharp_ratio_objective( - weights: np.ndarray, expected_returns: np.ndarray, covariance_matrix: np.ndarray, - ) -> float: - """Objective function to maximize the Sharpe ratio of the portfolio surplus. + weights: np.ndarray, expected_returns: np.ndarray, covariance_matrix: np.ndarray, +) -> float: + """Construct an objective function to maximize the Sharpe ratio of the portfolio surplus. Parameters ---------- @@ -54,7 +146,49 @@ def _negative_surplus_sharp_ratio_objective( def max_surplus_sharp_ratio_optimizer( portfolio: Portfolio, asset_constraints: list[dict[str, Any]] | None = None, ) -> np.ndarray: - """Optimize the asset weights to achieve a target excess return over the expected liabilities return. + r"""Optimize the asset weights to achieve a target excess return over the expected liabilities return. + + This problem can be formulated as: + + $$ + \underset{\mathbf{W}}{\mathrm{maximize}} \quad \frac{\mathbf{W}^{T}\mathbf{R}}{\mathbf{W}^{T} \mathbf{\Sigma} \mathbf{W}}, + $$ + + + $$ + \begin{align*} + \mathbf{W} &=& \big[ w_{1}, w_{2}, \ldots, w_{n_{assets}}, -1 \big]^{T}, \\ + \mathbf{R} &=& \big[ R_{1}, R_{2}, \ldots, R_{n_{assets}}, R_{L} \big]^{T}, \\ + \end{align*} \\ + $$ + + $$ + \mathbf{\Sigma} = \begin{bmatrix} + \Sigma_{A} & \Sigma_{AL} \\ + \Sigma_{AL} & \sigma^{2}_{L} + \end{bmatrix}, + $$ + + where $\mathbf{W}$ is the vector of assets and liability weights, $\mathbf{R}$ is the vector of expected returns + for the assets and liabilities, and $\mathbf{\Sigma}$ is the covariance matrix of the assets and liabilities. + + The last element of $\mathbf{W}$ corresponds to the liabilities. The liability weight is always set to -1. + + + The optimization is subject to the following constraints: + + $$ + \begin{align*} + (1) &\quad& \sum_{i=1}^{n_{assets}} w_{i} = 1, \\ + (2) &\quad& w_{i} \geq 0, \quad \forall i \in \{1, \ldots, n_{assets}\}, \\ + (3) &\quad& w_{n_{assets} + 1} = w_{L} = -1 + \end{align*} + $$ + + If the `asset_constraints` parameter is provided by the user, the optimization will include these additional constraints. + See `penfolioop.constraints` for more details. A valid `asset_constraints` must fullfill a set of properties which are validated + by the `penfolioop.constraints.AssetConstraints` class. Users are encouraged to consult with the `penfolioop.constraints` + module and in particular the `penfolioop.constraints.AssetConstraints` class for more information on how to properly define asset constraints. Parameters ---------- @@ -74,7 +208,7 @@ def max_surplus_sharp_ratio_optimizer( ValueError If the optimization fails or constraints are not satisfied. - """ + """ # noqa: E501 n_assets = len(portfolio.names) - 1 # Constraints @@ -109,9 +243,52 @@ def max_surplus_sharp_ratio_optimizer( def surplus_mean_variance_optimizer( - portfolio: Portfolio, lmbd: float = 1., asset_constraints: list[dict[str, Any]] | None = None, + portfolio: Portfolio, risk_aversion: float = 1., asset_constraints: list[dict[str, Any]] | None = None, ) -> np.ndarray: - """Optimize the asset weights to maximize the surplus return over the expected liabilities return. + r"""Optimize the asset weights to maximize the surplus return over the expected liabilities return. + + This optimization problem can be formulated as: + + $$ + \underset{\mathbf{W}}{\mathrm{maximize}} \quad \mathbf{W}^{T}\mathbf{R} - \frac{\lambda}{2} \mathbf{W}^{T} \mathbf{\Sigma} \mathbf{W}, + $$ + + $$ + \begin{align*} + \mathbf{W} &=& \big[ w_{1}, w_{2}, \ldots, w_{n_{assets}}, -1 \big]^{T}, \\ + \mathbf{R} &=& \big[ R_{1}, R_{2}, \ldots, R_{n_{assets}}, R_{L} \big]^{T}, \\ + \end{align*} \\ + $$ + + $$ + \mathbf{\Sigma} = \begin{bmatrix} + \Sigma_{A} & \Sigma_{AL} \\ + \Sigma_{AL} & \sigma^{2}_{L} + \end{bmatrix}, + $$ + + where $\mathbf{W}$ is the vector of assets and liability weights, $\mathbf{R}$ is the vector of expected returns + for the assets and liabilities, $\mathbf{\Sigma}$ is the covariance matrix of the assets and liabilities, and $\lambda$ + is the risk aversion parameter. + + The last element of $\mathbf{W}$ corresponds to the liabilities. The liability weight is always set to -1. + + + The optimization is subject to the following constraints: + + $$ + \begin{align*} + (1) &\quad& \sum_{i=1}^{n_{assets}} w_{i} = 1, \\ + (2) &\quad& w_{i} \geq 0, \quad \forall i \in \{1, \ldots, n_{assets}\}, \\ + (3) &\quad& w_{n_{assets} + 1} = w_{L} = -1 + \end{align*} + $$ + + If the `asset_constraints` parameter is provided by the user, the optimization will include these additional constraints. + See `penfolioop.constraints` for more details. A valid `asset_constraints` must fullfill a set of properties which are validated + by the `penfolioop.constraints.AssetConstraints` class. Users are encouraged to consult with the `penfolioop.constraints` + module and in particular the `penfolioop.constraints.AssetConstraints` class for more information on how to properly define asset constraints. + Parameters ---------- @@ -132,14 +309,17 @@ def surplus_mean_variance_optimizer( ValueError If the optimization fails or constraints are not satisfied. - """ + """ # noqa: E501 + if risk_aversion < 0: + msg = "Risk aversion must be non-negative." + raise ValueError(msg) + n_assets = len(portfolio.names) - 1 weights = cp.Variable(n_assets + 1) - # Objective function: maximize the surplus return over the expected liabilities return surplus_return = weights.T @ portfolio.expected_returns surplus_variance = cp.quad_form(weights, portfolio.covariance_matrix) - objective = cp.Maximize(surplus_return - lmbd / 2 * surplus_variance) + objective = cp.Maximize(surplus_return - risk_aversion / 2 * surplus_variance) # Constraints constraints = [ cp.sum(weights[:n_assets]) == 1, # Weights must sum to 1 @@ -162,9 +342,60 @@ def surplus_mean_variance_optimizer( def max_surplus_return_optimizer( - portfolio: Portfolio, asset_constraints: list[dict[str, Any]] | None = None, + portfolio: Portfolio, + asset_constraints: list[dict[str, Any]] | None = None, + surplus_risk_upper_limit: float | None = None, ) -> np.ndarray: - """Optimize the asset weights to maximize the surplus return over the expected liabilities return. + r"""Optimize the asset weights to maximize the surplus return over the expected liabilities return. + + The optimization problem can be formulated as: + $$ + \underset{\mathbf{W}}{\mathrm{maximize}} \quad \mathbf{W}^{T}\mathbf{R}, + $$ + + $$ + \begin{align*} + \mathbf{W} &=& \big[ w_{1}, w_{2}, \ldots, w_{n_{assets}}, -1 \big]^{T}, \\ + \mathbf{R} &=& \big[ R_{1}, R_{2}, \ldots, R_{n_{assets}}, R_{L} \big]^{T}, \\ + \end{align*} \\ + $$ + + $$ + \mathbf{\Sigma} = \begin{bmatrix} + \Sigma_{A} & \Sigma_{AL} \\ + \Sigma_{AL} & \sigma^{2}_{L} + \end{bmatrix}, + $$ + + where $\mathbf{W}$ is the vector of assets and liability weights, $\mathbf{R}$ is the vector of expected returns + for the assets and liabilities, and $\mathbf{\Sigma}$ is the covariance matrix of the assets and liabilities. + + The last element of $\mathbf{W}$ corresponds to the liabilities. The liability weight is always set to -1. + + + The optimization is subject to the following constraints: + + $$ + \begin{align*} + (1) &\quad& \sum_{i=1}^{n_{assets}} w_{i} = 1, \\ + (2) &\quad& w_{i} \geq 0, \quad \forall i \in \{1, \ldots, n_{assets}\}, \\ + (3) &\quad& w_{n_{assets} + 1} = w_{L} = -1 + \end{align*} + $$ + + Additionally, if the parameter `surplus_risk_upper_limit` is provided by the user, we will add a surplus risk upper limit + constraint to the optimization problem: + + $$ + \mathbf{W}^{T} \mathbf{\Sigma} \mathbf{W} \leq \sigma^2 + $$, where $\sigma$ is the surplus risk upper limit. + + + If the `asset_constraints` parameter is provided by the user, the optimization will include these additional + constraints. See `penfolioop.constraints` for more details. A valid `asset_constraints` must fulfill a set + of properties which are validated by the `penfolioop.constraints.AssetConstraints` class. Users are encouraged + to consult with the `penfolioop.constraints` module and in particular the `penfolioop.constraints.AssetConstraints` + class for more information on how to properly define asset constraints. Parameters ---------- @@ -172,7 +403,8 @@ def max_surplus_return_optimizer( The portfolio object containing asset names, covariance matrix, expected returns. asset_constraints : list[dict[str, Any]], optional Additional constraints for the optimization problem. Default is None. - + surplus_risk_upper_limit : float, optional + The surplus risk upper limit for the optimization problem. Default is None. Returns ------- @@ -197,10 +429,14 @@ def max_surplus_return_optimizer( weights[:n_assets] >= 0, # No short selling weights[-1] == -1, # Last weight is liabilities ] + # Apply asset constraints if provided by user if asset_constraints: constraints += generate_constraints( portfolio_weights=weights, asset_constraints=asset_constraints, asset_names=portfolio.names ) + # Surplus risk upper limit constraint if provided by user + if surplus_risk_upper_limit is not None: + constraints.append(cp.quad_form(weights, portfolio.covariance_matrix) <= surplus_risk_upper_limit ** 2.) # Solve the optimization problem problem = cp.Problem(objective, constraints) problem.solve() @@ -212,9 +448,64 @@ def max_surplus_return_optimizer( return weights.value -def min_surplus_variance_optimizer(portfolio: Portfolio, asset_constraints: list[dict[str, Any]] | None = None, +def min_surplus_variance_optimizer( + portfolio: Portfolio, + asset_constraints: list[dict[str, Any]] | None = None, + surplus_return_lower_limit: float | None = None, ) -> np.ndarray: - """Optimize the asset weights to minimize the surplus variance of the portfolio. + r"""Optimize the asset weights to minimize the surplus variance of the portfolio. + + This optimization problem can be formulated as: + + $$ + \underset{\mathbf{W}}{\mathrm{minimize}} \quad \mathbf{W}^{T} \mathbf{\Sigma} \mathbf{W}, + $$ + + $$ + \begin{align*} + \mathbf{W} &=& \big[ w_{1}, w_{2}, \ldots, w_{n_{assets}}, -1 \big]^{T}, \\ + \mathbf{R} &=& \big[ R_{1}, R_{2}, \ldots, R_{n_{assets}}, R_{L} \big]^{T}, \\ + \end{align*} \\ + $$ + + $$ + \mathbf{\Sigma} = \begin{bmatrix} + \Sigma_{A} & \Sigma_{AL} \\ + \Sigma_{AL} & \sigma^{2}_{L} + \end{bmatrix}, + $$ + + where $\mathbf{W}$ is the vector of assets and liability weights, $\mathbf{R}$ is the vector of expected returns + for the assets and liabilities, and $\mathbf{\Sigma}$ is the covariance matrix of the assets and liabilities. + + The last element of $\mathbf{W}$ corresponds to the liabilities. The liability weight is always set to -1. + + The optimization is subject to the following general constraints: + + $$ + \begin{align*} + (1) &\quad& \sum_{i=1}^{n_{assets}} w_{i} = 1, \\ + (2) &\quad& w_{i} \geq 0, \quad \forall i \in \{1, \ldots, n_{assets}\}, \\ + (3) &\quad& w_{n_{assets} + 1} = w_{L} = -1 + \end{align*} + $$ + + Additionally, if the parameter `surplus_return_lower_limit` is provided by the user, + we will add a surplus return lower limit constraint to the optimization problem: + + $$ + \mathbf{W}^{T} \mathbf{R} \geq \tilde{R} + $$, + + where $\tilde{R}$ is the surplus return lower limit. + + + If the `asset_constraints` parameter is provided by the user, the optimization will include these + additional constraints. See `penfolioop.constraints` for more details. A valid `asset_constraints` + must fullfill a set of properties which are validated by the `penfolioop.constraints.AssetConstraints` class. + Users are encouraged to consult with the `penfolioop.constraints` module and in particular the + `penfolioop.constraints.AssetConstraints` class for more information on how to properly define asset constraints. + Parameters ---------- @@ -222,6 +513,8 @@ def min_surplus_variance_optimizer(portfolio: Portfolio, asset_constraints: list The portfolio object containing asset names, covariance matrix, expected returns. asset_constraints : list[dict[str, Any]], optional Additional constraints for the optimization problem. Default is None. + surplus_return_lower_limit : float, optional + The surplus return lower limit for the optimization problem. Default is None. Returns ------- @@ -246,10 +539,14 @@ def min_surplus_variance_optimizer(portfolio: Portfolio, asset_constraints: list weights[:n_assets] >= 0, # No short selling weights[-1] == -1, # Last weight is liabilities ] + # Apply asset constraints if provided by user if asset_constraints: constraints += generate_constraints( portfolio_weights=weights, asset_constraints=asset_constraints, asset_names=portfolio.names ) + # Apply surplus return lower limit constraint if provided by user + if surplus_return_lower_limit is not None: + constraints.append(weights.T @ portfolio.expected_returns >= surplus_return_lower_limit) # Solve the optimization problem problem = cp.Problem(objective, constraints) problem.solve() @@ -261,77 +558,91 @@ def min_surplus_variance_optimizer(portfolio: Portfolio, asset_constraints: list return weights.value -def _validate_lmbd_range(lmbd_range: tuple[float, float]) -> None: - """Validate the lambda range for the efficient frontier optimization. - - Parameters - ---------- - lmbd_range : tuple[float, float] - The range of lambda values to consider for the optimization. - - Raises - ------ - ValueError - If the lambda range is invalid (e.g., lower bound is greater than upper bound). - - """ - if lmbd_range[0] >= lmbd_range[1]: - msg = "Invalid lambda range: lower bound must be less than upper bound." - raise ValueError(msg) - - def efficient_frontier( portfolio: Portfolio, - num_points: int = 100, asset_constraints: list[dict[str, Any]] | None = None, - lmbd_range: tuple[float, float] = (0, 1), -) -> tuple[np.ndarray, np.ndarray, np.ndarray]: - """Find the efficient frontier of the portfolio. + surplus_return_range: tuple[float, float] = (0, 1), +) -> dict[str, np.ndarray]: + r"""Find the efficient frontier of the portfolio. + + This function calculates the weights of the following optimization problem by + varying the surplus return lower limit $\tilde{R}$. + + $$ + \underset{\mathbf{W}}{\text{minimize}} \quad \mathbf{W}^{T} \mathbf{C} \mathbf{W} + $$ + subject to + + $$ + \mathbf{W}^{T} \mathbf{R} \geq \tilde{R}. + $$ + + By varying the surplus return lower limit, we get a different set of weights (different portfolios). + The set of all these optimal portfolios forms the efficient frontier. + + Note that + + $$ + \begin{align*} + \mathbf{W} &=& \big[ w_{1}, w_{2}, \ldots, w_{n_{assets}}, -1 \big]^{T}, \\ + \mathbf{R} &=& \big[ R_{1}, R_{2}, \ldots, R_{n_{assets}}, R_{L} \big]^{T}, \\ + \end{align*} \\ + $$ + + $$ + \mathbf{\Sigma} = \begin{bmatrix} + \Sigma_{A} & \Sigma_{AL} \\ + \Sigma_{AL} & \sigma^{2}_{L} + \end{bmatrix}, + $$ + + where $\mathbf{W}$ is the vector of assets and liability weights, $\mathbf{R}$ is the vector of expected returns + for the assets and liabilities, and $\mathbf{\Sigma}$ is the covariance matrix of the assets and liabilities. + The last element of $\mathbf{W}$ corresponds to the liabilities. The liability weight is always set to -1. + + As always, the following general constraints apply to the weights: + + $$ + \begin{align*} + (1) &\quad& \sum_{i=1}^{n_{assets}} w_{i} = 1, \\ + (2) &\quad& w_{i} \geq 0, \quad \forall i \in \{1, \ldots, n_{assets}\}, \\ + (3) &\quad& w_{n_{assets} + 1} = w_{L} = -1 + \end{align*} + $$ + + If additional asset constraints are provided, they will be incorporated into the optimization problem. + See `penfolioop.constraints` for more details. Parameters ---------- portfolio : Portfolio The portfolio object containing asset names, covariance matrix, expected returns. - num_points : int, optional - Number of points to calculate on the efficient frontier. Default is 100. asset_constraints : list[dict[str, Any]], optional Additional constraints for the optimization problem. Default is None. - lmbd_range : tuple[float, float], optional - Range of lambda values to consider for the optimization. Default is (0, 1). + surplus_return_range : tuple[float, float], optional + Range of surplus return values to consider for the optimization. Default is (0, 1). Returns ------- - tuple[np.ndarray, np.ndarray] - Tuple containing arrays of surplus returns and surplus variances. - + dict + Dictionary containing arrays of weights, surplus returns, and surplus variances. """ - if lmbd_range is None: - lmbd_range = (0, 1) - else: - _validate_lmbd_range(lmbd_range) - lmbds = np.linspace(lmbd_range[0], lmbd_range[1], num_points) - surplus_returns = [] - surplus_variances = [] + target_returns = np.linspace(surplus_return_range[0], surplus_return_range[1], 100) weights_placeholder = [] - - def _optimize_single_lambda(lmbd) -> np.ndarray | None: # noqa: ANN001 - """Optimize for a single lambda value.""" # noqa: DOC201 - try: - return surplus_mean_variance_optimizer( - portfolio=portfolio, lmbd=lmbd, asset_constraints=asset_constraints - ) - except ValueError: - return None - - for lmbd in lmbds: - weights = _optimize_single_lambda(lmbd) - if weights is not None: - weights_placeholder.append(weights) - surplus_returns.append(portfolio.surplus_return(weights)) - surplus_variances.append(portfolio.surplus_variance(weights)) - else: - # If optimization fails for a particular lambda, append NaN - weights_placeholder.append(np.nan * np.ones(len(portfolio.names))) - surplus_returns.append(np.nan) - surplus_variances.append(np.nan) - return np.array(weights_placeholder), np.array(surplus_returns), np.array(surplus_variances) + surplus_return_place_holder = [] + surplus_variance_place_holder = [] + for target_return in target_returns: + weights = min_surplus_variance_optimizer( + portfolio=portfolio, + asset_constraints=asset_constraints, + surplus_return_lower_limit=target_return + ) + weights_placeholder.append(weights) + surplus_return_place_holder.append(portfolio.surplus_return(weights)) + surplus_variance_place_holder.append(portfolio.surplus_variance(weights)) + + return { + "weights": np.array(weights_placeholder), + "surplus_returns": np.array(surplus_return_place_holder), + "surplus_variances": np.array(surplus_variance_place_holder) + } diff --git a/penfolioop/portfolio.py b/penfolioop/portfolio.py index 8a9b54a..3a1629f 100644 --- a/penfolioop/portfolio.py +++ b/penfolioop/portfolio.py @@ -13,8 +13,34 @@ class Portfolio(BaseModel): - """Base model for Portfolio, used for validation. - + r"""Portfolio class. + + This class can be used to instantiate a portfolio object with information about its assets and liabilities. + Let's assume that we have a portfolio of $n$. The following parameters are required to define the portfolio: + + - `names`: A list with length of $n + 1$ consisting of asset names in the portfolio and the liability. + Example: `["Asset 1", "Asset 2", ... , "Asset n", "Liability"]` + + - `expected_returns`: An array of length $n + 1$ consisting of expected returns for the assets. + + $$ + \mathbf{R} = \begin{bmatrix} r_1 \\ r_2 \\ \vdots \\ r_n \\ r_L \end{bmatrix}, + $$ + + where $r_1, r_2, \ldots, r_n$ are the expected returns of the assets and $r_L$ is the + expected return of the liabilities. + Example: `np.array([0.1, 0.2, ... , 0.1, 0.05])`, where the last element is the expected return of the liabilities. + + - `covariance_matrix`: The total covariance matrix of the asset and liability returns. + $$ + \mathbf{\Sigma} = \begin{bmatrix} \Sigma & \Sigma_{AL} \\ \Sigma_{AL} & \sigma_L^2 \end{bmatrix}, + $$ + where $\Sigma$ is the $n$ by $n$ covariance matrix of the asset returns, $\Sigma_{AL}$ is an $n$-dimensional vector + representing the covariance between the assets and liabilities, and $\sigma_L^2$ is the variance of the liabilities. + + Example: `np.array([[0.1, 0.02, ...], [0.02, 0.1, ...], [...], [0.01, 0.005, ...]])`, + where the last row and column correspond to the liabilities. + Attributes ---------- names : list[str] @@ -33,16 +59,22 @@ class Portfolio(BaseModel): ------- validate_covariance_matrix() -> Self Validates the covariance matrix for shape, symmetry, and positive semi-definiteness. + validate_expected_returns() -> Self Validates the expected returns array for shape consistency with the number of assets. + validate_weights(weights: np.ndarray) -> None Validates the weights of the assets in the portfolio. + surplus_return(weights: np.ndarray) -> float Calculates the surplus return of the portfolio given the asset weights. + surplus_variance(weights: np.ndarray) -> float Calculates the surplus variance of the portfolio given the asset weights. + portfolio_return(weights: np.ndarray) -> float Calculates the return of the portfolio given the asset weights. + portfolio_variance(weights: np.ndarray) -> float Calculates the variance of the portfolio given the weights. @@ -62,8 +94,6 @@ class Portfolio(BaseModel): "arbitrary_types_allowed": True, } - - @property def n_assets(self) -> int: """Get the number of assets in the portfolio. @@ -74,7 +104,7 @@ def n_assets(self) -> int: The number of assets in the portfolio. """ - return len(self.names) + return len(self.names) - 1 @model_validator(mode="after") def validate_covariance_matrix(self) -> Self: @@ -88,13 +118,14 @@ def validate_covariance_matrix(self) -> Self: Raises ------ ValueError - If the covariance matrix is not square, not symmetric, or not positive semi-definite. + If the covariance matrix is not square, not symmetric, not positive semi-definite, or when + it does not have the right dimensions. """ - if self.covariance_matrix.shape != (self.n_assets, self.n_assets): - msg = "Covariance matrix must be square with dimensions equal to the number of assets." + if self.covariance_matrix.shape != (self.n_assets + 1, self.n_assets + 1): + msg = "Covariance matrix must be square with dimensions equal to the number of assets + 1." raise ValueError(msg) - if self.covariance_matrix.ndim != 2: + if self.covariance_matrix.ndim != 2: # noqa: PLR2004 msg = "Covariance matrix must be a 2D array." raise ValueError(msg) if not np.allclose(self.covariance_matrix, self.covariance_matrix.T): @@ -120,8 +151,8 @@ def validate_expected_returns(self) -> Self: If the expected returns array does not match the number of assets. """ - if self.expected_returns.shape != (self.n_assets,): - msg = "Expected returns must be a 1D array with length equal to the number of assets." + if self.expected_returns.shape != (self.n_assets + 1,): + msg = "Expected returns must be a 1D array with length equal to the number of assets + 1." raise ValueError(msg) return self @@ -151,7 +182,16 @@ def validate_weights(self, weights: np.ndarray) -> None: raise ValueError(msg) def surplus_return(self, weights: np.ndarray) -> float: - """Calculate the surplus return of the portfolio given the asset weights. + r"""Calculate the surplus return of the portfolio given the asset weights. + + The surplus return is defined as the return of the portfolio - the expected return of the liabilities. + $$ + R_s = R_p - R_L = \sum_{i=1}^{n} w_i R_i - R_L = \mathbf{W}^{T} \mathbf{R}, + $$ + where $R_i$ is the expected return of asset $i$, $R_L$ is the expected return of the liabilities, + $R = \begin{bmatrix} R_1 \\ R_2 \\ \vdots \\ R_n \\ R_L \end{bmatrix}$ is `self.expected_returns` + containing the expected returns of the assets and liabilities, + and $\mathbf{W} = \begin{bmatrix} w_1 \\ w_2 \\ \vdots \\ w_n \\ -1 \end{bmatrix}$ is the vector of weights. Parameters ---------- diff --git a/tests/test_optimizers.py b/tests/test_optimizers.py index e093793..a2e7b77 100644 --- a/tests/test_optimizers.py +++ b/tests/test_optimizers.py @@ -142,18 +142,18 @@ def test_optimizer(portfolio, optimizer, asset_constraints1, asset_constraints2, assert weights_multiple_constraints.shape[0] == len(portfolio.names) -@pytest.mark.parametrize('lmbd', [0, 0.1, 1.0, 10.0]) +@pytest.mark.parametrize('risk_aversion', [0, 0.1, 1.0, 10.0]) # Test for lambda in mean-variance optimizer -def test_mean_variance_optimizer_lambda(portfolio, lmbd): - weights = surplus_mean_variance_optimizer(portfolio, lmbd=lmbd) +def test_mean_variance_optimizer_lambda(portfolio, risk_aversion): + weights = surplus_mean_variance_optimizer(portfolio, risk_aversion=risk_aversion) generic_weight_requirements(weights, len(portfolio.names)) def test_mean_variance_variance_properties(portfolio): lmbds = np.linspace(0, 1, 100) vars = [] rets = [] - for lmbd in lmbds: - weights = surplus_mean_variance_optimizer(portfolio, lmbd=lmbd) + for risk_aversion in lmbds: + weights = surplus_mean_variance_optimizer(portfolio, risk_aversion=risk_aversion) variance = portfolio.surplus_variance(weights) vars.append(variance) return_ = portfolio.surplus_return(weights) @@ -166,21 +166,17 @@ def test_mean_variance_variance_properties(portfolio): def test_efficient_frontier(portfolio): - num_points = 100 - ws, srs, svs = efficient_frontier(portfolio, num_points=num_points) + results = efficient_frontier(portfolio, surplus_return_range=(0, 0.01)) - assert isinstance(ws, np.ndarray) - assert isinstance(srs, np.ndarray) - assert isinstance(svs, np.ndarray) - - assert ws.shape[0] == num_points - assert srs.shape[0] == num_points - assert svs.shape[0] == num_points + ws = results["weights"] + srs = results["surplus_returns"] + svs = results["surplus_variances"] for w in ws: generic_weight_requirements(w, len(portfolio.names)) # Check if surplus returns and variances are calculated correctly - for i in range(num_points): + for i in range(len(srs)): assert np.isclose(srs[i], portfolio.surplus_return(ws[i])) - assert np.isclose(svs[i], portfolio.surplus_variance(ws[i])) \ No newline at end of file + assert np.isclose(svs[i], portfolio.surplus_variance(ws[i])) + \ No newline at end of file From d4e6e594c2dbd950097cf465a722b6aeb6f11494 Mon Sep 17 00:00:00 2001 From: mjvakili Date: Wed, 27 Aug 2025 15:31:36 +0200 Subject: [PATCH 2/3] improved documentation --- .gitignore | 3 +- README.md | 117 +- docs/Example_US_Asset_Classes.ipynb | 5469 +++++++++++++++++++++++++++ docs/index.md | 4 +- docs/resources/benchmarks.csv | 302 ++ pyproject.toml | 14 + ruff.toml | 75 + tests/test_constraints.py | 8 +- 8 files changed, 5967 insertions(+), 25 deletions(-) create mode 100644 docs/Example_US_Asset_Classes.ipynb create mode 100644 docs/resources/benchmarks.csv create mode 100644 ruff.toml diff --git a/.gitignore b/.gitignore index a36c1cc..fd2d641 100644 --- a/.gitignore +++ b/.gitignore @@ -43,4 +43,5 @@ __pycache__/* .git/* *.ipynb_checkpoints/* *.coverage.* -dev/* \ No newline at end of file +dev/* +uv.lock \ No newline at end of file diff --git a/README.md b/README.md index a995a24..30c62c7 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,128 @@ # PenFolioOp Portfolio Optimizations for *Pension Funds* -## Supported optimizers +[![codecov](https://codecov.io/gh/quantfinlib/heavy-tail/graph/badge.svg?token=Z60B2PYJ44)](https://codecov.io/gh/quantfinlib/penfolioop) +[![tests](https://github.com/quantfinlib/heavy-tail/actions/workflows/test.yml/badge.svg)](https://github.com/quantfinlib/heavy-tail/actions/workflows/test.yml) +[![docs](https://github.com/quantfinlib/heavy-tail/actions/workflows/gh-pages.yml/badge.svg)](https://github.com/quantfinlib/heavy-tail/actions/workflows/gh-pages.yml) +[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://github.com/quantfinlib/heavy-tail/blob/main/LICENSE) -- Surplus Return Maximization -- Surplus Variance Minimization -- Surplus Sharpe Ratio Maximization -- Mean-Variance Optimization -Surplus return is defined as the return of the portfolio minus the return of the liabilities, while surplus variance is the variance of the portfolio returns in excess of the liabilities. +## Conventions -## Supported constraints +In this framework, for convenience, we make use of the following conventions: -Asset weight constraints can be applied to ensure that the portfolio adheres to specific investment guidelines. +`expected_returns` $\mathbf{R}$ is an array of the expected returns of the assets and the liabilities. -Usage of the library is straightforward. You can create a portfolio object, define your assets, and then use the optimizers to find the optimal asset weights based on your constraints and objectives. +$$ +\mathbf{R} = \begin{bmatrix} +R_1 \\ +R_2 \\ +\vdots \\ +R_n \\ +R_L +\end{bmatrix} = \begin{bmatrix} +\mathbf{R}_{A} \\ +R_L +\end{bmatrix} +$$ +`covariance_matrix` $\mathbf{\Sigma} $ is the covariance matrix of the asset and the liability returns. +$$ +\mathbf{\Sigma} = \begin{bmatrix} +\mathbf{\Sigma}_{A} & \mathbf{\Sigma}_{AL} \\ +\mathbf{\Sigma}_{AL} & \sigma^{2}_{L} +\end{bmatrix}, +$$ + +where $\mathbf{\Sigma}_{A}$ is the covariance matrix of the asset returns, $\mathbf{\Sigma}_{AL}$ is a vector of the covariance between the asset and liability returns, and $\sigma^{2}_{L}$ is the variance of the liability returns. + +The output of the optimization process is a weight vector $\mathbf{W}$ consisting of the optimal asset weights, and the liability weight is always set to -1. The optimization process aims to find the asset weights that maximize or minimize the chosen objective function while satisfying the specified constraints. + +$$ +\mathbf{W} = \begin{bmatrix} +w_1 \\ +w_2 \\ +\vdots \\ +w_n \\ +-1 +\end{bmatrix} = \begin{bmatrix} +\mathbf{W}_{A} \\ +-1 +\end{bmatrix} +$$ + +`surplus_return` $\mathbf{R}_{S}$ is the return of the portfolio minus the return of the liabilities. + +$$ +\mathbf{R}_{S} = \mathbf{R}_{P} - \mathbf{R}_{L} = \mathbf{W}_{A} ^ {T}\mathbf{R}_{A} - \mathbf{R}_{L} = \mathbf{W} ^ {T} \mathbf{R} +$$ + + +`surplus_variance` $\sigma^{2}_{S}$ is the variance of the surplus returns. + +$$ +\sigma^{2}_{S} = \mathbf{W}_{A}^{T} \mathbf{\Sigma}_{A} \mathbf{W}_{A} - 2 \mathbf{W}_{A}^{T} \mathbf{\Sigma}_{AL} + \sigma^{2}_{L} = \mathbf{W}^{T} \mathbf{\Sigma} \mathbf{W} +$$ + +## Optimizers + +With the defined surplus return and variance, we can now outline the optimization problems. +All the optimizers are subject to these general constraints: + +$$ + \begin{align*} + (1) &\quad& \sum_{i=1}^{n_{assets}} w_{i} = \mathrm{SUM}(\mathbf{W}_{A}) = 1, \\ + (2) &\quad& w_{i} \geq 0, \quad \forall i \in \{1, \ldots, n_{assets}\}, \\ + (3) &\quad& w_{L} = -1 + \end{align*} +$$ -## Example +| optimizer | formulation | constraints | +|------------------------------------------|--------------------------------------------------------------------------|-----------------------------------------------------------------| +| `max_surplus_return_optimizer`| $\underset{\mathbf{W}}{\mathrm{maximize}} \quad \mathbf{W}^{T}\mathbf{R}$ | $\mathbf{W}^{T} \mathbf{\Sigma} \mathbf{W} \leq$ `surplus_risk_upper_limit`| +| `min_surplus_variance_optimizer`| $\underset{\mathbf{W}}{\mathrm{minimize}} \quad \mathbf{W}^{T} \mathbf{\Sigma} \mathbf{W}$ | $\mathbf{W}^{T}\mathbf{R} \geq$ `surplus_return_lower_limit`| +| `max_surplus_sharpe_ratio_optimizer`| $\underset{\mathbf{W}}{\mathrm{maximize}} \quad \frac{\mathbf{W}^{T}\mathbf{R}}{\sqrt{\mathbf{W}^{T} \mathbf{\Sigma} \mathbf{W}}}$ | `None` | +| `surplus_mean_variance_optimizer`| $\underset{\mathbf{W}}{\mathrm{maximize}} \\ \quad \mathbf{W}^{T}\mathbf{R} - \frac{\lambda}{2} \mathbf{W}^{T} \mathbf{\Sigma} \mathbf{W}$ | `None` | + +In the above table, $\lambda$ is a risk aversion parameter that balances the trade-off between maximizing surplus returns and minimizing surplus risk. +In addition to the above optimizers, the user can also call the `efficient_frontier` function to compute the weights of the efficient frontier portfolio. +These portfolios can be found by varying the `surplus_return_lower_limit` in the following `min_surplus_variance_optimizer` optimizer. In this case, the user needs to provide a range of values for the `surplus_return_lower_limit` parameter. + + +## Additional Constraints + +Asset weight constraints can be applied to ensure that the portfolio adheres to specific investment guidelines. + + + +## Example + +Usage of the library is straightforward. You can create a portfolio object, define your assets, and then use the optimizers to find the optimal asset weights based on your constraints and objectives. The first step is to create a `Portfolio` object with your assets, their expected returns, and covariances. The last item in the list of assets should be the liability, which is treated differently from the other assets in the optimization process. The optimizaters always set the liability weight to -1 and require the other asset weights to be between 0 and 1 and sum to 1. -The user can then define additional constraints on the asset weights, such as requiring a minimum or maximum weight for certain assets or limiting the weight of one asset to be less than another. +The user can then define additional constraints on the asset weights, such as requiring a minimum or maximum weight for certain assets or limiting the weight of one or more assets to be less than another. For a comprehensive description of the constraints, refer to the API documentation. ```python -from penfolioop import Portfolio, SurplusReturnMaximization + +import numpy as np + +from penfolioop.portfolio import Portfolio +from penfolioop.optimizers import max_surplus_return_optimizer names = ['Asset A', 'Asset B', 'Asset C', 'Liability'] -returns = [0.05, 0.07, 0.06, 0.04] -covariances = [[0.0001, 0.00005, 0.00002, 0.00003], +expected_returns = np.array([0.05, 0.07, 0.06, 0.04]) +covariance_matrix = np.array([[0.0001, 0.00005, 0.00002, 0.00003], [0.00005, 0.0002, 0.00001, 0.00004], [0.00002, 0.00001, 0.00015, 0.00002], [0.00003, 0.00004, 0.00002, 0.0001]] -portfolio = Portfolio(names, returns, covariances) +portfolio = Portfolio(names=names, expected_returns=expected_returns, covariance_matrix=covariance_matrix) constraints = [ { @@ -53,6 +137,5 @@ constraints = [ } ] -weights = SurplusReturnMaximization(portfolio=portfolio, asset_constraints=constraints) -``` +weights = max_surplus_return_optimizer(portfolio=portfolio, asset_constraints=constraints, surplus_risk_upper_limit=0.0001) diff --git a/docs/Example_US_Asset_Classes.ipynb b/docs/Example_US_Asset_Classes.ipynb new file mode 100644 index 0000000..1039586 --- /dev/null +++ b/docs/Example_US_Asset_Classes.ipynb @@ -0,0 +1,5469 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "1167b0ba", + "metadata": {}, + "source": [ + "#### Copyright (c) 2025, Mohammadjavad Vakili\n", + "#### Disclaimer: The content of this notebook is for educational purposes only and comes with no warranty. No financial advice is provided." + ] + }, + { + "cell_type": "markdown", + "id": "d6a114a0", + "metadata": {}, + "source": [ + "# Example usage of PenFolioOp with US Benchmarks\n", + "\n", + "\n", + "We have collected the following return data for various US asset classes:\n", + "\n", + "| Asset Class Name | Benchmark | Source |\n", + "|------------------------------------------|-------------------------------------------------------|-----------------------------------------------------|\n", + "| Cash | iShares 0-3 Month Treasury Bond ETF | iShares |\n", + "| Government Bond | iShares 20 Year Treasury Bond ETF | iShares |\n", + "| High Yield Corporate Bond | iShares iBoxx High Yield Corporate Bond ETF | iShares |\n", + "| Investment Grade Corporate Bond | iShares iBoxx Investment Grade Corporate Bond ETF | iShares |\n", + "| Emerging Market Debt Local Currency | iShares JP Morgan EM Local Currency Bond ETF | iShares |\n", + "| Emerging Market Debt Hard Currency | iShares JP Morgan USD Emerging Markets Bond ETF | iShares |\n", + "| Equity | iShares MSCI World ETF | iShares |\n", + "| Real Estate | iShares US Real Estate ETF | iShares |\n", + "| liabilities | ICE BofA AAA US Corporate Index Total Return Index | Fred |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b5c5d005", + "metadata": {}, + "outputs": [], + "source": [ + "# Copyright (c) 2025, Mohammadjavad Vakili\n", + "# Disclaimer: The content of this notebook is for educational purposes only and comes with no warranty.\n", + "# No financial advice is provided.\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "import plotly.express as px\n", + "import plotly.graph_objects as go\n", + "import seaborn as sns\n", + "\n", + "from penfolioop.optimizers import (\n", + " efficient_frontier,\n", + " max_surplus_return_optimizer,\n", + " max_surplus_sharp_ratio_optimizer,\n", + " min_surplus_variance_optimizer,\n", + " surplus_mean_variance_optimizer,\n", + ")\n", + "from penfolioop.portfolio import Portfolio" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "b701b9c4", + "metadata": {}, + "outputs": [], + "source": [ + "benchmark_returns = pd.read_csv(\"resources/benchmarks.csv\", index_col=0, parse_dates=True, dtype=float)[\"2016\":]" + ] + }, + { + "cell_type": "markdown", + "id": "65772770", + "metadata": {}, + "source": [ + "First, we estimate the `expected_returns`, and `covariance_matrix`with the historical returns data. We also estimate the correlation matrix so that we can visualize the correlations between the returns of different asset classes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "06060d36", + "metadata": {}, + "outputs": [], + "source": [ + "expected_returns = benchmark_returns.mean()\n", + "covariance_matrix = benchmark_returns.cov()\n", + "correlation_matrix = benchmark_returns.corr()\n", + "names = benchmark_returns.columns.to_list()" + ] + }, + { + "cell_type": "markdown", + "id": "fde68c9f", + "metadata": {}, + "source": [ + "Let's visualize the correlation between returns of different asset classes." + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "da08cc7e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Correlation between Asset Class Returns')" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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ZlhsRBR/LLkhIiJK4KUsTk6xd6nW6UoCEcUN+9ATERHFs5RFdxh4FduNyTyR+bHkhoiIKI5YykJEOmDJDRERUQItZWncuLGq78cUW5gwYYLqyoNJtvDgwQOpVq2anD592tA4iSh+mNATERElUM7OznLr1i3JkCGDeuzh4SHHjx+XPHnyqMd37tyRLFmyGH7iQUTxwxp6IiKiBCrqmh3X8IgSJib0REREcShl8fPzi3yMUpbHjx9HPkYpS5EiRQyKjogSGyb0REREL2njxo0SHBwc+Xj8+PHy8OHDyMdhYWFy7tw5MRrq+KP2xte1Vz4RxR273BARESXQUhbE1blzZ3F3d1ePg4KC1KZY9M8H25MSIjIvJvREREQJVKdOnewet2/fPtprOnbs+BojIqJXgQk9ERFRAi1lmTt3rtEhENFrwISeiIjoJbGUhYh0wj70REREL6lLly4v9DqukBPR68CEnoiIiIjIxNi2koiIiIjIxJjQExERERGZGBN6IiIiIiITY0JPRERERGRiTOiJiIiIiEyMCT0RERERkYkxoSciIiIiMjEm9EREREREYl7/AziGEBbnIDHSAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "correlation = benchmark_returns.corr()\n", + "mask = np.triu(np.ones_like(correlation, dtype=bool))\n", + "fig, ax = plt.subplots(figsize=(6, 4))\n", + "sns.heatmap(correlation, annot=True, cmap=\"coolwarm\", vmin=-1, vmax=1, mask=mask, ax=ax)\n", + "ax.set_title(\"Correlation between Asset Class Returns\")" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "4b43adbf", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "hovertemplate": "color=Cash
Asset Class=%{x}
Expected Return=%{y}", + "legendgroup": "Cash", + "marker": { + "color": "rgb(102,194,165)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "Cash", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "Equity" + ], + "xaxis": "x", + "y": { + "bdata": "LyiPFYk4hT8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "color=Government Bond
Asset Class=%{x}
Expected Return=%{y}", + "legendgroup": "Government Bond", + "marker": { + "color": "rgb(252,141,98)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "Government Bond", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "Real Estate" + ], + "xaxis": "x", + "y": { + "bdata": "X0Wq9FcheD8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "color=High Yield Corporate Bond
Asset Class=%{x}
Expected Return=%{y}", + "legendgroup": "High Yield Corporate Bond", + "marker": { + "color": "rgb(141,160,203)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "High Yield Corporate Bond", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "High Yield Corporate Bond" + ], + "xaxis": "x", + "y": { + "bdata": "skiWOlXtcj8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "color=Investment Grade Corporate Bond
Asset Class=%{x}
Expected Return=%{y}", + "legendgroup": "Investment Grade Corporate Bond", + "marker": { + "color": "rgb(231,138,195)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "Investment Grade Corporate Bond", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "Emerging Market Debt Hard Currency" + ], + "xaxis": "x", + "y": { + "bdata": "XNiln+N0aj8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "color=Emerging Market Debt Local Currency
Asset Class=%{x}
Expected Return=%{y}", + "legendgroup": "Emerging Market Debt Local Currency", + "marker": { + "color": "rgb(166,216,84)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "Emerging Market Debt Local Currency", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "Investment Grade Corporate Bond" + ], + "xaxis": "x", + "y": { + "bdata": "4G3pKlBcZj8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "color=Emerging Market Debt Hard Currency
Asset Class=%{x}
Expected Return=%{y}", + "legendgroup": "Emerging Market Debt Hard Currency", + "marker": { + "color": "rgb(255,217,47)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "Emerging Market Debt Hard Currency", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "Liabilities" + ], + "xaxis": "x", + "y": { + "bdata": "23OWCdBkZT8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "color=Equity
Asset Class=%{x}
Expected Return=%{y}", + "legendgroup": "Equity", + "marker": { + "color": "rgb(229,196,148)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "Equity", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "Cash" + ], + "xaxis": "x", + "y": { + "bdata": "TXMT+NfNYj8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "color=Real Estate
Asset Class=%{x}
Expected Return=%{y}", + "legendgroup": "Real Estate", + "marker": { + "color": "rgb(179,179,179)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "Real Estate", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "Emerging Market Debt Local Currency" + ], + "xaxis": "x", + "y": { + "bdata": "FL1e8x3NWT8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "color=Liabilities
Asset Class=%{x}
Expected Return=%{y}", + "legendgroup": "Liabilities", + "marker": { + "color": "rgb(102,194,165)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "Liabilities", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "Government Bond" + ], + "xaxis": "x", + "y": { + "bdata": "bjhAX0O3Fj8=", + "dtype": "f8" + }, + "yaxis": "y" + } + ], + "layout": { + "barmode": "relative", + "font": { + "size": 12 + }, + "height": 350, + "legend": { + "title": { + "text": "color" + }, + "tracegroupgap": 0 + }, + "margin": { + "b": 30, + "l": 30, + "r": 30, + "t": 50 + }, + "showlegend": false, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermap": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermap" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "title": { + "text": "Expected Returns by Asset Class", + "x": 0.5 + }, + "xaxis": { + "anchor": "y", + "domain": [ + 0, + 1 + ], + "tickangle": -30, + "title": { + "text": "Asset Class" + } + }, + "yaxis": { + "anchor": "x", + "domain": [ + 0, + 1 + ], + "title": { + "text": "Expected Return" + } + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "fig = px.bar(\n", + " expected_returns.sort_values(ascending=False),\n", + " title=\"Expected Returns by Asset Class\",\n", + " labels={\"value\": \"Expected Return\", \"index\": \"Asset Class\"},\n", + " text_auto=\".2%\",\n", + " color=expected_returns.index,\n", + " color_discrete_sequence=px.colors.qualitative.Set2\n", + ")\n", + "fig.update_layout(\n", + " showlegend=False,\n", + " title_x=0.5,\n", + " height=350,\n", + " margin=dict(l=30, r=30, t=50, b=30),\n", + " xaxis_tickangle=-30,\n", + " font=dict(size=12)\n", + ")\n", + "fig.update_traces(marker_line_width=1.5, marker_line_color=\"black\")\n", + "fig.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "id": "3d8379db", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "hovertemplate": "color=Cash
Asset Class=%{x}
Expected Volatility=%{y}", + "legendgroup": "Cash", + "marker": { + "color": "rgb(102,194,165)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "Cash", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "Real Estate" + ], + "xaxis": "x", + "y": { + "bdata": "hMt090wkqj8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "color=Government Bond
Asset Class=%{x}
Expected Volatility=%{y}", + "legendgroup": "Government Bond", + "marker": { + "color": "rgb(252,141,98)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "Government Bond", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "Equity" + ], + "xaxis": "x", + "y": { + "bdata": "lO5f46FHpj8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "color=High Yield Corporate Bond
Asset Class=%{x}
Expected Volatility=%{y}", + "legendgroup": "High Yield Corporate Bond", + "marker": { + "color": "rgb(141,160,203)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "High Yield Corporate Bond", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "Government Bond" + ], + "xaxis": "x", + "y": { + "bdata": "h6sMd7NepD8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "color=Investment Grade Corporate Bond
Asset Class=%{x}
Expected Volatility=%{y}", + "legendgroup": "Investment Grade Corporate Bond", + "marker": { + "color": "rgb(231,138,195)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "Investment Grade Corporate Bond", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "Emerging Market Debt Local Currency" + ], + "xaxis": "x", + "y": { + "bdata": "15+ZqWojnj8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "color=Emerging Market Debt Local Currency
Asset Class=%{x}
Expected Volatility=%{y}", + "legendgroup": "Emerging Market Debt Local Currency", + "marker": { + "color": "rgb(166,216,84)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "Emerging Market Debt Local Currency", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "Emerging Market Debt Hard Currency" + ], + "xaxis": "x", + "y": { + "bdata": "8pITo/RxnD8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "color=Emerging Market Debt Hard Currency
Asset Class=%{x}
Expected Volatility=%{y}", + "legendgroup": "Emerging Market Debt Hard Currency", + "marker": { + "color": "rgb(255,217,47)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "Emerging Market Debt Hard Currency", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "Investment Grade Corporate Bond" + ], + "xaxis": "x", + "y": { + "bdata": "ErTEgYOVmD8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "color=Equity
Asset Class=%{x}
Expected Volatility=%{y}", + "legendgroup": "Equity", + "marker": { + "color": "rgb(229,196,148)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "Equity", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "Liabilities" + ], + "xaxis": "x", + "y": { + "bdata": "MdRRYrbtlT8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "color=Real Estate
Asset Class=%{x}
Expected Volatility=%{y}", + "legendgroup": "Real Estate", + "marker": { + "color": "rgb(179,179,179)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "Real Estate", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "High Yield Corporate Bond" + ], + "xaxis": "x", + "y": { + "bdata": "nqSc7gS7lT8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "color=Liabilities
Asset Class=%{x}
Expected Volatility=%{y}", + "legendgroup": "Liabilities", + "marker": { + "color": "rgb(102,194,165)", + "line": { + "color": "black", + "width": 1.5 + }, + "pattern": { + "shape": "" + } + }, + "name": "Liabilities", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "texttemplate": "%{y:.2%}", + "type": "bar", + "x": [ + "Cash" + ], + "xaxis": "x", + "y": { + "bdata": "uAmligLmXz8=", + "dtype": "f8" + }, + "yaxis": "y" + } + ], + "layout": { + "barmode": "relative", + "font": { + "size": 12 + }, + "height": 350, + "legend": { + "title": { + "text": "color" + }, + "tracegroupgap": 0 + }, + "margin": { + "b": 30, + "l": 30, + "r": 30, + "t": 50 + }, + "showlegend": false, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermap": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermap" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "title": { + "text": "Expected Volatility by Asset Class", + "x": 0.5 + }, + "xaxis": { + "anchor": "y", + "domain": [ + 0, + 1 + ], + "tickangle": -30, + "title": { + "text": "Asset Class" + } + }, + "yaxis": { + "anchor": "x", + "domain": [ + 0, + 1 + ], + "title": { + "text": "Expected Volatility" + } + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "fig = px.bar(\n", + " benchmark_returns.std().sort_values(ascending=False),\n", + " title=\"Expected Volatility by Asset Class\",\n", + " labels={\"value\": \"Expected Volatility\", \"index\": \"Asset Class\"},\n", + " text_auto=\".2%\",\n", + " color=names,\n", + " color_discrete_sequence=px.colors.qualitative.Set2\n", + ")\n", + "fig.update_layout(\n", + " showlegend=False,\n", + " title_x=0.5,\n", + " height=350,\n", + " margin=dict(l=30, r=30, t=50, b=30),\n", + " xaxis_tickangle=-30,\n", + " font=dict(size=12)\n", + ")\n", + "fig.update_traces(marker_line_width=1.5, marker_line_color=\"black\")\n", + "fig.show()" + ] + }, + { + "cell_type": "markdown", + "id": "0713eea7", + "metadata": {}, + "source": [ + "Now, we define our `portfolio` object" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "id": "933e4d2d", + "metadata": {}, + "outputs": [], + "source": [ + "portfolio = Portfolio(\n", + " names=names,\n", + " expected_returns=expected_returns.values,\n", + " covariance_matrix=covariance_matrix.values,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "0d3a08d6", + "metadata": {}, + "source": [ + "We define the following constraints on our asset classes:\n", + "\n", + "- `Cash` weight must be below 0.1.\n", + "- The combined weight of `Emerging Market Debt Local Currency` and `Emerging Market Debt Hard Currency` must be less than that of `Equity`.\n", + "- The combined weights of the return seeking (`Emerging Market Debt Local Currency`, `Emerging Market Debt Hard Currency`, `Equity`, `High Yield Corporate Bond`) assets must be at least 0.3.\n", + "- The weight of `Real Estate` must be greater than 0.1.\n", + "- The weight of `Investment Grade Corporate Bond` must be at least 0.3.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "9c0f026b", + "metadata": {}, + "outputs": [], + "source": [ + "constraints = [\n", + " {\"left_indices\": [\"Cash\"],\n", + " \"operator\": \"<=\",\n", + " \"right_value\": 0.1},\n", + "\n", + " {\"left_indices\": [\"Emerging Market Debt Local Currency\", \"Emerging Market Debt Hard Currency\"],\n", + " \"operator\": \"<=\",\n", + " \"right_indices\": [\"Equity\"]},\n", + "\n", + " {\"left_indices\": [\"Emerging Market Debt Local Currency\", \"Emerging Market Debt Hard Currency\", \"Equity\", \"High Yield Corporate Bond\"],\n", + " \"operator\": \">=\",\n", + " \"right_value\": 0.3},\n", + "\n", + " {\"left_indices\": [\"Real Estate\"],\n", + " \"operator\": \"<=\",\n", + " \"right_value\": 0.1},\n", + "\n", + " {\"left_indices\": [\"Investment Grade Corporate Bond\"],\n", + " \"operator\": \">=\",\n", + " \"right_value\": 0.3},\n", + "]\n" + ] + }, + { + "cell_type": "markdown", + "id": "f9f8aed5", + "metadata": {}, + "source": [ + "Let's estimate the asset class weights using our defined constraints and the following optimizers:\n", + "\n", + "- `min_surplus_variance_optimizer`,\n", + "- `max_surplus_return_optimizer`,\n", + "- `max_surplus_sharp_ratio_optimizer`,\n", + "- `efficient_frontier`" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "5b2ddc16", + "metadata": {}, + "outputs": [], + "source": [ + "min_variance_weights = min_surplus_variance_optimizer(portfolio, asset_constraints=constraints)\n", + "min_variance_return = portfolio.surplus_return(min_variance_weights)\n", + "min_variance_vol = portfolio.surplus_variance(min_variance_weights)**.5\n", + "\n", + "\n", + "max_return_weights = max_surplus_return_optimizer(portfolio, asset_constraints=constraints)\n", + "max_return = portfolio.surplus_return(max_return_weights)\n", + "max_return_vol = portfolio.surplus_variance(max_return_weights)**.5\n", + "\n", + "max_sharpe_weights = max_surplus_sharp_ratio_optimizer(portfolio, asset_constraints=constraints)\n", + "max_sharpe_return = portfolio.surplus_return(max_sharpe_weights)\n", + "max_sharpe_vol = portfolio.surplus_variance(max_sharpe_weights)**.5\n", + "\n", + "\n", + "efficient_frontier_results = efficient_frontier(\n", + " portfolio=portfolio,\n", + " asset_constraints=constraints,\n", + " surplus_return_range=(-0.005, 0.005),\n", + ")\n", + "ef_weights = efficient_frontier_results[\"weights\"]\n", + "ef_returns = efficient_frontier_results[\"surplus_returns\"]\n", + "ef_vols = efficient_frontier_results[\"surplus_variances\"]**.5" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "25358f56", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "marker": { + "color": "rgb(228,26,28)" + }, + "name": "Min Surplus Variance Optimizer", + "offset": 0, + "type": "bar", + "width": 0.2, + "x": { + "bdata": "mpmZmZmZyb+amZmZmZnpP83MzMzMzPw/ZmZmZmZmBkBmZmZmZmYOQDMzMzMzMxNAMzMzMzMzF0AzMzMzMzMbQA==", + "dtype": "f8" + }, + "y": { + "bdata": "mpmZmZmZuT80MzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "dtype": "f8" + } + }, + { + "marker": { + "color": "rgb(55,126,184)" + }, + "name": "Max Surplus Return Optimizer", + "offset": 0, + "type": "bar", + "width": 0.2, + "x": { + "bdata": "AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAcQA==", + "dtype": "f8" + }, + "y": { + "bdata": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9dO5SzMz0z8AAAAAAAAAAAAAAAAAAAAABRYjWmZm5j8AAAAAAAAAAA==", + "dtype": "f8" + } + }, + { + "marker": { + "color": "rgb(77,175,74)" + }, + "name": "Max Surplus Sharpe Ratio Optimizer", + "offset": 0, + "type": "bar", + "width": 0.2, + "x": { + "bdata": "mpmZmZmZyT8zMzMzMzPzP5qZmZmZmQFAmpmZmZmZCUDNzMzMzMwQQM3MzMzMzBRAzczMzMzMGEDNzMzMzMwcQA==", + "dtype": "f8" + }, + "y": { + "bdata": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANDMzMzMz0z8AAAAAAAAAAAAAAAAAAAAAZWZmZmZm5j8AAAAAAAAAAA==", + "dtype": "f8" + } + } + ], + "layout": { + "barmode": "group", + "font": { + "size": 12 + }, + "height": 400, + "legend": { + "title": { + "text": "Optimizer" + } + }, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermap": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermap" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "title": { + "text": "Asset Class Weights by Optimizer" + }, + "xaxis": { + "tickmode": "array", + "ticktext": [ + "Cash", + "Government Bond", + "High Yield Corporate Bond", + "Investment Grade Corporate Bond", + "Emerging Market Debt Local Currency", + "Emerging Market Debt Hard Currency", + "Equity", + "Real Estate" + ], + "tickvals": { + "bdata": "AAECAwQFBgc=", + "dtype": "i1" + }, + "title": { + "text": "Asset Class" + } + }, + "yaxis": { + "title": { + "text": "Weight" + } + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "optimizers = [\"Min Surplus Variance Optimizer\", \"Max Surplus Return Optimizer\", \"Max Surplus Sharpe Ratio Optimizer\"]\n", + "weights = np.vstack([min_variance_weights[:-1], max_return_weights[:-1], max_sharpe_weights[:-1]])\n", + "\n", + "fig = go.Figure()\n", + "bar_width = 0.2\n", + "x = np.arange(len(names[:-1]))\n", + "\n", + "for idx, (optimizer, color) in enumerate(zip(optimizers, px.colors.qualitative.Set1)):\n", + " fig.add_trace(go.Bar(\n", + " x=x + (idx - 1) * bar_width,\n", + " y=weights[idx],\n", + " name=optimizer,\n", + " marker_color=color,\n", + " width=bar_width,\n", + " offset=0\n", + " ))\n", + "\n", + "fig.update_layout(\n", + " xaxis=dict(\n", + " tickmode='array',\n", + " tickvals=x,\n", + " ticktext=names[:-1]\n", + " ),\n", + " barmode='group',\n", + " title=\"Asset Class Weights by Optimizer\",\n", + " xaxis_title=\"Asset Class\",\n", + " yaxis_title=\"Weight\",\n", + " legend_title=\"Optimizer\",\n", + " font=dict(size=12),\n", + " height=400\n", + ")\n", + "fig.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "id": "51f524e1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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4sz3Rwuezpw5IytWrMiWHcS+ly5dyrY/Tn+jswJ/f9z//tj7/cF7dPr06SI/HyJvxwCXHAZZhTZt2siqVass20wmk7reqVMnm/fBduv9Af/A29vfFjymv79/tuPg9PfZs2cLdRxv5673xxatlRgyueTc90cLno4dOyYrV65UdZw5j4EPh6gv1axevVo9tvZBhNz3/tj7/UH9b87SEiKy4u5ZbuR9bXQCAwPNX375pZqdPXr0aNVG5+LFi+r2Bx54wDxhwoRsbXT8/PzM77zzjup8MGXKlFxtqC5fvqxm5i9dulTNLsZj4Dpa5Vi3CatRo4Z59erVqk1Yp06d1IXc//4cP35ctTjC+4JOC7/88ou5du3a5q5du7rhFfCt9ycjI8N8++23m6tXr27evXt3tjZT6enp2dqEtWrVyrxlyxbzhg0bzPXq1WObMA95fzZt2qQ6KOD2EydOmL/99ltzxYoVzcOGDXPTq0BUMjDAJYf78MMPVbCJfpFoq4PemtbtooYPH55t/x9++MFcv359tX+TJk1UoGRt7ty5KnDKecEfC01qaqr5scceM5crV84cEhJiHjRoULYAmNz3/pw9e1YFs+XLl1fBAXqsPvvss+yD64L3R2vdZuuyZs2abB9SENCGhoaaw8LCzCNGjDBfu3bNRc+4ZHH1+7Njxw7VWqxMmTLmoKAgc6NGjcyvv/66OS0tzYXPmqjk0eF/1hldIiIiIqKSjDW4RERERORVGOASERERkVdhgEtEREREXoUBLhERERF5FQa4RERERORVGOASERERkVdhgEtEREREXoUBLhERERF5FQa4RF5szZo1cuedd0q1atUkICBAypUrJw0aNJC7775bZs6cKQkJCeKpunfvLjqdTk6fPu3WcZhMJomMjFRj+euvv/Ld/6233lL74nUviqioKHV/Z8PrisfB62xt7dq1avuDDz6YbfuXX36ptk+dOtXpYyMiKi4GuERe6uWXX5aePXvKokWLpEyZMnLrrbdKnz59JDg4WG174okn5NChQ+4epsfT6/Vy7733qu+//fbbfPfX9nnggQfEnVwVkCIQxuMgMCYi8hR+7h4AETnejh07VGDj7+8vP/zwgwwcODDb7RcvXlSBWNmyZd02xpIEwSoyswsXLpQPP/xQZcNt2bt3r+zbt0/Kly8vt9xyi3gyZPXxASckJKRA+w8a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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(8, 6))\n", + "sc = ax.scatter(ef_vols, ef_returns, c=ef_weights[:, 6], cmap=\"viridis\")\n", + "ax.scatter(min_variance_vol, min_variance_return, c='C0', s=200, edgecolors='black', marker='o', label='Min Surplus Variance')\n", + "ax.scatter(max_return_vol, max_return, c='C3', s=200, edgecolors='black', marker='s', label='Max Surplus Return')\n", + "ax.scatter(max_sharpe_vol, max_sharpe_return, c='C4', s=200, edgecolors='black', marker='^', label='Max Surplus Sharpe Ratio')\n", + "\n", + "ax.set_xlabel(\"Surplus Volatility\", fontsize=15)\n", + "ax.set_ylabel(\"Surplus Return\", fontsize=15)\n", + "fig.colorbar(sc, label=\"Equity Weight\")\n", + "ax.set_title(\"Efficient Frontier Portfolios\", fontsize=15)\n", + "ax.legend(frameon=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "id": "5c653fe0", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "mode": "lines", + "name": "Cash", + "stackgroup": "one", + "type": "scatter", + "x": { + "bdata": "EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI7+AcFVSrHoKv0BvVVKsego/0BPAPQHcIz/oZXWzq4wwP8jBCshWKzc/0B2g3AHKPT/cvJp4VjRCP9Rq5QKsg0U/zBgwjQHTSD+8xnoXVyJMP8R0xaGscU8/YBEIFoFgUT9aaC3bKwhTP1q/UqDWr1Q/VhZ4ZYFXVj9SbZ0qLP9XP07Ewu/Wplk/ShvotIFOWz9Gcg16LPZcP0rJMj/XnV4/IRAsAsEiYD+ju75klvZgPyFnUcdrymE/nRLkKUGeYj8bvnaMFnJjP5lpCe/rRWQ/GRWcUcEZZT+XwC60lu1lPxVswRZswWY/lRdUeUGVZz8Rw+bbFmloP5FueT7sPGk/DxoMocEQaj+NxZ4Dl+RqPw1xMWZsuGs/hxzEyEGMbD8JyFYrF2BtP4lz6Y3sM24/Ax988MEHbz+Fyg5Tl9tvPwK70Fq2V3A/wBAaDKHBcD+AZmO9iytxP0C8rG52lXE//hH2H2H/cT++Zz/RS2lyP3y9iII203I/PhPSMyE9cz/6aBvlC6dzP7y+ZJb2EHQ/ehSuR+F6dD8=", + "dtype": "f8" + }, + "y": { + "bdata": "mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5uZmZmZmbk/mpmZmZmZuT+bmZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+bmZmZmZm5P5qZmZmZmbk/m5mZmZmZuT+bmZmZmZm5P5qZmZmZmbk/m5mZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5uZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+bmZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT+amZmZmZm5P5qZmZmZmbk/mpmZmZmZuT911onrHOm4P4EkRff+cLc/pXIAA+H4tT+vwLsOw4C0P7cOdxqlCLM/zFwyJoeQsT/tqu0xaRiwP+3xUXuWQK0/Fo7IklpQqj83Kj+qHmCnP0/GtcHib6Q/YGIs2aZ/oT8i/UXh1R6dP2E1MxBePpc/vm0gP+ZdkT8=", + "dtype": "f8" + } + }, + { + "mode": "lines", + "name": "Government Bond", + "stackgroup": "one", + "type": "scatter", + "x": { + "bdata": "EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI7+AcFVSrHoKv0BvVVKsego/0BPAPQHcIz/oZXWzq4wwP8jBCshWKzc/0B2g3AHKPT/cvJp4VjRCP9Rq5QKsg0U/zBgwjQHTSD+8xnoXVyJMP8R0xaGscU8/YBEIFoFgUT9aaC3bKwhTP1q/UqDWr1Q/VhZ4ZYFXVj9SbZ0qLP9XP07Ewu/Wplk/ShvotIFOWz9Gcg16LPZcP0rJMj/XnV4/IRAsAsEiYD+ju75klvZgPyFnUcdrymE/nRLkKUGeYj8bvnaMFnJjP5lpCe/rRWQ/GRWcUcEZZT+XwC60lu1lPxVswRZswWY/lRdUeUGVZz8Rw+bbFmloP5FueT7sPGk/DxoMocEQaj+NxZ4Dl+RqPw1xMWZsuGs/hxzEyEGMbD8JyFYrF2BtP4lz6Y3sM24/Ax988MEHbz+Fyg5Tl9tvPwK70Fq2V3A/wBAaDKHBcD+AZmO9iytxP0C8rG52lXE//hH2H2H/cT++Zz/RS2lyP3y9iII203I/PhPSMyE9cz/6aBvlC6dzP7y+ZJb2EHQ/ehSuR+F6dD8=", + "dtype": "f8" + }, + "y": { + "bdata": "NDMzMzMz0z80MzMzMzPTPzQzMzMzM9M/NDMzMzMz0z80MzMzMzPTPzQzMzMzM9M/NDMzMzMz0z80MzMzMzPTPzQzMzMzM9M/NDMzMzMz0z80MzMzMzPTPzQzMzMzM9M/NDMzMzMz0z80MzMzMzPTPzQzMzMzM9M/NDMzMzMz0z80MzMzMzPTPzQzMzMzM9M/NDMzMzMz0z80MzMzMzPTPzQzMzMzM9M/NDMzMzMz0z80MzMzMzPTPzQzMzMzM9M/NDMzMzMz0z80MzMzMzPTPzQzMzMzM9M/NDMzMzMz0z80MzMzMzPTPzQzMzMzM9M/NDMzMzMz0z80MzMzMzPTPzQzMzMzM9M/NDMzMzMz0z80MzMzMzPTPzQzMzMzM9M/NDMzMzMz0z80MzMzMzPTPzQzMzMzM9M/NDMzMzMz0z80MzMzMzPTPzQzMzMzM9M/NDMzMzMz0z80MzMzMzPTPzQzMzMzM9M/NDMzMzMz0z80MzMzMzPTPzQzMzMzM9M/NDMzMzMz0z9D4suz8B3SP6yK5y+33dE/FDMDrH2d0T+D2x4oRF3RP+qDOqQKHdE/TyxWINHc0D+91HGcl5zQPyd9jRheXNA/mPH60z+S0D+95XMuHtTQPxH97RzRtNA/fxuWgil10D/tOT7ogTXQP7awzJu0688/lO0cZ2Vszz9wKm0yFu3OP01nvf3Gbc4/JqQNyXfuzT//4F2UKG/NP9kdrl/Z78w/uVr+KopwzD+Sl072OvHLP27UnsHrccs/TxHvjJzyyj8qTj9YTXPKPwiLjyP+88k/5cff7q50yT8Jy1E7PqHIP0SYvk0dX8c/gGUrYPwcxj+7Mphy29rEP/j/BIW6mMM/M81xl5lWwj9xmt6peBTBP1XPlnivpL8/1WlwnW0gvT9CDSRBuCa7P2gC9Gm6ybk/lffDkrxsuD+67JO7vg+3P+XhY+TAsrU/BtczDcNVtD8vzAM2xfiyP1XB017Hm7E/grajh8k+sD9HV+dgl8OtP65Bh7KbCas/7isnBKBPqD9GFsdVpJWlP4wAZ6eo26I/4+oG+awhoD8=", + "dtype": "f8" + } + }, + { + "mode": "lines", + "name": "High Yield Corporate Bond", + "stackgroup": "one", + "type": "scatter", + "x": { + "bdata": "EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI7+AcFVSrHoKv0BvVVKsego/0BPAPQHcIz/oZXWzq4wwP8jBCshWKzc/0B2g3AHKPT/cvJp4VjRCP9Rq5QKsg0U/zBgwjQHTSD+8xnoXVyJMP8R0xaGscU8/YBEIFoFgUT9aaC3bKwhTP1q/UqDWr1Q/VhZ4ZYFXVj9SbZ0qLP9XP07Ewu/Wplk/ShvotIFOWz9Gcg16LPZcP0rJMj/XnV4/IRAsAsEiYD+ju75klvZgPyFnUcdrymE/nRLkKUGeYj8bvnaMFnJjP5lpCe/rRWQ/GRWcUcEZZT+XwC60lu1lPxVswRZswWY/lRdUeUGVZz8Rw+bbFmloP5FueT7sPGk/DxoMocEQaj+NxZ4Dl+RqPw1xMWZsuGs/hxzEyEGMbD8JyFYrF2BtP4lz6Y3sM24/Ax988MEHbz+Fyg5Tl9tvPwK70Fq2V3A/wBAaDKHBcD+AZmO9iytxP0C8rG52lXE//hH2H2H/cT++Zz/RS2lyP3y9iII203I/PhPSMyE9cz/6aBvlC6dzP7y+ZJb2EHQ/ehSuR+F6dD8=", + "dtype": "f8" + }, + "y": { + "bdata": "MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z/KTP2qYZTSP4yzgWWskdE/ShoGIPeO0D8SAhW1gxjPP5jPHSoZE80/FJ0mn64Nyz+Xai8URAjJPxk4OInZAsc/O4/ZfHYlxz9E0zIsGoDHP6BifgMnkcY/pzcuXHY0xT+gDN60xdfDP6DhjQ0Ve8I/mLY9ZmQewT88F9t9Z4O/PyPBOi8Gyrw/Kmua4KQQuj87FfqRQ1e3PzW/WUPinbQ/Kmm59IDksT81JjJMP1auPyx68a5846g/F86wEbpwoz8+RODo7vubP1PsXq5pFpE/5052z5HDeD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "dtype": "f8" + } + }, + { + "mode": "lines", + "name": "Investment Grade Corporate Bond", + "stackgroup": "one", + "type": "scatter", + "x": { + "bdata": "EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI7+AcFVSrHoKv0BvVVKsego/0BPAPQHcIz/oZXWzq4wwP8jBCshWKzc/0B2g3AHKPT/cvJp4VjRCP9Rq5QKsg0U/zBgwjQHTSD+8xnoXVyJMP8R0xaGscU8/YBEIFoFgUT9aaC3bKwhTP1q/UqDWr1Q/VhZ4ZYFXVj9SbZ0qLP9XP07Ewu/Wplk/ShvotIFOWz9Gcg16LPZcP0rJMj/XnV4/IRAsAsEiYD+ju75klvZgPyFnUcdrymE/nRLkKUGeYj8bvnaMFnJjP5lpCe/rRWQ/GRWcUcEZZT+XwC60lu1lPxVswRZswWY/lRdUeUGVZz8Rw+bbFmloP5FueT7sPGk/DxoMocEQaj+NxZ4Dl+RqPw1xMWZsuGs/hxzEyEGMbD8JyFYrF2BtP4lz6Y3sM24/Ax988MEHbz+Fyg5Tl9tvPwK70Fq2V3A/wBAaDKHBcD+AZmO9iytxP0C8rG52lXE//hH2H2H/cT++Zz/RS2lyP3y9iII203I/PhPSMyE9cz/6aBvlC6dzP7y+ZJb2EHQ/ehSuR+F6dD8=", + "dtype": "f8" + }, + "y": { + "bdata": "MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8khJqydUjUP7vbfjaviNQ/UjNjuujI1D/likc+IgnVP37iK8JbSdU/FzoQRpWJ1T+rkfTJzsnVP0Dp2E0ICtY/LOTPwqLb1D8FKGK5B4jTPzMzMzMzM9M/NDMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzQzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z80MzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8zMzMzMzPTPzMzMzMzM9M/MzMzMzMz0z8yMzMzMzPTPzMzMzMzM9M/NDMzMzMz0z8zMzMzMzPTPzQzMzMzM9M/MzMzMzMz0z8=", + "dtype": "f8" + } + }, + { + "mode": "lines", + "name": "Emerging Market Debt Local Currency", + "stackgroup": "one", + "type": "scatter", + "x": { + "bdata": "EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI7+AcFVSrHoKv0BvVVKsego/0BPAPQHcIz/oZXWzq4wwP8jBCshWKzc/0B2g3AHKPT/cvJp4VjRCP9Rq5QKsg0U/zBgwjQHTSD+8xnoXVyJMP8R0xaGscU8/YBEIFoFgUT9aaC3bKwhTP1q/UqDWr1Q/VhZ4ZYFXVj9SbZ0qLP9XP07Ewu/Wplk/ShvotIFOWz9Gcg16LPZcP0rJMj/XnV4/IRAsAsEiYD+ju75klvZgPyFnUcdrymE/nRLkKUGeYj8bvnaMFnJjP5lpCe/rRWQ/GRWcUcEZZT+XwC60lu1lPxVswRZswWY/lRdUeUGVZz8Rw+bbFmloP5FueT7sPGk/DxoMocEQaj+NxZ4Dl+RqPw1xMWZsuGs/hxzEyEGMbD8JyFYrF2BtP4lz6Y3sM24/Ax988MEHbz+Fyg5Tl9tvPwK70Fq2V3A/wBAaDKHBcD+AZmO9iytxP0C8rG52lXE//hH2H2H/cT++Zz/RS2lyP3y9iII203I/PhPSMyE9cz/6aBvlC6dzP7y+ZJb2EHQ/ehSuR+F6dD8=", + "dtype": "f8" + }, + "y": { + "bdata": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "dtype": "f8" + } + }, + { + "mode": "lines", + "name": "Emerging Market Debt Hard Currency", + "stackgroup": "one", + "type": "scatter", + "x": { + "bdata": "EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI7+AcFVSrHoKv0BvVVKsego/0BPAPQHcIz/oZXWzq4wwP8jBCshWKzc/0B2g3AHKPT/cvJp4VjRCP9Rq5QKsg0U/zBgwjQHTSD+8xnoXVyJMP8R0xaGscU8/YBEIFoFgUT9aaC3bKwhTP1q/UqDWr1Q/VhZ4ZYFXVj9SbZ0qLP9XP07Ewu/Wplk/ShvotIFOWz9Gcg16LPZcP0rJMj/XnV4/IRAsAsEiYD+ju75klvZgPyFnUcdrymE/nRLkKUGeYj8bvnaMFnJjP5lpCe/rRWQ/GRWcUcEZZT+XwC60lu1lPxVswRZswWY/lRdUeUGVZz8Rw+bbFmloP5FueT7sPGk/DxoMocEQaj+NxZ4Dl+RqPw1xMWZsuGs/hxzEyEGMbD8JyFYrF2BtP4lz6Y3sM24/Ax988MEHbz+Fyg5Tl9tvPwK70Fq2V3A/wBAaDKHBcD+AZmO9iytxP0C8rG52lXE//hH2H2H/cT++Zz/RS2lyP3y9iII203I/PhPSMyE9cz/6aBvlC6dzP7y+ZJb2EHQ/ehSuR+F6dD8=", + "dtype": "f8" + }, + "y": { + "bdata": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "dtype": "f8" + } + }, + { + "mode": "lines", + "name": "Equity", + "stackgroup": "one", + "type": "scatter", + "x": { + "bdata": "EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI7+AcFVSrHoKv0BvVVKsego/0BPAPQHcIz/oZXWzq4wwP8jBCshWKzc/0B2g3AHKPT/cvJp4VjRCP9Rq5QKsg0U/zBgwjQHTSD+8xnoXVyJMP8R0xaGscU8/YBEIFoFgUT9aaC3bKwhTP1q/UqDWr1Q/VhZ4ZYFXVj9SbZ0qLP9XP07Ewu/Wplk/ShvotIFOWz9Gcg16LPZcP0rJMj/XnV4/IRAsAsEiYD+ju75klvZgPyFnUcdrymE/nRLkKUGeYj8bvnaMFnJjP5lpCe/rRWQ/GRWcUcEZZT+XwC60lu1lPxVswRZswWY/lRdUeUGVZz8Rw+bbFmloP5FueT7sPGk/DxoMocEQaj+NxZ4Dl+RqPw1xMWZsuGs/hxzEyEGMbD8JyFYrF2BtP4lz6Y3sM24/Ax988MEHbz+Fyg5Tl9tvPwK70Fq2V3A/wBAaDKHBcD+AZmO9iytxP0C8rG52lXE//hH2H2H/cT++Zz/RS2lyP3y9iII203I/PhPSMyE9cz/6aBvlC6dzP7y+ZJb2EHQ/ehSuR+F6dD8=", + "dtype": "f8" + }, + "y": { + "bdata": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvzbwGMdqDP3v6F9tsGJo/S8domeAhpT9WkUXFijetP5wtkXiaprI/pJJ/jm+xtj+g922kRLy6P5tcXLoZx74/b/jDiPcxwT9rRFQ3zfrCPwlwco8D0sQ/Kl5yawOuxj9RTHJHA4rIP3k6ciMDZso/oChy/wJCzD/CFnLbAh7OP+0EcrcC+s8/iPm4SQHr0D+Z8Lg3AdnRP67nuCUBx9I/wN64EwG10z/X1bgBAaPUP+rMuO8AkdU//cO43QB/1j8Ou7jLAG3XPyCyuLkAW9g/OKm4pwBJ2T/jgL1IxxXaP0Uah7/Xtto/qLNQNuhX2z8JTRqt+PjbP2vm4yMJmtw/zn+tmhk73T8uGXcRKtzdP5KyQIg6fd4/8UsK/0oe3z/gU6GB18jfP4lBPzoPP+A/INmts7KZ4D+6cBwtVvTgP1MIi6b5TuE/7J/5H52p4T+EN2iZQATiPx7P1hLkXuI/tWZFjIe54j9P/rMFKxTjP+eVIn/ObuM/gi2R+HHJ4z8Zxf9xFSTkP7Ncbuu4fuQ/S/TcZFzZ5D8=", + "dtype": "f8" + } + }, + { + "mode": "lines", + "name": "Real Estate", + "stackgroup": "one", + "type": "scatter", + "x": { + "bdata": "EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI78QTfvwqcYjvxBN+/CpxiO/EE378KnGI7+AcFVSrHoKv0BvVVKsego/0BPAPQHcIz/oZXWzq4wwP8jBCshWKzc/0B2g3AHKPT/cvJp4VjRCP9Rq5QKsg0U/zBgwjQHTSD+8xnoXVyJMP8R0xaGscU8/YBEIFoFgUT9aaC3bKwhTP1q/UqDWr1Q/VhZ4ZYFXVj9SbZ0qLP9XP07Ewu/Wplk/ShvotIFOWz9Gcg16LPZcP0rJMj/XnV4/IRAsAsEiYD+ju75klvZgPyFnUcdrymE/nRLkKUGeYj8bvnaMFnJjP5lpCe/rRWQ/GRWcUcEZZT+XwC60lu1lPxVswRZswWY/lRdUeUGVZz8Rw+bbFmloP5FueT7sPGk/DxoMocEQaj+NxZ4Dl+RqPw1xMWZsuGs/hxzEyEGMbD8JyFYrF2BtP4lz6Y3sM24/Ax988MEHbz+Fyg5Tl9tvPwK70Fq2V3A/wBAaDKHBcD+AZmO9iytxP0C8rG52lXE//hH2H2H/cT++Zz/RS2lyP3y9iII203I/PhPSMyE9cz/6aBvlC6dzP7y+ZJb2EHQ/ehSuR+F6dD8=", + "dtype": "f8" + }, + "y": { + "bdata": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "dtype": "f8" + } + } + ], + "layout": { + "hovermode": "x unified", + "legend": { + "title": { + "text": "Asset Class" + } + }, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermap": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermap" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "title": { + "text": "Asset Weights Along the Efficient Frontier)" + }, + "xaxis": { + "title": { + "text": "Surplus Return" + } + }, + "yaxis": { + "title": { + "text": "Asset Weight" + } + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = go.Figure()\n", + "for i, name in enumerate(portfolio.names[:-1]): # Exclude 'Liabilities'\n", + " fig.add_trace(go.Scatter(\n", + " x=ef_returns,\n", + " y=ef_weights[:, i],\n", + " mode=\"lines\",\n", + " name=name,\n", + " stackgroup=\"one\",\n", + " ))\n", + "fig.update_layout(\n", + " title=\"Asset Weights Along the Efficient Frontier)\",\n", + " xaxis_title=\"Surplus Return\",\n", + " yaxis_title=\"Asset Weight\",\n", + " legend_title=\"Asset Class\",\n", + " hovermode=\"x unified\",\n", + ")\n", + "fig.show()" + ] + }, + { + "cell_type": "markdown", + "id": "6964f563", + "metadata": {}, + "source": [ + "## Mean-Variance Portfolio with different risk aversions" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "id": "0d74eec4", + "metadata": {}, + "outputs": [], + "source": [ + "risk_aversion_values = [0, 10, 20, 50, 100]\n", + "mv_weights, mv_srs, mv_svols = {}, {}, {}\n", + "\n", + "for risk_aversion in risk_aversion_values:\n", + " mv_weights[risk_aversion] = surplus_mean_variance_optimizer(\n", + " portfolio=portfolio,\n", + " risk_aversion=risk_aversion,\n", + " asset_constraints=constraints,\n", + " )\n", + " mv_srs[risk_aversion] = portfolio.surplus_return(weights=mv_weights[risk_aversion])\n", + " mv_svols[risk_aversion] = portfolio.surplus_variance(weights=mv_weights[risk_aversion])**.5" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "id": "6b4d9597", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "marker": { + "color": "rgb(228,26,28)" + }, + "name": "Risk Aversion: 0", + "offset": 0, + "type": "bar", + "width": 0.2, + "x": { + "bdata": "mpmZmZmZyb+amZmZmZnpP83MzMzMzPw/ZmZmZmZmBkBmZmZmZmYOQDMzMzMzMxNAMzMzMzMzF0AzMzMzMzMbQA==", + "dtype": "f8" + }, + "y": { + "bdata": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzMzMz0z8AAAAAAAAAAAAAAAAAAAAAZmZmZmZm5j8AAAAAAAAAAA==", + "dtype": "f8" + } + }, + { + "marker": { + "color": "rgb(55,126,184)" + }, + "name": "Risk Aversion: 10", + "offset": 0, + "type": "bar", + "width": 0.2, + "x": { + "bdata": "AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAcQA==", + "dtype": "f8" + }, + "y": { + "bdata": "sOU3AWkttD+PUuOSZ8K2PwAAAAAAAAAAMzMzMzMz0z8AAAAAAAAAAAAAAAAAAAAAX//iU2wI4T8AAAAAAAAAAA==", + "dtype": "f8" + } + }, + { + "marker": { + "color": "rgb(77,175,74)" + }, + "name": "Risk Aversion: 20", + "offset": 0, + "type": "bar", + "width": 0.2, + "x": { + "bdata": "mpmZmZmZyT8zMzMzMzPzP5qZmZmZmQFAmpmZmZmZCUDNzMzMzMwQQM3MzMzMzBRAzczMzMzMGEDNzMzMzMwcQA==", + "dtype": "f8" + }, + "y": { + "bdata": "mpmZmZmZuT9vAd7EqeDMP1dpRJmySrQ/NTMzMzMz0z8AAAAAAAAAAAAAAAAAAAAAV0um3WTj0j8AAAAAAAAAAA==", + "dtype": "f8" + } + }, + { + "marker": { + "color": "rgb(152,78,163)" + }, + "name": "Risk Aversion: 50", + "offset": 0, + "type": "bar", + "width": 0.2, + "x": { + "bdata": "mpmZmZmZ2T9mZmZmZmb2PzMzMzMzMwNAMzMzMzMzC0CamZmZmZkRQJqZmZmZmRVAmpmZmZmZGUCamZmZmZkdQA==", + "dtype": "f8" + }, + "y": { + "bdata": "mpmZmZmZuT+/ImI+K9PQP6oCOmT0v8o/q0MEKDuT1T8AAAAAAAAAAAAAAAAAAAAAb8dYBORMtz8AAAAAAAAAAA==", + "dtype": "f8" + } + }, + { + "marker": { + "color": "rgb(255,127,0)" + }, + "name": "Risk Aversion: 100", + "offset": 0, + "type": "bar", + "width": 0.2, + "x": { + "bdata": "NDMzMzMz4z+amZmZmZn5P83MzMzMzARAzczMzMzMDEBmZmZmZmYSQGZmZmZmZhZAZmZmZmZmGkBmZmZmZmYeQA==", + "dtype": "f8" + }, + "y": { + "bdata": "mpmZmZmZuT/kj1M7E+jRP27CqUpnu9E/hNYSK1N+1D8AAAAAAAAAAAAAAAAAAAAAMQyXiL58lz8AAAAAAAAAAA==", + "dtype": "f8" + } + } + ], + "layout": { + "barmode": "group", + "font": { + "size": 12 + }, + "height": 400, + "legend": { + "title": { + "text": "Risk aversion" + } + }, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermap": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermap" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "title": { + "text": "Asset Class Weights by Risk Aversion" + }, + "xaxis": { + "tickmode": "array", + "ticktext": [ + "Cash", + "Government Bond", + "High Yield Corporate Bond", + "Investment Grade Corporate Bond", + "Emerging Market Debt Local Currency", + "Emerging Market Debt Hard Currency", + "Equity", + "Real Estate" + ], + "tickvals": { + "bdata": "AAECAwQFBgc=", + "dtype": "i1" + }, + "title": { + "text": "Asset Class" + } + }, + "yaxis": { + "title": { + "text": "Weight" + } + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = go.Figure()\n", + "bar_width = 0.2\n", + "x = np.arange(len(names[:-1]))\n", + "\n", + "for idx, (risk_aversion, color) in enumerate(zip(risk_aversion_values, px.colors.qualitative.Set1)):\n", + " fig.add_trace(go.Bar(\n", + " x=x + (idx - 1) * bar_width,\n", + " y=mv_weights[risk_aversion][:-1],\n", + " name=f\"Risk Aversion: {risk_aversion}\",\n", + " marker_color=color,\n", + " width=bar_width,\n", + " offset=0,\n", + " ))\n", + "\n", + "fig.update_layout(\n", + " xaxis=dict(\n", + " tickmode='array',\n", + " tickvals=x,\n", + " ticktext=names[:-1]\n", + " ),\n", + " barmode=\"group\",\n", + " title=\"Asset Class Weights by Risk Aversion\",\n", + " xaxis_title=\"Asset Class\",\n", + " yaxis_title=\"Weight\",\n", + " legend_title=\"Risk aversion\",\n", + " font=dict(size=12),\n", + " height=400\n", + ")\n", + "fig.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "267ea9be", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAArIAAAGcCAYAAAAlN0NbAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjUsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvWftoOwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAlF5JREFUeJzt3Qd4U9X7B/Bvk+69W6Cl7FH2FtmCCCKKIKCycQ9EcaI/90DFjf4VB0sRAcUBsmXIlr3KppSWAt17t/k/7ykJSZuW7nR8P89zaXJzuTlJbpI3577nPVY6nU4HIiIiIqIaRmPpBhARERERlQUDWSIiIiKqkRjIEhEREVGNxECWiIiIiGokBrJEREREVCMxkCUiIiKiGomBLBERERHVSAxkiYiIiKhGYiBLRERERDUSA1myKCsrK7zxxhuWbgZVkEaNGmHy5MmoqaTt8hhqsi1btqj3lfytzPfqggUL1LoLFy4Y1vXv318tVLbnQp5feU5jYmJQV1TW8Up1BwPZOuLo0aO45557EBQUBHt7ezRo0AC33nor5syZg7pGAhX54NQvTk5O6N69OxYtWlTmff7f//2f+mKnkklJScHrr7+Otm3bquffy8sLHTt2xPTp0xEZGYm6on379mjYsCGKmym8V69e8PPzQ05OTqW3Z/Xq1RX6w1JeS9nfoUOHUNPpA3f9Ym1trT5H5cfPpUuXUJ3I55G0sUePHpZuClGls678uyBL27lzJwYMGKC+MB966CH4+/sjPDwcu3fvxueff45p06ahrpGg6dlnn1WXL1++jO+//x6TJk1CZmameo7K8sXh7e1do3sjq0p2djb69u2LkydPqudcjj8JbI8fP46ff/4Zd999N+rXr4+6YNy4cXjppZewbds29ZwUJL2du3btwpNPPqkCp6oIZL/66iuzwWx6evoN27B+/fpCgeybb76pfjzKe642eOutt9C4cWNkZGSoz1AJcLdv345jx46pToKinouqtHjxYvWc//fffzh79iyaNWuG6kqOezm2bG1tLd0UqqEYyNYB7777Ltzc3LB37164u7ub3BYVFVVh95Oamqp612oC6UkZP3684boEoE2aNMGnn35apkC2MkgvnXxZOjg4oDb5448/cPDgQfVle//995vcJo83KyurQu5HejDz8vKq9RekPP6ZM2eqAN5cILtkyRJ1HEjAa2nG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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "surplus_returns = [mv_srs[ra] for ra in risk_aversion_values]\n", + "surplus_vols = [mv_svols[ra] for ra in risk_aversion_values]\n", + "\n", + "fig, ax1 = plt.subplots(figsize=(7, 4))\n", + "\n", + "color1 = \"tab:blue\"\n", + "ax1.set_xlabel(\"Risk Aversion\")\n", + "ax1.set_ylabel(\"Surplus Return\", color=color1)\n", + "ax1.plot(risk_aversion_values, surplus_returns, marker=\"o\", color=color1, label=\"Surplus Return\")\n", + "ax1.tick_params(axis='y', labelcolor=color1)\n", + "\n", + "ax2 = ax1.twinx()\n", + "color2 = \"tab:red\"\n", + "ax2.set_ylabel(\"Surplus Volatility\", color=color2)\n", + "ax2.plot(risk_aversion_values, surplus_vols, marker=\"s\", color=color2, label=\"Surplus Volatility\")\n", + "ax2.tick_params(axis=\"y\", labelcolor=color2)\n", + "\n", + "fig.tight_layout()\n", + "plt.title(\"Surplus Return and Surplus Volatility vs. Risk Aversion\")\n", + "plt.show()\n", + "\n", + "\n", + "fig, ax = plt.subplots(figsize=(7, 4))\n", + "plt.scatter(surplus_vols, surplus_returns, c=risk_aversion_values, cmap=\"viridis\")\n", + "plt.xlabel(\"Surplus Volatility\")\n", + "plt.ylabel(\"Surplus Return\")\n", + "plt.title(\"Surplus Return vs. Surplus Volatility\")\n", + "plt.colorbar(label=\"Risk Aversion\")\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "penfolioop (3.13.5)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/index.md b/docs/index.md index e141f69..53e7f3d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -2,15 +2,13 @@ [🌐 **GitHub**](https://github.com/quantfinlib/penfolioop) - -[📖 **Documentation**](https://quantfinlib.github.io/penfolioop/)     [🔗 **API**](penfolioop)     [📖 **Docs**](https://quantfinlib.github.io/penfolioop/) ## Getting Started -* [Basic example with synthetic data](Example_Synthetic_data.html) +* [Basic example with US Asset Classes](Example_US_Asset_Classes.html) ## Documentation diff --git a/docs/resources/benchmarks.csv b/docs/resources/benchmarks.csv new file mode 100644 index 0000000..8a51c92 --- /dev/null +++ b/docs/resources/benchmarks.csv @@ -0,0 +1,302 @@ +Date,Cash,Government Bond,High Yield Corporate Bond,Investment Grade Corporate Bond,Emerging Market Debt Local Currency,Emerging Market Debt Hard Currency,Equity,Real Estate,Liabilities +2000-07-31,,,,,,,,0.0956, +2000-08-31,,,,,,,,-0.0248, +2000-09-30,,,,,,,,0.0361, +2000-10-31,,,,,,,,-0.0508, +2000-11-30,,,,,,,,0.0118, +2000-12-31,,,,,,,,0.0695, +2001-01-31,,,,,,,,0.008199999999999999, +2001-02-28,,,,,,,,-0.0175, +2001-03-31,,,,,,,,0.0053, +2001-04-30,,,,,,,,0.0263, +2001-05-31,,,,,,,,0.0225, +2001-06-30,,,,,,,,0.0576, +2001-07-31,,,,,,,,-0.0229, +2001-08-31,,,,,,,,0.030600000000000002, +2001-09-30,,,,,,,,-0.048499999999999995, +2001-10-31,,,,,,,,-0.0334, +2001-11-30,,,,,,,,0.0581, +2001-12-31,,,,,,,,0.023799999999999998, +2002-01-31,,,,,,,,0.0002, +2002-02-28,,,,,,,,0.018799999999999997, +2002-03-31,,,,,,,,0.059800000000000006, +2002-04-30,,,,,,,,0.0058, +2002-05-31,,,,,,,,0.0166, +2002-06-30,,,,,,,,0.0206, +2002-07-31,,,,,,,,-0.0506, +2002-08-31,,0.0521,,0.0322,,,,0.0034999999999999996, +2002-09-30,,0.0443,,0.0203,,,,-0.045599999999999995, +2002-10-31,,-0.0374,,-0.0079,,,,-0.0458, +2002-11-30,,-0.0083,,0.0096,,,,0.0481, +2002-12-31,,0.0433,,0.0316,,,,0.0054, +2003-01-31,,-0.0031,,0.0017000000000000001,,,,-0.031, +2003-02-28,,0.0315,,0.0255,,,,0.0138, +2003-03-31,,-0.0167,,-0.0011,,,,0.0195, +2003-04-30,,0.0127,,0.0223,,,,0.042199999999999994, +2003-05-31,,0.0638,,0.0334,,,,0.058600000000000006, +2003-06-30,,-0.0203,,-0.0036,,,,0.021099999999999997, +2003-07-31,,-0.10310000000000001,,-0.0553,,,,0.0535, +2003-08-31,,0.021400000000000002,,0.009300000000000001,,,,0.0052, +2003-09-30,,0.0557,,0.04019999999999999,,,,0.031200000000000002, +2003-10-31,,-0.0311,,-0.0129,,,,0.019799999999999998, +2003-11-30,,0.005600000000000001,,0.002,,,,0.043, +2003-12-31,,0.012,,0.0141,,,,0.0358, +2004-01-31,,0.0199,,0.0118,,,,0.04190000000000001, +2004-02-29,,0.0217,,0.0138,,,,0.0207, +2004-03-31,,0.015300000000000001,,0.011000000000000001,,,,0.053399999999999996, +2004-04-30,,-0.0623,,-0.0381,,,,-0.15109999999999998, +2004-05-31,,-0.0048,,-0.0102,,,,0.07, +2004-06-30,,0.0101,,0.005600000000000001,,,,0.0286, +2004-07-31,,0.0181,,0.014199999999999999,,,,0.0015, +2004-08-31,,0.041299999999999996,,0.0281,,,,0.08199999999999999, +2004-09-30,,0.0108,,0.0073,,,,-0.0011, +2004-10-31,,0.0166,,0.0121,,,,0.0479, +2004-11-30,,-0.0246,,-0.012,,,,0.0443, +2004-12-31,,0.0276,,0.015700000000000002,,,,0.051399999999999994, +2005-01-31,,0.0352,,0.0083,,,,-0.0805, +2005-02-28,,-0.013300000000000001,,-0.0084,,,,0.0258, +2005-03-31,,-0.0069,,-0.0151,,,,-0.0216, +2005-04-30,,0.038900000000000004,,0.0165,,,,0.056299999999999996, +2005-05-31,,0.0305,,0.015,,,,0.0356, +2005-06-30,,0.0202,,0.008199999999999999,,,,0.0447, +2005-07-31,,-0.0302,,-0.013999999999999999,,,,0.0663, +2005-08-31,,0.0335,,0.016200000000000003,,,,-0.0421, +2005-09-30,,-0.0359,,-0.018600000000000002,,,,-0.0021, +2005-10-31,,-0.0219,,-0.0158,,,,-0.0245, +2005-11-30,,0.0069,,0.0075,,,,0.0446, +2005-12-31,,0.0285,,0.0109,,,,-0.0032, +2006-01-31,,-0.0125,,-0.0023,,,,0.0698, +2006-02-28,,0.012199999999999999,,0.0034000000000000002,,,,0.0181, +2006-03-31,,-0.0466,,-0.0158,,,,0.0542, +2006-04-30,,-0.0282,,-0.0049,,,,-0.0327, +2006-05-31,,0.0012,,-0.0018,,,,-0.031200000000000002, +2006-06-30,,0.009399999999999999,,0.0013,,,,0.051, +2006-07-31,,0.0209,,0.016399999999999998,,,,0.0297, +2006-08-31,,0.0317,,0.0194,,,,0.031400000000000004, +2006-09-30,,0.0191,,0.011399999999999999,,,,0.0233, +2006-10-31,,0.0084,,0.0077,,,,0.06559999999999999, +2006-11-30,,0.023799999999999998,,0.0146,,,,0.0452, +2006-12-31,,-0.0279,,-0.0098,,,,-0.011899999999999999, +2007-01-31,,-0.0105,,-0.0018,,,,0.0864, +2007-02-28,,0.0353,,0.023399999999999997,,,,-0.029900000000000003, +2007-03-31,,-0.0176,,-0.0066,,,,-0.0248, +2007-04-30,,0.008199999999999999,,0.0054,,,,0.0019, +2007-05-31,,-0.0216,0.0062,-0.0098,,,,0.0005, +2007-06-30,,-0.0105,-0.024300000000000002,-0.0095,,,,-0.08929999999999999, +2007-07-31,,0.0317,-0.045,0.0037,,,,-0.0833, +2007-08-31,,0.018600000000000002,0.0354,0.0055000000000000005,,,,0.0466, +2007-09-30,,0.0027,0.031,0.0118,,,,0.04190000000000001, +2007-10-31,,0.015700000000000002,0.005600000000000001,0.0129,,,,0.0054, +2007-11-30,,0.0536,-0.025,0.0046,,,,-0.0897, +2007-12-31,,-0.005600000000000001,0.0124,-0.0025,,,,-0.0463, +2008-01-31,,0.0204,-0.0206,0.015,,0.0077,,-0.0045000000000000005, +2008-02-29,,-0.0016,-0.0059,-0.0004,,-0.0027999999999999995,,-0.0405, +2008-03-31,,0.0169,-0.0021,-0.0139,,-0.0013,,0.042800000000000005, +2008-04-30,,-0.0232,0.0397,0.0067,,0.0096,,0.058899999999999994, +2008-05-31,,-0.0246,0.005,-0.008,,0.0004,,0.0083, +2008-06-30,,0.024300000000000002,-0.038,-0.0077,,-0.024399999999999998,,-0.1153, +2008-07-31,,-0.0062,-0.0033,-0.0062,,0.0147,,0.0235, +2008-08-31,,0.0315,-0.0001,0.0111,,0.006500000000000001,,0.0206, +2008-09-30,,0.013999999999999999,-0.0745,-0.0823,,-0.0729,,-0.011200000000000002, +2008-10-31,,-0.019799999999999998,-0.17300000000000001,-0.0634,,-0.1526,,-0.312, +2008-11-30,,0.1449,-0.0702,0.0484,,0.0236,,-0.226, +2008-12-31,,0.1341,0.0989,0.11019999999999999,,0.086,,0.1592, +2009-01-31,,-0.1313,0.0587,-0.011200000000000002,,0.001,,-0.16579999999999998, +2009-02-28,,-0.0155,-0.0462,-0.0319,,-0.0174,,-0.1961, +2009-03-31,,0.0412,0.0032,-0.0123,,0.04,,0.044199999999999996, +2009-04-30,,-0.0683,0.0843,0.0241,,0.057,,0.2952, +2009-05-31,,-0.0359,0.052300000000000006,0.0339,,0.042199999999999994,,0.0199, +2009-06-30,,0.0083,0.025699999999999997,0.0276,,0.0079,,-0.0248, +2009-07-31,,0.0042,0.0687,0.0394,,0.0318,,0.1057, +2009-08-31,,0.0233,-0.0006,0.0231,,0.0209,,0.1298, +2009-09-30,,0.0245,0.0596,0.020499999999999997,,0.05140000000000001,,0.061900000000000004, +2009-10-31,,-0.024399999999999998,0.0086,-0.0001,,0.0003,,-0.0518, +2009-11-30,,0.009899999999999999,0.008199999999999999,0.016,,0.0095,,0.0736, +2009-12-31,,-0.0623,0.031200000000000002,-0.0115,,0.0013999999999999998,,0.0684, +2010-01-31,,0.0255,0.0036,0.0108,,0.0013,,-0.0533, +2010-02-28,,0.001,-0.0023,0.0029,,0.0144,,0.0554, +2010-03-31,,-0.0246,0.0269,0.004,,0.0245,,0.0944, +2010-04-30,,0.0333,0.021099999999999997,0.0177,,0.0067,,0.0635, +2010-05-31,,0.0516,-0.0406,-0.0055000000000000005,,-0.0166,,-0.0552, +2010-06-30,,0.0553,0.0168,0.026600000000000002,,0.0204,,-0.0487, +2010-07-31,,-0.006500000000000001,0.0373,0.0204,,0.0436,,0.09570000000000001, +2010-08-31,,0.08070000000000001,-0.0060999999999999995,0.0256,,0.0259,,-0.013000000000000001, +2010-09-30,,-0.0225,0.031200000000000002,0.0092,,0.0151,,0.04650000000000001, +2010-10-31,,-0.0467,0.024700000000000003,-0.0016,,0.0177,,0.0391, +2010-11-30,,-0.0126,-0.0161,-0.0101,,-0.036,,-0.0169, +2010-12-31,,-0.036699999999999997,0.021,-0.0115,,-0.005,,0.045700000000000005, +2011-01-31,,-0.030899999999999997,0.0239,0.0039000000000000003,,-0.0074,,0.037000000000000005, +2011-02-28,,0.0146,0.0131,0.0046,,0.0024,,0.0455, +2011-03-31,,0.0007000000000000001,0.0017000000000000001,-0.0013,,0.012199999999999999,,-0.0121, +2011-04-30,,0.0195,0.0152,0.020099999999999996,,0.0134,,0.0472, +2011-05-31,,0.0371,0.0024,0.0146,,0.015,,0.009399999999999999, +2011-06-30,,-0.0229,-0.0105,-0.009399999999999999,,0.0097,,-0.029500000000000002, +2011-07-31,,0.0453,0.0124,0.0229,,0.0195,,0.0007000000000000001, +2011-08-31,,0.0998,-0.0394,0.008,,0.0048,,-0.0525, +2011-09-30,,0.1234,-0.0354,-0.003,,-0.044500000000000005,,-0.1075, +2011-10-31,,-0.0451,0.0717,0.0248,,0.04569999999999999,,0.1346, +2011-11-30,,0.0305,-0.0292,-0.0262,-0.035,-0.0109,,-0.0375, +2011-12-31,,0.0341,0.036699999999999997,0.0279,-0.0147,0.0119,,0.0404, +2012-01-31,,-0.0027,0.0281,0.026099999999999998,0.0585,0.0162,,0.0662, +2012-02-29,,-0.0235,0.0229,0.0143,0.0209,0.0258,0.049100000000000005,-0.0073, +2012-03-31,,-0.042300000000000004,-0.0064,-0.0104,-0.0174,-0.0003,0.0129,0.045, +2012-04-30,,0.04650000000000001,0.0104,0.0103,0.0064,0.0168,-0.0109,0.025699999999999997, +2012-05-31,,0.08449999999999999,-0.0203,0.0045000000000000005,-0.057,-0.027000000000000003,-0.0857,-0.0421, +2012-06-30,,-0.015300000000000001,0.0259,0.0108,0.0444,0.0387,0.051100000000000007,0.0556, +2012-07-31,,0.0377,0.0187,0.034,0.0198,0.04100000000000001,0.0126,0.0215, +2012-08-31,,-0.0131,0.009899999999999999,-0.0029,0.0022,0.01,0.0253,0.0014000000000000002, +2012-09-30,,-0.0232,0.0111,0.0142,0.022099999999999998,0.0173,0.0273,-0.0099, +2012-10-31,,-0.0012,0.0092,0.0115,0.0094,0.0073,-0.0069,-0.0054, +2012-11-30,,0.0134,0.0047,-0.0012,0.0075,0.012199999999999999,0.0134,-0.0060999999999999995, +2012-12-31,,-0.0216,0.0171,0.0006,0.0174,0.0072,0.0196,0.0305, +2013-01-31,,-0.0386,0.011,-0.0128,0.0043,-0.0188,0.0524,0.0392, +2013-02-28,,0.0129,0.0023,0.0083,-0.0001,-0.0043,0.0017,0.0116, +2013-03-31,,-0.0031,0.0088,-0.001,-0.0043,-0.0087,0.0227,0.03, +2013-04-30,,0.045,0.0196,0.0225,0.025700000000000004,0.0321,0.030899999999999997,0.0565, +2013-05-31,,-0.0677,-0.0097,-0.0319,-0.0529,-0.0412,0.001,-0.0652, +2013-06-30,,-0.0333,-0.0281,-0.0341,-0.0329,-0.0525,-0.0243,-0.0241, +2013-07-31,,-0.0209,0.020099999999999996,0.0098,0.0074,0.0099,0.0525,0.0023, +2013-08-31,,-0.007799999999999999,-0.0093,-0.0049,-0.026699999999999998,-0.028899999999999995,-0.0215,-0.0634, +2013-09-30,,0.0015,0.0109,0.0057,0.0397,0.029300000000000003,0.049699999999999994,0.0329, +2013-10-31,,0.0142,0.0262,0.0191,0.0217,0.0271,0.0387,0.0383, +2013-11-30,,-0.0266,0.0024,-0.0033,-0.0277,-0.0207,0.0181,-0.0473, +2013-12-31,,-0.0197,0.0045,-0.0006999999999999999,-0.0004,0.004,0.021399999999999995,0.0095, +2014-01-31,,0.0597,0.0054,0.0197,-0.0325,-0.0096,-0.0368,0.0358, +2014-02-28,,0.0085,0.021400000000000002,0.013000000000000001,0.0291,0.0338,0.0499,0.046799999999999994, +2014-03-31,,0.0078000000000000005,-0.0002,0.0007000000000000001,0.021099999999999997,0.0121,0.0011,0.0014000000000000002, +2014-04-30,,0.022000000000000002,0.0054,0.012,0.0154,0.0123,0.0104,0.0298, +2014-05-31,,0.0301,0.009000000000000001,0.0163,0.02,0.0318,0.0199,0.0277, +2014-06-30,,-0.002,0.0084,0.001,0.011899999999999999,0.0029,0.018000000000000002,0.010700000000000001, +2014-07-31,,0.006500000000000001,-0.0165,-0.0022,-0.0101,0.0039000000000000003,-0.016,-0.0018, +2014-08-31,,0.0433,0.0158,0.0195,0.0068000000000000005,0.006500000000000001,0.0217,0.034300000000000004, +2014-09-30,,-0.0195,-0.023700000000000002,-0.018000000000000002,-0.047400000000000005,-0.021,-0.027000000000000003,-0.0582, +2014-10-31,,0.028999999999999998,0.0165,0.011699999999999999,0.005600000000000001,0.0179,0.0066,0.0842, +2014-11-30,,0.0292,-0.0102,0.0098,-0.021400000000000002,0.0,0.02,0.0264, +2014-12-31,,0.0322,-0.0103,-0.0005,-0.0359,-0.023799999999999998,-0.0166,0.0076, +2015-01-31,,0.09300000000000001,0.0076,0.0337,0.0053,0.009899999999999999,-0.0181,0.0562, +2015-02-28,,-0.057999999999999996,0.0213,-0.011899999999999999,-0.0148,0.008,0.058600000000000006,-0.025099999999999997, +2015-03-31,,0.012,-0.008100000000000001,0.004,-0.0264,0.0024,-0.0159,0.011000000000000001, +2015-04-30,,-0.0342,0.01,-0.011699999999999999,0.032400000000000005,0.015300000000000001,0.023399999999999997,-0.0487, +2015-05-31,,-0.0181,0.0006,-0.0069,-0.0259,-0.0055,0.0047,-0.0027, +2015-06-30,,-0.0414,-0.0177,-0.0206,-0.0075,-0.0184,-0.0233,-0.0426, +2015-07-31,,0.0373,-0.004699999999999999,0.0059,-0.0321,0.0034999999999999996,0.018500000000000003,0.0475, +2015-08-31,,0.0,-0.0178,-0.0073,-0.0371,-0.0099,-0.0658,-0.0575, +2015-09-30,,0.015,-0.0313,0.0092,-0.0219,-0.0143,-0.0371,0.016200000000000003,0.011604903380789233 +2015-10-31,,-0.0052,0.0324,0.007000000000000001,0.0392,0.0285,0.0798,0.0621,-0.005456883667581902 +2015-11-30,,-0.0087,-0.0239,-0.0013,-0.020099999999999996,0.0015,-0.005,-0.0024,0.0012231774655764305 +2015-12-31,,0.0,-0.0233,-0.0097,-0.0123,-0.015600000000000001,-0.0173,0.0108,-0.005958051163032496 +2016-01-31,,0.052199999999999996,-0.0139,-0.0007000000000000001,-0.0062,-0.0003,-0.0587,-0.0404,0.011290575505723766 +2016-02-29,,0.031400000000000004,0.008100000000000001,0.0106,0.0058,0.019,-0.0069,-0.0079,0.016919074447373506 +2016-03-31,,-0.0001,0.0331,0.0348,0.0839,0.032,0.0677,0.1032,0.02050129410162116 +2016-04-30,,-0.0060999999999999995,0.033,0.016,0.0189,0.0177,0.015600000000000001,-0.0173,0.008125198124697697 +2016-05-31,,0.0092,0.0039000000000000003,-0.0039000000000000003,-0.0436,-0.0026,0.006,0.0233,0.004953869171307579 +2016-06-30,,0.0661,0.006500000000000001,0.0276,0.053899999999999997,0.036000000000000004,-0.0109,0.060899999999999996,0.0246259764332053 +2016-07-31,,0.0217,0.0229,0.014499999999999999,0.0108,0.0147,0.0421,0.037200000000000004,0.009025677328013515 +2016-08-31,,-0.0091,0.021400000000000002,0.0024,0.0031,0.0182,0.0017000000000000001,-0.0337,0.01163522520051008 +2016-09-30,,-0.0177,0.0046,-0.0040999999999999995,0.0139,0.0031,0.0051,-0.0147,-0.008944800535731212 +2016-10-31,,-0.042699999999999995,-0.0012,-0.013000000000000001,-0.0148,-0.014199999999999999,-0.0197,-0.049699999999999994,-0.017455797416220276 +2016-11-30,,-0.077,-0.0043,-0.031,-0.0587,-0.0436,0.0152,-0.0226,-0.03542573026724671 +2016-12-31,,-0.0058,0.0182,0.006500000000000001,0.0089,0.013000000000000001,0.0239,0.041299999999999996,0.006321692582207383 +2017-01-31,,0.0040999999999999995,0.0102,0.0017000000000000001,0.027999999999999997,0.0148,0.023799999999999998,0.002,-0.0045426144519309375 +2017-02-28,,0.0161,0.0152,0.0139,0.018600000000000002,0.0202,0.0278,0.0435,0.015073417206415973 +2017-03-31,,-0.0059,-0.0033,-0.0034000000000000002,0.0125,0.0028000000000000004,0.0109,-0.0139,0.007843203400408116 +2017-04-30,,0.0155,0.01,0.011699999999999999,0.0037,0.0159,0.0148,0.0052,0.011648145668764265 +2017-05-31,,0.0209,0.0098,0.0143,0.0175,0.0083,0.0218,-0.0004,0.016540008940545414 +2017-06-30,,0.004699999999999999,0.0008,0.0037,0.0045000000000000005,-0.0033,0.004,0.02,0.00707785642062686 +2017-07-31,,-0.0070999999999999995,0.0103,0.0075,0.0227,0.0091,0.0241,0.011899999999999999,0.004194196139396311 +2017-08-31,,0.036000000000000004,-0.0017000000000000001,0.0074,0.013000000000000001,0.0179,0.0013,0.0064,0.008770943438659584 +2017-09-30,,-0.0226,0.0079,-0.0007000000000000001,-0.0027,-0.0009,0.0226,-0.0076,0.0007510506719508037 +2017-10-31,,-0.0005,0.0024,0.0037,-0.0276,0.0033,0.018600000000000002,0.0004,0.001995338888356901 +2017-11-30,,0.0079,-0.004,-0.0023,0.0154,0.0001,0.0218,0.025099999999999997,0.0015132207709462886 +2017-12-31,,0.018000000000000002,0.0019,0.012,0.012199999999999999,0.0075,0.0137,-0.0014000000000000002,0.00681261360942087 +2018-01-31,,-0.032799999999999996,0.0043,-0.012199999999999999,0.0444,-0.0015,0.0526,-0.0288,-0.010756430130658967 +2018-02-28,,-0.0311,-0.0097,-0.0207,-0.0125,-0.022400000000000003,-0.04,-0.067,-0.01643023162619217 +2018-03-31,,0.0311,-0.0058,0.0031,0.0083,0.0023,-0.0223,0.0373,0.012285494609759695 +2018-04-30,,-0.0196,0.0074,-0.0123,-0.026600000000000002,-0.0167,0.0124,0.0024,-0.012297996121525379 +2018-05-31,,0.022000000000000002,0.0016,0.005699999999999999,-0.0613,-0.011200000000000002,0.0067,0.0325,0.016822890971879723 +2018-06-30,,0.0021,0.0038,-0.0072,-0.030600000000000002,-0.0146,-0.0005,0.0403,0.002308717848665376 +2018-07-31,,-0.0158,0.0115,0.0116,0.021400000000000002,0.0276,0.0316,0.0086,0.004496461268748808 +2018-08-31,,0.016,0.006999999999999999,0.003,-0.0704,-0.0212,0.013000000000000001,0.0235,0.007505389939859608 +2018-09-30,,-0.0308,0.0051,-0.0034000000000000002,0.023,0.0178,0.0055000000000000005,-0.026099999999999998,-0.006998970266443583 +2018-10-31,,-0.0319,-0.0168,-0.0189,0.0037,-0.0245,-0.0732,-0.0263,-0.01903851450977856 +2018-11-30,,0.018799999999999997,-0.0051,-0.0032,0.016399999999999998,-0.0060999999999999995,0.0115,0.0467,0.005924874570900407 +2018-12-31,,0.056100000000000004,-0.022099999999999998,0.0169,0.0118,0.013999999999999999,-0.0757,-0.077,0.025249790815573103 +2019-01-31,,0.0062,0.0471,0.031400000000000004,0.051699999999999996,0.047599999999999996,0.0788,0.11410000000000001,0.01876812286906948 +2019-02-28,,-0.0126,0.0165,0.0002,-0.0084,0.0097,0.030299999999999997,0.0079,0.0006141732283464485 +2019-03-31,,0.0536,0.0089,0.0292,-0.0225,0.0147,0.0132,0.0416,0.034748182147983364 +2019-04-30,,-0.018500000000000003,0.0126,0.006,-0.0043,0.0015,0.0356,-0.0007000000000000001,0.001902920368920924 +2019-05-31,,0.0674,-0.0143,0.0149,-0.0034000000000000002,0.0034000000000000002,-0.0575,-0.0005,0.031940087346989054 +2019-06-30,,0.0125,0.0253,0.032,0.0605,0.0358,0.066,0.0182,0.025065196334103312 +2019-07-31,,0.0018,0.0054,0.0051,0.0115,0.0125,0.0055000000000000005,0.0178,0.00031880361697189663 +2019-08-31,,0.10859999999999999,0.0044,0.0371,-0.0545,0.0079,-0.02,0.034300000000000004,0.04070484328850399 +2019-09-30,,-0.026600000000000002,0.0026,-0.0087,0.0079,-0.0060999999999999995,0.021400000000000002,0.0183,-0.013997382379279388 +2019-10-31,,-0.009300000000000001,0.0034000000000000002,0.0060999999999999995,0.0227,0.0027,0.0254,0.008100000000000001,-0.0015034453956985772 +2019-11-30,,-0.0049,0.0039000000000000003,0.0039000000000000003,-0.0275,-0.0044,0.0282,-0.0105,0.0036774987415404414 +2019-12-31,,-0.0288,0.0194,0.0032,0.0375,0.0217,0.03,0.009399999999999999,0.003483048228982266 +2020-01-31,,0.0702,-0.0036,0.0263,-0.008,0.0158,-0.0062,0.0147,0.029382629926752557 +2020-02-29,,0.06849999999999999,-0.0168,0.0129,-0.032799999999999996,-0.0108,-0.0839,-0.0698,0.025453707594096153 +2020-03-31,,0.0706,-0.10060000000000001,-0.0692,-0.11019999999999999,-0.1411,-0.1328,-0.2002,-0.017645201189504967 +2020-04-30,,0.011399999999999999,0.0349,0.0545,0.0347,0.023799999999999998,0.1096,0.0911,0.030974815370799824 +2020-05-31,,-0.020499999999999997,0.0403,0.018000000000000002,0.0454,0.064,0.0489,0.018500000000000003,0.011945969861801409 +2020-06-30,0.0001,0.0019,-0.0022,0.021,0.0086,0.034,0.027200000000000002,0.025,0.007708172209332398 +2020-07-31,0.0,0.044199999999999996,0.0473,0.0356,0.0355,0.0392,0.04769999999999999,0.04019999999999999,0.02801124009816003 +2020-08-31,0.0002,-0.045700000000000005,0.0070999999999999995,-0.018600000000000002,-0.0024,0.0038,0.067,0.0023,-0.024489795918367308 +2020-09-30,0.0001,0.0051,-0.012199999999999999,-0.0031,-0.0147,-0.018500000000000003,-0.0347,-0.0229,-0.0036212226357958954 +2020-10-31,0.0,-0.031,0.0027,-0.0027,0.0014000000000000002,-0.0004,-0.0308,-0.0294,-0.010247175051679824 +2020-11-30,0.0,0.0127,0.0366,0.0332,0.0487,0.0407,0.128,0.0855,0.027318273259613335 +2020-12-31,0.0001,-0.0125,0.015700000000000002,0.0039000000000000003,0.0311,0.0187,0.0425,0.025099999999999997,0.00966925604643265 +2021-01-31,0.0,-0.037200000000000004,0.0021,-0.0163,-0.006,-0.013999999999999999,-0.0098,-0.0034999999999999996,-0.023218405137477416 +2021-02-28,-0.0001,-0.057699999999999994,0.0005,-0.0223,-0.0192,-0.0302,0.0263,0.0233,-0.032821416261345826 +2021-03-31,0.0001,-0.0519,0.0037,-0.0175,-0.032799999999999996,-0.0108,0.0333,0.0564,-0.019900760135135198 +2021-04-30,0.0,0.024300000000000002,0.0096,0.010700000000000001,0.0179,0.023799999999999998,0.0467,0.0803,0.004290473017988017 +2021-05-31,-0.0001,0.0005,0.0016,0.0095,0.016399999999999998,0.0113,0.016,0.009899999999999999,0.006368412673141144 +2021-06-30,0.0001,0.0436,0.0116,0.0202,-0.01,0.0086,0.0138,0.0225,0.02915906627541176 +2021-07-31,-0.0001,0.0369,0.0013,0.0146,-0.006,0.004,0.0183,0.046900000000000004,0.014937248158509275 +2021-08-31,0.0001,-0.0026,0.0059,-0.0037,0.008100000000000001,0.0105,0.0245,0.0204,-0.0071469914689081815 +2021-09-30,0.0,-0.029500000000000002,-0.002,-0.0129,-0.0291,-0.023700000000000002,-0.042699999999999995,-0.0567,-0.01829623439438821 +2021-10-31,0.0,0.0235,-0.0033,0.0033,-0.0146,0.0007000000000000001,0.0582,0.0708,0.003026067778789443 +2021-11-30,0.0,0.0292,-0.011000000000000001,-0.0005,-0.031400000000000004,-0.018500000000000003,-0.021099999999999997,-0.0227,0.008140921270240131 +2021-12-31,0.0,-0.0208,0.0208,0.0,0.0034999999999999996,0.0151,0.04190000000000001,0.0943,-0.001696039174679198 +2022-01-31,0.0001,-0.0385,-0.0292,-0.0384,0.0059,-0.0298,-0.0499,-0.0816,-0.04383981605671594 +2022-02-28,0.0,-0.016399999999999998,-0.0069,-0.022099999999999998,-0.0353,-0.0644,-0.0286,-0.0453,-0.018962729350135543 +2022-03-31,0.0002,-0.054299999999999994,-0.0097,-0.0254,-0.021400000000000002,0.0006,0.0254,0.0655,-0.01817359483573866 +2022-04-30,0.0003,-0.0946,-0.039900000000000005,-0.0661,-0.05,-0.061900000000000004,-0.08310000000000001,-0.04,-0.06443014834145055 +2022-05-31,0.0005,-0.0225,0.009000000000000001,0.0125,0.0025,0.0028000000000000004,0.0044,-0.043899999999999995,0.021720741949126987 +2022-06-30,0.0006,-0.0141,-0.07150000000000001,-0.0336,-0.0335,-0.0665,-0.08560000000000001,-0.069,-0.015894903844728026 +2022-07-31,0.001,0.0256,0.0679,0.0414,-0.0073,0.0325,0.07980000000000001,0.08834967,0.034186620141980484 +2022-08-31,0.0018,-0.045700000000000005,-0.0351,-0.0383,0.0019,-0.0144,-0.044800000000000006,-0.05813067,-0.032492931542169146 +2022-09-30,0.0022,-0.0817,-0.038,-0.061,-0.045,-0.0678,-0.09300000000000001,-0.12694917,-0.04921782649411255 +2022-10-31,0.0022,-0.0626,0.030699999999999998,-0.0106,-0.0091,0.0027,0.0735,0.0311901,-0.01774498248106826 +2022-11-30,0.003,0.0729,0.0218,0.0611,0.0666,0.0794,0.07629999999999999,0.06250073,0.05015140355184555 +2022-12-31,0.0037,-0.0276,-0.0116,-0.0085,0.02,0.001,-0.047599999999999996,-0.047780170000000004,-0.03312610471140365 +2023-01-31,0.0033,0.0784,0.0392,0.049699999999999994,0.0285,0.0338,0.0722,0.09947767,0.04234563620890719 +2023-02-28,0.0034999999999999996,-0.0492,-0.016,-0.0409,-0.020099999999999996,-0.025099999999999997,-0.026699999999999998,-0.05992791,-0.029467189447129227 +2023-03-31,0.0043,0.048,0.012,0.0373,0.031400000000000004,0.011200000000000002,0.033,-0.01832856,0.050669200918666446 +2023-04-30,0.0037,0.0040999999999999995,0.0076,0.006999999999999999,0.0069,0.0042,0.0174,0.008775129999999999,0.007959718997798904 +2023-05-31,0.0042,-0.0296,-0.0125,-0.0178,-0.0023,-0.008,-0.009000000000000001,-0.0404199,-0.01407943322025762 +2023-06-30,0.0046,0.0017000000000000001,0.0169,0.0068000000000000005,0.02,0.021099999999999997,0.0603,0.05732592,-0.0020194045034239716 +2023-07-31,0.0040999999999999995,-0.0245,0.0132,0.0021,0.0079,0.019299999999999998,0.0322,0.01740936,-0.004488193768256932 +2023-08-31,0.0045000000000000005,-0.031400000000000004,0.0017000000000000001,-0.011699999999999999,-0.0222,-0.0168,-0.0239,-0.03139776,0.0033951382859978008 +2023-09-30,0.0045000000000000005,-0.0797,-0.013000000000000001,-0.0341,-0.0382,-0.029500000000000002,-0.0437,-0.07308164,-0.02911623124737106 +2023-10-31,0.0044,-0.054000000000000006,-0.013600000000000001,-0.0248,-0.0083,-0.013500000000000002,-0.026099999999999998,-0.03598146,-0.01611753652768333 +2023-11-30,0.0044,0.09880000000000001,0.0471,0.07490000000000001,0.0426,0.0594,0.09230000000000001,0.12256394999999999,0.05442331777297049 +2023-12-31,0.004699999999999999,0.0862,0.0375,0.048,0.0316,0.0495,0.049100000000000005,0.08967012,0.03097486915788017 +2024-01-31,0.0044,-0.022799999999999997,-0.002,-0.0021,-0.0197,-0.0123,0.0092,-0.04993656,0.0011904584753201775 +2024-02-29,0.0042,-0.0223,0.0023,-0.020499999999999997,0.0027,0.009300000000000001,0.045599999999999995,0.020439219999999998,-0.018994961430418678 +2024-03-31,0.0045000000000000005,0.0087,0.0111,0.015300000000000001,-0.0007000000000000001,0.020499999999999997,0.0323,0.01876616,0.007935669779581378 +2024-04-30,0.0043,-0.0639,-0.0102,-0.032400000000000005,-0.0159,-0.022099999999999998,-0.0388,-0.08114210999999999,-0.025029490940987942 +2024-05-31,0.0048037,0.029233600000000002,0.011200000000000002,0.0219,0.0187,0.018600000000000002,0.0484,0.04845275,0.01068185316299819 +2024-06-30,0.00408999,0.01731641,0.0095,0.006,-0.012199999999999999,0.0063,0.0189,0.019985450000000002,0.00896990740740744 +2024-07-31,0.00447175,0.03594381,0.0207,0.0275,0.0204,0.019299999999999998,0.0177,0.07454046,0.027778197819479544 +2024-08-31,0.00480742,0.02228614,0.0154,0.0165,0.0258,0.024700000000000003,0.027000000000000003,0.054497489999999996,0.0015049344485285054 +2024-09-30,0.00415748,0.01885231,0.0161,0.0206,0.0246,0.0192,0.0178,0.03183227,0.018205461638491682 +2024-10-31,0.00400313,-0.054154799999999996,-0.0060999999999999995,-0.0305,-0.0359,-0.019299999999999998,-0.0199,-0.03593363,-0.0341713102783332 +2024-11-30,0.00389021,0.01882417,0.011899999999999999,0.016399999999999998,-0.0076,0.0124,0.046799999999999994,0.040733170000000006,0.025910593561068618 +2024-12-31,0.00388799,-0.06165729,-0.0049,-0.026000000000000002,-0.0132,-0.0155,-0.0273,-0.08226570999999999,-0.028712154135882906 +2025-01-31,0.00367686,0.00456097,0.0141,0.0053,0.0167,0.0131,0.0344,0.01891405,0.003592725104353045 +2025-02-28,0.0032461400000000002,0.05598628,0.0070999999999999995,0.0229,0.0059,0.0151,-0.0046,0.03788666,0.0237435342591632 +2025-03-31,0.0033563300000000003,-0.01261172,-0.0105,-0.0036,0.0126,-0.008100000000000001,-0.0435,-0.023737539999999998,-0.004097114646822941 +2025-04-30,0.0034971600000000005,-0.01442555,0.0007000000000000001,-0.0024,0.027000000000000003,-0.001,0.0076,-0.02038622,-0.0028403738859501537 +2025-05-31,0.0036970700000000002,-0.03110005,0.0171,0.0006,0.0123,0.0098,0.0593,0.00839708,0.0007182644385810288 +2025-06-30,0.00341547,0.026495039999999997,0.018600000000000002,0.0217,0.031,0.024700000000000003,0.0441,0.00732561,0.017797243258287132 +2025-07-31,0.00361531,-0.01048409,0.0034999999999999996,0.0003,-0.0111,0.011699999999999999,0.01,0.0012509899999999998,-0.0018572374672465308 diff --git a/pyproject.toml b/pyproject.toml index 22ae509..0f7eea5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,6 +6,18 @@ readme = "README.md" requires-python = ">=3.11" dependencies = ["numpy", "pandas", "cvxpy","pydantic"] +[build-system] +requires = ["uv_build>=0.8.13,<0.9.0"] +build-backend = "uv_build" + +[tool.uv] +package = true + +[tool.uv.build-backend] +module-name = "penfolioop" +module-root = "" + + [project.optional-dependencies] dev = [ @@ -15,6 +27,8 @@ dev = [ docs = [ "pdoc3", "matplotlib", + "plotly", + "seaborn", "nbformat==5.4.0", "ipython", "notebook", diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 0000000..1eb9671 --- /dev/null +++ b/ruff.toml @@ -0,0 +1,75 @@ +# Maximum line length for the entire project +line-length = 120 +# Target Python version +target-version = "py311" + +[lint] +# Available rule sets in Ruff: +# A: flake8-builtins - Check for python builtins being used as variables or parameters +# B: flake8-bugbear - Find likely bugs and design problems +# C4: flake8-comprehensions - Helps write better list/set/dict comprehensions +# D: pydocstyle - Check docstring style +# E: pycodestyle errors - PEP 8 style guide +# ERA: eradicate - Find commented out code +# F: pyflakes - Detect logical errors +# I: isort - Sort imports +# N: pep8-naming - Check PEP 8 naming conventions +# PT: flake8-pytest-style - Check pytest best practices +# RUF: Ruff-specific rules +# S: flake8-bandit - Find security issues +# SIM: flake8-simplify - Simplify code +# T10: flake8-debugger - Check for debugger imports and calls +# UP: pyupgrade - Upgrade syntax for newer Python +# W: pycodestyle warnings - PEP 8 style guide warnings +# ANN: flake8-annotations - Type annotation checks +# ARG: flake8-unused-arguments - Unused arguments +# BLE: flake8-blind-except - Check for blind except statements +# COM: flake8-commas - Trailing comma enforcement +# DTZ: flake8-datetimez - Ensure timezone-aware datetime objects +# EM: flake8-errmsg - Check error message strings +# FBT: flake8-boolean-trap - Boolean argument checks +# ICN: flake8-import-conventions - Import convention enforcement +# ISC: flake8-implicit-str-concat - Implicit string concatenation +# NPY: NumPy-specific rules +# PD: pandas-specific rules +# PGH: pygrep-hooks - Grep-based checks +# PIE: flake8-pie - Miscellaneous rules +# PL: Pylint rules +# Q: flake8-quotes - Quotation style enforcement +# RSE: flake8-raise - Raise statement checks +# RET: flake8-return - Return statement checks +# SLF: flake8-self - Check for self references +# TCH: flake8-type-checking - Type checking imports +# TID: flake8-tidy-imports - Import tidying +# TRY: flake8-try-except-raise - Try/except/raise checks +# YTT: flake8-2020 - Python 2020+ compatibility + +# Selected rule sets to enforce: +# D: pydocstyle - Check docstring style +# E: pycodestyle errors - PEP 8 style guide +# F: pyflakes - Detect logical errors +# I: isort - Sort imports +# N: pep8-naming - Check PEP 8 naming conventions +# W: pycodestyle warnings - PEP 8 style guide warnings +# UP: pyupgrade - Upgrade syntax for newer Python +select = ["D", "E", "F", "I", "N", "W", "UP", "PD"] + +[lint.pydocstyle] +convention = "numpy" # Use NumPy docstring style + +# Formatting configuration +[format] +# Use double quotes for strings +quote-style = "double" +# Use spaces for indentation +indent-style = "space" +# Automatically detect and use the appropriate line ending +line-ending = "auto" + +# File-specific rule exceptions +[lint.per-file-ignores] +"build/**/*.py" = ["ALL"] +"tests/**/*.py" = ["S101"] # Allow assert statements in tests +"docs/examples/*.ipynb" = ["N803", "S101"] # Allow non-lowercase variable names (N803) + + # and assert statements in notebook files \ No newline at end of file diff --git a/tests/test_constraints.py b/tests/test_constraints.py index 45d2004..6f7167c 100644 --- a/tests/test_constraints.py +++ b/tests/test_constraints.py @@ -7,8 +7,8 @@ import cvxpy as cp -VALID_OPERATORS = ['==', '>=', '<=', '>', '<'] -INVALID_OPERATORS = ['!=', '==>', '>=<', '>>', '<<', 'gt', 'lt', 'eq', 'geq', 'leq'] +VALID_OPERATORS = ['==', '>=', '<='] +INVALID_OPERATORS = ['!=', '==>', '>=<', '>>', '<<', 'gt', 'lt', 'eq', 'geq', 'leq', '>', '<'] OPERATORS = VALID_OPERATORS + INVALID_OPERATORS @@ -275,12 +275,12 @@ def test_generate_scipy_constraints(): }, { 'left_indices': ['asset_0'], - 'operator': '>', + 'operator': '>=', 'right_value': 0.3 }, { 'left_indices': ['asset_1'], - 'operator': '<', + 'operator': '<=', 'right_value': 0.3 } ] From 96bb6f86300373705ef10b91b2c7f680598e0c7f Mon Sep 17 00:00:00 2001 From: mjvakili Date: Wed, 27 Aug 2025 15:54:48 +0200 Subject: [PATCH 3/3] updated constraints --- penfolioop/constraints.py | 117 +++++++++++++++++++++++++++++++++----- penfolioop/optimizers.py | 75 ++++++++++++++++++++---- penfolioop/portfolio.py | 81 +++++++++++++++++++++++--- 3 files changed, 240 insertions(+), 33 deletions(-) diff --git a/penfolioop/constraints.py b/penfolioop/constraints.py index 2c09785..d157b58 100644 --- a/penfolioop/constraints.py +++ b/penfolioop/constraints.py @@ -5,6 +5,99 @@ This module provides functionality for generating optimization constraints for portfolio management, including asset weight constraints and other portfolio-specific limitations. + + +User Constraints +---------------- + +Users of `penfolioop` can define additional constraints on the asset classes in their portfolio. + +A valid constraints is a list of dictionaries, where each dictionary represents a constraint. + +Each constraint is a python dictionary and must include the following two keys: + +- `left_indices`: A list of asset names on the left-hand side of the constraint. +- `operator`: The comparison operator for the constraint (e.g., "==", "<=", ">="). + +Additionally, each dictionary must include ***one and only one*** of the following two keys: + +- `right_value`: A numeric value for the right-hand side of the constraint (optional). +- `right_indices`: A list of asset names on the right-hand side of the constraint (optional). + +Here are some valid constraints: + +```python +[ + { + "left_indices": ["asset_1", "asset_2"], + "operator": ">=", + "right_value": 0.5 + }, + { + "left_indices": ["asset_3"], + "operator": "==", + "right_indices": ["asset_4"] + } +] +``` + +In this case, the constraints specify that the combined weight of `asset_1` and `asset_2` +must be at least 0.5, while the weight of `asset_3` must be equal to the weight of `asset_4`. + +or + +```python +[ + { + "left_indices": ["asset_1", "asset_2", "asset_6"], + "operator": "<=", + "right_value": ["asset_4"] + }, + { + "left_indices": ["asset_3", "asset_5"], + "operator": ">=", + "right_value": 0.1 + } +] +``` + +In this case, the constraints specify that the combined weight of `asset_1`, `asset_2`, +and `asset_6` must be less than or equal to the weight of `asset_4`, +while the combined weight of `asset_3` and `asset_5` must be greater than or equal to 0.1. + +When the value corresponding to the `left_indices` is a list of assets, +the constraint is applied to the combined weight of those assets. +When the value of `left_indices` is a single asset, the constraint is applied to that asset's weight. + +The only allowed values for `operator` are: + +- `==`: Equal to +- `<=`: Less than or equal to +- `>=`: Greater than or equal to + +The permitted values for `right_value` and `right_indices` are as follows: + +- `right_value`: A numeric value which constrains the combined weight of the assets in `left_indices`. +- `right_indices`: A list of asset names whose combined weight is used for the constraint. + + +Module content +-------------- + + +- `AssetConstraint` + +This class is used to validate the constraints defined by the user. + + - `generate_constraints` + + Converts the user defined constraints into CVXPY constraints. + + - `generate_scipy_constraints` + + Converts the user defined constraints into constraints that can be used by + `scipy.optimize.minimize` function. + """ from __future__ import annotations @@ -57,17 +150,17 @@ def validate_left_indices(cls, v: list[str]) -> list[str]: # Validator for the operator @field_validator("operator") @classmethod - def validate_operator(cls, v: Literal["==", "<=", ">=", "<", ">"]) -> Literal["==", "<=", ">=", "<", ">"]: + def validate_operator(cls, v: Literal["==", "<=", ">="]) -> Literal["==", "<=", ">="]: """Ensure operator is one of the allowed values. Parameters ---------- - v : Literal["==", "<=", ">=", "<", ">"] + v : Literal["==", "<=", ">="] The operator to validate. Returns ------- - Literal["==", "<=", ">=", "<", ">"] + Literal["==", "<=", ">="] Validated operator. Raises @@ -76,7 +169,7 @@ def validate_operator(cls, v: Literal["==", "<=", ">=", "<", ">"]) -> Literal["= If the operator is not one of the allowed values. """ - allowed_operators = {"==", "<=", ">=", "<", ">"} + allowed_operators = {"==", "<=", ">="} if v not in allowed_operators: msg = f"Operator must be one of {allowed_operators}, got {v}" raise ValueError(msg) @@ -135,7 +228,7 @@ def validate_right_value(cls, v: float | None) -> float | None: If right_value is not None and is not a number or is negative. """ - if v is not None and not isinstance(v, (int, float)): + if v is not None and not isinstance(v, int | float): msg = "right_value must be a number if provided" raise ValueError(msg) if v is not None and (v < 0 or v > 1): @@ -262,7 +355,7 @@ def _process_right_side_of_constraint( def _process_operator( - operator: Literal["==", "<=", ">=", "<", ">"], + operator: Literal["==", "<=", ">="], left_expr: cp.Expression, right_expr: cp.Expression | float, ) -> cp.Constraint: @@ -270,7 +363,7 @@ def _process_operator( Parameters ---------- - operator : Literal["==", "<=", ">=", "<", ">"] + operator : Literal["==", "<=", ">="] The operator to apply to the left and right expressions. left_expr : cp.Expression @@ -296,10 +389,6 @@ def _process_operator( return left_expr <= right_expr if operator == ">=": return left_expr >= right_expr - if operator == "<": - return left_expr < right_expr - if operator == ">": - return left_expr > right_expr msg = f"Unknown operator: {operator}" raise ValueError(msg) @@ -390,16 +479,16 @@ def constraint_fun(x, constraint=constraint): # noqa: ANN001, ANN202 right_value = sum(x[asset_indices[idx]] for idx in constraint["right_indices"]) # Return constraint value based on operator - if constraint["operator"] in {"<=", "<"}: + if constraint["operator"] == "<=": return right_value - left_value - if constraint["operator"] in {">=", ">"}: + if constraint["operator"] == ">=": return left_value - right_value if constraint["operator"] == "==": return left_value - right_value msg = f"Unsupported operator: {constraint['operator']}" raise ValueError(msg) - constraint_type = "ineq" if constraint["operator"] in {"<=", ">=", ">", "<"} else "eq" + constraint_type = "ineq" if constraint["operator"] in {"<=", ">="} else "eq" scipy_constraints.append({ "type": constraint_type, "fun": constraint_fun, diff --git a/penfolioop/optimizers.py b/penfolioop/optimizers.py index dc7520d..1ce5d74 100644 --- a/penfolioop/optimizers.py +++ b/penfolioop/optimizers.py @@ -103,7 +103,8 @@ """ from __future__ import annotations -from typing import TYPE_CHECKING, Any +from functools import wraps +from typing import TYPE_CHECKING, Any, Callable import cvxpy as cp import numpy as np @@ -115,6 +116,56 @@ from penfolioop.portfolio import Portfolio +MINISCULE_WEIGHT_THRESHOLD = 1e-6 + + +def _clean_up_weights(weights: np.ndarray) -> np.ndarray: + """Clean up the weights by ensuring they sum to 1 and the last weight is -1. + + Parameters + ---------- + weights : np.ndarray + The weights to clean up. + + Returns + ------- + np.ndarray + The cleaned-up weights. + """ + weights = weights.copy() + # set small negative weights to zero + weights[weights < 0] = 0 + # set miniscule weights to zero + weights[np.abs(weights) < MINISCULE_WEIGHT_THRESHOLD] = 0 + # make sure the asset weights sum to 1 + weights[:-1] /= weights[:-1].sum() + # make sure the liability weight is -1 + weights[-1] = -1 + return weights + + +def clean_up_weight_decorator(func: Callable[..., np.ndarray]) -> Callable[..., np.ndarray]: + """Make a decorator to clean up weights after optimization. + + Parameters + ---------- + func : callable + The optimization function to decorate. + + Returns + ------- + callable + The decorated optimization function. + """ + + @wraps(func) + def wrapper(*args, **kwargs): # noqa: ANN002, ANN003, ANN202 + # Call the original optimization function + result = func(*args, **kwargs) + return _clean_up_weights(result) + return wrapper + + def _negative_surplus_sharp_ratio_objective( weights: np.ndarray, expected_returns: np.ndarray, covariance_matrix: np.ndarray, ) -> float: @@ -143,6 +194,7 @@ def _negative_surplus_sharp_ratio_objective( return -surplus_return / np.sqrt(surplus_variance) +@clean_up_weight_decorator def max_surplus_sharp_ratio_optimizer( portfolio: Portfolio, asset_constraints: list[dict[str, Any]] | None = None, ) -> np.ndarray: @@ -187,8 +239,8 @@ def max_surplus_sharp_ratio_optimizer( If the `asset_constraints` parameter is provided by the user, the optimization will include these additional constraints. See `penfolioop.constraints` for more details. A valid `asset_constraints` must fullfill a set of properties which are validated - by the `penfolioop.constraints.AssetConstraints` class. Users are encouraged to consult with the `penfolioop.constraints` - module and in particular the `penfolioop.constraints.AssetConstraints` class for more information on how to properly define asset constraints. + by the `penfolioop.constraints.AssetConstraint` class. Users are encouraged to consult with the `penfolioop.constraints` + module and in particular the `penfolioop.constraints.AssetConstraint` class for more information on how to properly define asset constraints. Parameters ---------- @@ -242,6 +294,7 @@ def max_surplus_sharp_ratio_optimizer( return result.x +@clean_up_weight_decorator def surplus_mean_variance_optimizer( portfolio: Portfolio, risk_aversion: float = 1., asset_constraints: list[dict[str, Any]] | None = None, ) -> np.ndarray: @@ -286,8 +339,8 @@ def surplus_mean_variance_optimizer( If the `asset_constraints` parameter is provided by the user, the optimization will include these additional constraints. See `penfolioop.constraints` for more details. A valid `asset_constraints` must fullfill a set of properties which are validated - by the `penfolioop.constraints.AssetConstraints` class. Users are encouraged to consult with the `penfolioop.constraints` - module and in particular the `penfolioop.constraints.AssetConstraints` class for more information on how to properly define asset constraints. + by the `penfolioop.constraints.AssetConstraint` class. Users are encouraged to consult with the `penfolioop.constraints` + module and in particular the `penfolioop.constraints.AssetConstraint` class for more information on how to properly define asset constraints. Parameters @@ -341,6 +394,7 @@ def surplus_mean_variance_optimizer( return weights.value +@clean_up_weight_decorator def max_surplus_return_optimizer( portfolio: Portfolio, asset_constraints: list[dict[str, Any]] | None = None, @@ -393,8 +447,8 @@ def max_surplus_return_optimizer( If the `asset_constraints` parameter is provided by the user, the optimization will include these additional constraints. See `penfolioop.constraints` for more details. A valid `asset_constraints` must fulfill a set - of properties which are validated by the `penfolioop.constraints.AssetConstraints` class. Users are encouraged - to consult with the `penfolioop.constraints` module and in particular the `penfolioop.constraints.AssetConstraints` + of properties which are validated by the `penfolioop.constraints.AssetConstraint` class. Users are encouraged + to consult with the `penfolioop.constraints` module and in particular the `penfolioop.constraints.AssetConstraint` class for more information on how to properly define asset constraints. Parameters @@ -448,6 +502,7 @@ class for more information on how to properly define asset constraints. return weights.value +@clean_up_weight_decorator def min_surplus_variance_optimizer( portfolio: Portfolio, asset_constraints: list[dict[str, Any]] | None = None, @@ -502,9 +557,9 @@ def min_surplus_variance_optimizer( If the `asset_constraints` parameter is provided by the user, the optimization will include these additional constraints. See `penfolioop.constraints` for more details. A valid `asset_constraints` - must fullfill a set of properties which are validated by the `penfolioop.constraints.AssetConstraints` class. + must fullfill a set of properties which are validated by the `penfolioop.constraints.AssetConstraint` class. Users are encouraged to consult with the `penfolioop.constraints` module and in particular the - `penfolioop.constraints.AssetConstraints` class for more information on how to properly define asset constraints. + `penfolioop.constraints.AssetConstraint` class for more information on how to properly define asset constraints. Parameters @@ -635,7 +690,7 @@ def efficient_frontier( weights = min_surplus_variance_optimizer( portfolio=portfolio, asset_constraints=asset_constraints, - surplus_return_lower_limit=target_return + surplus_return_lower_limit=target_return, ) weights_placeholder.append(weights) surplus_return_place_holder.append(portfolio.surplus_return(weights)) diff --git a/penfolioop/portfolio.py b/penfolioop/portfolio.py index 3a1629f..ba86766 100644 --- a/penfolioop/portfolio.py +++ b/penfolioop/portfolio.py @@ -1,10 +1,54 @@ # Copyright (c) 2025, Mohammadjavad Vakili -"""Portfolio optimization module. +r"""Portfolio optimization module. This module provides: -- Portfolio: A dataclass representing a portfolio of assets and liabilities - with methods for calculating returns, variance, and surplus metrics. + +- `Portfolio`: A class representing a portfolio of assets and liabilities + + +As a convention, we use the following notation: + +- $\mathbf{R}$: The vector of expected returns of assets and liabilities. +This is the `expected_returns` parameter needed to instantiate the `Portfolio` class. + +$$ +\mathbf{R} = \begin{bmatrix} r_1 \\ r_2 \\ \vdots \\ r_n \\ r_L \end{bmatrix}, +$$ + +where $r_1, r_2, \ldots, r_n$ are the expected returns of the assets and $r_L$ is the expected return of the liabilities. +The last element of $\mathbf{R}$ always corresponds to the liabilities. + + +- $\Sigma$: The total covariance matrix consisting of the covariance matrix of asset returns, the +covariance between asset returns and liability returns, and the variance of liability returns. +This is the `covariance_matrix` parameter needed to instantiate the `Portfolio` class. + +$$ +\mathbf{\Sigma} = \begin{bmatrix} + \Sigma_{A} , \Sigma_{AL} \\ + \Sigma_{AL} , \sigma^{2}_{L} +\end{bmatrix}, +$$ + +where \( \Sigma_{A} \) is a covariance matrix of the asset returns, +\( \Sigma_{AL} \) is the covariance between the assets and liabilities, +and \( \sigma^{2}_{L} \) is the variance of the liabilities. + + +- $\mathbf{W}$: The vector of weights of the assets and liabilities in the portfolio it is the output of the optimizers. +The last element corresponds to the liability and it is always set to -1: + +$$ +\mathbf{W} = \begin{bmatrix} + w_1 \\ + w_2 \\ + \vdots \\ + w_n \\ + -1 +\end{bmatrix}, +$$ +where \( w_1, w_2, \ldots, w_n \) are the weights of the assets and -1 is the weight of the liabilities. """ from typing import Self @@ -171,7 +215,7 @@ def validate_weights(self, weights: np.ndarray) -> None: or if the last weight is not -1 (for liabilities). """ - if len(weights) != self.n_assets: + if len(weights) != self.n_assets + 1: msg = "Weights must match the number of assets." raise ValueError(msg) if not np.isclose(np.sum(weights), 0): @@ -208,7 +252,15 @@ def surplus_return(self, weights: np.ndarray) -> float: return float(weights.T @ self.expected_returns) def surplus_variance(self, weights: np.ndarray) -> float: - """Calculate the surplus variance of the portfolio given the asset weights. + r"""Calculate the surplus variance of the portfolio given the asset weights. + + The surplus variance is defined as the variance of the surplus return. + + $$ + \sigma^{2}_{s} = \mathbf{W}^{T} \mathbf{\Sigma} \mathbf{W} = \sum_{i=1}^{n_{assets}} \sum_{j=1}^{n_{assets}} w_{i} w_{j} \big(\Sigma_{A}\big)_{ij} - 2 \sum_{i=1}^{n_{assets}} w_{i} \big(\Sigma_{AL}\big)_{i} + \sigma^{2}_{L} + $$ + where \( \mathbf{\Sigma} \) is the covariance matrix of the asset returns and liabilities, + \( \mathbf{\Sigma}_{A} \) is the covariance matrix of the asset returns, \( \mathbf{\Sigma}_{AL} \) is the covariance vector between the assets and liabilities, and \( \sigma^{2}_{L} \) is the variance of the liabilities. Parameters ---------- @@ -220,12 +272,18 @@ def surplus_variance(self, weights: np.ndarray) -> float: float The surplus variance of the portfolio. - """ + """ # noqa: E501 self.validate_weights(weights) return float(weights.T @ self.covariance_matrix @ weights) def portfolio_return(self, weights: np.ndarray) -> float: - """Calculate the return of the portfolio given the asset weights. + r"""Calculate the return of the portfolio given the asset weights. + + The return of the portfolio is defined as the weighted sum of the returns of the assets. + + $$ + R_p = \sum_{i=1}^{n_{}} w_i R_i = \mathbf{W}_{assets}^{T} \mathbf{R}_{assets}, + $$ Parameters ---------- @@ -242,7 +300,13 @@ def portfolio_return(self, weights: np.ndarray) -> float: return float(weights[:-1].T @ self.expected_returns[:-1]) def portfolio_variance(self, weights: np.ndarray) -> float: - """Calculate the variance of the portfolio given the weights. + r"""Calculate the variance of the portfolio given the weights. + + The variance of the portfolio is defined as. + + $$ + \sigma^{2}_{p} = \mathbf{W}_{assets}^{T} \mathbf{\Sigma}_{A} \mathbf{W}_{assets} + $$ Parameters ---------- @@ -257,4 +321,3 @@ def portfolio_variance(self, weights: np.ndarray) -> float: """ self.validate_weights(weights) return float(weights[:-1].T @ self.covariance_matrix[:-1, :-1] @ weights[:-1]) -