我有一个每日因素回报的数据框架。我期望的最终结果是获得VcV矩阵,其中方差对角线以1.5年(358天)滚动计算,非对角线协方差值以3年(756天)滚动窗口计算。为了简单起见,我现在对观察结果进行了同等的加权。你知道吗
我的当前函数创建了两个协方差矩阵的多索引数据帧,然后使用for循环将一个对角线替换为另一个对角线。这是可行的;但是,有没有比计算两个多索引数据帧更有效的方法呢?你知道吗
def blendCovarianceMatrix(daily_returns, var_window = 358, cov_window = 756 ):
varianceMatrix = daily_returns.rolling(int(var_window)).cov()
covarianceMatrix = daily_returns.rolling(int(cov_window)).cov()
datelist = covarianceMatrix.dropna().index.get_level_values("DataDate").unique()
for dates in datelist:
np.fill_diagonal(covarianceMatrix.loc[dates].values,np.diag(varianceMatrix.loc[dates]))
return covarianceMatrix, datelist
目前没有回答
相关问题 更多 >
编程相关推荐