如何在午夜以外的时间运行kdb + tick结束日期

时间:2015-01-01 05:32:50

标签: kdb

我想在纽约时间下午5点运行.u.end。

正在考虑的替代方案:

  • 将Machine TZ设置为欧洲/赫尔辛基 - 这使得午夜时间=纽约时间下午5点。
  • 将Machine TZ设置为UTC - 并在22:00
  • 运行
  • 将Machine TZ设置为NY并在17:00 <运行。这将是不错的

我无法找到如何在非午夜时间运行。

需要考虑的含义是什么?

有没有人有这样做的经验,他们想分享?

3 个答案:

答案 0 :(得分:7)

您必须修改tick.q才能满足您的新条件。你可以在这里看到代码:

https://github.com/KxSystems/kdb-tick/blob/master/tick.q

...计时器调用的ts函数只检查.u.d是否小于.z.d。如果条件改变,可能通过做.z.p > .u.d+17:00之类的事情。 (当然你需要更新你最后一次煽动.u.end以便在同一天不能满足这个条件:))

答案 1 :(得分:1)

一种方法是设置计时器。

首先定义以下功能:

        q) .z.ts:{ if (current time=5 PM) then call .u.end }

然后设置定时器频率。对于前者以下行将调用&#39; .z.ts&#39;每2秒。

        q) \t 2000

参考:http://code.kx.com/q/ref/dotz/#zts-timer

答案 2 :(得分:0)

假设有一个vanilla kdb + tick设置,其中:

  • 5010是股票代码工厂
  • 5011是实时数据库(RDB)
  • 5012是历史数据库(HDB)

连接到自动收录器工厂并使用零参数调用函数.u.endofday

q)h:hopen 5010 / ticker plant
q)h".u.endofday[]"
q)hclose h
q)h:hopen 5011 / RDB
q)h"" / wait for RDB to complete last async request
q)hclose h

上述命令可以使用shell脚本+ UNIX cron自动执行。