Timescale Cloud:性能、规模、企业级

自托管产品

MST

介绍

执行金融资产数据分析。这些专门的超函数使得编写涉及K线图数据的金融分析查询变得更容易。

它们帮助您回答以下问题:

  • 这些股票的开盘价和收盘价是多少?
  • 这支股票的最高价何时出现?

此函数组使用两步聚合模式。除了通常的聚合函数 candlestick_agg 之外,它还包括伪聚合函数 candlestickcandlestick_agg 从原始逐笔数据生成K线图聚合,然后可以与此组中的访问器和汇总函数一起使用。candlestick 接受预聚合数据并将其转换为与 candlestick_agg 产生的数据相同的格式。这允许您将访问器和汇总函数与现有K线图数据一起使用。

聚合

candlestick_agg
将逐笔数据聚合成中间形式以供进一步计算

伪聚合

candlestick
将预聚合的K线图数据转换为正确形式,以便与 candlestick_agg 函数一起使用

访问器

close
从K线图聚合中获取收盘价
close_time
从K线图聚合中获取对应收盘时间的精确时间戳
high
从K线图聚合中获取最高价
high_time
从K线图聚合中获取对应最高价的精确时间戳
low
从K线图聚合中获取最低价
low_time
从K线图聚合中获取对应最低价的精确时间戳
open
从K线图聚合中获取开盘价
open_time
从K线图聚合中获取对应开盘时间的精确时间戳
volume
从K线图聚合中获取总成交量
vwap
从K线图聚合中获取成交量加权平均价

汇总

rollup
汇总多个K线图聚合
candlestick_agg(
ts TIMESTAMPTZ,
price DOUBLE PRECISION,
volume DOUBLE PRECISION
) RETURNS Candlestick

这是对原始逐笔数据执行财务计算的第一步。使用 candlestick_agg 从您的逐笔数据创建中间聚合。此中间形式可用于此组中的一个或多个访问器来计算最终结果。

可选地,多个此类中间聚合对象可以在应用访问器之前使用 rollup() 组合。

如果您从预聚合的K线图数据而不是原始逐笔数据开始,请改用配套的 candlestick() 函数。此函数将现有聚合数据转换为正确形式,以便与K线图访问器一起使用。

所需参数
名称类型描述
tsTIMESTAMPTZ与股票价格关联的时间戳
priceDOUBLE PRECISION给定时间点股票报价/价格
volumeDOUBLE PRECISION交易量
返回
类型描述
aggCandlestick一个对象,存储开盘价、最高价、最低价和收盘价各自的 (时间戳, 值) 对,以及用于计算总成交量和成交量加权平均价的信息。
candlestick(
ts TIMESTAMPTZ,
open DOUBLE PRECISION,
high DOUBLE PRECISION,
low DOUBLE PRECISION,
close DOUBLE PRECISION,
volume DOUBLE PRECISION
) RETURNS Candlestick

此函数将预聚合的K线图数据转换为K线图聚合对象。此对象包含正确格式的数据,可用于此函数组中的访问器和汇总函数。

如果您从原始逐笔数据而不是K线图数据开始,请改用 candlestick_agg()

所需参数
名称类型描述
tsTIMESTAMPTZ与股票价格关联的时间戳
openDOUBLE PRECISIONK线图开盘价
highDOUBLE PRECISIONK线图最高价
lowDOUBLE PRECISIONK线图最低价
closeDOUBLE PRECISIONK线图收盘价
volumeDOUBLE PRECISIONK线图周期内的总交易量
返回
类型描述
aggCandlestick一个对象,存储开盘价、最高价、最低价和收盘价各自的 (时间戳, 值) 对,以及用于计算总成交量和成交量加权平均价的信息。
close(
candlestick Candlestick
) RETURNS DOUBLE PRECISION

从K线图聚合中获取收盘价。

所需参数
名称类型描述
candlestickCandlestickK线图聚合
返回
类型描述
closeDOUBLE PRECISION收盘价
close_time(
candlestick Candlestick
) RETURNS TIMESTAMPTZ

从K线图聚合中获取对应收盘时间的精确时间戳。

所需参数
名称类型描述
candlestickCandlestickK线图聚合
返回
类型描述
close_timeTIMESTAMPTZ收盘价发生的时间
high(
candlestick Candlestick
) RETURNS DOUBLE PRECISION

从K线图聚合中获取最高价。

所需参数
名称类型描述
candlestickCandlestickK线图聚合
返回
类型描述
highDOUBLE PRECISION最高价
high_time(
candlestick Candlestick
) RETURNS TIMESTAMPTZ

从K线图聚合中获取对应最高价的精确时间戳。

所需参数
名称类型描述
candlestickCandlestickK线图聚合
返回
类型描述
high_timeTIMESTAMPTZ最高价第一次出现的时间
low(
candlestick Candlestick
) RETURNS DOUBLE PRECISION

从K线图聚合中获取最低价。

所需参数
名称类型描述
candlestickCandlestickK线图聚合
返回
类型描述
lowDOUBLE PRECISION最低价
low_time(
candlestick Candlestick
) RETURNS TIMESTAMPTZ

从K线图聚合中获取对应最低价的精确时间戳。

所需参数
名称类型描述
candlestickCandlestickK线图聚合
返回
类型描述
low_timeTIMESTAMPTZ最低价第一次出现的时间
open(
candlestick Candlestick
) RETURNS DOUBLE PRECISION

从K线图聚合中获取开盘价。

所需参数
名称类型描述
candlestickCandlestickK线图聚合
返回
类型描述
openDOUBLE PRECISION开盘价
open_time(
candlestick Candlestick
) RETURNS TIMESTAMPTZ

从K线图聚合中获取对应开盘时间的精确时间戳。

所需参数
名称类型描述
candlestickCandlestickK线图聚合
返回
类型描述
open_timeTIMESTAMPTZ开盘价发生的时间
volume(
candlestick Candlestick
) RETURNS DOUBLE PRECISION

从K线图聚合中获取总成交量。

所需参数
名称类型描述
candlestickCandlestickK线图聚合
返回
类型描述
volumeDOUBLE PRECISION期间内的总交易量
vwap(
candlestick Candlestick
) RETURNS DOUBLE PRECISION

从K线图聚合中获取成交量加权平均价。

对于从已聚合数据构建的K线图,成交量加权平均价是使用每个周期内的典型价格计算的(典型价格是指最高价、最低价和收盘价的算术平均值)。

所需参数
名称类型描述
candlestickCandlestickK线图聚合
返回
类型描述
vwapDOUBLE PRECISION成交量加权平均价
rollup(
candlestick Candlestick
) RETURNS Candlestick

将由 candlestick_aggcandlestick 产生的多个中间K线图聚合组合成一个单一的中间K线图聚合。例如,您可以使用 rollup 将15分钟桶的K线图聚合组合成每日桶。

所需参数
名称类型描述
candlestickCandlestickcandlestickcandlestick_agg 调用产生的聚合
返回
类型描述
candlestickCandlestick通过组合输入K线图聚合而产生的新K线图聚合

查询您的逐笔数据表,获取过去一天中每1小时周期的开盘价、最高价、最低价、收盘价和交易量

SELECT
time_bucket('1 hour'::interval, "time") AS ts,
symbol,
open(candlestick_agg("time", price, volume)),
high(candlestick_agg("time", price, volume)),
low(candlestick_agg("time", price, volume)),
close(candlestick_agg("time", price, volume)),
volume(candlestick_agg("time", price, volume))
FROM crypto_ticks
WHERE "time" > now() - '1 day'::interval
GROUP BY ts, symbol
;
-- or
WITH cs AS (
SELECT time_bucket('1 hour'::interval, "time") AS hourly_bucket,
symbol,
candlestick_agg("time", price, volume) AS candlestick
FROM crypto_ticks
WHERE "time" > now() - '1 day'::interval
GROUP BY hourly_bucket, symbol
)
SELECT hourly_bucket,
symbol,
open(candlestick),
high(candlestick),
low(candlestick),
close(candlestick),
volume(candlestick)
FROM cs
;

在您的股票交易数据上创建连续聚合

CREATE MATERIALIZED VIEW candlestick
WITH (timescaledb.continuous) AS
SELECT time_bucket('1 minute'::interval, "time") AS ts,
symbol,
candlestick_agg("time", price, volume) AS candlestick
FROM crypto_ticks
GROUP BY ts, symbol
;

查询您的按分钟连续聚合的股票交易数据,获取过去一小时的开盘价、最高价、最低价和收盘价(OHLC),以及它们的时间戳

SELECT ts,
symbol,
open_time(candlestick),
open(candlestick),
high_time(candlestick),
high(candlestick),
low_time(candlestick),
low(candlestick),
close_time(candlestick),
close(candlestick)
FROM candlestick
WHERE ts > now() - '1 hour'::interval
;

将您的按分钟连续聚合汇总到每日桶中,并返回 AAPL 上个月的成交量加权平均价

SELECT
time_bucket('1 day'::interval, ts) AS daily_bucket,
symbol,
vwap(rollup(candlestick))
FROM candlestick
WHERE symbol = 'AAPL'
AND ts > now() - '1 month'::interval
GROUP BY daily_bucket
ORDER BY daily_bucket
;

将您的按分钟连续聚合汇总到每小时桶中,并返回过去一天中每1小时周期的开盘价、最高价、最低价、收盘价和交易量

SELECT
time_bucket('1 hour'::interval, ts) AS hourly_bucket,
symbol,
open(rollup(candlestick)),
high(rollup(candlestick)),
low(rollup(candlestick)),
close(rollup(candlestick)),
volume(rollup(candlestick))
FROM candlestick
WHERE ts > now() - '1 day'::interval
GROUP BY hourly_bucket
;

如果您有一个预聚合的股票数据表,它可能看起来像这种格式

ts │ symbol │ open │ high │ low │ close │ volume
────────────────────────┼────────┼────────┼────────┼────────┼────────┼──────────
2022-11-17 00:00:00-05 │ VTI │ 195.67197.9195.45197.493704700
2022-11-16 00:00:00-05 │ VTI │ 199.45199.72198.03198.322905000
2022-11-15 00:00:00-05 │ VTI │ 201.5202.14198.34200.364606200
2022-11-14 00:00:00-05 │ VTI │ 199.26200.92198.21198.354248200
2022-11-11 00:00:00-05 │ VTI │ 198.58200.7197.82200.164538500
2022-11-10 00:00:00-05 │ VTI │ 194.35198.31193.65198.143981600
2022-11-09 00:00:00-05 │ VTI │ 190.46191.04187.21187.5313959600
2022-11-08 00:00:00-05 │ VTI │ 191.25193.31189.42191.664847500
2022-11-07 00:00:00-05 │ VTI │ 189.59190.97188.47190.663420000
2022-11-04 00:00:00-04 │ VTI │ 189.32190.3185.75188.943584600
2022-11-03 00:00:00-04 │ VTI │ 186.5188.09185.13186.543935600
2022-11-02 00:00:00-04 │ VTI │ 193.07195.27188.29188.344686000
2022-11-01 00:00:00-04 │ VTI │ 196196.44192.76193.439873800
2022-10-31 00:00:00-04 │ VTI │ 193.99195.17193.51194.035053900
2022-10-28 00:00:00-04 │ VTI │ 190.84195.53190.74195.293178800
2022-10-27 00:00:00-04 │ VTI │ 192.46193.47190.61190.853556300
2022-10-26 00:00:00-04 │ VTI │ 191.26194.64191.26191.754091100
2022-10-25 00:00:00-04 │ VTI │ 189.57193.16189.53192.943287100
2022-10-24 00:00:00-04 │ VTI │ 188.38190.12186.69189.514527800
2022-10-21 00:00:00-04 │ VTI │ 182.99187.78182.29187.493381200
2022-10-20 00:00:00-04 │ VTI │ 184.54186.99182.81183.272636200
2022-10-19 00:00:00-04 │ VTI │ 185.25186.64183.34184.872589100
2022-10-18 00:00:00-04 │ VTI │ 188.14188.7184.71186.463906800

您可以使用 candlestick 函数将数据转换为一种形式,以便您可以将其传递给所有访问器和 rollup 函数。为了显示您的数据得以保留,此示例展示了这些访问器如何返回一个看起来与您的数据完全相同的表

SELECT
ts,
symbol,
open(candlestick),
high(candlestick),
low(candlestick),
close(candlestick),
volume(candlestick)
FROM (
SELECT
ts,
symbol,
candlestick(ts, open, high, low, close, volume)
FROM historical_data
) AS _(ts, symbol, candlestick);
;
-- or
WITH cs AS (
SELECT ts
symbol,
candlestick(ts, open, high, low, close, volume)
FROM historical_data
)
SELECT
ts
symbol,
open(candlestick),
high(candlestick),
low(candlestick),
close(candlestick),
volume(candlestick)
FROM cs
;

将数据转换为K线图聚合形式的优势在于,您可以随后使用此组中的其他函数,例如 rollupvwap

将您的按日历史数据汇总到每周桶中,并返回成交量加权平均价

SELECT
time_bucket('1 week'::interval, ts) AS weekly_bucket,
symbol,
vwap(rollup(candlestick))
FROM (
SELECT
ts,
symbol,
candlestick(ts, open, high, low, close, volume)
FROM historical_data
) AS _(ts, symbol, candlestick)
GROUP BY weekly_bucket, symbol
;

关键词

此页面有问题?报告问题 或 在 GitHub 上编辑此页面