python有效边界_Markowitz有效边界和投资组合优化基于Python(附代码)
时间: 2024-03-22 14:42:32 浏览: 220
PyPortfolioOpt:python中的金融投资组合优化,包括经典有效前沿,Black-Litterman,分层风险平价
5星 · 资源好评率100%
Markowitz有效边界是一种投资组合理论,用于优化投资组合的风险和收益。Python中可以使用scipy、numpy、pandas等库来实现Markowitz有效边界和投资组合优化。
下面是一个简单的Markowitz有效边界和投资组合优化的Python代码示例:
```python
import pandas as pd
import numpy as np
from scipy.optimize import minimize
# 定义投资组合收益和风险
def portfolio_return(weights, returns):
return weights.T @ returns
def portfolio_risk(weights, cov_matrix):
return np.sqrt(weights.T @ cov_matrix @ weights)
# 定义优化器
def optimize_portfolio(returns):
cov_matrix = returns.cov()
num_assets = len(returns.columns)
args = (returns,)
constraints = ({'type': 'eq', 'fun': lambda x: np.sum(x) - 1})
bounds = tuple((0, 1) for asset in range(num_assets))
initial_guess = num_assets * [1. / num_assets,]
result = minimize(portfolio_risk, initial_guess, args=args,
method='SLSQP', bounds=bounds, constraints=constraints)
return result.x
# 读取数据
data = pd.read_csv('data.csv')
returns = data.set_index('Date').pct_change()
returns = returns.dropna()
# 优化投资组合
weights = optimize_portfolio(returns)
# 计算投资组合收益和风险
portfolio_return = portfolio_return(weights, returns.mean())
portfolio_risk = portfolio_risk(weights, returns.cov())
# 输出结果
print(f'Portfolio return: {portfolio_return:.2f}')
print(f'Portfolio risk: {portfolio_risk:.2f}')
print(f'Portfolio weights: {weights}')
```
在这个示例中,我们首先定义了计算投资组合收益和风险的函数,然后使用scipy的优化器minimize来优化投资组合,最后计算投资组合的收益和风险,并输出结果。
需要注意的是,在实际应用中,我们需要使用更多的数据和更复杂的模型来实现更精确的投资组合优化。
阅读全文