kdb-获取n天前的列值

时间:2018-06-28 12:29:49

标签: kdb

如果我有一张价格表

t:([]date:2018.01.01+til 30;px:100+sums 30?(-1;1))

date    px
2018.01.01  101
2018.01.02  102
2018.01.03  103
2018.01.04  102
2018.01.05  103
2018.01.06  102
2018.01.07  103
...

如何计算n天内的收益?我对这两种计算都感兴趣
(px[i] - px[i-n])/px[i-n](px[date] - px[date-n])/px[date-n],即一种将px列按索引移动n槽的位置,将先前价格为date-n

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

好吧,第一个您完全正确。要获得回报,您可以使用以下lambda:

{update return1:(px-px[i-x])%px[i-x] from t}[5]

对于日期转换,您可以使用这样的aj:

select date,return2:(px-pr)%pr from aj[`date;t;select date,pr:px from update date:date+5 from t]

基本上,您要在此处执行的操作是将日期偏移所需的天数,然后提取价格。您使用aj创建表,该表将如下所示:

q)aj[`date;t;select date,pr:px from update date:date+5 from t]
date       px pr
----------------
2018.01.01 99 98
2018.01.02 98 97
2018.01.03 97 98 

其中px是您现在的价格,pr是您5天后的价格。

然后,以正常方式计算收益。

希望这会有所帮助!