如何使用QuestDB生成K线图?行情数据OHLC聚合需求
使用QuestDB生成K线图(OHLC聚合)
需求说明
针对指定交易对(symbol),按自定义时间间隔聚合行情数据,计算每个时间区间内的开盘价(Open)、收盘价(Close)、最高价(High)、最低价(Low),用于生成K线图。
行情表结构
| symbol | side | price | amount | timestamp |
|---|---|---|---|---|
| BTC-USD | buy | 35831.56 | 0.00051151 | 2023-11-15T10:42:11.754626Z |
核心SQL查询
利用QuestDB的时间分桶函数bucket()和聚合函数实现OHLC计算:
SELECT bucket(timestamp, '5m') AS interval_start, -- 按5分钟间隔分桶,可替换为'1m'/'1h'/'1d'等 symbol, first(price) AS open_price, -- 区间内第一条交易的价格(开盘价) max(price) AS high_price, -- 区间内最高价格 min(price) AS low_price, -- 区间内最低价格 last(price) AS close_price, -- 区间内最后一条交易的价格(收盘价) sum(amount) AS volume -- 可选:区间内总成交量 FROM your_table_name -- 替换为实际表名 WHERE symbol = 'BTC-USD' -- 指定目标交易对 GROUP BY interval_start, symbol ORDER BY interval_start ASC; -- 按时间顺序排序
关键说明
- 时间间隔调整:
bucket()函数的第二个参数支持多种时间单位,比如'1m'(1分钟)、'1h'(1小时)、'1d'(1天)、'1w'(1周)等,按需替换即可。 - 性能优化:如果
timestamp列是表的分区列(比如PARTITION BY DAY),分桶查询的性能会大幅提升,建议建表时配置。 - 成交量扩展:如果需要K线的成交量维度,直接添加
sum(amount) AS volume到SELECT子句即可。 - 多交易对聚合:如果需要同时处理多个交易对,去掉
WHERE symbol = 'BTC-USD'过滤条件,分组时保留symbol即可。
内容的提问来源于stack exchange,提问作者Jaromir Hamala
相关产品推荐
相关产品推荐

