现有两家公司每个月的总回报率(已加1的,即HPR),在每一个月t都要计算“t-10到t-1期的区间回报率”,如此按月份往下滚动计算。例子中每家公司有13个样本,能够算出3个值也已列出。我目前的想法是:
bysort id: gen RETURN= HPR[_n-10]*HPR[_n-9]*HPR[_n-8]*HPR[_n-7]*HPR[_n-6]*HPR[_n-5]*HPR[_n-4]*HPR[_n-3]*HPR[_n-2]*HPR[_n-1]
可这么一个个乘逊了点。我尝试过类似于“in _n-11/_n-1”的不让在bysort里用,用连乘prod吧这不是按id来也不是按年份的规整分组,而且还是滚动的计算。
想请教各位坛友有没很简便的方法简化乘积的过程。这个例子灰常适合来检验动量投资策略(Momentum strategy),最好能方便地改变历史区间,比如不是算滞后的10期,而是算滞后的5期,6期等。如果能用local或global直接改滞后期数就更好了。
假设的数据:
观测值 | id | month | HPR | 历史区间HPR |
1 | 1 | 2010m1 | 1.05 | |
2 | 1 | 2010m2 | 1.03 | |
3 | 1 | 2010m3 | 0.88 | |
4 | 1 | 2010m4 | 1.03 | |
5 | 1 | 2010m5 | 0.89 | |
6 | 1 | 2010m6 | 0.94 | |
7 | 1 | 2010m7 | 1.01 | |
8 | 1 | 2010m8 | 1 | |
9 | 1 | 2010m9 | 0.88 | |
10 | 1 | 2010m10 | 1.02 | |
11 | 1 | 2010m11 | 1.06 | 0.74347864 |
12 | 1 | 2010m12 | 0.92 | 0.75055939 |
13 | 1 | 2011m1 | 1.07 | 0.67040257 |
14 | 2 | 2010m1 | 0.81 | |
15 | 2 | 2010m2 | 1.19 | |
16 | 2 | 2010m3 | 0.97 | |
17 | 2 | 2010m4 | 0.9 | |
18 | 2 | 2010m5 | 1 | |
19 | 2 | 2010m6 | 1.05 | |
20 | 2 | 2010m7 | 0.92 | |
21 | 2 | 2010m8 | 0.99 | |
22 | 2 | 2010m9 | 1.03 | |
23 | 2 | 2010m10 | 1.01 | |
24 | 2 | 2010m11 | 1.08 | 0.83717672 |
25 | 2 | 2010m12 | 0.93 | 1.11623563 |
26 | 2 | 2011m1 | 1.23 | 0.87235221 |