returns 预期 returns 的 python 脚本,2 个资产的协方差和波动率

A python script that returns expected returns, covariance and volatility of 2 assets

受我excel金融class测试的启发,我想用Python作为解决这个问题的工具。

我想学习如何计算资产的预期 returns、协方差和波动率,尤其是在包含事件概率的情况下。

Expected return (ERi) =  Prob(i) * Returns(i)

这是我目前的 WIP 代码计划,试图解决这个问题:

import numpy as np
import pandas as pd

p = np.array([0.25, 0.5, 0.25])
r1 = np.array([0.05, 0.075, 0.1])
r2 = np.array([0.2, 0.15, 0.1])

er1 = <<need help returning a single float as expected return of asset 1>>
er2 = <<need help returning a single float as expected return of asset 2>>

portfolio = pd.DataFrame([er1, er2])

weights = np.array([0.5, 0.5])
returns_portfolio = np.dot(weights, portfolio)

cov_matrix = <<need help returning the covariance matrix for the assests>>

portfolio_volatility = <<need help returning the std of returns of the two assets>>

我已经存储了事件的概率并且每个资产的 returns 被称为 numpy 数组的事件。 python 让我感到困惑的是包含了概率和关联的 returns。

就像公式说明的那样,我想 return probability of event(i)* return on event(i) for each separate asset

的总和

根据每个资产的预期 returns 值,我计划创建一个 returns 数组来存储这些值:

returns = pd.DataFrame([er1, er2])

我希望使用 np.dot(weights, portfolio) 来获得一个投资组合的 returns,使两种资产的权重相等。

我还需要有关如何实施 .cov 方法和 .std 方法以获得投资组合的协方差矩阵和波动率的指导。

也热烈欢迎任何提示。

仅使用数组乘法和 numpy 内置函数(例如 dotvarstd:

似乎非常简单
er1 = (p * r1).sum()

为什么投资组合或 returns 是 DataFrame 而不是 np.array?只需使用 np.array([er1, er2])

然后使用np.std(returns)returns.std()