跳转至

PyPortfolioOpt 中文文档

作者:Robert Andrew Martin

译者:片刻小哥哥

项目地址:https://portfolio.apachecn.org/Installation

原始地址:https://pyportfolioopt.readthedocs.io/en/latest/index.html

PyPortfolioOpt

python python 麻省理工学院许可证 麻省理工学院许可证 DOI 徽章

PyPortfolioOpt 是一个实现投资组合优化方法的库,包括 经典的有效前沿技术和 Black-Litterman Allocation等等 该领域的最新发展,如收缩和分级风险平价,以及 一些新颖的实验特征,例如指数加权协方差矩阵。

这是广泛的但很容易可扩展,对于休闲投资者和认真的投资者都有用。 无论您是一位以基本面为导向的投资者,并已确定了少数被低估的选秀权, 或拥有一篮子的算法交易员策略,PyPortfolioOpt 可以帮助您结合 alpha 来源以一种风险有效的方式。

安装

如果您想在浏览器中以交互方式使用 PyPortfolioOpt,您可以启动 Binder 此处 。这需要一个 虽然要进行设置,但它可以让您尝试 cookbook recipes,而无需安装任何东西。

在安装 PyPortfolioOpt 之前,您需要安装 C++。在 macOS 上,这意味着您需要 安装 XCode 命令行工具(请参阅 此处 )。

对于 Windows 用户,请下载 Visual Studio 此处 , 有附加说明 这里

然后可以通过 pip 完成安装:

pip install PyPortfolioOpt

(您可能需要遵循单独的安装说明 cvxoptcvxpy )。

为了最佳实践,最好使用依赖管理器来完成此操作。我建议你 给自己设置 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


回到顶部