开始使用免费开始使用

计算投资组合

现在我们将生成一组投资组合,以找出每个月表现最好的那个。numpyrandom.random() 会从均匀分布生成随机数,然后我们用 /= 运算符将它们归一化,使其之和为 1。接着用这些权重计算收益和波动率。收益是权重与各自收益的加权求和。波动率更复杂,涉及不同股票之间的协方差。

最后,我们会将这些值存入字典,键为每个月的日期,供后续使用。

在本练习中,我们每个日期只生成 10 个投资组合,以加快运行速度。但在真实场景中,若只包含少量股票,通常会随机生成约 1000 到 5000 个投资组合。

本练习是课程的一部分

Python 金融机器学习

查看课程

练习说明

  • 使用 np.random.random() 生成权重的 3 个随机数。
  • 计算 returns:对循环中当前 date 的月度收益与 weights 做点积(np.dot();对两个数组逐元素相乘并求和)。
  • 使用 .setdefault() 方法为当前 dateportfolio_weights 字典中添加一个空列表([]),然后将 weights 追加到该列表。

交互式实操练习

通过完成这段示例代码来试试这个练习。

portfolio_returns, portfolio_volatility, portfolio_weights = {}, {}, {}

# Get portfolio performances at each month
for date in sorted(covariances.keys()):
    cov = covariances[date]
    for portfolio in range(10):
        weights = np.random.random(____)
        weights /= np.sum(weights) # /= divides weights by their sum to normalize
        returns = np.dot(____, returns_monthly.loc[____])
        volatility = np.sqrt(np.dot(weights.T, np.dot(cov, weights)))
        portfolio_returns.setdefault(date, []).append(returns)
        portfolio_volatility.setdefault(date, []).append(volatility)
        portfolio_weights.setdefault(date, ____).append(____)
        
print(portfolio_weights[date][0])
编辑并运行代码