安装教程
作者:Robert Andrew Martin
译者:片刻小哥哥
项目地址:https://www.dafeiyang.cn/finance/stock/tools/PyPortfolioOpt
原始地址:https://pyportfolioopt.readthedocs.io/en/latest/index.html
- 本次翻译版本: PyPortfolioOpt 1.5.5 中文文档
PyPortfolioOpt 是一个实现投资组合优化方法的库,包括 经典的有效前沿技术和 Black-Litterman Allocation等等 该领域的最新发展,如收缩和分级风险平价,以及 一些新颖的实验特征,例如指数加权协方差矩阵。
这是广泛的但很容易可扩展,对于休闲投资者和认真的投资者都有用。 无论您是一位以基本面为导向的投资者,并已确定了少数被低估的选秀权, 或拥有一篮子的算法交易员策略,PyPortfolioOpt 可以帮助您结合 alpha 来源以一种风险有效的方式。
安装 ¶
如果您想在浏览器中以交互方式使用 PyPortfolioOpt,您可以启动 Binder 此处 。这需要一个 虽然要进行设置,但它可以让您尝试 cookbook recipes,而无需安装任何东西。
在安装 PyPortfolioOpt 之前,您需要安装 C++。在 macOS 上,这意味着您需要 安装 XCode 命令行工具(请参阅 此处 )。
对于 Windows 用户,请下载 Visual Studio 此处 , 有附加说明 这里。
然后可以通过 pip 完成安装:
pip install PyPortfolioOpt
(您可能需要遵循单独的安装说明 cvxopt 和 cvxpy )。
为了最佳实践,最好使用依赖管理器来完成此操作。我建议你 给自己设置 poetry ,然后在一个新的poetry项目中运行:
poetry add PyPortfolioOpt
另一种方法是克隆/下载项目,然后在项目目录中运行
python setup.py install
感谢 Thomas Schmelzer,PyPortfolioOpt 现在支持 Docker(需要 make, docker, docker-compose )。构建你的第一个容器 make build
; 运行测试 make test
。欲了解更多信息,请阅读 本指南。
笔记
如果这些方法都不起作用,请 提出问题 GitHub 上带有“packaging”标签
对于开发者 ¶
如果您计划使用 PyPortfolioOpt 作为重要的起始模板 修改后,克隆存储库并仅使用 源代码
git clone https://github.com/robertmartin8/PyPortfolioOpt
或者,如果您仍然想要全局的便利 from pypfopt import x
, 你应该试试
pip install -e git+https://github.com/robertmartin8/PyPortfolioOpt.git
一个简单的例子 ¶
本节简要介绍了 PyPortfolioOpt 的功能。如需导游陪同游览, 请查看 用户指南 。有关更多示例,请查看 Jupyter 笔记本中的 cookbook 。
如果您已经为您的资产组设定了预期收益 mu
和风险模型 S
,则生成最佳投资组合非常简单:
from pypfopt.efficient_frontier import EfficientFrontier
ef = EfficientFrontier(mu, S)
weights = ef.max_sharpe()
但是,如果您想使用 PyPortfolioOpt 的内置方法 根据历史数据计算预期收益和协方差矩阵, 那也很好:
import pandas as pd
from pypfopt.efficient_frontier import EfficientFrontier
from pypfopt import risk_models
from pypfopt import expected_returns
## Read in price data
df = pd.read_csv("tests/resources/stock_prices.csv", parse_dates=True, index_col="date")
## Calculate expected returns and sample covariance
mu = expected_returns.mean_historical_return(df)
S = risk_models.sample_cov(df)
## Optimize for maximal Sharpe ratio
ef = EfficientFrontier(mu, S)
weights = ef.max_sharpe()
ef.portfolio_performance(verbose=True)
输出如下:
Expected annual return: 33.0%
Annual volatility: 21.7%
Sharpe Ratio: 1.43
内容 ¶
其他信息
项目原则和设计决策 ¶
- 通过用户专有的改进来更换优化过程的各个组件应该很容易。
- 可用性就是一切:不言自明比一致更好。
- 除非能够实际应用于实际资产价格,否则投资组合优化就没有意义。
- 已经实施的一切都应该进行测试。
- 内联文档很好:专用(单独)文档更好。两者并不相互排斥。
- 格式化永远不应该妨碍好的代码:因此,我将 所有 格式化决策推迟到 黑色 。
相对于现有实施的优势 ¶
- 包括两种经典方法(Markowitz 1952 和 Black-Litterman)以及建议的最佳实践(例如协方差收缩),以及许多最近的发展和新颖的特征,如 L2 正则化、指数协方差、分层风险平价。
- 对 pandas dataframe的本机支持:轻松输入每日价格数据。
- 广泛的实际测试,使用真实数据。
- 易于与您的专有策略和模型相结合。
- 对缺失数据和不同长度的 price-series (例如 FB 数据 具有鲁棒性仅可追溯到 2012 年,而 AAPL 数据可追溯到 1980 年)。
贡献者 ¶
这是一份非详尽的无序列贡献者列表。我衷心感谢所有人 你的努力!
- Philipp Schiele
- Carl Peasnell
- Felipe Schneider
- Dingyuan Wang
- Pat Newell
- Aditya Bhutra
- Thomas Schmelzer
- Rich Caputo
- Nicolas Knudde