wj忽略了联接中的sym(ric)列,导致所有股票的报价都包含在窗口中

问题描述 投票:0回答:1

当我按如下方式使用窗口连接(wj)时,它的行为不符合我的预期。似乎没有在联接中使用ric的关键问题,因此在下面的示例中,对于一只股票(例如'COSC.SI),我获得了股票中'COMF.SI和'COSC.SI的价格定义的窗口。你能告诉我我在做什么错吗?我注意到,我被迫以错误的顺序输入列以使代码运行而没有错误-我对'r列(ric列)的使用有问题吗?

如何获得此功能以产生预期的行为(在定义的窗口中按每种唯一股票分组的价格)?

更广泛地讲,以及我对wj的实现,也许有比我在此使用的wj方法更好的在每个价格周围的时间窗口中对价格进行分组的方法?

谢谢,

Simon

f:([]t:1998.02.01 1998.02.01 1998.02.02 1998.02.02 1998.02.03 1998.02.03 1998.02.04 1998.02.04 1998.02.05 1998.02.05;r:`COMF.SI`COSC.SI`COMF.SI`COSC.SI`COMF.SI`COSC.SI`COMF.SI`COSC.SI`COMF.SI`COSC.SI;price:0.7312963 0.835 0.8021131 0.7936364 0.7825 0.79 0.7583088 0.8 0.8322596 0.79)

/set the window
w:-3 0 +\:f[`t];
c:`r`t;
out: wj[w;c;f;(f;(::;`price))];
kdb
1个回答
0
投票

如果要在`r`t上加入,则必须在`r`t上对表进行排序以获得正确的结果:

q)f:([]t:1998.02.01 1998.02.01 1998.02.02 1998.02.02 1998.02.03 1998.02.03 1998.02.04 1998.02.04 1998.02.05 1998.02.05;r:`COMF.SI`COSC.SI`COMF.SI`COSC.SI`COMF.SI`COSC.SI`COMF.SI`COSC.SI`COMF.SI`COSC.SI;price:0.7312963 0.835 0.8021131 0.7936364 0.7825 0.79 0.7583088 0.8 0.8322596 0.79)
q)f:`r`t xasc f;
q)w:-3 0 +\:f[`t];
q)c:`r`t;
q)show out:wj[w;c;f;(f;(::;`price))];
t          r       price
-------------------------------------------------------
1998.02.01 COMF.SI ,0.7312963
1998.02.02 COMF.SI 0.7312963 0.8021131
1998.02.03 COMF.SI 0.7312963 0.8021131 0.7825
1998.02.04 COMF.SI 0.7312963 0.8021131 0.7825 0.7583088
1998.02.05 COMF.SI 0.8021131 0.7825 0.7583088 0.8322596
1998.02.01 COSC.SI ,0.835
1998.02.02 COSC.SI 0.835 0.7936364
1998.02.03 COSC.SI 0.835 0.7936364 0.79
1998.02.04 COSC.SI 0.835 0.7936364 0.79 0.8
1998.02.05 COSC.SI 0.7936364 0.79 0.8 0.79

请参阅:https://code.kx.com/q/ref/wj/

© www.soinside.com 2019 - 2024. All rights reserved.