【发布时间】:2017-09-11 17:55:39
【问题描述】:
我正在使用 InfluxDB 对股票市场数据的时间序列进行测试,包括高、低、开盘和收盘价的分钟数。我的目标是汇总数据,以便将每一天分为 N 个批次(蜡烛),N 是一个整数,如果某些分钟被无法填充的批次忽略,也没有问题。
例如:
一个交易日显示从上午 9 点到下午 5 点的每一分钟(即 480 分钟)的市场数据。如果我想每天在 13 根蜡烛中聚合这些数据点,我有 13 根蜡烛,每根 36 分钟,最后 12 分钟被忽略。
由于我找不到一种简单的方法来提取日期组件,例如一年中的月份、一天中的分钟等,我创建了一个预处理度量,表示自市场开盘以来每分钟的偏移量,因此每个数据点看起来像:
date symbol open high low close offset
2017-01-01 09:00:00 XPTO 1.0 1.3 0.9 1.1 0
2017-01-01 09:01:00 XPTO 1.0 1.3 0.9 1.1 1
2017-01-01 09:02:00 XPTO 1.0 1.3 0.9 1.1 2
...
在流行的关系数据库中,通过查询(下面的伪 SQL)在这些存储桶中进行聚合是微不足道的:
SELECT ...,FLOOR(offset / FLOOR(480 / n)) AS candle_id FROM prices WHERE symbol = 'XPTO' GROUP BY DAY(date), candle_id
但我无法弄清楚如何在 InfluxDB 中执行此操作,因为没有功能性 FLOOR 函数。
对于简单的时间聚合,influxDB 的结果比 PostgreSQL 和 MySQL 好得多,响应速度快了十倍。所以用它完成同样的工作会非常好。
BONUS:实际上市场开放时间取决于学期,所以它在 1 月至 6 月的上午 9 点和 7 月至 12 月的上午 10 点开放,因此桶大小会根据它而变化。
【问题讨论】:
标签: time-series influxdb