贝叶斯方法优化投资组合python代码
时间: 2023-09-18 21:14:42 浏览: 174
多目标贝叶斯优化附python代码.zip
5星 · 资源好评率100%
下面是一个简单的贝叶斯优化投资组合的Python代码示例,使用了Scipy和Pandas库:
```python
import pandas as pd
import numpy as np
from scipy.optimize import minimize
# 获取数据
def get_data():
# 这里使用了随机生成的数据,实际情况需要替换为真实数据
return pd.DataFrame(np.random.randn(100, 5), columns=['Stock1', 'Stock2', 'Stock3', 'Stock4', 'Stock5'])
# 计算投资组合的收益率和波动率
def calc_portfolio_perf(weights, mean_returns, cov_matrix):
portfolio_return = np.sum(mean_returns * weights) * 252
portfolio_std_dev = np.sqrt(np.dot(weights.T, np.dot(cov_matrix, weights))) * np.sqrt(252)
return portfolio_return, portfolio_std_dev
# 定义目标函数
def neg_sharpe_ratio(weights, mean_returns, cov_matrix, risk_free_rate):
p_ret, p_var = calc_portfolio_perf(weights, mean_returns, cov_matrix)
return -(p_ret - risk_free_rate) / p_var
# 最小化目标函数
def optimize_portfolio(mean_returns, cov_matrix, risk_free_rate):
num_assets = len(mean_returns)
args = (mean_returns, cov_matrix, risk_free_rate)
constraints = ({'type': 'eq', 'fun': lambda x: np.sum(x) - 1})
bounds = tuple((0, 1) for _ in range(num_assets))
init_guess = num_assets * [1. / num_assets, ]
opt_results = minimize(neg_sharpe_ratio, init_guess, args=args, method='SLSQP', bounds=bounds, constraints=constraints)
return opt_results.x
# 获取数据
data = get_data()
# 计算每只股票的年收益率和协方差矩阵
returns = data.pct_change().mean() * 252
cov_matrix = data.pct_change().cov() * 252
# 设置无风险收益率
risk_free_rate = 0.02
# 优化投资组合
weights = optimize_portfolio(returns, cov_matrix, risk_free_rate)
# 输出结果
print("优化后的投资组合:\n", weights)
```
这个代码示例中,我们首先使用了一个随机数据集作为股票的历史收益率数据,并计算了每只股票的年收益率和协方差矩阵。然后,我们设置了一个无风险收益率,并使用Scipy库的最小化函数来优化投资组合,使得组合的夏普比率最大化。最后,我们输出了优化后的投资组合权重。需要注意的是,这个示例只是一个简单的演示代码,实际应用中需要根据具体情况进行修改和调整。
阅读全文