kdb-n天前获取列值

kdb-n天前获取列值,kdb,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[

如果我有一张价格表

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


谢谢你的帮助

好吧,第一个问题你基本上解决得很好。要获得回报,您可以使用此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天后的价格

然后,回报率是按照正常的方式计算的


希望这有帮助

很酷,谢谢。我还发现了关于
xprev
update prevPx:n xprev px from t t
您的解决方案中有一点输入错误,应该是+not-:
aj[`date;t;select date,pr:px from update date:date+5 from t]
谢谢您指出这一点。事实上,它必须是加号。