pyportfolioopt-投资组合


文档

pyportfolioopt 是一个用于投资组合优化的 Python 库,它提供了多种优化方法和工具,帮助投资者构建和优化投资组合。这个库基于现代投资组合理论,支持多种资产配置策略,包括均值-方差优化、风险平价、最小方差组合等。

主要功能

  1. 数据获取:从 Yahoo Finance 等数据源获取股票历史数据。
  2. 预期收益和协方差矩阵估计:计算资产的预期收益和协方差矩阵。
  3. 投资组合优化:实现多种优化方法,如均值-方差优化、最小方差组合、最大夏普比率组合等。
  4. 风险模型:支持多种风险模型,如单因素模型、多因素模型等。
  5. 绩效评估:提供绩效评估工具,如夏普比率、信息比率等。

安装

你可以使用 pip 安装 pyportfolioopt

pip install pyportfolioopt

示例代码

以下是一些常用的 pyportfolioopt 功能示例:

导入库

import pandas as pd
import yfinance as yf
from pypfopt import EfficientFrontier
from pypfopt import risk_models
from pypfopt import expected_returns

获取股票数据

# 定义股票代码列表
tickers = ["AAPL", "MSFT", "GOOGL", "AMZN", "FB"]

# 下载股票历史数据
data = yf.download(tickers, start="2020-01-01", end="2023-01-01")["Adj Close"]

# 计算日收益率
returns = data.pct_change().dropna()

计算预期收益和协方差矩阵

# 计算预期收益
mu = expected_returns.mean_historical_return(data)

# 计算协方差矩阵
S = risk_models.sample_cov(data)

构建有效前沿

# 创建有效前沿对象
ef = EfficientFrontier(mu, S)

# 最大化夏普比率
weights = ef.max_sharpe()
cleaned_weights = ef.clean_weights()
print(cleaned_weights)

# 获取投资组合绩效
ef.portfolio_performance(verbose=True)

绘制有效前沿

import matplotlib.pyplot as plt

# 生成有效前沿
ef = EfficientFrontier(mu, S)
ef.min_volatility()
min_vol = ef.portfolio_performance()[1]

ef.max_sharpe()
max_sharpe = ef.portfolio_performance()[1]

# 生成多个投资组合
n_points = 20
ef = EfficientFrontier(mu, S)
ef.efficient_frontier(n_points=n_points)

# 获取有效前沿数据
frontier_returns, frontier_vols, frontier_sharpes = zip(*ef.efficient_frontier(n_points=n_points))

# 绘制有效前沿
plt.figure(figsize=(12, 6))
plt.scatter(frontier_vols, frontier_returns, c=frontier_sharpes, cmap='viridis')
plt.colorbar(label='Sharpe Ratio')
plt.scatter(min_vol, ef.portfolio_performance()[0], c='red', marker='o', label='Min Volatility')
plt.scatter(max_sharpe, ef.portfolio_performance()[0], c='blue', marker='o', label='Max Sharpe')
plt.xlabel('Volatility')
plt.ylabel('Expected Return')
plt.title('Efficient Frontier')
plt.legend()
plt.show()

更多功能

pyportfolioopt 还提供了许多其他功能,如: - 约束条件:添加投资组合权重的约束条件,如权重上限、下限等。 - 风险平价:实现风险平价投资组合。 - 黑-李特曼模型:结合市场观点进行投资组合优化。

官方文档

你可以访问 pyportfolioopt 的官方文档 获取更多详细信息和示例。

希望这些示例对你有所帮助!如果你有任何具体的问题或需要进一步的帮助,请随时告诉我。

github