我现在持有5只股票,我收取了这五只股票的历史收益率,标准误差,以及他们之间的相关系数,每只股票的初始权重比例为20%,请你帮我写一段代码让我在jupyterLite能够重组以优化资产配置比例
时间: 2024-10-10 22:02:52 浏览: 10
在JupyterLite环境中,你可以使用Python的`pandas`, `numpy`, 和 `scipy.optimize`库来帮助你调整资产配置比例。下面是一个简单的例子,假设你已经有了一个包含历史收益率、标准差和相关系数的数据框(df),其中列名分别是'returns', 'std_dev', 和 'corr_matrix':
```python
import pandas as pd
import numpy as np
from scipy.optimize import minimize
# 假设你的数据集是这样的
data = {
'returns': [0.05, 0.08, -0.02, 0.09, 0.06],
'std_dev': [0.1, 0.15, 0.12, 0.18, 0.13],
'corr_matrix': [[1., 0.8, -0.5, 0.7, 0.6],
[0.8, 1., 0.2, 0.9, 0.8],
[-0.5, 0.2, 1., -0.3, -0.2],
[0.7, 0.9, -0.3, 1., 0.9],
[0.6, 0.8, -0.2, 0.9, 1.]]
}
df = pd.DataFrame(data)
# 将数据转换成矩阵形式
returns = df['returns'].values.reshape(-1, 1)
covariance = df['corr_matrix'] * df['std_dev'].reshape(-1, 1)**2
# 初始权重
initial_weights = np.array([0.2] * len(df))
# 目标函数,最小化方差(风险)
def objective(weights):
portfolio_var = weights.T @ covariance @ weights
return portfolio_var
# 约束条件,总权重等于1
constraints = [{'type': 'eq', 'fun': lambda x: np.sum(x) - 1}]
# 使用Scipy的最优化函数求解
result = minimize(objective, initial_weights, constraints=constraints, method='SLSQP')
# 输出优化后的权重
optimized_weights = result.x
print(f"优化后的资产配置比例:{optimized_weights}")
```
在这个代码中,我们首先计算了投资组合的协方差矩阵,然后定义了一个目标函数(最小化方差),同时设置了一个约束条件(所有权重之和为1)。`minimize` 函数会找到满足这些条件下的最优权重分配。
阅读全文