Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在KDB中使用结果中的列创建表_Kdb - Fatal编程技术网

在KDB中使用结果中的列创建表

在KDB中使用结果中的列创建表,kdb,Kdb,我试图在KDB中创建一个表,其中的列是查询的结果。例如,我加载了股票数据并搜索给定的时间窗口,该股票的交易价格是多少。我创建了一个函数 getTrades[Sybmol;日期;开始时间;停止时间] 这将搜索我的数据库并返回在开始和停止时间之间交易的价格。因此,我对苹果30秒窗口的结果可能是: 527.10、527.45、527.60、526.90等 我现在要做的是使用xbar创建一个表,在这里我有每秒的行和以StartTime和StopTime交易的所有价格的列。如果价格在这1秒内交易,我将在列

我试图在KDB中创建一个表,其中的列是查询的结果。例如,我加载了股票数据并搜索给定的时间窗口,该股票的交易价格是多少。我创建了一个函数 getTrades[Sybmol;日期;开始时间;停止时间]

这将搜索我的数据库并返回在开始和停止时间之间交易的价格。因此,我对苹果30秒窗口的结果可能是: 527.10、527.45、527.60、526.90等

我现在要做的是使用xbar创建一个表,在这里我有每秒的行和以StartTime和StopTime交易的所有价格的列。如果价格在这1秒内交易,我将在列中放置一个X。我想我可以处理大部分问题,但我最头疼的是将上面得到的结果转换成表名。我也在努力使它灵活,这样我的表在一个场景中有5列(5个交易价格),但在另一个场景中有10列,所以本质上它会根据我搜索的窗口中交易的价格水平而变化


谢谢。

进行编程选择的最好、最干净的方法是使用select的函数形式

从q到凡人

    ?[t;c;b;a]                
其中t是表,a是聚合字典,b是groupbys字典,c是约束列表

换句话说,从t中选择a by b,其中c

这将允许您动态创建一个可以是任意大小的

您可以在此处找到更多信息:
这看起来有点复杂。。。但我想这可能就是你想要的

带有时间和价格列的示例表t:

t:`time xasc([]time:100?(.z.T+500*til 100);price:100?(100 101 102 103 104 105 106))
此表应该复制您从函数调用的第一步得到的结果-“选择时间,交易价格,其中日期=x,符号=y,开始时间=t1,结束时间=t2”

要以指定的格式返回表,请执行以下操作:

q) flip (`time,`$string[c])!flip {x,'y}[key a;]value a:{x in y}[c:asc distinct tt`price] each group (!) . reverse value flip tt:update time:time.second from t

time     100 101 102 103 104 105 106
------------------------------------
20:34:29 0   1   0   0   0   1   0
20:34:30 0   0   0   0   0   0   1
20:34:31 0   0   1   0   0   0   0
20:34:32 0   0   1   0   1   0   0
...
这有布尔而不是X,因为布尔可能更容易处理

也请原谅一行。。。如果有机会,我会把它拆开,让它更可读。

我认为透视表适合这种情况。使用jgleeson示例:

time         price
------------------
11:27:01.600 106
11:27:02.600 102
11:27:02.600 102
11:27:03.100 100
11:27:03.100 102
11:27:03.100 102
11:27:03.100 104
11:27:03.600 104
11:27:03.600 102
11:27:04.100 106
11:27:05.100 105
11:27:06.600 106
11:27:07.100 101
11:27:07.100 104
11:27:07.600 105
11:27:07.600 105
11:27:07.600 101

not null exec (exec `$string asc distinct price from s)#(`$string price)!price by time:1 xbar time.second from s:select from t where time within 11:27:00 11:27:30
并返回:

time    | 100 101 102 103 104 105 106
--------| ---------------------------
11:27:01| 0   0   0   0   0   0   1
11:27:02| 0   0   1   0   0   0   0
11:27:03| 1   0   1   0   1   0   0
11:27:04| 0   0   0   0   0   0   1
11:27:05| 0   0   0   0   0   1   0
11:27:06| 0   0   0   0   0   0   1
11:27:07| 0   1   0   0   1   1   0

它可以支持任何数量的独特价格

更简化的版本是:

q)t:`time xasc([] s:100#`s ; time:100?(.z.T+500*til 100);price:100?(100 101 102 103 104 105 106))

q)t1:update `$string price,isPrice:1b from t

q)p:(distinct asc t1`price)

q)exec p#(10b!"X ")@(price!isPrice) by time:1 xbar time.second from t1
time    | 100 101 102 103 104 105 106
--------| ---------------------------
20:39:00| X   X   X
20:39:01| X   X   X       X
20:39:02|     X
20:39:04| X
20:39:05|             X   X   X   X