【问题标题】:Append columns to empty table - Q/KDB+将列追加到空表 - Q/KDB+
【发布时间】:2018-02-05 13:55:22
【问题描述】:

我正在从一个返回股票价格变动数据的源中提取数据(时间跨度 + 浮动价格)。

我需要建立 1 个表,其中包含每只股票的分时数据,同时为每只股票插入新的时间跨度索引值。示例:

AAPL:
t0    101.20
t3    102.10

GOOG:
t1    850.50
t2    860.10

Table:
    AAPL    GOOG
t0  101.20  NA
t1  NA      850.50
t2  NA      860.10
t3  102.10  NA

会有很多符号,所以我不能手动输入 AAPL、GOOG 等。

【问题讨论】:

    标签: kdb q-lang


    【解决方案1】:

    虽然可以像您描述的那样设置表格,但不建议这样做。您最好设置一个列来记录每只股票,在这种情况下为sym

    t                             sym  price
    -------------------------------------------
    2018.02.05D14:11:09.241245000 AAPL 101.7808
    2018.02.05D14:11:09.241246000 GOOG 103.0177
    2018.02.05D14:11:09.241246000 AAPL 107.8503
    2018.02.05D14:11:09.241247000 GOOG 105.3471
    

    【讨论】:

    • 我特别避免问这个问题,因为我的下一步是从所有股票中构建一个指数。一旦所有股票都具有给定的刻度值,如何将一列插入到您所描述的仅具有索引值的表中?在上面的示例中,指数将从 T1 开始(一旦 AAPL 和 GOOG 都有交易记录)。
    • 你也许可以使用这样的东西:update index:1b from trades where i>=max(first;i)fby sym。这应该识别有效的行。
    • 另外一个给出不同的解决方案:我希望指数值基于每只股票的最新价格,而不是 1b。基本上,一旦索引完成(上面的 1b),将每个代码的最新值相加。知道怎么做吗?
    • 这里有一个例子:delete ind from update index:sum@'ind from (update ind:{x[y]:z;:x}\[()!();sym;price] from trades) where i>=max(first;i)fby sym。这使用扫描为每个符号创建最新价格的字典,然后仅在所有代码都打勾后才使用更新来求和,然后删除中间 ind
    • 感谢你们的帮助。我很快就会发布另一个主题,因为这与主题无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多