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

时间:2017-02-08 14:00:03

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

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

A        B      C        D        E
DATE     WEEK   W.DAY    MF.PRICE WEEKLY RETURN
02/01/12    1    1       2,7587
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    -0,007
09/01/12    2    1       2,7288
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    0,012
16/01/12    3    1       2,7470
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    0,047

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

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

WEEK    RETURN
 1     -0,007
 2      0,012
 3      0,047
.       
.       
.       

正如我所说,有些星期工作日不到五个星期,由于节假日或其他原因,有些星期从工作日2开始或以工作日3等结束。因此,我想到了一种方法告诉excel"找到与每周最大和最小工作日相对应的价格并应用公式(上周工作日的价格 - 第一个工作日的价格)/(Price第一个工作日)"。

很抱歉这篇长篇文章,我试图尽可能清楚,我将不胜感激任何帮助! (我连续几年有5个单独的工作表,每个工作表的每日价格为20个共同基金)

2 个答案:

答案 0 :(得分:2)

在一个公式中执行:

=(INDEX(D:D,AGGREGATE(15,6,ROW($D$2:$D$16)/(($C$2:$C$16=AGGREGATE(14,6,$C$2:$C$16/($B$2:$B$16=G2),1))*($B$2:$B$16=G2)),1))-INDEX(D:D,MATCH(G2,B:B,0)))/INDEX(D:D,MATCH(G2,B:B,0))

您可能需要根据当地设置将所有,更改为;

enter image description here

答案 1 :(得分:1)

我会使用一些查找公式来解决它,以获取每周的值,然后每周进行一次简单的计算。

结果表:

H   I           J           K           L           M     
    first       last        first val   last val    return
1   02.01.2012  06.01.2012  2,7587      2,7391      -0,007
2   09.01.2012  13.01.2012  2,7288      2,7619      0,012
3   16.01.2012  20.01.2012  2,747       2,876       0,047

第I栏中的公式:

=MINIFS($A:$A;$B:$B;$H2)

J栏中的公式:

=MAXIFS($A:$A;$B:$B;$H2)

K栏中的公式:

=VLOOKUP($I2;$A:$D;4;FALSE)

L栏中的公式:

=VLOOKUP($J2;$A:$D;4;FALSE)

M栏中的公式:

=(L2-K2)/K2