diff --git a/.github/ISSUE_TEMPLATE/workflows/main.yml b/.github/ISSUE_TEMPLATE/workflows/main.yml index c8a3cf59..d94f0a51 100644 --- a/.github/ISSUE_TEMPLATE/workflows/main.yml +++ b/.github/ISSUE_TEMPLATE/workflows/main.yml @@ -3,7 +3,7 @@ on: pull_request: push: branches: - - master + - main jobs: pytest: diff --git a/.github/workflows/codecov.yml b/.github/workflows/codecov.yml index 0f3083f9..05702f1f 100644 --- a/.github/workflows/codecov.yml +++ b/.github/workflows/codecov.yml @@ -3,7 +3,7 @@ on: pull_request: push: branches: - - master + - main jobs: codecov: diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 478bac0a..baf57714 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,9 +5,9 @@ name: pytest on: push: - branches: ["master"] + branches: ["main"] pull_request: - branches: ["master"] + branches: ["main"] jobs: pytest: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d203e632..72afc817 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,7 +4,7 @@ Please refer to the roadmap for a list of areas that I think PyPortfolioOpt coul from. In addition, the following is always welcome:: - Improve performance of existing code (but not at the cost of readability) – are there any nice numpy tricks I've missed? -- Add new optimization objective functions. For example, if you think that the best performance metric has not been included, write it into a function (or suggest it in [Issues](https://github.com/robertmartin8/PyPortfolioOpt/issues) and I will have a go). +- Add new optimization objective functions. For example, if you think that the best performance metric has not been included, write it into a function (or suggest it in [Issues](https://github.com/pyportfolio/pyportfolioopt/issues) and I will have a go). - Help me write more tests! If you are someone learning about quant finance and/or unit testing in python, what better way to practice than to write some tests on an open-source project! Feel free to check for edge cases, or test performance on a dataset with more stocks. ## Guidelines @@ -31,13 +31,13 @@ I would appreciate if changes are accompanied by relevant documentation – it d ## Questions -If you have any questions related to the project, it is probably easiest to [raise an issue](https://github.com/robertmartin8/PyPortfolioOpt/issues), and I will tag it as a question. +If you have any questions related to the project, it is probably easiest to [raise an issue](https://github.com/pyportfolio/pyportfolioopt/issues), and I will tag it as a question. If you have questions unrelated to the project, drop me an email – contact details can be found on my [website](https://reasonabledeviations.com/about/) ## Bugs/issues -If you find any bugs or the portfolio optimization is not working as expected, feel free to [raise an issue](https://github.com/robertmartin8/PyPortfolioOpt/issues). I would ask that you provide the following information in the issue: +If you find any bugs or the portfolio optimization is not working as expected, feel free to [raise an issue](https://github.com/pyportfolio/pyportfolioopt/issues). I would ask that you provide the following information in the issue: - Descriptive title so that other users can see the existing issues - Operating system, python version, and python distribution (optional). diff --git a/README.md b/README.md index e7a75eda..120df47b 100755 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- +

@@ -16,16 +16,16 @@ MIT license   - - + build   - - + codecov   downloads   - + binder  

@@ -45,10 +45,10 @@ in a risk-efficient way. PyPortfolioOpt is now being maintained by [Tuan Tran](https://github.com/88d52bdba0366127fffca9dfa93895). -Head over to the **[documentation on ReadTheDocs](https://pyportfolioopt.readthedocs.io/en/latest/)** to get an in-depth look at the project, or check out the [cookbook](https://github.com/robertmartin8/PyPortfolioOpt/tree/master/cookbook) to see some examples showing the full process from downloading data to building a portfolio. +Head over to the **[documentation on ReadTheDocs](https://pyportfolioopt.readthedocs.io/en/latest/)** to get an in-depth look at the project, or check out the [cookbook](https://github.com/pyportfolio/pyportfolioopt/tree/main/cookbook) to see some examples showing the full process from downloading data to building a portfolio.
- +
## Table of contents @@ -74,7 +74,7 @@ Head over to the **[documentation on ReadTheDocs](https://pyportfolioopt.readthe ## Getting started -If you would like to play with PyPortfolioOpt interactively in your browser, you may launch Binder [here](https://mybinder.org/v2/gh/robertmartin8/pyportfolioopt/master). It takes a +If you would like to play with PyPortfolioOpt interactively in your browser, you may launch Binder [here](https://mybinder.org/v2/gh/pyportfolio/pyportfolioopt/main). It takes a while to set up, but it lets you try out the cookbook recipes without having to deal with all of the requirements. _Note: macOS users will need to install [Command Line Tools](https://osxdaily.com/2014/02/12/install-command-line-tools-mac-os-x/)._ @@ -126,13 +126,13 @@ For more information, please read [this guide](https://docker-curriculum.com/#in If you would like to make major changes to integrate this with your proprietary system, it probably makes sense to clone this repository and to just use the source code. ```bash -git clone https://github.com/robertmartin8/PyPortfolioOpt +git clone https://github.com/pyportfolio/pyportfolioopt ``` Alternatively, you could try: ```bash -pip install -e git+https://github.com/robertmartin8/PyPortfolioOpt.git +pip install -e git+https://github.com/pyportfolio/pyportfolioopt.git ``` ## A quick example @@ -211,14 +211,14 @@ Discrete allocation: {'GOOG': 1, 'AAPL': 4, 'FB': 12, 'BABA': 4, 'BBY': 2, Funds remaining: $11.89 ``` -_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._ +_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/PyPortfolio/PyPortfolioOpt/blob/main/LICENSE.txt) for more information._ ## An overview of classical portfolio optimization methods Harry Markowitz's 1952 paper is the undeniable classic, which turned portfolio optimization 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**.
- +
Although much development has been made in the subject, more than half a century later, Markowitz's core ideas are still fundamentally important and see daily use in many portfolio management firms. @@ -236,7 +236,7 @@ components while still making use of the framework that PyPortfolioOpt provides. ## Features -In this section, we detail some of PyPortfolioOpt's available functionality. More examples are offered in the Jupyter notebooks [here](https://github.com/robertmartin8/PyPortfolioOpt/tree/master/cookbook). Another good resource is the [tests](https://github.com/robertmartin8/PyPortfolioOpt/tree/master/tests). +In this section, we detail some of PyPortfolioOpt's available functionality. More examples are offered in the Jupyter notebooks [here](https://github.com/pyportfolio/pyportfolioopt/tree/main/cookbook). Another good resource is the [tests](https://github.com/pyportfolio/pyportfolioopt/tree/main/tests). A far more comprehensive version of this can be found on [ReadTheDocs](https://pyportfolioopt.readthedocs.io/en/latest/), as well as possible extensions for more advanced users. @@ -272,7 +272,7 @@ The covariance matrix encodes not just the volatility of an asset, but also how - implemented in `sklearn.covariance`

- +

(This plot was generated using `plotting.plot_covariance`) @@ -420,7 +420,7 @@ BibTex:: ## Contributing -Contributions are _most welcome_. Have a look at the [Contribution Guide](https://github.com/robertmartin8/PyPortfolioOpt/blob/master/CONTRIBUTING.md) for more. +Contributions are _most welcome_. Have a look at the [Contribution Guide](https://github.com/PyPortfolio/PyPortfolioOpt/blob/main/CONTRIBUTING.md) for more. I'd like to thank all of the people who have contributed to PyPortfolioOpt since its release in 2018. Special shout-outs to: diff --git a/cookbook/1-RiskReturnModels.ipynb b/cookbook/1-RiskReturnModels.ipynb index 1c74e858..cd262eae 100644 --- a/cookbook/1-RiskReturnModels.ipynb +++ b/cookbook/1-RiskReturnModels.ipynb @@ -11,13 +11,13 @@ "\n", "In this section, we compare how well the different risk models predict an out-of-sample covariance matrix, and how well the different returns models predict out-of-sample returns.\n", "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/robertmartin8/PyPortfolioOpt/blob/master/cookbook/1-RiskReturnModels.ipynb)\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/pyportfolio/pyportfolioopt/blob/master/cookbook/1-RiskReturnModels.ipynb)\n", " \n", - "[![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/robertmartin8/PyPortfolioOpt/blob/master/cookbook/1-RiskReturnModels.ipynb)\n", + "[![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/PyPortfolio/PyPortfolioOpt/blob/main/cookbook/1-RiskReturnModels.ipynb)\n", " \n", - "[![Gradient](https://assets.paperspace.io/img/gradient-badge.svg)](https://console.paperspace.com/github/robertmartin8/PyPortfolioOpt/blob/master/cookbook/1-RiskReturnModels.ipynb)\n", + "[![Gradient](https://assets.paperspace.io/img/gradient-badge.svg)](https://console.paperspace.com/github/pyportfolio/pyportfolioopt/blob/master/cookbook/1-RiskReturnModels.ipynb)\n", " \n", - "[![Open In SageMaker Studio Lab](https://studiolab.sagemaker.aws/studiolab.svg)](https://studiolab.sagemaker.aws/import/github/robertmartin8/PyPortfolioOpt/blob/master/cookbook/1-RiskReturnModels.ipynb)\n", + "[![Open In SageMaker Studio Lab](https://studiolab.sagemaker.aws/studiolab.svg)](https://studiolab.sagemaker.aws/import/github/pyportfolio/pyportfolioopt/blob/master/cookbook/1-RiskReturnModels.ipynb)\n", "\n", "## Risk models" ] @@ -37,7 +37,7 @@ "!pip install pandas numpy matplotlib PyPortfolioOpt\n", "import os\n", "if not os.path.isdir('data'):\n", - " os.system('git clone https://github.com/robertmartin8/PyPortfolioOpt.git')\n", + " os.system('git clone https://github.com/pyportfolio/pyportfolioopt.git')\n", " os.chdir('PyPortfolioOpt/cookbook')" ] }, diff --git a/cookbook/2-Mean-Variance-Optimisation.ipynb b/cookbook/2-Mean-Variance-Optimisation.ipynb index 4b3404f6..0f9879a5 100644 --- a/cookbook/2-Mean-Variance-Optimisation.ipynb +++ b/cookbook/2-Mean-Variance-Optimisation.ipynb @@ -33,13 +33,13 @@ "\n", "To download data, we will use `yfinance`, an excellent library that provides free price data from Yahoo Finance, no API key needed.\n", "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/robertmartin8/PyPortfolioOpt/blob/master/cookbook/2-Mean-Variance-Optimisation.ipynb)\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/pyportfolio/pyportfolioopt/blob/master/cookbook/2-Mean-Variance-Optimisation.ipynb)\n", " \n", - "[![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/robertmartin8/PyPortfolioOpt/blob/master/cookbook/2-Mean-Variance-Optimisation.ipynb)\n", + "[![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/PyPortfolio/PyPortfolioOpt/blob/main/cookbook/2-Mean-Variance-Optimisation.ipynb)\n", " \n", - "[![Gradient](https://assets.paperspace.io/img/gradient-badge.svg)](https://console.paperspace.com/github/robertmartin8/PyPortfolioOpt/blob/master/cookbook/2-Mean-Variance-Optimisation.ipynb)\n", + "[![Gradient](https://assets.paperspace.io/img/gradient-badge.svg)](https://console.paperspace.com/github/pyportfolio/pyportfolioopt/blob/master/cookbook/2-Mean-Variance-Optimisation.ipynb)\n", " \n", - "[![Open In SageMaker Studio Lab](https://studiolab.sagemaker.aws/studiolab.svg)](https://studiolab.sagemaker.aws/import/github/robertmartin8/PyPortfolioOpt/blob/master/cookbook/2-Mean-Variance-Optimisation.ipynb)" + "[![Open In SageMaker Studio Lab](https://studiolab.sagemaker.aws/studiolab.svg)](https://studiolab.sagemaker.aws/import/github/pyportfolio/pyportfolioopt/blob/master/cookbook/2-Mean-Variance-Optimisation.ipynb)" ] }, { @@ -57,7 +57,7 @@ "!pip install pandas numpy matplotlib yfinance PyPortfolioOpt\n", "import os\n", "if not os.path.isdir('data'):\n", - " os.system('git clone https://github.com/robertmartin8/PyPortfolioOpt.git')\n", + " os.system('git clone https://github.com/pyportfolio/pyportfolioopt.git')\n", " os.chdir('PyPortfolioOpt/cookbook')" ] }, diff --git a/cookbook/3-Advanced-Mean-Variance-Optimisation.ipynb b/cookbook/3-Advanced-Mean-Variance-Optimisation.ipynb index b51f71e9..3e2adedb 100644 --- a/cookbook/3-Advanced-Mean-Variance-Optimisation.ipynb +++ b/cookbook/3-Advanced-Mean-Variance-Optimisation.ipynb @@ -20,13 +20,13 @@ "\n", "As discussed in the previous notebook, assets are an exogenous input (i.e you must come up with a list of tickers). We will use `yfinance` to download data for thesee tickers\n", "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/robertmartin8/PyPortfolioOpt/blob/master/cookbook/3-Advanced-Mean-Variance-Optimisation.ipynb)\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/pyportfolio/pyportfolioopt/blob/master/cookbook/3-Advanced-Mean-Variance-Optimisation.ipynb)\n", " \n", - "[![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/robertmartin8/PyPortfolioOpt/blob/master/cookbook/3-Advanced-Mean-Variance-Optimisation.ipynb)\n", + "[![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/PyPortfolio/PyPortfolioOpt/blob/main/cookbook/3-Advanced-Mean-Variance-Optimisation.ipynb)\n", " \n", - "[![Gradient](https://assets.paperspace.io/img/gradient-badge.svg)](https://console.paperspace.com/github/robertmartin8/PyPortfolioOpt/blob/master/cookbook/3-Advanced-Mean-Variance-Optimisation.ipynb)\n", + "[![Gradient](https://assets.paperspace.io/img/gradient-badge.svg)](https://console.paperspace.com/github/pyportfolio/pyportfolioopt/blob/master/cookbook/3-Advanced-Mean-Variance-Optimisation.ipynb)\n", " \n", - "[![Open In SageMaker Studio Lab](https://studiolab.sagemaker.aws/studiolab.svg)](https://studiolab.sagemaker.aws/import/github/robertmartin8/PyPortfolioOpt/blob/master/cookbook/3-Advanced-Mean-Variance-Optimisation.ipynb)" + "[![Open In SageMaker Studio Lab](https://studiolab.sagemaker.aws/studiolab.svg)](https://studiolab.sagemaker.aws/import/github/pyportfolio/pyportfolioopt/blob/master/cookbook/3-Advanced-Mean-Variance-Optimisation.ipynb)" ] }, { @@ -87,7 +87,7 @@ "!pip install pandas numpy matplotlib yfinance PyPortfolioOpt\n", "import os\n", "if not os.path.isdir('data'):\n", - " os.system('git clone https://github.com/robertmartin8/PyPortfolioOpt.git')\n", + " os.system('git clone https://github.com/pyportfolio/pyportfolioopt.git')\n", " os.chdir('PyPortfolioOpt/cookbook')" ] }, diff --git a/cookbook/4-Black-Litterman-Allocation.ipynb b/cookbook/4-Black-Litterman-Allocation.ipynb index 1d4f290e..125935d3 100644 --- a/cookbook/4-Black-Litterman-Allocation.ipynb +++ b/cookbook/4-Black-Litterman-Allocation.ipynb @@ -24,13 +24,13 @@ "In addition to price data, constructing a market prior requires market-caps.\n", "\n", "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/robertmartin8/PyPortfolioOpt/blob/master/cookbook/4-Black-Litterman-Allocation.ipynb)\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/pyportfolio/pyportfolioopt/blob/master/cookbook/4-Black-Litterman-Allocation.ipynb)\n", " \n", - "[![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/robertmartin8/PyPortfolioOpt/blob/master/cookbook/4-Black-Litterman-Allocation.ipynb)\n", + "[![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/PyPortfolio/PyPortfolioOpt/blob/main/cookbook/4-Black-Litterman-Allocation.ipynb)\n", " \n", - "[![Gradient](https://assets.paperspace.io/img/gradient-badge.svg)](https://console.paperspace.com/github/robertmartin8/PyPortfolioOpt/blob/master/cookbook/4-Black-Litterman-Allocation.ipynb)\n", + "[![Gradient](https://assets.paperspace.io/img/gradient-badge.svg)](https://console.paperspace.com/github/pyportfolio/pyportfolioopt/blob/master/cookbook/4-Black-Litterman-Allocation.ipynb)\n", " \n", - "[![Open In SageMaker Studio Lab](https://studiolab.sagemaker.aws/studiolab.svg)](https://studiolab.sagemaker.aws/import/github/robertmartin8/PyPortfolioOpt/blob/master/cookbook/4-Black-Litterman-Allocation.ipynb)" + "[![Open In SageMaker Studio Lab](https://studiolab.sagemaker.aws/studiolab.svg)](https://studiolab.sagemaker.aws/import/github/pyportfolio/pyportfolioopt/blob/master/cookbook/4-Black-Litterman-Allocation.ipynb)" ] }, { @@ -48,7 +48,7 @@ "!pip install pandas numpy matplotlib yfinance PyPortfolioOpt\n", "import os\n", "if not os.path.isdir('data'):\n", - " os.system('git clone https://github.com/robertmartin8/PyPortfolioOpt.git')\n", + " os.system('git clone https://github.com/pyportfolio/pyportfolioopt.git')\n", " os.chdir('PyPortfolioOpt/cookbook')" ] }, diff --git a/cookbook/5-Hierarchical-Risk-Parity.ipynb b/cookbook/5-Hierarchical-Risk-Parity.ipynb index 4edfaacb..a7b048e1 100644 --- a/cookbook/5-Hierarchical-Risk-Parity.ipynb +++ b/cookbook/5-Hierarchical-Risk-Parity.ipynb @@ -19,13 +19,13 @@ "- Using HRP to find the minimum variance portfolio\n", "- Plotting dendrograms\n", "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/robertmartin8/PyPortfolioOpt/blob/master/cookbook/5-Hierarchical-Risk-Parity.ipynb)\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/pyportfolio/pyportfolioopt/blob/master/cookbook/5-Hierarchical-Risk-Parity.ipynb)\n", " \n", - "[![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/robertmartin8/PyPortfolioOpt/blob/master/cookbook/5-Hierarchical-Risk-Parity.ipynb)\n", + "[![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/PyPortfolio/PyPortfolioOpt/blob/main/cookbook/5-Hierarchical-Risk-Parity.ipynb)\n", " \n", - "[![Gradient](https://assets.paperspace.io/img/gradient-badge.svg)](https://console.paperspace.com/github/robertmartin8/PyPortfolioOpt/blob/master/cookbook/5-Hierarchical-Risk-Parity.ipynb)\n", + "[![Gradient](https://assets.paperspace.io/img/gradient-badge.svg)](https://console.paperspace.com/github/pyportfolio/pyportfolioopt/blob/master/cookbook/5-Hierarchical-Risk-Parity.ipynb)\n", " \n", - "[![Open In SageMaker Studio Lab](https://studiolab.sagemaker.aws/studiolab.svg)](https://studiolab.sagemaker.aws/import/github/robertmartin8/PyPortfolioOpt/blob/master/cookbook/5-Hierarchical-Risk-Parity.ipynb)\n" + "[![Open In SageMaker Studio Lab](https://studiolab.sagemaker.aws/studiolab.svg)](https://studiolab.sagemaker.aws/import/github/pyportfolio/pyportfolioopt/blob/master/cookbook/5-Hierarchical-Risk-Parity.ipynb)\n" ] }, { @@ -56,7 +56,7 @@ "!pip install pandas numpy matplotlib yfinance PyPortfolioOpt\n", "import os\n", "if not os.path.isdir('data'):\n", - " os.system('git clone https://github.com/robertmartin8/PyPortfolioOpt.git')\n", + " os.system('git clone https://github.com/pyportfolio/pyportfolioopt.git')\n", " os.chdir('PyPortfolioOpt/cookbook')" ] }, diff --git a/docs/BlackLitterman.rst b/docs/BlackLitterman.rst index a2062d53..8a6b703d 100644 --- a/docs/BlackLitterman.rst +++ b/docs/BlackLitterman.rst @@ -44,13 +44,13 @@ Similarly, we can calculate a posterior estimate of the covariance matrix: Though the algorithm is relatively simple, BL proved to be a challenge from a software engineering perspective because it's not quite clear how best to fit it into PyPortfolioOpt's -API. The full discussion can be found on a `Github issue thread `_, +API. The full discussion can be found on a `Github issue thread `_, but I ultimately decided that though BL is not technically an optimizer, it didn't make sense to split up its methods into `expected_returns` or `risk_models`. I have thus made it an independent module and owing to the comparatively extensive theory, have given it a dedicated documentation page. I'd like to thank `Felipe Schneider `_ for his multiple contributions to the Black-Litterman implementation. A full example of its usage, including the acquisition -of market cap data for free, please refer to the `cookbook recipe `_. +of market cap data for free, please refer to the `cookbook recipe `_. .. tip:: diff --git a/docs/Contributing.rst b/docs/Contributing.rst index 75effa3c..38a47642 100644 --- a/docs/Contributing.rst +++ b/docs/Contributing.rst @@ -7,7 +7,7 @@ Some of the things that I'd love for people to help with: - Improve performance of existing code (but not at the cost of readability) - Add new optimization objectives. For example, if you would like to use something other than the Sharpe ratio, write an optimizer! (or suggest it in - `Issues `_ and I will have a go). + `Issues `_ and I will have a go). - Help me write more tests! If you are someone learning about quant finance and/or unit testing in python, what better way to practice than to write some tests on an open-source project! Feel free to check for edge cases, or for uncommon parameter @@ -21,7 +21,7 @@ Seek early feedback ------------------- Before you start coding your contribution, it may be wise to -`raise an issue `_ on +`raise an issue `_ on GitHub to discuss whether the contribution is appropriate for the project. Code style @@ -62,7 +62,7 @@ Questions ========= If you have any questions related to the project, it is probably best to -`raise an issue `_ and +`raise an issue `_ and I will tag it as a question. If you have questions *unrelated* to the project, drop me an email - contact @@ -72,7 +72,7 @@ Bugs/issues =========== If you find any bugs or the portfolio optimization is not working as expected, -feel free to `raise an issue `_. +feel free to `raise an issue `_. I would ask that you provide the following information in the issue: - Descriptive title so that other users can see the existing issues diff --git a/docs/FAQ.rst b/docs/FAQ.rst index dc2b8388..e9022bf9 100644 --- a/docs/FAQ.rst +++ b/docs/FAQ.rst @@ -36,7 +36,7 @@ for small problems with less than 1000 variables and constraints, you can use th ef.min_volatility() This does not play well with ``max_sharpe``, and needs to be modified for different bounds. -See `this issue `_ for further discussion. +See `this issue `_ for further discussion. Tracking error -------------- diff --git a/docs/GeneralEfficientFrontier.rst b/docs/GeneralEfficientFrontier.rst index 1a7ecbf3..ff609caf 100644 --- a/docs/GeneralEfficientFrontier.rst +++ b/docs/GeneralEfficientFrontier.rst @@ -229,7 +229,7 @@ You can either optimize some generic ``convex_objective`` (which *must* be built using ``cvxpy`` atomic functions -- see `here `_) or a ``nonconvex_objective``, which uses ``scipy.optimize`` as the backend and thus has a completely different API. For more examples, check out this `cookbook recipe -`_. +`_. .. class:: pypfopt.base_optimizer.BaseConvexOptimizer diff --git a/docs/MeanVariance.rst b/docs/MeanVariance.rst index a87ee447..3bf34da5 100644 --- a/docs/MeanVariance.rst +++ b/docs/MeanVariance.rst @@ -32,7 +32,7 @@ language for convex optimization upon which PyPortfolioOpt's efficient frontier .. tip:: - You can find complete examples in the relevant cookbook `recipe `_. + You can find complete examples in the relevant cookbook `recipe `_. Structure diff --git a/docs/RiskModels.rst b/docs/RiskModels.rst index 72d15724..3fc8b152 100644 --- a/docs/RiskModels.rst +++ b/docs/RiskModels.rst @@ -146,7 +146,7 @@ the following shrinkage methods: My implementations have been translated from the Matlab code on `Michael Wolf's webpage `_, with -the help of `xtuanta `_. +the help of `xtuanta `_. .. autoclass:: CovarianceShrinkage diff --git a/docs/Roadmap.rst b/docs/Roadmap.rst index 9d251109..880293a4 100644 --- a/docs/Roadmap.rst +++ b/docs/Roadmap.rst @@ -288,13 +288,13 @@ Began migration to cvxpy by changing the discrete allocation backend from PuLP t - New algorithm: ML de Prado's CLA - New algorithms for converting continuous allocation to discrete (using linear programming). -- Merged a `PR `__ implementing Single Factor and +- Merged a `PR `__ implementing Single Factor and Constant Correlation shrinkage. 0.3.1 ----- -Merged `PR `__ from `TommyBark `_ +Merged `PR `__ from `TommyBark `_ fixing a bug in the arguments of a call to ``portfolio_performance``. 0.3.3 diff --git a/docs/UserGuide.rst b/docs/UserGuide.rst index 4d1c7efc..4919f406 100644 --- a/docs/UserGuide.rst +++ b/docs/UserGuide.rst @@ -46,7 +46,7 @@ This dataset should look something like the one below:: The index should consist of dates or timestamps, and each column should represent the time series of prices for an asset. A dataset of real-life stock prices has been -included in the `tests folder `_ +included in the `tests folder `_ of the GitHub repo. .. note:: @@ -301,7 +301,7 @@ in the sidebar to learn more about the parameters and theoretical details of the different models offered by PyPortfolioOpt. If you have any questions, please raise an issue on GitHub and I will try to respond promptly. -If you'd like even more examples, check out the cookbook `recipe `_. +If you'd like even more examples, check out the cookbook `recipe `_. References diff --git a/docs/index.rst b/docs/index.rst index 228cfdee..0a12bcce 100755 --- a/docs/index.rst +++ b/docs/index.rst @@ -7,7 +7,7 @@ - +

@@ -20,7 +20,7 @@ MIT license   - + MIT license   @@ -47,7 +47,7 @@ Installation ============ If you would like to play with PyPortfolioOpt interactively in your browser, you may launch Binder -`here `__. It takes a +`here `__. It takes a while to set up, but it lets you try out the cookbook recipes without having to install anything. Prior to installing PyPortfolioOpt, you need to install C++. On macOS, this means that you need @@ -84,7 +84,7 @@ Thanks to Thomas Schmelzer, PyPortfolioOpt now supports Docker (requires .. note:: If any of these methods don't work, please `raise an issue - `_ with the 'packaging' label on GitHub + `_ with the 'packaging' label on GitHub @@ -97,14 +97,14 @@ source code .. code-block:: text - git clone https://github.com/robertmartin8/PyPortfolioOpt + git clone https://github.com/pyportfolio/pyportfolioopt Alternatively, if you still want the convenience of a global ``from pypfopt import x``, you should try .. code-block:: text - pip install -e git+https://github.com/robertmartin8/PyPortfolioOpt.git + pip install -e git+https://github.com/pyportfolio/pyportfolioopt.git A Quick Example @@ -112,7 +112,7 @@ A Quick Example This section contains a quick look at what PyPortfolioOpt can do. For a guided tour, please check out the :ref:`user-guide`. For even more examples, check out the Jupyter -notebooks in the `cookbook `_. +notebooks in the `cookbook `_. 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:: diff --git a/pyproject.toml b/pyproject.toml index 934719ca..a2312c1f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ description = "Financial portfolio optimization in python" license = "MIT" authors = ["Robert Andrew Martin "] readme = "README.md" -repository = "https://github.com/robertmartin8/PyPortfolioOpt" +repository = "https://github.com/pyportfolio/pyportfolioopt" documentation = "https://pyportfolioopt.readthedocs.io/en/latest/" keywords= ["finance", "portfolio", "optimization", "quant", "investing"] classifiers=[ @@ -28,7 +28,7 @@ classifiers=[ packages = [ {include = "pypfopt"} ] [tool.poetry.urls] -"Issues" = "https://github.com/robertmartin8/PyPortfolioOpt/issues" +"Issues" = "https://github.com/pyportfolio/pyportfolioopt/issues" "Personal website" = "https://reasonabledeviations.com" [tool.poetry.dependencies] diff --git a/setup.py b/setup.py index 8279549e..99926ae3 100755 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ description="Financial portfolio optimization in python", long_description=desc, long_description_content_type="text/markdown", - url="https://github.com/robertmartin8/PyPortfolioOpt", + url="https://github.com/pyportfolio/pyportfolioopt", author="Robert Andrew Martin", author_email="martin.robertandrew@gmail.com", license="MIT", @@ -50,7 +50,7 @@ python_requires=">=3.8", project_urls={ "Documentation": "https://pyportfolioopt.readthedocs.io/en/latest/", - "Issues": "https://github.com/robertmartin8/PyPortfolioOpt/issues", + "Issues": "https://github.com/pyportfolio/pyportfolioopt/issues", "Personal website": "https://reasonabledeviations.com", }, )