计算每日时间序列价格的每周回报v2

时间:2017-02-08 22:11:31

标签: excel vba excel-vba excel-formula finance

这是一个稍微调整过的问题版本:Calculating Weekly Returns from Daily Time Series of Prices由@Scott Craner解答:

我想从每日价格的时间序列中计算共同基金的每周回报。我的数据如下:

A        B      C        D        E
DATE     WEEK   W.DAY    MF.PRICE WEEKLY RETURN
02/01/12    1    1       2,7587   -0,0108
03/01/12    1    2       2,7667
04/01/12    1    3       2,7892
05/01/12    1    4       2,7666
06/01/12    1    5       2,7391    
09/01/12    2    1       2,7288    0,0067
10/01/12    2    2       2,6707
11/01/12    2    3       2,7044
12/01/12    2    4       2,7183
13/01/12    2    5       2,7619    
16/01/12    3    1       2,7470    0,0511
17/01/12    3    2       2,7878
18/01/12    3    3       2,8156
19/01/12    3    4       2,8310
20/01/12    3    5       2,8760 
23/01/12    4    1       2,8875  

日期为(年/月/日)格式和","是小数点分隔符。这将通过使用以下公式来完成:(下周的第一个工作日的价格 - 当前周的第一个工作日的价格)/(当前周的第一个工作日的价格)。例如,第一周的回报是(2,7288 - 2,7587)/ 2,7587 = -0,0108,第二周的回报是(2,7470 - 2,7288)/ 2,7288 = 0,0067。

问题是该名单会持续一年,由于假期或其他原因,有些星期的工作日不到五个工作日。有些星期从工作日2开始,有些星期在工作日3结束。所以我不能简单地复制并粘贴上面的公式。我使用WEEKNUM和WEEKDAY函数为周数和工作日添加了额外的两列,认为它可能会有所帮助。我希望用公式自动化这个并希望得到这样的表:

WEEK    RETURN
 1      -0,0108
 2       0,0067
 3       0,0511
.       
.       
.       

我正在寻找一种方法告诉excel"找到与连续两周的最低工作日相对应的价格并应用公式"(下周第一个工作日的价格 - 本周第一个工作日的价格)/(本周第一个工作日的价格)"。

我将不胜感激任何帮助! (我连续几年有5个单独的工作表,每个工作表的每日价格为20个共同基金)

1 个答案:

答案 0 :(得分:1)

在我看来,您可以使用E中的此公式生成列E2

=IF(B2=B1, "", (VLOOKUP(1+B2, B3:D9, 3, FALSE) - D2)/D2)

这是一个限制在每行宣布新一周的7行的VLookup。

复制到所有单元格将显示第一个画面中显示的结果。要将此结果转换为列表(Week, Return),过滤器会隐藏E的空白。

请注意,如果WeekNum在新的一年到达时重新启动,则可能会出现问题,但由于您说每张纸都是一年(日历)年,因此不应该发生。< / p>