【发布时间】:2021-03-24 10:55:29
【问题描述】:
我要计算每月重新平衡的投资组合的权重。在粘贴的数据集中,PERMNO 是一只股票,我需要计算这个投资组合的累积权重,即权重随着股票收益的增加而增加。
案例是: 每天的权重计算如下:每只股票的 w1 = w0*(1+r0)/(sum(all w1 that day))。在excel中这没问题,但是我在python中遇到了问题。因为第二天的 w0 是过去一天的 w1。我尽量不使用循环,因为日期集很大,但任何解决方案都值得赞赏。 我正在处理的数据框是这样的:
正如您在第二张图片中看到的,第 2 天的体重是第 1 天的新体重。这就是问题所在。
谢谢!!
【问题讨论】:
-
这很有趣,因为基本上你要做的是将初始权重乘以返回的累积乘积,这会在没有缓存中间体的情况下在多余的计算中迅速爆发。
w_i = w0_i * itertools.accumulate(df.return_factors_i, operator.mul) / sum_i(w0_i * itertools.accumulate(df.return_factors_i, operator.mul)。可能想查看functools.cache的电话。我知道可以创建一组协同工作的函数来模拟所需的行为,但是在循环中创建它实际上有什么问题? -
现在我也尝试用循环解决它,但遇到了某些问题。你有循环解决方案吗?