Skip to content

Commit da8e914

Browse files
authored
Merge branch 'PyPortfolio:main' into main
2 parents c1eb1eb + 6ec1288 commit da8e914

File tree

1 file changed

+21
-48
lines changed

1 file changed

+21
-48
lines changed

README.md

Lines changed: 21 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,28 @@
1-
<p align="center">
2-
<img width=60% src="https://github.com/PyPortfolio/PyPortfolioOpt/blob/main/media/logo_v1.png?raw=true">
3-
</p>
1+
## Welcome to PyPortfolioOpt
42

5-
<!-- buttons -->
6-
<p align="center">
7-
<a href="https://www.python.org">
8-
<img src="https://img.shields.io/pypi/pyversions/PyPortfolioOpt.svg"
9-
alt="python"></a> &nbsp;
10-
<a href="https://www.python.org">
11-
<img src="https://img.shields.io/badge/Platforms-linux--64,win--64,osx--64-orange.svg?style=flat-square"
12-
alt="platforms"></a> &nbsp;
13-
<a href="https://pypi.org/project/PyPortfolioOpt/">
14-
<img src="https://img.shields.io/badge/pypi-v1.5.6-brightgreen.svg"
15-
alt="pypi"></a> &nbsp;
16-
<a href="https://opensource.org/licenses/MIT">
17-
<img src="https://img.shields.io/badge/license-MIT-brightgreen.svg"
18-
alt="MIT license"></a> &nbsp;
19-
<a href="https://github.com/pyportfolio/pyportfolioopt/actions">
20-
<img src="https://github.com/pyportfolio/pyportfolioopt/actions/workflows/main.yml/badge.svg?branch=main"
21-
alt="build"></a> &nbsp;
22-
<a href="https://pepy.tech/project/pyportfolioopt">
23-
<img src="https://pepy.tech/badge/pyportfolioopt"
24-
alt="downloads"></a> &nbsp;
25-
<a href="https://mybinder.org/v2/gh/pyportfolio/pyportfolioopt/main/?filepath=cookbook">
26-
<img src="https://mybinder.org/badge_logo.svg"
27-
alt="binder"></a> &nbsp;
28-
</p>
3+
<a href="https://pyportfolioopt.readthedocs.io/en/latest/"><img src="https://github.com/PyPortfolio/PyPortfolioOpt/blob/main/media/logo_v1.png?raw=true" width="275" align="right" /></a>
294

30-
<!-- content -->
5+
PyPortfolioOpt is a library implementing portfolio optimization methods, including
6+
classical mean-variance optimization, Black-Litterman allocation, or shrinkage and Hierarchical Risk Parity.
7+
PyPortfolioOpt is inspired by scikit-learn; it is **extensive** yet easily **extensible**, for casual investors, or professionals looking for an easy prototyping tool. Whether you are a fundamentals-oriented investor who has identified a
8+
handful of undervalued picks, or an algorithmic trader who has a basket of
9+
strategies, PyPortfolioOpt can help you combine your alpha sources in a risk-efficient way.
3110

32-
PyPortfolioOpt is a library that implements portfolio optimization methods, including
33-
classical mean-variance optimization techniques and Black-Litterman allocation, as well as more
34-
recent developments in the field like shrinkage and Hierarchical Risk Parity.
3511

36-
It is **extensive** yet easily **extensible**, and can be useful for either a casual investors, or a professional looking for an easy prototyping tool. Whether you are a fundamentals-oriented investor who has identified a
37-
handful of undervalued picks, or an algorithmic trader who has a basket of
38-
strategies, PyPortfolioOpt can help you combine your alpha sources
39-
in a risk-efficient way.
12+
<!-- buttons -->
13+
14+
| | **[Documentation](https://pyportfolioopt.readthedocs.io/en/latest/)** · **[Tutorials](https://github.com/pyportfolio/pyportfolioopt/tree/main/cookbook)** · **[Release Notes](https://github.com/PyPortfolio/PyPortfolioOpt/releases)** |
15+
|---|---|
16+
| **Open&#160;Source** | [![MIT](https://img.shields.io/github/license/pyportfolio/pyportfolioopt)](https://github.com/pyportfolio/pyportfolioopt/blob/master/LICENSE) [![GC.OS Sponsored](https://img.shields.io/badge/GC.OS-Sponsored%20Project-orange.svg?style=flat&colorA=0eac92&colorB=2077b4)](https://gc-os-ai.github.io/) | |
17+
| **Tutorials** | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/pyportfolio/pyportfolioopt/main/?filepath=cookbook) |
18+
| **Community** | [![!discord](https://img.shields.io/static/v1?logo=discord&label=discord&message=chat&color=lightgreen)](https://discord.gg/7uKdHfdcJG) [![!slack](https://img.shields.io/static/v1?logo=linkedin&label=LinkedIn&message=news&color=lightblue)](https://www.linkedin.com/company/pyportfolioopt/) |
19+
| **CI/CD** | [![github-actions](https://img.shields.io/github/actions/workflow/status/pyportfolio/pyportfolioopt/main.yml?logo=github)](https://github.com/pyportfolio/pyportfolioopt/actions/workflows/release.yml) [![readthedocs](https://img.shields.io/readthedocs/pyportfolioopt?logo=readthedocs)](https://pyportfolioopt.readthedocs.io/en/latest/?badge=latest) |
20+
| **Code** | [![!pypi](https://img.shields.io/pypi/v/pyportfolioopt?color=orange)](https://pypi.org/project/pyportfolioopt/) [![!python-versions](https://img.shields.io/pypi/pyversions/pyportfolioopt)](https://www.python.org/) [![!black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) |
21+
| **Downloads** | ![PyPI - Downloads](https://img.shields.io/pypi/dw/pyportfolioopt) ![PyPI - Downloads](https://img.shields.io/pypi/dm/pyportfolioopt) [![Downloads](https://static.pepy.tech/personalized-badge/pyportfolioopt?period=total&units=international_system&left_color=grey&right_color=blue&left_text=cumulative%20(pypi))](https://pepy.tech/project/pyportfolioopt) |
22+
| **Citation** | [JOSS article](https://joss.theoj.org/papers/10.21105/joss.03066) |
4023

41-
**PyPortfolioOpt has been [published](https://joss.theoj.org/papers/10.21105/joss.03066) in the Journal of Open Source Software 🎉**
4224

43-
PyPortfolioOpt is now being maintained by [Tuan Tran](https://github.com/88d52bdba0366127fffca9dfa93895).
25+
<!-- content -->
4426

4527
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.
4628

@@ -271,9 +253,6 @@ The covariance matrix encodes not just the volatility of an asset, but also how
271253
ef = EfficientFrontier(mu, S, weight_bounds=(-1, 1))
272254
```
273255

274-
```result
275-
```
276-
277256
- Market neutrality: for the `efficient_risk` and `efficient_return` methods, PyPortfolioOpt provides an option to form a market-neutral portfolio (i.e weights sum to zero). This is not possible for the max Sharpe portfolio and the min volatility portfolio because in those cases because they are not invariant with respect to leverage. Market neutrality requires negative weights:
278257

279258
```python
@@ -311,9 +290,6 @@ SBUX: 0.0330
311290
ef = EfficientFrontier(mu, S, weight_bounds=(0, 0.1))
312291
```
313292

314-
```result
315-
```
316-
317293
One issue with mean-variance optimization is that it leads to many zero-weights. While these are
318294
"optimal" in-sample, there is a large body of research showing that this characteristic leads
319295
mean-variance portfolios to underperform out-of-sample. To that end, I have introduced an
@@ -352,7 +328,7 @@ SBUX: 0.0695
352328

353329
### Black-Litterman allocation
354330

355-
As of v0.5.0, we now support Black-Litterman asset allocation, which allows you to combine
331+
Pyportfolioopt supports Black-Litterman asset allocation, which allows you to combine
356332
a prior estimate of returns (e.g the market-implied returns) with your own views to form a
357333
posterior estimate. This results in much better estimates of expected returns than just using
358334
the mean historical return. Check out the [docs](https://pyportfolioopt.readthedocs.io/en/latest/BlackLitterman.html) for a discussion of the theory, as well as advice
@@ -439,9 +415,6 @@ PyPortfolioOpt provides a test dataset of daily returns for 20 tickers:
439415
['GOOG', 'AAPL', 'FB', 'BABA', 'AMZN', 'GE', 'AMD', 'WMT', 'BAC', 'GM', 'T', 'UAA', 'SHLD', 'XOM', 'RRC', 'BBY', 'MA', 'PFE', 'JPM', 'SBUX']
440416
```
441417

442-
```result
443-
```
444-
445418
These tickers have been informally selected to meet several criteria:
446419

447420
- reasonably liquid
@@ -483,7 +456,7 @@ BibTex::
483456

484457
Contributions are _most welcome_. Have a look at the [Contribution Guide](https://github.com/PyPortfolio/PyPortfolioOpt/blob/main/CONTRIBUTING.md) for more.
485458

486-
I'd like to thank all of the people who have contributed to PyPortfolioOpt since its release in 2018.
459+
We'd like to thank all of the people who have contributed to PyPortfolioOpt since its release in 2018.
487460
Special shout-outs to:
488461

489462
- Tuan Tran

0 commit comments

Comments
 (0)