From f081b263db9619aca15735a1fd0c10d18b13b40d Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Tue, 21 Aug 2018 12:08:39 +0100 Subject: [PATCH 01/36] touchup images --- media/conceptual_flowchart_v1-grey.png | Bin 204951 -> 204525 bytes media/conceptual_flowchart_v1.png | Bin 205123 -> 204700 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/media/conceptual_flowchart_v1-grey.png b/media/conceptual_flowchart_v1-grey.png index 95f9f8f2126efdf04681a48174203c420fe45071..be6cbbf4662eab41d76a4f04b7491264faa96661 100644 GIT binary patch delta 71520 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 delta 71723 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≦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 v_SobVgfBN~3hHfb_zGDBa=G-LW9G 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 delta 84722 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 M<3t^V1Jx2_@H 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 Date: Sun, 26 Aug 2018 14:04:36 +0100 Subject: [PATCH 02/36] updated versioning --- README.md | 2 +- docs/conf.py | 7 ++++--- docs/index.rst | 2 +- setup.py | 4 ++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index da6571e2..a42e108d 100755 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ python   - pypi   python   - python   Date: Sun, 26 Aug 2018 14:04:56 +0100 Subject: [PATCH 03/36] test semicovariance --- tests/test_risk_models.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/tests/test_risk_models.py b/tests/test_risk_models.py index 7bd58920..d00dee8d 100644 --- a/tests/test_risk_models.py +++ b/tests/test_risk_models.py @@ -59,6 +59,29 @@ def test_sample_cov_frequency(): pd.testing.assert_frame_equal(S / 126, S2) +def test_semicovariance(): + df = get_data() + S = risk_models.semicovariance(df) + assert S.shape == (20, 20) + assert S.index.equals(df.columns) + assert S.index.equals(S.columns) + assert S.notnull().all().all() + S2 = risk_models.semicovariance(df, frequency=2) + pd.testing.assert_frame_equal(S / 126, S2) + + +def test_semicovariance_benchmark(): + df = get_data() + # When the benchmark is very negative, the cov matrix should be zeroes + S_negative_benchmark = risk_models.semicovariance(df, benchmark=-0.5) + np.testing.assert_allclose(S_negative_benchmark, 0, atol=1e-4) + + # Increasing the benchmark should increase covariances on average + S = risk_models.semicovariance(df, benchmark=0) + S2 = risk_models.semicovariance(df, benchmark=1) + assert S2.sum().sum() > S.sum().sum() + + def test_min_cov_det(): df = get_data() S = risk_models.min_cov_determinant(df, random_state=8) @@ -93,7 +116,8 @@ def test_shrunk_covariance_extreme_delta(): cs = risk_models.CovarianceShrinkage(df) # if delta = 0, no shrinkage occurs shrunk_cov = cs.shrunk_covariance(0) - np.testing.assert_array_almost_equal(shrunk_cov.values, risk_models.sample_cov(df)) + np.testing.assert_array_almost_equal( + shrunk_cov.values, risk_models.sample_cov(df)) # if delta = 1, sample cov does not contribute to shrunk cov shrunk_cov = cs.shrunk_covariance(1) N = df.shape[1] From 7d1b5cfeb5ad12fe3de19ab6fe8c3e92a6af2716 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 26 Aug 2018 14:05:27 +0100 Subject: [PATCH 04/36] semicov, expcov (minus docs) --- pypfopt/risk_models.py | 64 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/pypfopt/risk_models.py b/pypfopt/risk_models.py index 7bf41c8d..25d14994 100644 --- a/pypfopt/risk_models.py +++ b/pypfopt/risk_models.py @@ -9,8 +9,10 @@ **Currently implemented:** - sample covariance +- semicovariance +- exponentially weighted covariance - mininum covariance determinant -- Shrunk covariance matrices: +- shrunk covariance matrices: - manual shrinkage - Ledoit Wolf shrinkage @@ -43,6 +45,63 @@ def sample_cov(prices, frequency=252): return daily_returns.cov() * frequency +def semicovariance(prices, benchmark=0, frequency=252): + """ + Estimate the semicovariance matrix, i.e the covariance given that + the returns are less than the benchmark. + + .. semicov = E([min(r_i - B, 0)] . [min(r_j - B, 0)]) + + :param prices: adjusted closing prices of the asset, each row is a date + and each column is a ticker/id. + :type prices: pd.DataFrame + :param benchmark: the benchmark return, defaults to 0. + :type benchmark: float + :param frequency: number of time periods in a year, defaults to 252 (the number + of trading days in a year) + :type frequency: int, optional + :return: semicovariance matrix + :rtype: pd.DataFrame + """ + if not isinstance(prices, pd.DataFrame): + warnings.warn("prices are not in a dataframe", RuntimeWarning) + prices = pd.DataFrame(prices) + daily_returns = prices.pct_change().dropna(how="all") + drops = np.fmin(daily_returns - benchmark, 0) + return drops.cov() * frequency + + +def _pair_exp_cov(X, Y, alpha=0.5): + # TODO documentation + # alpha is the span parameter in terms of the length of the data. + # higher alpha tends towards the simple mean. + # alpha * T = 1 sets the mean = the last result + # recommended alpha = 0.5 + covariation = (X - X.mean()) * (Y - Y.mean()) + T = covariation.notnull().sum() + return covariation.ewm(span=alpha * T).mean()[-1] + + +def exp_cov(prices, alpha=0.5, frequency=252): + # TODO documentation + if not isinstance(prices, pd.DataFrame): + warnings.warn("prices are not in a dataframe", RuntimeWarning) + prices = pd.DataFrame(prices) + assets = prices.columns + daily_returns = prices.pct_change().dropna(how="all") + N = len(assets) + + S = np.zeros((N, N)) + for i in range(N): + for j in range(i, N): + S[i, j] = S[j, i] = _pair_exp_cov( + daily_returns.iloc[:, i], + daily_returns.iloc[:, j], + alpha + ) + return pd.DataFrame(S * frequency, columns=assets, index=assets) + + def min_cov_determinant(prices, frequency=252, random_state=None): """ Calculate the minimum covariance determinant, an estimator of the covariance matrix @@ -110,7 +169,8 @@ def format_and_annualise(self, raw_cov_array): """ assets = self.X.columns return ( - pd.DataFrame(raw_cov_array, index=assets, columns=assets) * self.frequency + pd.DataFrame(raw_cov_array, index=assets, + columns=assets) * self.frequency ) def shrunk_covariance(self, delta=0.2): From 630bf15d1ca65de80cc046bad91c531d2e6c1e4c Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Tue, 11 Sep 2018 16:22:03 +0100 Subject: [PATCH 05/36] bug: volatility was actually std. fixed --- pypfopt/objective_functions.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pypfopt/objective_functions.py b/pypfopt/objective_functions.py index 6078523f..9dd92a74 100644 --- a/pypfopt/objective_functions.py +++ b/pypfopt/objective_functions.py @@ -14,9 +14,11 @@ - negative mean return - (regularised) negative Sharpe ratio - (regularised) volatility +- CVaR (expected shortfall) """ import numpy as np +import scipy.stats def negative_mean_return(weights, expected_returns): @@ -74,4 +76,5 @@ def volatility(weights, cov_matrix, gamma=0): :rtype: float """ L2_reg = gamma * (weights ** 2).sum() - return np.sqrt(np.dot(weights.T, np.dot(cov_matrix, weights))) + L2_reg + portfolio_volatility = np.dot(weights.T, np.dot(cov_matrix, weights)) + return portfolio_volatility + L2_reg From 9d988505050542fe1acbb02a285202ffaa075f44 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Tue, 11 Sep 2018 16:22:49 +0100 Subject: [PATCH 06/36] first commit for CVaR opt --- pypfopt/value_at_risk.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 pypfopt/value_at_risk.py diff --git a/pypfopt/value_at_risk.py b/pypfopt/value_at_risk.py new file mode 100644 index 00000000..4479e52c --- /dev/null +++ b/pypfopt/value_at_risk.py @@ -0,0 +1,33 @@ +# import warnings +# import numpy as np +# import pandas as pd +from .base_optimizer import BaseOptimizer +from . import objective_functions +import noisyopt + + +class CVAROpt(BaseOptimizer): + + def __init__(self, returns, weight_bounds=(0, 1)): + # TODO documentation and type checks + self.returns = returns + self.tickers = returns.columns + super().__init__(returns.shape[1], weight_bounds) + + def min_cvar(self, s=10000, beta=0.95, random_state=None): + args = (self.returns, s, beta, random_state) + result = noisyopt.minimizeSPSA( + objective_functions.negative_cvar, + args=args, + bounds=self.bounds, + x0=self.initial_guess, + niter=1000, + paired=False, + ) + self.weights = self.post_process_weights(result["x"]) + return dict(zip(self.tickers, self.weights)) + + @staticmethod + def post_process_weights(raw_weights): + # must manually make weights sum to 1 + return raw_weights / raw_weights.sum() From 3db090ab96d022c80ca0dbe4ba1a4c6606a7057f Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Tue, 11 Sep 2018 16:23:26 +0100 Subject: [PATCH 07/36] all opt now inherits from base optimizer --- pypfopt/base_optimizer.py | 61 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 pypfopt/base_optimizer.py diff --git a/pypfopt/base_optimizer.py b/pypfopt/base_optimizer.py new file mode 100644 index 00000000..dbd5b2e6 --- /dev/null +++ b/pypfopt/base_optimizer.py @@ -0,0 +1,61 @@ +# TODO module docstring + +import numpy as np + + +class BaseOptimizer: + def __init__(self, n_assets, weight_bounds=(0, 1)): + """ + :param weight_bounds: minimum and maximum weight of an asset, defaults to (0, 1). + Must be changed to (-1, 1) for portfolios with shorting. + :type weight_bounds: tuple, optional + """ + self.n_assets = n_assets + self.bounds = self._make_valid_bounds(weight_bounds) + # Optimisation parameters + self.initial_guess = np.array([1 / self.n_assets] * self.n_assets) + self.constraints = [{"type": "eq", "fun": lambda x: np.sum(x) - 1}] + # Outputs + self.weights = None + + def _make_valid_bounds(self, test_bounds): + """ + Private method: process input bounds into a form acceptable by scipy.optimize, + and check the validity of said bounds. + + :param test_bounds: minimum and maximum weight of an asset + :type test_bounds: tuple + :raises ValueError: if ``test_bounds`` is not a tuple of length two. + :raises ValueError: if the lower bound is too high + :return: a tuple of bounds, e.g ((0, 1), (0, 1), (0, 1) ...) + :rtype: tuple of tuples + """ + if len(test_bounds) != 2 or not isinstance(test_bounds, tuple): + raise ValueError( + "test_bounds must be a tuple of (lower bound, upper bound)" + ) + if test_bounds[0] is not None: + if test_bounds[0] * self.n_assets > 1: + raise ValueError("Lower bound is too high") + return (test_bounds,) * self.n_assets + + def clean_weights(self, cutoff=1e-4, rounding=5): + """ + Helper method to clean the raw weights, setting any weights whose absolute + values are below the cutoff to zero, and rounding the rest. + + :param cutoff: the lower bound, defaults to 1e-4 + :type cutoff: float, optional + :param rounding: number of decimal places to round the weights, defaults to 5. + Set to None if rounding is not desired. + :type rounding: int, optional + :return: asset weights + :rtype: dict + """ + if not isinstance(rounding, int) or rounding < 1: + raise ValueError("rounding must be a positive integer") + clean_weights = self.weights.copy() + clean_weights[np.abs(clean_weights) < cutoff] = 0 + if rounding is not None: + clean_weights = np.round(clean_weights, rounding) + return dict(zip(self.tickers, clean_weights)) From dc7e9c89882efd50dbf709f995d47b57f912d8c8 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Tue, 11 Sep 2018 16:25:24 +0100 Subject: [PATCH 08/36] inherit from baseoptimizer --- pypfopt/efficient_frontier.py | 120 +++++++++++++++------------------- 1 file changed, 52 insertions(+), 68 deletions(-) diff --git a/pypfopt/efficient_frontier.py b/pypfopt/efficient_frontier.py index cef440c3..33a79945 100644 --- a/pypfopt/efficient_frontier.py +++ b/pypfopt/efficient_frontier.py @@ -8,13 +8,15 @@ import pandas as pd import scipy.optimize as sco from . import objective_functions +from .base_optimizer import BaseOptimizer -class EfficientFrontier: +class EfficientFrontier(BaseOptimizer): """ - An EfficientFrontier object contains multiple optimisation methods that can be called - (corresponding to different objective functions) with various parameters. + An EfficientFrontier object (inheriting from BaseOptimizer) contains multiple + optimisation methods that can be called (corresponding to different objective + functions) with various parameters. Instance variables: @@ -36,6 +38,7 @@ class EfficientFrontier: - ``max_sharpe()`` optimises for maximal Sharpe ratio (a.k.a the tangency portfolio) - ``min_volatility()`` optimises for minimum volatility + - ``custom_objective()`` optimises for some custom objective function - ``efficient_risk()`` maximises Sharpe for a given target risk - ``efficient_return()`` minimises risk for a given target return - ``portfolio_performance()`` calculates the expected return, volatility and Sharpe ratio for @@ -44,7 +47,8 @@ class EfficientFrontier: def __init__(self, expected_returns, cov_matrix, weight_bounds=(0, 1), gamma=0): """ - :param expected_returns: expected returns for each asset + :param expected_returns: expected returns for each asset. Set to None if + optimising for volatility only. :type expected_returns: pd.Series, list, np.ndarray :param cov_matrix: covariance of returns for each asset :type cov_matrix: pd.DataFrame or np.array @@ -58,50 +62,31 @@ def __init__(self, expected_returns, cov_matrix, weight_bounds=(0, 1), gamma=0): :raises TypeError: if ``cov_matrix`` is not a dataframe or array """ # Inputs - if not isinstance(expected_returns, (pd.Series, list, np.ndarray)): - raise TypeError("Expected returns is not a series, list or array") - if not isinstance(cov_matrix, (pd.DataFrame, np.ndarray)): - raise TypeError("cov_matrix is not a dataframe or array") - - self.expected_returns = expected_returns self.cov_matrix = cov_matrix - self.n_assets = len(expected_returns) - self.tickers = list(expected_returns.index) - self.bounds = self._make_valid_bounds(weight_bounds) + if expected_returns is not None: + if not isinstance(expected_returns, (pd.Series, list, np.ndarray)): + raise TypeError( + "expected_returns is not a series, list or array") + if not isinstance(cov_matrix, (pd.DataFrame, np.ndarray)): + raise TypeError("cov_matrix is not a dataframe or array") + self.expected_returns = expected_returns + self.tickers = list(expected_returns.index) + else: + self.tickers = list(cov_matrix.columns) + self.n_assets = len(self.tickers) + + super().__init__(self.n_assets, weight_bounds) if not isinstance(gamma, (int, float)): raise ValueError("gamma should be numeric") if gamma < 0: - warnings.warn("in most cases, gamma should be positive", UserWarning) + warnings.warn( + "in most cases, gamma should be positive", UserWarning) self.gamma = gamma - # Optimisation parameters - self.initial_guess = np.array([1 / self.n_assets] * self.n_assets) - self.constraints = [{"type": "eq", "fun": lambda x: np.sum(x) - 1}] # Outputs self.weights = None - def _make_valid_bounds(self, test_bounds): - """ - Private method: process input bounds into a form acceptable by scipy.optimize, - and check the validity of said bounds. - - :param test_bounds: minimum and maximum weight of an asset - :type test_bounds: tuple - :raises ValueError: if ``test_bounds`` is not a tuple of length two. - :raises ValueError: if the lower bound is too high - :return: a tuple of bounds, e.g ((0, 1), (0, 1), (0, 1) ...) - :rtype: tuple of tuples - """ - if len(test_bounds) != 2 or not isinstance(test_bounds, tuple): - raise ValueError( - "test_bounds must be a tuple of (lower bound, upper bound)" - ) - if test_bounds[0] is not None: - if test_bounds[0] * self.n_assets > 1: - raise ValueError("Lower bound is too high") - return (test_bounds,) * self.n_assets - def max_sharpe(self, risk_free_rate=0.02): """ Maximise the Sharpe Ratio. The result is also referred to as the tangency portfolio, @@ -117,15 +102,15 @@ def max_sharpe(self, risk_free_rate=0.02): if not isinstance(risk_free_rate, (int, float)): raise ValueError("risk_free_rate should be numeric") - args = (self.expected_returns, self.cov_matrix, self.gamma, risk_free_rate) - constraints = self.constraints + args = (self.expected_returns, self.cov_matrix, + self.gamma, risk_free_rate) result = sco.minimize( objective_functions.negative_sharpe, x0=self.initial_guess, args=args, method="SLSQP", bounds=self.bounds, - constraints=constraints, + constraints=self.constraints, ) self.weights = result["x"] return dict(zip(self.tickers, self.weights)) @@ -134,19 +119,40 @@ def min_volatility(self): """ Minimise volatility. - :raises ValueError: if ``risk_free_rate`` is non-numeric :return: asset weights for the volatility-minimising portfolio :rtype: dict """ args = (self.cov_matrix, self.gamma) - constraints = self.constraints result = sco.minimize( objective_functions.volatility, x0=self.initial_guess, args=args, method="SLSQP", bounds=self.bounds, - constraints=constraints, + constraints=self.constraints, + ) + self.weights = result["x"] + return dict(zip(self.tickers, self.weights)) + + def custom_objective(self, objective_function): + """ + Optimise some objective function. While an implicit requirement is that the function + can be optimised via a quadratic optimiser, this is not enforced. Thus there is a + decent chance of silent failure. + + :param objective_function: function which maps (weight, *args) -> cost + :type objective_function: function with signature (np.Array, *args) -> float + :return: asset weights that optimise the custom objective + :rtype: dict + """ + args = (self.cov_matrix, self.gamma) + result = sco.minimize( + objective_function, + x0=self.initial_guess, + args=args, + method="SLSQP", + bounds=self.bounds, + constraints=self.constraints, ) self.weights = result["x"] return dict(zip(self.tickers, self.weights)) @@ -173,8 +179,8 @@ def efficient_risk(self, target_risk, risk_free_rate=0.02, market_neutral=False) if not isinstance(risk_free_rate, (int, float)): raise ValueError("risk_free_rate should be numeric") - self.n_assets = len(self.expected_returns) - args = (self.expected_returns, self.cov_matrix, self.gamma, risk_free_rate) + args = (self.expected_returns, self.cov_matrix, + self.gamma, risk_free_rate) target_constraint = { "type": "ineq", "fun": lambda w: target_risk @@ -223,7 +229,6 @@ def efficient_return(self, target_return, market_neutral=False): if not isinstance(target_return, float) or target_return < 0: raise ValueError("target_risk should be a positive float") - self.n_assets = len(self.expected_returns) args = (self.cov_matrix, self.gamma) target_constraint = { "type": "eq", @@ -256,27 +261,6 @@ def efficient_return(self, target_return, market_neutral=False): self.weights = result["x"] return dict(zip(self.tickers, self.weights)) - def clean_weights(self, cutoff=1e-4, rounding=5): - """ - Helper method to clean the raw weights, setting any weights whose absolute - values are below the cutoff to zero, and rounding the rest. - - :param cutoff: the lower bound, defaults to 1e-4 - :type cutoff: float, optional - :param rounding: number of decimal places to round the weights, defaults to 5. - Set to None if rounding is not desired. - :type rounding: int, optional - :return: asset weights - :rtype: dict - """ - if not isinstance(rounding, int) or rounding < 1: - raise ValueError("rounding must be a positive integer") - clean_weights = self.weights.copy() - clean_weights[np.abs(clean_weights) < cutoff] = 0 - if rounding is not None: - clean_weights = np.round(clean_weights, rounding) - return dict(zip(self.tickers, clean_weights)) - def portfolio_performance(self, verbose=False, risk_free_rate=0.02): """ After optimising, calculate (and optionally print) the performance of the optimal From 6eb8ed3235fff96d4b9c7e788de548adbfc2c579 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Fri, 14 Sep 2018 22:01:44 +0100 Subject: [PATCH 09/36] fixed volatility/variance mixup --- pypfopt/efficient_frontier.py | 3 ++- pypfopt/objective_functions.py | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/pypfopt/efficient_frontier.py b/pypfopt/efficient_frontier.py index 33a79945..a204236e 100644 --- a/pypfopt/efficient_frontier.py +++ b/pypfopt/efficient_frontier.py @@ -276,7 +276,8 @@ def portfolio_performance(self, verbose=False, risk_free_rate=0.02): """ if self.weights is None: raise ValueError("Weights not calculated yet") - sigma = objective_functions.volatility(self.weights, self.cov_matrix) + sigma = np.sqrt(objective_functions.volatility( + self.weights, self.cov_matrix)) mu = self.weights.dot(self.expected_returns) sharpe = -objective_functions.negative_sharpe( diff --git a/pypfopt/objective_functions.py b/pypfopt/objective_functions.py index 9dd92a74..99c486fb 100644 --- a/pypfopt/objective_functions.py +++ b/pypfopt/objective_functions.py @@ -63,7 +63,9 @@ def negative_sharpe( def volatility(weights, cov_matrix, gamma=0): """ - Calculate the volatility of a portfolio + Calculate the volatility of a portfolio. This is actually a misnomer because + the function returns variance, which is technically the correct objective + function when minimising volatility. :param weights: asset weights of the portfolio :type weights: np.ndarray @@ -72,9 +74,19 @@ def volatility(weights, cov_matrix, gamma=0): :param gamma: L2 regularisation parameter, defaults to 0. Increase if you want more non-negligible weights :type gamma: float, optional - :return: portfolio volatility + :return: portfolio variance :rtype: float """ L2_reg = gamma * (weights ** 2).sum() portfolio_volatility = np.dot(weights.T, np.dot(cov_matrix, weights)) return portfolio_volatility + L2_reg + + +def negative_cvar(weights, returns, s=10000, beta=0.95, random_state=None): + # TODO cvar documentation + np.random.seed(seed=random_state) + portfolio_returns = (weights * returns).sum(axis=1) + dist = scipy.stats.gaussian_kde(portfolio_returns) + sample = dist.resample(s) + var = portfolio_returns.quantile(1 - beta) + return -sample[sample < var].mean() From 77c4957a7190e352f1946b6298ebdee1de8223da Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Thu, 20 Sep 2018 19:23:02 +0100 Subject: [PATCH 10/36] exponential covariance --- pypfopt/risk_models.py | 47 +++++++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/pypfopt/risk_models.py b/pypfopt/risk_models.py index 25d14994..d1a47958 100644 --- a/pypfopt/risk_models.py +++ b/pypfopt/risk_models.py @@ -18,7 +18,6 @@ - Ledoit Wolf shrinkage - Oracle Approximating shrinkage """ - import warnings import numpy as np import pandas as pd @@ -71,19 +70,42 @@ def semicovariance(prices, benchmark=0, frequency=252): return drops.cov() * frequency -def _pair_exp_cov(X, Y, alpha=0.5): - # TODO documentation - # alpha is the span parameter in terms of the length of the data. - # higher alpha tends towards the simple mean. - # alpha * T = 1 sets the mean = the last result - # recommended alpha = 0.5 +def _pair_exp_cov(X, Y, span=180): + """ + Calculate the exponential covariance between two timeseries of returns. + + :param X: first time series of returns + :type X: pd.Series + :param Y: second time series of returns + :type Y: pd.Series + :param span: the span of the exponential weighting function, defaults to 180 + :type span: int, optional + :return: the exponential covariance between X and Y + :rtype: float + """ covariation = (X - X.mean()) * (Y - Y.mean()) - T = covariation.notnull().sum() - return covariation.ewm(span=alpha * T).mean()[-1] + # Exponentially weight the covariation and take the mean + if span < 10: + warnings.warn("it is recommended to use a higher span, e.g 30 days") + return covariation.ewm(span=span).mean()[-1] -def exp_cov(prices, alpha=0.5, frequency=252): - # TODO documentation +def exp_cov(prices, span=180, frequency=252): + """ + Estimate the exponentially-weighted covariance matrix, which gives + greater weight to more recent data. + + :param prices: adjusted closing prices of the asset, each row is a date + and each column is a ticker/id. + :type prices: pd.DataFrame + :param span: the span of the exponential weighting function, defaults to 180 + :type span: int, optional + :param frequency: number of time periods in a year, defaults to 252 (the number + of trading days in a year) + :type frequency: int, optional + :return: annualised estimate of exponential covariance matrix + :rtype: pd.DataFrame + """ if not isinstance(prices, pd.DataFrame): warnings.warn("prices are not in a dataframe", RuntimeWarning) prices = pd.DataFrame(prices) @@ -91,13 +113,14 @@ def exp_cov(prices, alpha=0.5, frequency=252): daily_returns = prices.pct_change().dropna(how="all") N = len(assets) + # Loop over matrix, filling entries with the pairwise exp cov S = np.zeros((N, N)) for i in range(N): for j in range(i, N): S[i, j] = S[j, i] = _pair_exp_cov( daily_returns.iloc[:, i], daily_returns.iloc[:, j], - alpha + span ) return pd.DataFrame(S * frequency, columns=assets, index=assets) From 3b3994d01ee4d4700a2f89eae81864b40946b650 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Thu, 20 Sep 2018 19:34:56 +0100 Subject: [PATCH 11/36] test cvar objective --- tests/test_objective_functions.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/tests/test_objective_functions.py b/tests/test_objective_functions.py index 88228233..edaaf1fb 100644 --- a/tests/test_objective_functions.py +++ b/tests/test_objective_functions.py @@ -52,13 +52,30 @@ def test_negative_sharpe(): def test_volatility_dummy(): w = np.array([0.4, 0.4, 0.2]) data = np.diag([0.5, 0.8, 0.9]) - test_vol = objective_functions.volatility(w, data) - np.testing.assert_almost_equal(test_vol, 0.244 ** 0.5) + test_var = objective_functions.volatility(w, data) + np.testing.assert_almost_equal(test_var, 0.244) def test_volatility(): df = get_data() S = sample_cov(df) w = np.array([1 / df.shape[1]] * df.shape[1]) - vol = objective_functions.volatility(w, S) - np.testing.assert_almost_equal(vol, 0.21209018103844543) + var = objective_functions.volatility(w, S) + np.testing.assert_almost_equal(var, 0.04498224489292057) + + +def test_cvar(): + df = get_data() + returns = df.pct_change().dropna(how="all") + w = np.array([1 / df.shape[1]] * df.shape[1]) + cvar0 = objective_functions.negative_cvar( + w, returns, s=5000, random_state=0) + np.testing.assert_almost_equal(cvar0, 0.02430440871014094) + cvar1 = objective_functions.negative_cvar( + w, returns, s=5000, beta=0.98, random_state=0) + np.testing.assert_almost_equal(cvar1, 0.0312109776702776) + + # Nondeterministic + cvar2 = objective_functions.negative_cvar( + w, returns, s=5000, random_state=1) + assert not cvar0 == cvar2 From ca5cc72dc21e81abada7129f5077eafc1ecef569 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Thu, 20 Sep 2018 20:06:16 +0100 Subject: [PATCH 12/36] test VaR --- tests/test_value_at_risk.py | 51 +++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 tests/test_value_at_risk.py diff --git a/tests/test_value_at_risk.py b/tests/test_value_at_risk.py new file mode 100644 index 00000000..3a27c4ee --- /dev/null +++ b/tests/test_value_at_risk.py @@ -0,0 +1,51 @@ +import numpy as np +import pytest +from pypfopt.value_at_risk import CVAROpt +from tests.utilities_for_tests import get_data + + +def test_init_cvar(): + df = get_data() + returns = df.pct_change().dropna(how="all") + vr = CVAROpt(returns) + assert list(vr.tickers) == list(df.columns) + + # Inheritance + assert vr.bounds == ((0, 1), ) * len(df.columns) + assert vr.clean_weights + assert vr.initial_guess + assert vr.constraints + + +def test_init_cvar_errors(): + df = get_data() + returns = df.pct_change().dropna(how="all") + with pytest.raises(ValueError): + vr = CVAROpt(returns, weight_bounds=(0.5, 1)) + with pytest.raises(AttributeError): + vr = CVAROpt(returns) + vr.clean_weights() + with pytest.raises(TypeError): + vr = CVAROpt(returns.values) + returns_list = df.values.tolist() + with pytest.raises(TypeError): + vr = CVAROpt(returns_list) + + +def test_cvar_weights(): + df = get_data() + returns = df.pct_change().dropna(how="all") + vr = CVAROpt(returns) + w = vr.min_cvar(s=100, random_state=0) + assert isinstance(w, dict) + assert set(w.keys()) == set(df.columns) + assert set(w.keys()) == set(vr.tickers) + np.testing.assert_almost_equal(vr.weights.sum(), 1) + + +def test_cvar_bounds(): + pass + + +def test_cvar_beta(): + pass From 0110e2ff34634a5fab2f8556180487e623732ed0 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Thu, 20 Sep 2018 20:06:28 +0100 Subject: [PATCH 13/36] test exp cov --- tests/test_risk_models.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/test_risk_models.py b/tests/test_risk_models.py index d00dee8d..aabfec50 100644 --- a/tests/test_risk_models.py +++ b/tests/test_risk_models.py @@ -82,6 +82,28 @@ def test_semicovariance_benchmark(): assert S2.sum().sum() > S.sum().sum() +def test_exp_cov_matrix(): + df = get_data() + S = risk_models.exp_cov(df) + assert S.shape == (20, 20) + assert S.index.equals(df.columns) + assert S.index.equals(S.columns) + assert S.notnull().all().all() + S2 = risk_models.exp_cov(df, frequency=2) + pd.testing.assert_frame_equal(S / 126, S2) + + +def test_exp_cov_limits(): + df = get_data() + sample_cov = risk_models.sample_cov(df) + S = risk_models.exp_cov(df) + assert not np.allclose(sample_cov, S) + + # As span gets larger, it should tend towards sample covariance + S2 = risk_models.exp_cov(df, span=1e20) + assert np.abs(S2 - sample_cov).max().max() < 1e-3 + + def test_min_cov_det(): df = get_data() S = risk_models.min_cov_determinant(df, random_state=8) From e86885969a6fd450940faa243ddd80029206c61f Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Thu, 20 Sep 2018 20:11:29 +0100 Subject: [PATCH 14/36] added tests on base optimiser --- tests/test_base_optimizer.py | 96 ++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 tests/test_base_optimizer.py diff --git a/tests/test_base_optimizer.py b/tests/test_base_optimizer.py new file mode 100644 index 00000000..bfd903dd --- /dev/null +++ b/tests/test_base_optimizer.py @@ -0,0 +1,96 @@ +import numpy as np +import pytest +from pypfopt.efficient_frontier import EfficientFrontier +from tests.utilities_for_tests import get_data, setup_efficient_frontier + + +def test_custom_upper_bound(): + ef = EfficientFrontier( + *setup_efficient_frontier(data_only=True), weight_bounds=(0, 0.10) + ) + ef.max_sharpe() + ef.portfolio_performance() + assert ef.weights.max() <= 0.1 + np.testing.assert_almost_equal(ef.weights.sum(), 1) + + +def test_custom_lower_bound(): + ef = EfficientFrontier( + *setup_efficient_frontier(data_only=True), weight_bounds=(0.02, 1) + ) + ef.max_sharpe() + assert ef.weights.min() >= 0.02 + np.testing.assert_almost_equal(ef.weights.sum(), 1) + + +def test_custom_bounds(): + ef = EfficientFrontier( + *setup_efficient_frontier(data_only=True), weight_bounds=(0.03, 0.13) + ) + ef.max_sharpe() + assert ef.weights.min() >= 0.03 + assert ef.weights.max() <= 0.13 + np.testing.assert_almost_equal(ef.weights.sum(), 1) + + +def test_bounds_errors(): + with pytest.raises(ValueError): + EfficientFrontier( + *setup_efficient_frontier(data_only=True), weight_bounds=(0.06, 1) + ) + assert EfficientFrontier( + *setup_efficient_frontier(data_only=True), weight_bounds=(0, 1) + ) + + with pytest.raises(ValueError): + EfficientFrontier( + *setup_efficient_frontier(data_only=True), weight_bounds=(0.06, 1, 3) + ) + + +def test_clean_weights(): + ef = setup_efficient_frontier() + ef.max_sharpe() + number_tiny_weights = sum(ef.weights < 1e-4) + cleaned = ef.clean_weights(cutoff=1e-4, rounding=5) + cleaned_weights = cleaned.values() + clean_number_tiny_weights = sum(i < 1e-4 for i in cleaned_weights) + assert clean_number_tiny_weights == number_tiny_weights + #  Check rounding + cleaned_weights_str_length = [len(str(i)) for i in cleaned_weights] + assert all([length == 7 or length == + 3 for length in cleaned_weights_str_length]) + + +def test_clean_weights_short(): + ef = setup_efficient_frontier() + ef = EfficientFrontier( + *setup_efficient_frontier(data_only=True), weight_bounds=(-1, 1) + ) + ef.max_sharpe() + # In practice we would never use such a high cutoff + number_tiny_weights = sum(np.abs(ef.weights) < 0.05) + cleaned = ef.clean_weights(cutoff=0.05) + cleaned_weights = cleaned.values() + clean_number_tiny_weights = sum(abs(i) < 0.05 for i in cleaned_weights) + assert clean_number_tiny_weights == number_tiny_weights + + +def test_clean_weights_error(): + ef = setup_efficient_frontier() + ef.max_sharpe() + with pytest.raises(ValueError): + ef.clean_weights(rounding=1.3) + with pytest.raises(ValueError): + ef.clean_weights(rounding=0) + assert ef.clean_weights(rounding=3) + + +def test_efficient_frontier_init_errors(): + df = get_data() + mean_returns = df.pct_change().dropna(how="all").mean() + with pytest.raises(TypeError): + EfficientFrontier("test", "string") + + with pytest.raises(TypeError): + EfficientFrontier(mean_returns, mean_returns) From 6a144aad460ee9ef4eb818cbd7601b52715074a8 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Thu, 20 Sep 2018 20:11:40 +0100 Subject: [PATCH 15/36] fixed tests --- tests/test_efficient_frontier.py | 144 ++++++++++++------------------ tests/test_objective_functions.py | 4 +- tests/test_value_at_risk.py | 4 +- 3 files changed, 59 insertions(+), 93 deletions(-) diff --git a/tests/test_efficient_frontier.py b/tests/test_efficient_frontier.py index f337fa3a..4265b586 100755 --- a/tests/test_efficient_frontier.py +++ b/tests/test_efficient_frontier.py @@ -2,9 +2,9 @@ import numpy as np import pandas as pd import pytest - from pypfopt.efficient_frontier import EfficientFrontier from tests.utilities_for_tests import get_data, setup_efficient_frontier +from pypfopt import risk_models def test_data_source(): @@ -33,6 +33,13 @@ def test_portfolio_performance(): assert ef.portfolio_performance() +def test_efficient_frontier_inheritance(): + ef = setup_efficient_frontier() + assert ef.clean_weights + assert isinstance(ef.initial_guess, np.ndarray) + assert isinstance(ef.constraints, list) + + def test_max_sharpe_long_only(): ef = setup_efficient_frontier() w = ef.max_sharpe() @@ -162,7 +169,8 @@ def test_max_sharpe_input_errors(): ) with warnings.catch_warnings(record=True) as w: - ef = EfficientFrontier(*setup_efficient_frontier(data_only=True), gamma=-1) + ef = EfficientFrontier( + *setup_efficient_frontier(data_only=True), gamma=-1) assert len(w) == 1 assert issubclass(w[0].category, UserWarning) assert ( @@ -183,7 +191,7 @@ def test_min_volatility(): np.testing.assert_almost_equal(ef.weights.sum(), 1) np.testing.assert_allclose( ef.portfolio_performance(), - (0.1793245141665063, 0.15915107045094778, 0.9981835740658117), + (0.17915572327783236, 0.1591542642140098, 0.9971057459792518), ) @@ -198,7 +206,7 @@ def test_min_volatility_short(): np.testing.assert_almost_equal(ef.weights.sum(), 1) np.testing.assert_allclose( ef.portfolio_performance(), - (0.17225673749865328, 0.15559209747801794, 0.9752992044136976), + (0.1719799158957379, 0.15559547854162945, 0.9734986722620801), ) # Shorting should reduce volatility @@ -220,7 +228,7 @@ def test_min_volatility_L2_reg(): np.testing.assert_allclose( ef.portfolio_performance(), - (0.2211888419683154, 0.18050174016287326, 1.1133499289183508), + (0.2313619320427517, 0.195525914008473, 1.0799317402364261), ) @@ -247,7 +255,7 @@ def test_efficient_risk(): assert set(w.keys()) == set(ef.expected_returns.index) np.testing.assert_almost_equal(ef.weights.sum(), 1) np.testing.assert_allclose( - ef.portfolio_performance(), (0.285775, 0.19, 1.396493), atol=1e-6 + ef.portfolio_performance(), (0.2857747021121558, 0.19, 1.396492876), atol=1e-6 ) @@ -356,7 +364,7 @@ def test_efficient_return(): assert set(w.keys()) == set(ef.expected_returns.index) np.testing.assert_almost_equal(ef.weights.sum(), 1) np.testing.assert_allclose( - ef.portfolio_performance(), (0.25, 0.173885, 1.320507), atol=1e-6 + ef.portfolio_performance(), (0.25, 0.17388778912324757, 1.3204920206007777), atol=1e-6 ) @@ -379,7 +387,7 @@ def test_efficient_return_short(): assert set(w.keys()) == set(ef.expected_returns.index) np.testing.assert_almost_equal(ef.weights.sum(), 1) np.testing.assert_allclose( - ef.portfolio_performance(), (0.25, 0.16826260520748268, 1.3641098601259731) + ef.portfolio_performance(), (0.25, 0.168264744226909, 1.3640929002973508) ) sharpe = ef.portfolio_performance()[2] @@ -400,7 +408,7 @@ def test_efficient_return_L2_reg(): np.testing.assert_almost_equal(ef.weights.sum(), 1) np.testing.assert_allclose( - ef.portfolio_performance(), (0.25, 0.18813935436629708, 1.221273523695721) + ef.portfolio_performance(), (0.25, 0.20032972838376054, 1.1470454626523598) ) @@ -431,7 +439,7 @@ def test_efficient_return_market_neutral(): assert (ef.weights < 1).all() and (ef.weights > -1).all() np.testing.assert_almost_equal( ef.portfolio_performance(), - (0.24999999999755498, 0.20567338787141307, 1.1087493060316183), + (0.25, 0.20567621957041887, 1.1087335497769277) ) sharpe = ef.portfolio_performance()[2] @@ -453,92 +461,50 @@ def test_efficient_return_market_neutral_warning(): ) -def test_custom_upper_bound(): - ef = EfficientFrontier( - *setup_efficient_frontier(data_only=True), weight_bounds=(0, 0.10) - ) - ef.max_sharpe() - ef.portfolio_performance() - assert ef.weights.max() <= 0.1 - np.testing.assert_almost_equal(ef.weights.sum(), 1) - - -def test_custom_lower_bound(): - ef = EfficientFrontier( - *setup_efficient_frontier(data_only=True), weight_bounds=(0.02, 1) - ) - ef.max_sharpe() - assert ef.weights.min() >= 0.02 - np.testing.assert_almost_equal(ef.weights.sum(), 1) - - -def test_custom_bounds(): - ef = EfficientFrontier( - *setup_efficient_frontier(data_only=True), weight_bounds=(0.03, 0.13) - ) - ef.max_sharpe() - assert ef.weights.min() >= 0.03 - assert ef.weights.max() <= 0.13 +def test_max_sharpe_semicovariance(): + # f + df = get_data() + ef = setup_efficient_frontier() + ef.cov_matrix = risk_models.semicovariance(df, benchmark=0) + w = ef.max_sharpe() + assert isinstance(w, dict) + assert set(w.keys()) == set(ef.tickers) + assert set(w.keys()) == set(ef.expected_returns.index) np.testing.assert_almost_equal(ef.weights.sum(), 1) - - -def test_bounds_errors(): - with pytest.raises(ValueError): - EfficientFrontier( - *setup_efficient_frontier(data_only=True), weight_bounds=(0.06, 1) - ) - assert EfficientFrontier( - *setup_efficient_frontier(data_only=True), weight_bounds=(0, 1) + np.testing.assert_allclose( + ef.portfolio_performance(), + (0.2972237362989219, 0.064432672830601, 4.297294313174586) ) - with pytest.raises(ValueError): - EfficientFrontier( - *setup_efficient_frontier(data_only=True), weight_bounds=(0.06, 1, 3) - ) - - -def test_clean_weights(): - ef = setup_efficient_frontier() - ef.max_sharpe() - number_tiny_weights = sum(ef.weights < 1e-4) - cleaned = ef.clean_weights(cutoff=1e-4, rounding=5) - cleaned_weights = cleaned.values() - clean_number_tiny_weights = sum(i < 1e-4 for i in cleaned_weights) - assert clean_number_tiny_weights == number_tiny_weights - #  Check rounding - cleaned_weights_str_length = [len(str(i)) for i in cleaned_weights] - assert all([length == 7 or length == 3 for length in cleaned_weights_str_length]) +def test_min_volatilty_semicovariance_L2_reg(): + # f + df = get_data() -def test_clean_weights_short(): ef = setup_efficient_frontier() - ef = EfficientFrontier( - *setup_efficient_frontier(data_only=True), weight_bounds=(-1, 1) + ef.cov_matrix = risk_models.semicovariance(df, benchmark=0) + w = ef.min_volatility() + assert isinstance(w, dict) + assert set(w.keys()) == set(ef.tickers) + assert set(w.keys()) == set(ef.expected_returns.index) + np.testing.assert_almost_equal(ef.weights.sum(), 1) + np.testing.assert_allclose( + ef.portfolio_performance(), + (0.20661406122127524, 0.055515981410304394, 3.3567606718215663) ) - ef.max_sharpe() - # In practice we would never use such a high cutoff - number_tiny_weights = sum(np.abs(ef.weights) < 0.05) - cleaned = ef.clean_weights(cutoff=0.05) - cleaned_weights = cleaned.values() - clean_number_tiny_weights = sum(abs(i) < 0.05 for i in cleaned_weights) - assert clean_number_tiny_weights == number_tiny_weights - - -def test_clean_weights_error(): - ef = setup_efficient_frontier() - ef.max_sharpe() - with pytest.raises(ValueError): - ef.clean_weights(rounding=1.3) - with pytest.raises(ValueError): - ef.clean_weights(rounding=0) - assert ef.clean_weights(rounding=3) -def test_efficient_frontier_init_errors(): +def test_efficient_return_semicovariance(): + # f df = get_data() - mean_returns = df.pct_change().dropna(how="all").mean() - with pytest.raises(TypeError): - EfficientFrontier("test", "string") - - with pytest.raises(TypeError): - EfficientFrontier(mean_returns, mean_returns) + ef = setup_efficient_frontier() + ef.cov_matrix = risk_models.semicovariance(df, benchmark=0) + w = ef.efficient_return(0.12) + assert isinstance(w, dict) + assert set(w.keys()) == set(ef.tickers) + assert set(w.keys()) == set(ef.expected_returns.index) + np.testing.assert_almost_equal(ef.weights.sum(), 1) + np.testing.assert_allclose( + ef.portfolio_performance(), + (0.12000000000871075, 0.06948386214063361, 1.4319423610177537) + ) diff --git a/tests/test_objective_functions.py b/tests/test_objective_functions.py index edaaf1fb..629bfa81 100644 --- a/tests/test_objective_functions.py +++ b/tests/test_objective_functions.py @@ -70,10 +70,10 @@ def test_cvar(): w = np.array([1 / df.shape[1]] * df.shape[1]) cvar0 = objective_functions.negative_cvar( w, returns, s=5000, random_state=0) - np.testing.assert_almost_equal(cvar0, 0.02430440871014094) + assert cvar0 > 0 cvar1 = objective_functions.negative_cvar( w, returns, s=5000, beta=0.98, random_state=0) - np.testing.assert_almost_equal(cvar1, 0.0312109776702776) + assert cvar1 > 0 # Nondeterministic cvar2 = objective_functions.negative_cvar( diff --git a/tests/test_value_at_risk.py b/tests/test_value_at_risk.py index 3a27c4ee..7cb63e77 100644 --- a/tests/test_value_at_risk.py +++ b/tests/test_value_at_risk.py @@ -13,8 +13,8 @@ def test_init_cvar(): # Inheritance assert vr.bounds == ((0, 1), ) * len(df.columns) assert vr.clean_weights - assert vr.initial_guess - assert vr.constraints + assert isinstance(vr.initial_guess, np.ndarray) + assert isinstance(vr.constraints, list) def test_init_cvar_errors(): From 618040b9dd3f4056567e64cd58e4b99b1ea2d187 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Thu, 20 Sep 2018 20:11:51 +0100 Subject: [PATCH 16/36] cvar objective --- pypfopt/objective_functions.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/pypfopt/objective_functions.py b/pypfopt/objective_functions.py index 99c486fb..6c823feb 100644 --- a/pypfopt/objective_functions.py +++ b/pypfopt/objective_functions.py @@ -83,10 +83,31 @@ def volatility(weights, cov_matrix, gamma=0): def negative_cvar(weights, returns, s=10000, beta=0.95, random_state=None): - # TODO cvar documentation + """ + Calculate the negative CVaR. Though we want the "min CVaR portfolio", we + actually need to maximise the expected return of the worst q% cases, thus + we need this value to be negative. + + :param weights: asset weights of the portfolio + :type weights: np.ndarray + :param returns: asset returns + :type returns: pd.DataFrame or np.ndarray + :param s: number of bootstrap draws, defaults to 10000 + :type s: int, optional + :param beta: "significance level" (i. 1 - q), defaults to 0.95 + :type beta: float, optional + :param random_state: seed for random sampling, defaults to None + :type random_state: int, optional + :return: negative CVaR + :rtype: float + """ np.random.seed(seed=random_state) + # Calcualte the returns given the weights portfolio_returns = (weights * returns).sum(axis=1) + # Sample from the historical distribution dist = scipy.stats.gaussian_kde(portfolio_returns) sample = dist.resample(s) + # Calculate the value at risk var = portfolio_returns.quantile(1 - beta) + # Mean of all losses worse than the value at risk return -sample[sample < var].mean() From 880882b8915e37b4d1adf6acb84e8fc388a0f591 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Thu, 20 Sep 2018 20:44:44 +0100 Subject: [PATCH 17/36] minor formatting --- pypfopt/efficient_frontier.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pypfopt/efficient_frontier.py b/pypfopt/efficient_frontier.py index a204236e..b29bfc4d 100644 --- a/pypfopt/efficient_frontier.py +++ b/pypfopt/efficient_frontier.py @@ -1,5 +1,5 @@ """ -The ``efficient_frontier`` module houses the EfficientFrontier object, which +The ``efficient_frontier`` module houses the EfficientFrontier class, which generates optimal portfolios for various possible objective functions and parameters. """ @@ -140,8 +140,8 @@ def custom_objective(self, objective_function): can be optimised via a quadratic optimiser, this is not enforced. Thus there is a decent chance of silent failure. - :param objective_function: function which maps (weight, *args) -> cost - :type objective_function: function with signature (np.Array, *args) -> float + :param objective_function: function which maps (weight, args) -> cost + :type objective_function: function with signature (np.ndarray, args) -> float :return: asset weights that optimise the custom objective :rtype: dict """ @@ -184,7 +184,7 @@ def efficient_risk(self, target_risk, risk_free_rate=0.02, market_neutral=False) target_constraint = { "type": "ineq", "fun": lambda w: target_risk - - objective_functions.volatility(w, self.cov_matrix), + - np.sqrt(objective_functions.volatility(w, self.cov_matrix)), } # The equality constraint is either "weights sum to 1" (default), or # "weights sum to 0" (market neutral). From dbe76d2565130675a60c6074ed31bf804296eeb2 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Thu, 20 Sep 2018 20:45:03 +0100 Subject: [PATCH 18/36] Added documentation --- pypfopt/value_at_risk.py | 73 +++++++++++++++++++++++++++++++++++----- 1 file changed, 65 insertions(+), 8 deletions(-) diff --git a/pypfopt/value_at_risk.py b/pypfopt/value_at_risk.py index 4479e52c..51b06a9f 100644 --- a/pypfopt/value_at_risk.py +++ b/pypfopt/value_at_risk.py @@ -1,6 +1,9 @@ -# import warnings -# import numpy as np -# import pandas as pd +""" +The ``value_at_risk`` module allows for optimisation with a (conditional) +value-at-risk (CVaR) objective, which requires Monte Carlo simulation. +""" + +import pandas as pd from .base_optimizer import BaseOptimizer from . import objective_functions import noisyopt @@ -8,13 +11,60 @@ class CVAROpt(BaseOptimizer): + """ + A CVAROpt object (inheriting from BaseOptimizer) provides a method for + optimising the CVaR (a.k.a expected shortfall) of a portfolio. + + Instance variables: + + - Inputs + - ``tickers`` + - ``returns`` + - ``bounds`` + + - Optimisation parameters: + + - ``s``: the number of Monte Carlo simulations + - ``beta``: the critical value + + - Output: ``weights`` + + Public methods: + + - ``min_cvar()`` + - ``normalize_weights()`` + """ + def __init__(self, returns, weight_bounds=(0, 1)): - # TODO documentation and type checks + """ + :param returns: asset historical returns + :type returns: pd.DataFrame + :param weight_bounds: minimum and maximum weight of an asset, defaults to (0, 1). + Must be changed to (-1, 1) for portfolios with shorting. + For CVaR opt, this is not a hard boundary. + :type weight_bounds: tuple, optional + :raises TypeError: if ``returns`` is not a dataframe + """ + if not isinstance(returns, pd.DataFrame,): + raise TypeError("returns are not a dataframe") self.returns = returns self.tickers = returns.columns - super().__init__(returns.shape[1], weight_bounds) + super().__init__(returns.shape[1], weight_bounds) # bounds def min_cvar(self, s=10000, beta=0.95, random_state=None): + """ + Find the portfolio weights that minimises the CVaR, via + Monte Carlo sampling from the return distribution. + + :param s: number of bootstrap draws, defaults to 10000 + :type s: int, optional + :param beta: "significance level" (i. 1 - q), defaults to 0.95 + :type beta: float, optional + :param random_state: seed for random sampling, defaults to None + :type random_state: int, optional + :return: asset weights for the Sharpe-maximising portfolio + :rtype: dict + """ args = (self.returns, s, beta, random_state) result = noisyopt.minimizeSPSA( objective_functions.negative_cvar, @@ -24,10 +74,17 @@ def min_cvar(self, s=10000, beta=0.95, random_state=None): niter=1000, paired=False, ) - self.weights = self.post_process_weights(result["x"]) + self.weights = self.normalize_weights(result["x"]) return dict(zip(self.tickers, self.weights)) @staticmethod - def post_process_weights(raw_weights): - # must manually make weights sum to 1 + def normalize_weights(raw_weights): + """ + Make all weights sum to 1 + + :param raw_weights: input weights which do not sum to 1 + :type raw_weights: np.array, pd.Series + :return: normalized weights + :rtype: np.array, pd.Series + """ return raw_weights / raw_weights.sum() From bf18a1cc897ac59123fcd07b6faeb6eef6ecd038 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 11:11:16 +0100 Subject: [PATCH 19/36] basic HRP test --- tests/test_hrp.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 tests/test_hrp.py diff --git a/tests/test_hrp.py b/tests/test_hrp.py new file mode 100644 index 00000000..bb51b322 --- /dev/null +++ b/tests/test_hrp.py @@ -0,0 +1,13 @@ +import numpy as np +from pypfopt.hierarchical_risk_parity import hrp_portfolio +from tests.utilities_for_tests import get_data + + +def test_hrp_portfolio(): + df = get_data() + cov = df.pct_change().cov() + corr = df.pct_change().corr() + w = hrp_portfolio(cov, corr) + assert isinstance(w, dict) + assert set(w.keys()) == set(df.columns) + np.testing.assert_almost_equal(sum(w.values()), 1) From f36e1e40688fd6fb73b0a936e46383baa0edf3f5 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 11:15:46 +0100 Subject: [PATCH 20/36] basic HRP test --- tests/test_hrp.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/test_hrp.py b/tests/test_hrp.py index bb51b322..9fc39b3f 100644 --- a/tests/test_hrp.py +++ b/tests/test_hrp.py @@ -5,9 +5,8 @@ def test_hrp_portfolio(): df = get_data() - cov = df.pct_change().cov() - corr = df.pct_change().corr() - w = hrp_portfolio(cov, corr) + returns = df.pct_change().dropna(how="all") + w = hrp_portfolio(returns) assert isinstance(w, dict) assert set(w.keys()) == set(df.columns) np.testing.assert_almost_equal(sum(w.values()), 1) From 308cc561ae4e20df1169b580e10c14b711d56fbb Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 11:16:02 +0100 Subject: [PATCH 21/36] minor typo fix --- tests/test_efficient_frontier.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_efficient_frontier.py b/tests/test_efficient_frontier.py index 4265b586..974537ee 100755 --- a/tests/test_efficient_frontier.py +++ b/tests/test_efficient_frontier.py @@ -495,7 +495,6 @@ def test_min_volatilty_semicovariance_L2_reg(): def test_efficient_return_semicovariance(): - # f df = get_data() ef = setup_efficient_frontier() ef.cov_matrix = risk_models.semicovariance(df, benchmark=0) From 8d85eab4c8194ec8c043399aeefe01b0ac23579a Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 11:16:22 +0100 Subject: [PATCH 22/36] test custom objective --- tests/test_custom_objectives.py | 71 +++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 tests/test_custom_objectives.py diff --git a/tests/test_custom_objectives.py b/tests/test_custom_objectives.py new file mode 100644 index 00000000..b5ad86ec --- /dev/null +++ b/tests/test_custom_objectives.py @@ -0,0 +1,71 @@ +import numpy as np +from tests.utilities_for_tests import setup_efficient_frontier +from pypfopt import objective_functions + + +def test_custom_objective_equal_weights(): + ef = setup_efficient_frontier() + + def new_objective(weights): + return (weights ** 2).sum() + + ef.custom_objective(new_objective) + np.testing.assert_allclose(ef.weights, np.array([1 / 20] * 20)) + + +def test_custom_objective_min_var(): + ef = setup_efficient_frontier() + ef.min_volatility() + built_in = ef.weights + + # With custom objective + ef = setup_efficient_frontier() + ef.custom_objective(objective_functions.volatility, ef.cov_matrix, 0) + custom = ef.weights + np.testing.assert_allclose(built_in, custom, atol=1e-7) + + +def test_custom_objective_sharpe_L2(): + ef = setup_efficient_frontier() + ef.gamma = 2 + ef.max_sharpe() + built_in = ef.weights + + # With custom objective + ef = setup_efficient_frontier() + ef.custom_objective(objective_functions.negative_sharpe, + ef.expected_returns, ef.cov_matrix, 2) + custom = ef.weights + np.testing.assert_allclose(built_in, custom, atol=1e-7) + + +def test_custom_logarithmic_barrier(): + # 60 Years of Portfolio Optimisation, Kolm et al (2014) + ef = setup_efficient_frontier() + + def logarithmic_barrier(weights, cov_matrix, k=0.1): + log_sum = np.sum(np.log(weights)) + portfolio_volatility = np.dot(weights.T, np.dot(cov_matrix, weights)) + return portfolio_volatility - k * log_sum + + w = ef.custom_objective(logarithmic_barrier, ef.cov_matrix, 0.1) + assert isinstance(w, dict) + assert set(w.keys()) == set(ef.tickers) + assert set(w.keys()) == set(ef.expected_returns.index) + np.testing.assert_almost_equal(ef.weights.sum(), 1) + + +def test_custom_deviation_risk_parity(): + # 60 Years of Portfolio Optimisation, Kolm et al (2014) + ef = setup_efficient_frontier() + + def deviation_risk_parity(w, cov_matrix): + diff = w * np.dot(cov_matrix, w) - \ + (w * np.dot(cov_matrix, w)).reshape(-1, 1) + return (diff ** 2).sum().sum() + + w = ef.custom_objective(deviation_risk_parity, ef.cov_matrix) + assert isinstance(w, dict) + assert set(w.keys()) == set(ef.tickers) + assert set(w.keys()) == set(ef.expected_returns.index) + np.testing.assert_almost_equal(ef.weights.sum(), 1) From 1c3c97ef40824c01a9b35c925b5dcb202ad53f48 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 11:18:50 +0100 Subject: [PATCH 23/36] changed custom objective api --- pypfopt/efficient_frontier.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pypfopt/efficient_frontier.py b/pypfopt/efficient_frontier.py index b29bfc4d..4c991939 100644 --- a/pypfopt/efficient_frontier.py +++ b/pypfopt/efficient_frontier.py @@ -134,7 +134,7 @@ def min_volatility(self): self.weights = result["x"] return dict(zip(self.tickers, self.weights)) - def custom_objective(self, objective_function): + def custom_objective(self, objective_function, *args): """ Optimise some objective function. While an implicit requirement is that the function can be optimised via a quadratic optimiser, this is not enforced. Thus there is a @@ -145,7 +145,6 @@ def custom_objective(self, objective_function): :return: asset weights that optimise the custom objective :rtype: dict """ - args = (self.cov_matrix, self.gamma) result = sco.minimize( objective_function, x0=self.initial_guess, From cb0f79401c0e748fe32df87ac604c0271541c3b3 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 12:07:10 +0100 Subject: [PATCH 24/36] updated docs for v0.2.0 --- docs/UserGuide.rst | 32 +++++++++++++++++++++++++++++--- docs/index.rst | 42 ++++++++++++++++++++++-------------------- 2 files changed, 51 insertions(+), 23 deletions(-) diff --git a/docs/UserGuide.rst b/docs/UserGuide.rst index bc01d478..31e409b3 100644 --- a/docs/UserGuide.rst +++ b/docs/UserGuide.rst @@ -8,7 +8,14 @@ This is designed to be a practical guide, mostly aimed at users who are interest quick way of optimally combining some assets (most likely equities). However, when necessary I do introduce the required theory and also point out areas that may be suitable springboards for more advanced optimisation techniques. Details about the -parameters are left for the respective documentation pages (please see the sidebar). +parameters can be found in the respective documentation pages (please see the sidebar). + +For this guide, we will be focusing on mean-variance optimisation (MVO), which is what +most people think of when they hear "portfolio optimisation". MVO forms the core of +PyPortfolioOpt's offering, though it should be noted that MVO comes in many flavours, +which can have very different performance characteristics. Please refer to the sidebar +to get a feeling for the possiblities, as well as the other optimisation methods +offered. But for now, we will continue with the Efficient Frontier. PyPortfolioOpt is designed with modularity in mind; the below flowchart sums up the current functionality and overall layout of PyPortfolioOpt. @@ -82,8 +89,8 @@ Efficient Frontier Optimisation =============================== Efficient Frontier Optimisation is based on Harry Markowitz's 1952 classic [1]_, which -turned portfolio management into a science. The key insight is that by combining -assets with different expected returns and volatilities, one can decide on a +turned portfolio management from an art into a science. The key insight is that by +combining assets with different expected returns and volatilities, one can decide on a mathematically optimal allocation. If :math:`w` is the weight vector of stocks with expected returns :math:`\mu`, then the @@ -245,6 +252,25 @@ The result of this has far fewer negligible weights than before:: 'JPM': 0.0, 'SBUX': 0.05489} +In practice, we then need to convert these weights into an actual allocation, +telling you how many shares of each asset you should purchase. This is discussed +in :ref:`post-processing`. + +Improving performance +--------------------- + +Let us say you have conducted backtests and the results aren't spectacular. What +should you try? + +- Drop the expected returns. There is a large body of research that suggests that + minimum variance portfolios consistently outperform maximum Sharpe ratio portfolios + out-of-sample, because of the dififuclty of forecasting expected returns. +- Try different risk models: different asset classes may require different risk models. +- Tune the L2 regularisation parameter to see how diversification affects the + performance. +- Try a different optimiser: see the :ref:`other-optimisers` section for some + possibilities. + This concludes the guided tour. Head over to the appropriate sections in the sidebar to learn more about the parameters and theoretical details of the different functionality offered by PyPortfolioOpt. diff --git a/docs/index.rst b/docs/index.rst index 72269647..6e4856d4 100755 --- a/docs/index.rst +++ b/docs/index.rst @@ -22,8 +22,10 @@ -PyPortfolioOpt is a library that implements widely-used classical portfolio optimisation -techniques, with a number of experimental features. It is **extensive** yet easily +PyPortfolioOpt is a library that implements portfolio optimisation methods, including +classical efficient frontier techniques as well as recent developments in the field +like shrinkage and CVaR optimisation, along with some novel experimental features. +It is **extensive** yet easily **extensible**, and can be useful for both the casual investor and the serious practitioner. Whether you are a fundamentals-oriented investor who has identified a handful of undervalued picks, or an algorithmic trader who has a basket of @@ -74,8 +76,8 @@ A Quick Example This section contains a quick look at what PyPortfolioOpt can do. For a full tour, please check out the :ref:`user-guide`. -If you already have expected returns and a risk model for your set of assets, -generating an optimal portfolio is as easy as: +If you already have expected returns ``mu`` and a risk model ``S`` for your set of +assets, generating an optimal portfolio is as easy as: .. code:: python @@ -84,7 +86,7 @@ generating an optimal portfolio is as easy as: ef = EfficientFrontier(mu, S) weights = ef.max_sharpe() -However, if you would like to use PyPortfolioOpt's built in methods of +However, if you would like to use PyPortfolioOpt's built-in methods for calculating the expected returns and covariance matrix from historical data, that's fine too. @@ -126,18 +128,31 @@ Contents ExpectedReturns RiskModels EfficientFrontier + OtherOptimisers Postprocessing Roadmap Contributing About +Advantages over existing implementations +======================================== + +- Includes both classical methods (Markowitz 1952), suggested best practices + (e.g covariance shrinkage), along with many recent developments and novel + features, like L2 regularisation, shrunk covariance, hierarchical risk parity. +- Native support for pandas dataframes: easily input your daily prices data. +- Extensive practical tests, which use real-life data. +- Easy to combine with your own proprietary strategies and models. +- Robust to missing data, and price-series of different lengths (e.g FB data + only goes back to 2012 whereas AAPL data goes back to 1980). + Project principles and design decisions ======================================= - It should be easy to swap out individual components of the optimisation process with the user's proprietary improvements. -- User-friendliness is **everything**. +- Usability is everything: it is better to be self-explanatory than consistent. - There is no point in portfolio optimisation unless it can be practically applied to real asset prices. - Everything that has been implemented should be tested. @@ -145,22 +160,9 @@ Project principles and design decisions The two are not mutually exclusive. - Formatting should never get in the way of good code: because of this, I have deferred **all** formatting decisions to `Black - `_. Initially some of its decisions irritated me, - but it is extremely consistent and actually quite elegant. + `_. -Advantages over existing implementations -======================================== - -- Includes both classical methods (Markowitz 1952), and more recent developments - (covariance shrinkage), as well as experimental features such as - L2-regularised weights. -- Native support for pandas dataframes: easily input your daily prices data. -- Clear and comprehensive documentation, hosted on ReadTheDocs (coming soon) -- Extensive practical tests, which use real-life data. -- Easy to combine with your own proprietary strategies and models. -- Robust to missing data, and price-series of different lengths (e.g FB data - only goes back to 2012 whereas AAPL data goes back to 1980). Indices and tables From aafb0ea22007ce4eaee40117363e44485ca961fc Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 12:22:52 +0100 Subject: [PATCH 25/36] updated roadmap and changelog --- docs/Roadmap.rst | 44 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/docs/Roadmap.rst b/docs/Roadmap.rst index 9daaad2b..e4950f37 100644 --- a/docs/Roadmap.rst +++ b/docs/Roadmap.rst @@ -1,19 +1,55 @@ .. _roadmap: -####### +##################### +Roadmap and Changelog +##################### + + Roadmap -####### +======= These are some of the things that I am thinking of adding in the near future. If you have any other feature requests, please raise them using GitHub `issues `_ - Custom utility functions, including risk aversion -- Plotting the efficient frontier. -- More optimisation goals, including the Calmar Ratio, Sortino Ratio, etc. +- Plotting the efficient frontier +- Different optimisation objectives - Monte Carlo optimisation with custom distributions - Black-Litterman portfolio selection - Open-source backtests using either `Backtrader `_ or `Zipline `_. - Genetic optimisation methods (tentative) - Further support for different risk/return models + + +0.2.0 +===== + +- Hierarchical Risk Parity optimisation +- Semicovariance matrix +- Exponential covariance matrix +- CVaR optimisation +- Better support for custom objective functions +- Multiple bug fixes (including minimum volatility vs minimum variance) +- Refactored so all optimisers inherit from a ``BaseOptimizer``. + + +0.1.1 +----- + +Minor bug fixes and documentation + + +0.1.0 +===== + +Initial release: + +- Efficient frontier (max sharpe, min variance, target risk/return) +- L2 regularisation +- Discrete allocation +- Mean historical returns, exponential mean returns +- Sample covariance, sklearn wrappers. +- Tests +- Docs From 5dcd6b11c49eef612239065100b9101dbf846332 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 12:43:17 +0100 Subject: [PATCH 26/36] updated docs v0.2.0 --- docs/ExpectedReturns.rst | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/docs/ExpectedReturns.rst b/docs/ExpectedReturns.rst index 54100864..dd7df446 100755 --- a/docs/ExpectedReturns.rst +++ b/docs/ExpectedReturns.rst @@ -4,25 +4,32 @@ Expected Returns ################ -Mean-variance optimisation requires knowledge of the mean returns. In practice, these -are rather difficult to know with any certainty. Thus the best we can do is to come up -with estimates; one way is to extrapolate historical price data. This is where the main -flaw in efficient frontier lies – the optimisation procedure is sound, and provides +Mean-variance optimisation requires knowledge of the expected returns. In practice, +these are rather difficult to know with any certainty. Thus the best we can do is to +come up with estimates, for example by extrapolating historical data, This is where the +main flaw in efficient frontier lies – the optimisation procedure is sound, and provides strong mathematical guarantees, *given the correct inputs*. This is one of the reasons why I have emphasised modularity: users should be able to come up with their own superior models and feed them into the optimiser. +.. caution:: + + In my experience, supplying expected returns often does more harm than good. If + predicting stock returns were as easy as calcualting the mean historical return, + we'd all be rich! For most use-cases, I would suggest that you focus your efforts + on choosing an appropriate risk model (see :ref:`risk-models`) + .. automodule:: pypfopt.expected_returns .. autofunction:: mean_historical_return This is probably the default textbook approach. It is intuitive and easily interpretable, - however the estimates are unlikely to be accurate. That being said, one of the advantages - of efficient frontier is that the estimation error is reduced by having multiple assets, so - perhaps this inaccuracy is not such an issue. In some informal backtests, I've found - that vanilla efficient frontier portfolios (using mean historical returns and sample covariance) - actually do have a statistically significant outperformance over the S&P500 (in the order of - 3-5%). At some stage, I may redo these backtests rigorously and add them to the repo + however the estimates are unlikely to be accurate. This is a problem especially in the + context of a quadratic optimiser, which will maximise the erroneous inputs, In some informal + backtests, I've found that vanilla efficient frontier portfolios (using mean historical + returns and sample covariance) actually do have a statistically significant outperformance + over the S&P500 (in the order of 3-5%), though the same isn't true for cryptoasset portfolios. + At some stage, I may redo these backtests rigorously and add them to the repo (see the :ref:`roadmap` page for more). From 3d1d62574d620f310f8d649ebfee92e073d0e018 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 12:51:40 +0100 Subject: [PATCH 27/36] updated docs v0.2.0 --- docs/RiskModels.rst | 64 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 15 deletions(-) diff --git a/docs/RiskModels.rst b/docs/RiskModels.rst index 09441fd4..61b41455 100644 --- a/docs/RiskModels.rst +++ b/docs/RiskModels.rst @@ -1,21 +1,32 @@ +.. _risk-models: + ########### Risk Models ########### -In addition to the expected asset returns, mean-variance optimisation requires a -**risk model**, some way of quantifying asset risk. The most common risk model is -probably the covariance matrix, a statistical entity that describes the +In addition to the expected returns, mean-variance optimisation requires a +**risk model**, some way of quantifying asset risk. The most commonly-use risk model +is the covariance matrix, a statistical entity that describes the volatility of asset returns and how they vary with one another. This is important because one of the principles of diversification is that risk can be reduced by making many uncorrelated bets (and correlation is just normalised covariance). +In many ways, the subject of risk models is far more important than that of +expected returns because historical variance is generally a much more predictive +statistic than mean historical returns. In fact, research by Kritzman et +al. (2010) [1]_ suggests that minimum variance portfolios, which neglect to +provide expected returns, actually perform much better out of sample. + The problem, however, is that in practice we do not have access to the covariance matrix (in the same way that we don't have access to expected returns) – the only thing we can do is to make estimates based on past data. The most straightforward approach is to just calculate the **sample covariance matrix** based on historical returns, but relatively recent (post-2000) research indicates that there are much -more robust statistical estimators of the covariance matrix. +more robust statistical estimators of the covariance matrix. In addition to +providing a wrapper around the estimators in ``sklearn``, PyPortfolioOpt +provides some novel alternatives such as semicovariance and exponentially weighted +covariance. .. attention:: @@ -29,7 +40,7 @@ more robust statistical estimators of the covariance matrix. .. autofunction:: sample_cov - Much like the mean historical return, this is the textbook default approach. The + This is the textbook default approach. The entries in the sample covariance matrix (which we denote as *S*) are the sample covariances between the *i* th and *j* th asset (the diagonals consist of variances). Although the sample covariance matrix is an unbiased estimator of the @@ -43,6 +54,27 @@ more robust statistical estimators of the covariance matrix. This should *not* be your default choice! Please use a shrinkage estimator instead. + .. autofunction:: semicovariance + + The semivariance is the variance of all returns which are below some benchmark *B* + (typically the mean) – it is a common measure of downside risk. There are multiple + possible ways of defining a semicovariance matrix, the main differences lying in + the 'pairwise' nature, i.e whether we should sum over :math:`\min(r_i,B)\min(r_j,B)` + or :math:`\min(r_ir_j, B)`. In this implementation, we have followed the advice of + Estrada 2007 [2]_, preferring: + + .. math:: + \frac{1}{n}\sum_{i = 1}^n {\sum_{j = 1}^n {\min \left( {{r_i},0} \right)} } + \min \left( {{r_j},0} \right) + + .. autofunction:: exp_cov + + The exponential covariance matrix is a novel way of giving more weight to + recent data when calculating covariance, in the same way that the exponential + moving average price is often preferred to the simple average price. For a full + explanation of how this estimator works, please refer to the + `blog post `_ + on my academic website. .. autofunction:: min_cov_determinant @@ -56,11 +88,11 @@ Shrinkage estimators ==================== A great starting point for those interested in understanding shrinkage estimators is -*Honey, I Shrunk the Sample Covariance Matrix* [1]_ by Ledoit and Wolf, which does a +*Honey, I Shrunk the Sample Covariance Matrix* [5]_ by Ledoit and Wolf, which does a good job at capturing the intuition behind them – we will adopt the notation used therein. I have written a summary of this article, which is available -on my `website `_. -A more rigorous reference can be found in Ledoit and Wolf (2001) [2]_. +on my `website `_. +A more rigorous reference can be found in Ledoit and Wolf (2001) [6]_. The essential idea is that the unbiased but often misspecified sample covariance can be combined with a structured estimator :math:`F`, using the below formula (where @@ -85,8 +117,8 @@ The optimal shrinkage constant :math:`\delta` depends on the choice of shrinkage target, and the actual formula for the constant depends on the implementation. PyPortfolioOpt offers two methods for calculating the shrinkage constant: -- Ledoit-Wolf shrinkage, using the formulae in their 2004 paper [5]_. -- Oracle approximating shrinkage (OAS), invented by Chen et al. (2010) [6]_, which +- Ledoit-Wolf shrinkage, using the formulae in their 2004 paper [7]_. +- Oracle approximating shrinkage (OAS), invented by Chen et al. (2010) [8]_, which has a lower mean-squared error than Ledoit-Wolf shrinkage when samples are Gaussian or near-Gaussian. @@ -106,9 +138,11 @@ PyPortfolioOpt offers two methods for calculating the shrinkage constant: References ========== -.. [1] Ledoit, O., & Wolf, M. (2003). `Honey, I Shrunk the Sample Covariance Matrix `_ The Journal of Portfolio Management, 30(4), 110–119. https://doi.org/10.3905/jpm.2004.110 -.. [2] Ledoit, O., & Wolf, M. (2001). `Improved estimation of the covariance matrix of stock returns with an application to portfolio selection `_, 10, 603–621. -.. [3] Rousseeuw, P., J (1984). `Least median of squares regression `_. The Journal of the American Statistical Association, 79, 871-880. +.. [1] Kritzman, Page & Turkington (2010) `In defense of optimization: The fallacy of 1/N `_. Financial Analysts Journal, 66(2), 31-39. +.. [2] Estrada (2006), `Mean-Semivariance Optimization: A Heuristic Approach `_ +.. [3] Rousseeuw, P., J (1984). `Least median of squares regression `_. The Journal of the American Statistical Association, 79, 871-880. .. [4] Rousseeuw, P., J (1999). `A Fast Algorithm for the Minimum Covariance Determinant Estimator `_. The Journal of the American Statistical Association, 41, 212-223. -.. [5] Ledoit, O., & Wolf, M. (2004) `A Well-Conditioned Estimator for Large-Dimensional Covariance Matrices `_, Journal of Multivariate Analysis, 88(2), 365-411 -.. [6] Chen et al. (2010), `Shrinkage Algorithms for MMSE Covariance Estimation `_, IEEE Transactions on Signals Processing, 58(10), 5016-5029. +.. [5] Ledoit, O., & Wolf, M. (2003). `Honey, I Shrunk the Sample Covariance Matrix `_ The Journal of Portfolio Management, 30(4), 110–119. https://doi.org/10.3905/jpm.2004.110 +.. [6] Ledoit, O., & Wolf, M. (2001). `Improved estimation of the covariance matrix of stock returns with an application to portfolio selection `_, 10, 603–621. +.. [7] Ledoit, O., & Wolf, M. (2004) `A Well-Conditioned Estimator for Large-Dimensional Covariance Matrices `_, Journal of Multivariate Analysis, 88(2), 365-411 +.. [8] Chen et al. (2010), `Shrinkage Algorithms for MMSE Covariance Estimation `_, IEEE Transactions on Signals Processing, 58(10), 5016-5029. From dd23d465fd2d4d06f0ff5b01ab48b4f093470b0e Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 12:52:25 +0100 Subject: [PATCH 28/36] updated docs v0.2.0 --- docs/EfficientFrontier.rst | 48 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/docs/EfficientFrontier.rst b/docs/EfficientFrontier.rst index 2ca1921c..cc738d4f 100644 --- a/docs/EfficientFrontier.rst +++ b/docs/EfficientFrontier.rst @@ -11,6 +11,10 @@ between the optimisation objective and the actual optimisation method – if we wanted to use something other than mean-variance optimisation via quadratic programming, these objective functions would still be applicable. +It should be noted that while efficient frontier optimisation is technically a very +specific method, I tend to use it as a blanket term (interchangeably with mean-variance +optimisation) to refer to anything similar, such as minimising variance. + Optimisation ============ @@ -29,6 +33,7 @@ magnitude, I will definitely consider switching. .. autoclass:: EfficientFrontier :members: + :exclude-members: custom_objective .. automethod:: __init__ @@ -65,7 +70,7 @@ if you need a certain number of assets in your portfolio. In order to coerce the efficient frontier optimiser to produce more non-negligible weights, I have added what can be thought of as a "small weights penalty" to all of the objective functions, parameterised by :math:`\gamma` (``gamma``). Considering -the minimum volatility objective for instance, we have: +the minimum variance objective for instance, we have: .. math:: \underset{w}{\text{minimise}} ~ \left\{w^T \Sigma w \right\} ~~~ \longrightarrow ~~~ @@ -78,7 +83,8 @@ negligible weights, because it has a minimum value when all weights are equally distributed, and maximum value in the limiting case where the entire portfolio is allocated to one asset. I refer to it as **L2 regularisation** because it has exactly the same form as the L2 regularisation term in machine learning, though -a slightly different purpose (in ML it is used to keep weights small). +a slightly different purpose (in ML it is used to keep weights small while here it is +used to make them larger). .. note:: @@ -87,3 +93,41 @@ a slightly different purpose (in ML it is used to keep weights small). (less than 20 assets), then ``gamma=1`` is a good starting point. For larger universes, or if you want more non-negligible weights in the final portfolio, increase ``gamma``. + + +Custom objectives +================= + +Though it is simple enough to modify ``objective_functions.py`` to implement +a custom objective (indeed, this is the recommended approach for long-term use), +I understand that most users would find it much more convenient to pass a +custom objective into the optimiser without having to edit the source files. + +Thus, v0.2.0 introduces a simple API within the ``EfficientFrontier`` object for +optimising your own objective function. + +The first step is to define the objective function, which must take an array +of weights as input (with optional additional arguments), and return a single +float corresponding to the cost. As an example, we will pretend that L2 +regularisation is not built-in and re-implement it below: + + +.. code:: python + + def my_objective_function(weights, cov_matrix, k): + variance = np.dot(weights.T, np.dot(cov_matrix, weights)) + return variance + k * (weights ** 2).sum() + +Next, we instantiate the ``EfficientFrontier`` object, and pass the objectives +function (and all required arguments) into ``custom_objective()``, + +.. code:: python + + ef = EfficientFrontier(mu, S) + weights = ef.custom_objective(my_objective_function, ef.cov_matrix, 0.3) + + +.. caution:: + It is assumed that the objective function you define will be solvable + by sequential quadratic programming. If this isn't the case, you may + experience silent failure. From 8ffee301f84b53cc1b4db787a0662615f3cc6165 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 12:54:14 +0100 Subject: [PATCH 29/36] added docs for otheroptimisers --- docs/OtherOptimisers.rst | 93 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 docs/OtherOptimisers.rst diff --git a/docs/OtherOptimisers.rst b/docs/OtherOptimisers.rst new file mode 100644 index 00000000..f497b540 --- /dev/null +++ b/docs/OtherOptimisers.rst @@ -0,0 +1,93 @@ +.. _other-optimisers: + +################ +Other Optimisers +################ + +In addition to optimisers that rely on the covariance matrix in the style of +Markowitz, recent developments in portfolio optimisation have seen a number +of alternative optimisation schemes. + +Value-at-Risk +============= + +The value-at-risk is a measure of tail risk that estimates how much a portfolio +will lose in a day with a given probability. Alternatively, it is the maximum +loss with a confidence of beta. In fact, a more useful measure is the +**expected shortfall**, or **conditional value-at-risk** (CVaR), which is the +mean of all losses so severe that they only occur with a probability +:math:`1-\beta`. + +.. math:: + CVaR_\beta = \frac{1}{1-\beta} \int_0^{1-\beta} VaR_\gamma(X) d\gamma + +To approximate the CVaR for a portfolio, we will follow these steps: + +1. Generate the portfolio returns, i.e the weighted sum of individual asset returns. +2. Fit a Gaussian KDE to these returns, then resample. +3. Compute the value-at-risk as the :math:`1-\beta` quantile of sampled returns. +4. Calculate the mean of all the sample returns that are below the value-at-risk. + +Though CVaR optimisation can be transformed into a linear programming problem [1]_, I +have opted to keep things simple using the `NoisyOpt `_ +library, which is suited for optimising noisy functions. + +.. warning:: + Caveat emptor: this functionality is still experimental. Although I have + used the CVaR optimisation, I've noticed that it is very inconsistent + (which to some extent is expected because of its stochastic nature). + However, the optimiser doesn't always find a minimum, and it fails + silently. + + +.. automodule:: pypfopt.value_at_risk + + .. autoclass:: CVAROpt + :members: + + .. automethod:: __init__ + + .. caution:: + + It should be reiterated that the CVaR currently does not respect + the bounds: changing the bounds has some effect, but does not + determine the final bounds. + + .. caution:: + Currently, we have not implemented any performance function. If you + would like to calculate the actual CVaR of the resulting portfolio, + please import the function from `objective_functions`. + + +Hierarchical Risk Parity (HRP) +============================== + +Hierarchical Risk Parity is a novel portfolio optimisation method developed by +Marcos Lopez de Prado [2]_. Though a detailed explanation can be found in the +linked paper, here is a rough overview of how HRP works: + + +1. From a universe of assets, form a distance matrix based on the correlation + of the assets. +2. Using this distance matrix, cluster the assets into a tree via hierarchical + clustering +3. Within each branch of the tree, form the minimum variance portfolio (normally + between just two assets). +4. Iterate over each level, optimally combining the mini-portfolios at each node. + + +The advantages of this are that it does not require inversion of the covariance +matrix as with traditional quadratic optimisers, and seems to produce diverse +portfolios that perform well out of sample. + + +.. automodule:: pypfopt.hierarchical_risk_parity + + .. autofunction:: hrp_portfolio + + +References +========== + +.. [1] Rockafellar and Uryasev (2011) `Optimization of conditional value-at-risk `_. +.. [2] López de Prado, M. (2016). `Building Diversified Portfolios that Outperform Out of Sample `_. The Journal of Portfolio Management, 42(4), 59–69. From 0b094eb689d57b1d3b7f04d47eac87a5f652bf40 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 12:54:23 +0100 Subject: [PATCH 30/36] added link --- docs/Postprocessing.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/Postprocessing.rst b/docs/Postprocessing.rst index 94c1904a..53f714aa 100644 --- a/docs/Postprocessing.rst +++ b/docs/Postprocessing.rst @@ -1,3 +1,5 @@ +.. _post-processing: + ####################### Post-processing weights ####################### From 2702c5c7aca2221b91cfd10ed8991ddde8ed56b8 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 13:00:08 +0100 Subject: [PATCH 31/36] updated readme --- README.md | 60 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index a42e108d..343e448b 100755 --- a/README.md +++ b/README.md @@ -42,14 +42,14 @@ Head over to the [documentation on ReadTheDocs](https://pyportfolioopt.readthedo - [Getting started](#getting-started) - [For development](#for-development) - [A quick example](#a-quick-example) -- [Project principles and design decisions](#project-principles-and-design-decisions) -- [Advantages over existing implementations](#advantages-over-existing-implementations) - [An overview of classical portfolio optimisation methods](#an-overview-of-classical-portfolio-optimisation-methods) - [Features](#features) - [Expected returns](#expected-returns) - - [Covariance](#covariance) + - [Risk models (covariance)](#risk-models-covariance) - [Objective functions](#objective-functions) - [Optional parameters](#optional-parameters) +- [Advantages over existing implementations](#advantages-over-existing-implementations) +- [Project principles and design decisions](#project-principles-and-design-decisions) - [Roadmap](#roadmap) - [Testing](#testing) - [Contributing](#contributing) @@ -156,24 +156,6 @@ Funds remaining: $12.15 *Disclaimer: nothing about this project constitues investment advice, and the author bears no responsibiltiy for your subsequent investment decisions. Please refer to the [license](https://github.com/robertmartin8/PyPortfolioOpt/blob/master/LICENSE.txt) for more information.* -## Project principles and design decisions - -- It should be easy to swap out individual components of the optimisation process with the user's proprietary improvements. -- User-friendliness is **everything**. -- There is no point in portfolio optimisation unless it can be practically applied to real asset prices. -- Everything that has been implemented should be tested. -- Inline documentation is good: dedicated (separate) documentation is better. The two are not mutually exclusive. -- Formatting should never get in the way of good code: because of this I have deferred **all** formatting decisions to [Black](https://github.com/ambv/black). Initially, some of its decisions irritated me, but it is extremely consistent and actually quite elegant. - -## Advantages over existing implementations - -- Includes both classical methods (Markowitz 1952), and more recent developments (covariance shrinkage), as well as experimental features such as L2-regularised weights. -- Native support for pandas dataframes: easily input your daily prices data. -- Clear and comprehensive [documentation](https://pyportfolioopt.readthedocs.io/en/latest/), hosted on ReadTheDocs. -- Extensive practical tests, which use real-life data. -- Easy to combine with your own proprietary strategies and models. -- Robust to missing data, and price-series of different lengths (e.g FB data only goes back to 2012, whereas AAPL data goes back to 1980). - ## An overview of classical portfolio optimisation methods Harry Markowitz's 1952 paper is the undeniable classic, which turned portfolio optimisation from an art into a science. The key insight is that by combining assets with different expected returns and volatilities, one can decide on a mathematically optimal allocation which minimises the risk for a target return – the set of all such optimal portfolios is referred to as the **efficient frontier**. @@ -202,7 +184,7 @@ A far more comprehensive version of this can be found on [ReadTheDocs](https://p - similar to mean historical returns, except it gives exponentially more weight to recent prices - it is likely the case that an asset's most recent returns hold more weight than returns from 10 years ago when it comes to estimating future returns. -### Covariance +### Risk models (covariance) The covariance matrix encodes not just the volatility of an asset, but also how it correlated to other assets. This is important because in order to reap the benefits of diversification (and thus increase return per unit risk), the assets in the portfolio should be as uncorrelated as possible. @@ -211,6 +193,8 @@ The covariance matrix encodes not just the volatility of an asset, but also how - relatively easy to compute - the de facto standard for many years - however, it has a high estimation error, which is particularly dangerous in mean-variance optimisation because the optimiser is likely to give excess weight to these erroneous estimates. +- Semicovariance: a measure of risk that focuses on downside variation. +- Exponential covariance: an improvement over sample covariance that gives more weight to recent data - Covariance shrinkage: techniques that involve combining the sample covariance matrix with a structured estimator, in order to reduce the effect of erroneous weights. PyPortfolioOpt provides wrappers around the efficient vectorised implementations provided by `sklearn.covariance`. - manual shrinkage - Ledoit Wolf shrinkage, which chooses an optimal shrinkage parameter @@ -221,10 +205,11 @@ The covariance matrix encodes not just the volatility of an asset, but also how ### Objective functions -- Maximum Sharpe ratio: this is also called the *tangency portfolio* because on a graph of returns vs risk, this portfolio corresponds to the tangent of the efficient frontier that has a y-intercept equal to the risk-free rate. This is the default option because it finds the optimal return per unit risk. +- Maximum Sharpe ratio: this results in a *tangency portfolio* because on a graph of returns vs risk, this portfolio corresponds to the tangent of the efficient frontier that has a y-intercept equal to the risk-free rate. This is the default option because it finds the optimal return per unit risk. - Minimum volatility. This may be useful if you're trying to get an idea of how low the volatility *could* be, but in practice it makes a lot more sense to me to use the portfolio that maximises the Sharpe ratio. - Efficient return, a.k.a. the Markowitz portfolio, which minimises risk for a given target return – this was the main focus of Markowitz 1952 - Efficient risk: the Sharpe-maximising portfolio for a given target risk. +- Condiitional value-at-risk: a measure of tail loss ### Optional parameters @@ -254,6 +239,31 @@ ef = EfficientFrontier(mu, S, gamma=1) ef.max_sharpe() ``` +## Advantages over existing implementations + +- Includes both classical methods (Markowitz 1952), suggested best practices + (e.g covariance shrinkage), along with many recent developments and novel + features, like L2 regularisation, shrunk covariance, hierarchical risk parity. +- Native support for pandas dataframes: easily input your daily prices data. +- Extensive practical tests, which use real-life data. +- Easy to combine with your own proprietary strategies and models. +- Robust to missing data, and price-series of different lengths (e.g FB data + only goes back to 2012 whereas AAPL data goes back to 1980). + +## Project principles and design decisions + +- It should be easy to swap out individual components of the optimisation process + with the user's proprietary improvements. +- Usability is everything: it is better to be self-explanatory than consistent. +- There is no point in portfolio optimisation unless it can be practically + applied to real asset prices. +- Everything that has been implemented should be tested. +- Inline documentation is good: dedicated (separate) documentation is better. + The two are not mutually exclusive. +- Formatting should never get in the way of good code: because of this, + I have deferred **all** formatting decisions to `Black + `_. + ## Roadmap Feel free to raise an issue requesting any new features – here are some of the things I want to implement: @@ -284,7 +294,9 @@ PyPortfolioOpt provides a test dataset of daily returns for 20 tickers: - different performances and volatilities - different amounts of data to test robustness -Currently, the tests have not explored all of the edge cases, however I have investigated the experimental features like L2 regularisation. Additionally, the tests currently have not satisfactorily tested all combinations of objective function and options. +Currently, the tests have not explored all of the edge cases and combinations +of objective functions and parameters. However, each method and parameter has +been tested to work as intended. ## Contributing From 2c4e9f3dc48a169acfad05ae13e93832f2393d1f Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 13:00:20 +0100 Subject: [PATCH 32/36] minor refactors --- pypfopt/hierarchical_risk_parity.py | 91 +++++++++++++++++++++++++++++ pypfopt/value_at_risk.py | 2 +- 2 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 pypfopt/hierarchical_risk_parity.py diff --git a/pypfopt/hierarchical_risk_parity.py b/pypfopt/hierarchical_risk_parity.py new file mode 100644 index 00000000..0bc795ff --- /dev/null +++ b/pypfopt/hierarchical_risk_parity.py @@ -0,0 +1,91 @@ +""" +The ``hierarchical_risk_parity`` module implements the HRP portfolio from Marcos Lopez de Prado. +Call ``hrp_portfolio(returns)`` to generate portfolio weights. +""" +import numpy as np +import pandas as pd +import scipy.cluster.hierarchy as sch +import scipy.spatial.distance as ssd + +# This code has been reproduced(with modification) from the paper: +# López de Prado, M. (2016). Building Diversified Portfolios that Outperform Out of Sample. +# The Journal of Portfolio Management, 42(4), 59–69. https: // doi.org / 10.3905 / jpm.2016.42.4.059 + + +def _get_cluster_var(cov, cluster_items): + # Compute variance per cluster + cov_slice = cov.loc[cluster_items, cluster_items] + weights = 1 / np.diag(cov_slice) # Inverse variance weights + weights /= weights.sum() + w = weights.reshape(-1, 1) + cluster_var = np.dot(np.dot(w.T, cov_slice), w)[0, 0] + return cluster_var + + +def _get_quasi_diag(link): + # Sort clustered items by distance + link = link.astype(int) + sort_ix = pd.Series([link[-1, 0], link[-1, 1]]) + num_items = link[-1, -1] # number of original items + while sort_ix.max() >= num_items: + sort_ix.index = range(0, sort_ix.shape[0] * 2, 2) # make space + df0 = sort_ix[sort_ix >= num_items] # find clusters + i = df0.index + j = df0.values - num_items + sort_ix[i] = link[j, 0] # item 1 + df0 = pd.Series(link[j, 1], index=i + 1) + sort_ix = sort_ix.append(df0) # item 2 + sort_ix = sort_ix.sort_index() # re-sort + sort_ix.index = range(sort_ix.shape[0]) # re-index + + return sort_ix.tolist() + + +def _raw_hrp_allocation(cov, ordered_tickers): + # Compute HRP allocation + w = pd.Series(1, index=ordered_tickers) + cluster_items = [ordered_tickers] # initialize all items in one cluster + + while len(cluster_items) > 0: + cluster_items = [ + i[j:k] + for i in cluster_items + for j, k in ((0, len(i) // 2), (len(i) // 2, len(i))) + if len(i) > 1 + ] # bi-section + # For each pair, optimise locally. + for i in range(0, len(cluster_items), 2): + first_cluster = cluster_items[i] + second_cluster = cluster_items[i + 1] + # Form the inverse variance portfolio for this pair + first_variance = _get_cluster_var(cov, first_cluster) + second_variance = _get_cluster_var(cov, second_cluster) + alpha = 1 - first_variance / (first_variance + second_variance) + w[first_cluster] *= alpha # weight 1 + w[second_cluster] *= 1 - alpha # weight 2 + return w + + +def hrp_portfolio(returns): + """ + Construct a hierarchical risk parity portfolio + + :param returns: asset historical returns + :type returns: pd.DataFrame + :return: weights for the HRP portfolio + :rtype: dict + :raises TypeError: if ``returns`` is not a dataframe + """ + if not isinstance(returns, pd.DataFrame): + raise TypeError("returns are not a dataframe") + corr, cov = returns.corr(), returns.cov() + + # Compute distance matrix, with ClusterWarning fix as + # per https://stackoverflow.com/questions/18952587/ + dist = ssd.squareform(((1 - corr) / 2) ** 0.5) + + link = sch.linkage(dist, "single") + sort_ix = _get_quasi_diag(link) + ordered_tickers = corr.index[sort_ix].tolist() + hrp = _raw_hrp_allocation(cov, ordered_tickers) + return dict(hrp.sort_index()) diff --git a/pypfopt/value_at_risk.py b/pypfopt/value_at_risk.py index 51b06a9f..5be20f52 100644 --- a/pypfopt/value_at_risk.py +++ b/pypfopt/value_at_risk.py @@ -45,7 +45,7 @@ def __init__(self, returns, weight_bounds=(0, 1)): :type weight_bounds: tuple, optional :raises TypeError: if ``returns`` is not a dataframe """ - if not isinstance(returns, pd.DataFrame,): + if not isinstance(returns, pd.DataFrame): raise TypeError("returns are not a dataframe") self.returns = returns self.tickers = returns.columns From 37abf8d01ec66e9fe2c79bc4d9a2ab81aca677b7 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 13:02:44 +0100 Subject: [PATCH 33/36] added noisyopt dependency --- requirements.txt | 1 + setup.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 9a53f305..b17d43aa 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,7 @@ atomicwrites==1.1.5 attrs==18.1.0 more-itertools==4.2.0 +noisyopt==0.2.2 numpy==1.14.3 pandas>=0.21.0 pluggy==0.6.0 diff --git a/setup.py b/setup.py index 7dfec316..846e9df6 100755 --- a/setup.py +++ b/setup.py @@ -35,7 +35,7 @@ "Topic :: Scientific/Engineering :: Mathematics", ], keywords="portfolio finance optimization quant trading investing", - install_requires=["numpy", "pandas", "scikit-learn", "scipy"], + install_requires=["numpy", "pandas", "scikit-learn", "scipy", "noisyopt"], setup_requires=["pytest-runner"], tests_require=["pytest"], python_requires=">=3", From 28292c1c9931551505cda0e6455c55dd6330b062 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 13:37:35 +0100 Subject: [PATCH 34/36] added v0.2.0 examples --- examples.py | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/examples.py b/examples.py index bb4ca915..5da84721 100644 --- a/examples.py +++ b/examples.py @@ -1,12 +1,16 @@ import pandas as pd +import numpy as np from pypfopt.efficient_frontier import EfficientFrontier from pypfopt import risk_models from pypfopt import expected_returns +from pypfopt.hierarchical_risk_parity import hrp_portfolio +from pypfopt.value_at_risk import CVAROpt from pypfopt import discrete_allocation # Reading in the data; preparing expected returns and a risk model df = pd.read_csv("tests/stock_prices.csv", parse_dates=True, index_col="date") +returns = df.pct_change().dropna(how="all") mu = expected_returns.mean_historical_return(df) S = risk_models.sample_cov(df) @@ -91,3 +95,84 @@ Annual volatility: 16.5% Sharpe Ratio: 1.09 """ + + +# Custom objective +def utility_obj(weights, mu, cov_matrix, k=1): + return -weights.dot(mu) + k * np.dot(weights.T, np.dot(cov_matrix, weights)) + + +ef = EfficientFrontier(mu, S) +ef.custom_objective(utility_obj, ef.expected_returns, ef.cov_matrix, 1) +ef.portfolio_performance(verbose=True) + +""" +Expected annual return: 40.1% +Annual volatility: 29.2% +Sharpe Ratio: 1.30 +""" + +ef.custom_objective(utility_obj, ef.expected_returns, ef.cov_matrix, 2) +ef.portfolio_performance(verbose=True) + +""" +Expected annual return: 36.6% +Annual volatility: 24.7% +Sharpe Ratio: 1.39 +""" + +# CVaR optimisation +vr = CVAROpt(returns) +vr.min_cvar() +print(vr.clean_weights()) + +""" +{'GOOG': 0.10886, + 'AAPL': 0.0, + 'FB': 0.02598, + 'BABA': 0.57691, + 'AMZN': 0.0, + 'GE': 0.01049, + 'AMD': 0.0138, + 'WMT': 0.01581, + 'BAC': 0.01049, + 'GM': 0.03463, + 'T': 0.01049, + 'UAA': 0.07782, + 'SHLD': 0.04184, + 'XOM': 0.00931, + 'RRC': 0.0, + 'BBY': 0.01748, + 'MA': 0.03782, + 'PFE': 0.0, + 'JPM': 0.0, + 'SBUX': 0.00828} + """ + + +# Hierarchical risk parity +weights = hrp_portfolio(returns) +print(weights) + +""" +{'AAPL': 0.022258941278778397, + 'AMD': 0.02229402179669211, + 'AMZN': 0.016086842079875, + 'BABA': 0.07963382071794091, + 'BAC': 0.014409222455552262, + 'BBY': 0.0340641943824504, + 'FB': 0.06272994714663534, + 'GE': 0.05519063444162849, + 'GM': 0.05557666024185722, + 'GOOG': 0.049560084289929286, + 'JPM': 0.017675709092515708, + 'MA': 0.03812737349732021, + 'PFE': 0.07786528342813454, + 'RRC': 0.03161528695094597, + 'SBUX': 0.039844436656239136, + 'SHLD': 0.027113184241298865, + 'T': 0.11138956508836476, + 'UAA': 0.02711590957075009, + 'WMT': 0.10569551148587905, + 'XOM': 0.11175337115721229} +""" From b6c7fcca5eb790772fa7de64ff8d80cb801e28ac Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 13:37:45 +0100 Subject: [PATCH 35/36] changed caution notes --- docs/OtherOptimisers.rst | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/docs/OtherOptimisers.rst b/docs/OtherOptimisers.rst index f497b540..a322876d 100644 --- a/docs/OtherOptimisers.rst +++ b/docs/OtherOptimisers.rst @@ -37,7 +37,7 @@ library, which is suited for optimising noisy functions. used the CVaR optimisation, I've noticed that it is very inconsistent (which to some extent is expected because of its stochastic nature). However, the optimiser doesn't always find a minimum, and it fails - silently. + silently. Additionally, the weight bounds are not treated as hard bounds. .. automodule:: pypfopt.value_at_risk @@ -47,12 +47,6 @@ library, which is suited for optimising noisy functions. .. automethod:: __init__ - .. caution:: - - It should be reiterated that the CVaR currently does not respect - the bounds: changing the bounds has some effect, but does not - determine the final bounds. - .. caution:: Currently, we have not implemented any performance function. If you would like to calculate the actual CVaR of the resulting portfolio, @@ -85,6 +79,9 @@ portfolios that perform well out of sample. .. autofunction:: hrp_portfolio +.. note:: + Because the HRP functionality doesn't inherit from ``BaseOptimizer``, you will + have to implement pre-processing and post-processing methods on your own. References ========== From 50dddba48d6ebd3ee266d6c381168b46398b6656 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Sun, 23 Sep 2018 13:37:56 +0100 Subject: [PATCH 36/36] added test for utility objective --- tests/test_custom_objectives.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/test_custom_objectives.py b/tests/test_custom_objectives.py index b5ad86ec..d5dc9083 100644 --- a/tests/test_custom_objectives.py +++ b/tests/test_custom_objectives.py @@ -69,3 +69,22 @@ def deviation_risk_parity(w, cov_matrix): assert set(w.keys()) == set(ef.tickers) assert set(w.keys()) == set(ef.expected_returns.index) np.testing.assert_almost_equal(ef.weights.sum(), 1) + + +def test_custom_utility_objective(): + ef = setup_efficient_frontier() + + def utility_obj(weights, mu, cov_matrix, k=1): + return -weights.dot(mu) + k * np.dot(weights.T, np.dot(cov_matrix, weights)) + + w = ef.custom_objective(utility_obj, ef.expected_returns, ef.cov_matrix, 1) + assert isinstance(w, dict) + assert set(w.keys()) == set(ef.tickers) + assert set(w.keys()) == set(ef.expected_returns.index) + np.testing.assert_almost_equal(ef.weights.sum(), 1) + vol1 = ef.portfolio_performance()[1] + + # If we increase k, volatility should decrease + ef.custom_objective(utility_obj, ef.expected_returns, ef.cov_matrix, 2) + vol2 = ef.portfolio_performance()[1] + assert vol2 < vol1