在 KDB 中组合符号



我目前正在研究一个与kdb+数据库交互的python项目。数据库的未来版本将有一个微小的变化,并且由于我无法继续进行python编程,我想我会自己试一试,而不是等待kdb开发人员的更新。

我正在使用一个模拟数据库,该数据库会吐出随机生成的符号,如下所示:instr1instr2instr81等。

我环顾四周,相信符号是由线条生成的.gen.uni:$"instr",/: string til .gen.cfg.uniSize;

我想实现的是exchangeX.instrY符号,而不仅仅是instrY(其中 X 和 Y 只是一些生成的数字(。

为了方便,我把这条线改成了$"instr",/: string til 4,这样我的大脑就不会那么疼了。

如何实现这样的事情?我发现了sv功能,因此我尝试了许多sv ($"exchange",/: string til 4;$"instr",/: string til 4)变体,但似乎没有任何效果。

谢谢你的时间!

PS:由于SO的格式,我在这里和那里删除了一些反引号

使用 roll 运算符对于生成此类数据很有用:http://code.kx.com/q/ref/random/#roll

下面的函数将生成一个随机的交易品种列表。

参数:

x - 要生成的符号数

y - 不同交易所的数量

z - 不同仪器的数量

q){` sv' flip `$("exch",/:string x?y;"inst",/:string x?z)}

q){` sv' flip `$("exch",/:string x?y;"inst",/:string x?z)}[100;4;10]
`exch0.inst2`exch3.inst3`exch3.inst0`exch2.inst0`exch3.inst4`exch3.inst4`exch2.inst0`exch0.inst3`exch3.inst4`exch0.inst5`exch3.inst0`exch1.inst5`exch1.inst7`exch2.inst4`exch2.inst3`exch3.inst1`exch3.inst6`exch2.inst2`exch2.inst..
q)

这是你要找的吗?我把它隔开了一点。

`$"exchange" ,/: (string til 4) ,' ".inst" ,/: string til 4

副词删除了一些重复。对于来自 4 个交易所中的任何一个的 10 种工具中的任何一种的 100 个示例:

"."sv/:flip("exchange";"inst"),/:'string 100?/:4 10

稍微分解一下:100?/:4 10返回两个 100 向量,一个从 0-3 绘制,另一个从 0-99 绘制,由/:(每个右(副词提供。string将它们投射到字符串上。让我们称之为n.

q)show n:string 100?/:4 10
,"3" ,"2" ,"3" ,"0" ,"3" ,"3" ,"1" ,"2" ,"3" ,"3" ,"3" ,"3" ,"3" ,"1" ,"1" ,"..
,"9" ,"5" ,"2" ,"3" ,"7" ,"7" ,"6" ,"7" ,"2" ,"0" ,"3" ,"5" ,"0" ,"5" ,"2" ,"..

每个右副词修改连接函数,因此:

q)"exchange",/:n 0
"exchange3"
"exchange2"
"exchange3"
..

我们可以修改派生函数,/:每个两个',以在第一个向量中的字符串前面加上"exchange",在第二个向量中的字符串前面加上"inst"

q)("exchange";"inst"),/:'n
"exchange3" "exchange2" "exchange3" "exchange0" "exchange3" "exchange3" "exch..
"inst9"     "inst5"     "inst2"     "inst3"     "inst7"     "inst7"     "inst..

现在我们只需要将一对向量flip成对向量

q)flip("exchange";"inst"),/:'n
"exchange3" "inst9"
"exchange2" "inst5"
"exchange3" "inst2"
"exchange0" "inst3"
"exchange3" "inst7"
..

并使用每个权限修改sv以连接每对:

q)"."sv/:flip("exchange";"inst"),/:'n
"exchange3.inst9"
"exchange2.inst5"
"exchange3.inst2"
"exchange0.inst3"
"exchange3.inst7"
..

最新更新