【问题标题】:q / KDB+ How to populate table with random symbols from the list?q / KDB+ 如何用列表中的随机符号填充表?
【发布时间】:2021-06-18 11:00:56
【问题描述】:

我正在尝试使用以下语法创建表:

rows: 100
syms:(`VOD.L;`APPL;`AZ.L;`FB)
values:([] timestamp: rand each rows#.z.t; sym:rand syms; quote:rand each rows#1000; bid:rand each rows#1000; ask:rand each rows#1000; price:rand each rows#1000)
values

它返回以下内容:

timestamp    sym  quote bid ask price
-------------------------------------
08:08:00.050 APPL 466   498 263 657  
10:09:27.205 APPL 464   240 176 898  
04:47:18.085 APPL 191   407 105 990  
09:54:58.651 APPL 876   96  429 699  
02:19:09.967 APPL 60    227 333 954  
04:16:32.491 APPL 29    454 574 757  
00:04:47.977 APPL 945   607 559 666  
00:01:38.306 APPL 185   52  298 745  
07:41:15.101 APPL 96    397 261 924  
05:58:57.757 APPL 267   845 114 584  
04:28:41.917 APPL 20    320 300 418  
07:24:54.913 APPL 188   614 83  335  
07:03:28.536 APPL 248   20  831 565  
02:32:59.849 APPL 435   485 274 27   
08:24:16.294 APPL 831   66  810 418  
10:31:42.552 APPL 876   19  147 586  
10:40:04.843 APPL 539   752 351 194  
03:16:53.847 APPL 6     600 905 321  
03:55:59.228 APPL 376   288 427 645  
08:08:32.805 APPL 350   742 126 942  
..

问题是所有符号都是一样的——APPL:

select from values where sym<>`APPL
    
timestamp sym quote bid ask price
---------------------------------

我无法将它们随机化。我尝试使用与随机化时间戳或数值相同的方法,像这样......

values:([] timestamp: rand each rows#.z.t; sym:rand each rows#syms; quote:rand each rows#1000; bid:rand each rows#1000; ask:rand each rows#1000; price:rand each rows#1000)

...但随后我收到以下错误:

评估错误:

VOD.L

  [3]  (<q>)


  [2]  (.q.rand)


  [1]  (.q.each)


  [0]  values:([] timestamp: rand each rows#.z.t; sym:rand each rows#syms; quote:rand each rows#1000; bid:rand each rows#1000; ask:rand each rows#1000; price:rand each rows#1000)
                                                                                     

很明显,我一定是被一些愚蠢的东西困住了,但对我来说,这可能是什么并不明显。请帮忙。

提前致谢。

【问题讨论】:

    标签: kdb


    【解决方案1】:

    使用滚动? 而不是rand

    q)([]timestamp:rows?.z.t;sym:rows?syms;quote:rows?1000;bid:rows?1000;ask:rows?1000;price:rows?1000)
    timestamp    sym   quote bid ask price
    --------------------------------------
    00:28:43.630 AZ.L  181   879 501 394
    00:13:16.346 APPL  421   555 529 52
    04:33:06.881 APPL  379   386 914 259
    01:55:03.027 FB    198   399 684 990
    05:23:18.919 AZ.L  728   318 641 264
    ...
    

    详情请看:https://code.kx.com/q/ref/deal/

    滚动/交易更适合列表,rand (https://code.kx.com/q/ref/rand/) 仅适用于选择一个值。如文档中所述:

    "rand 完全等价于 {first 1?x}。如果需要列表结果,请使用 Roll"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多