简介

执行对金融资产数据的分析。这些专门的超函数使编写涉及烛台数据的财务分析查询变得更加容易。

它们可以帮助您解答以下问题

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

这组函数使用 两步聚合 模式。除了通常的聚合函数 candlestick_agg 之外,它还包括伪聚合函数 candlestickcandlestick_agg 从原始的 Tick 数据生成一个烛台聚合,然后可以与本组中的访问器和汇总函数一起使用。candlestick 获取预聚合数据并将其转换为与 candlestick_agg 生成的格式相同的格式。这样,您就可以将访问器和汇总用于现有的烛台数据。

聚合

candlestick_agg
将 Tick 数据聚合为中间形式以进行进一步计算

伪聚合

candlestick
将预聚合的烛台数据转换为正确的形式以与 candlestick_agg 函数一起使用

访问器

close
从烛台聚合中获取收盘价
close_time
从烛台聚合中获取与收盘时间相对应的 Timestamp
high
从烛台聚合中获取最高价
high_time
从烛台聚合中获取与最高价时间相对应的 Timestamp
low
从烛台聚合中获取最低价
low_time
从烛台聚合中获取与最低价时间相对应的 Timestamp
open
从烛台聚合中获取开盘价
open_time
从烛台聚合中获取与开盘时间相对应的 Timestamp
volume
从烛台聚合中获取总成交量
vwap
从烛台聚合中获取成交量加权平均价格

汇总

rollup
汇总多个烛台聚合
candlestick_agg(
ts TIMESTAMPTZ,
price DOUBLE PRECISION,
volume DOUBLE PRECISION
) RETURNS Candlestick

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

或者,可以使用 rollup() 在应用访问器之前将多个这样的中间聚合对象组合起来。

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

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

此函数将预聚合的烛台数据转换为烛台聚合对象。此对象包含与本组函数中的访问器和汇总一起使用的正确形式的数据。

如果您从原始 Tick 数据而不是烛台数据开始,请使用 candlestick_agg()

必需参数
名称类型描述
tsTIMESTAMPTZ与股票价格相关的 Timestamp
openDOUBLE PRECISION烛台的开盘价
highDOUBLE PRECISION烛台的最高价
lowDOUBLE PRECISION烛台的最低价
closeDOUBLE PRECISION烛台的收盘价
volumeDOUBLE PRECISION烛台期间交易的总成交量
返回
类型描述
agg烛台一个对象,存储每个开盘价、最高价、最低价和收盘价的 (timestamp, value) 对,以及用于计算总成交量和成交量加权平均价格的信息。
close(
candlestick Candlestick
) RETURNS DOUBLE PRECISION

从烛台聚合中获取收盘价。

必需参数
名称类型描述
candlestick烛台烛台聚合
返回
类型描述
closeDOUBLE PRECISION收盘价
close_time(
candlestick Candlestick
) RETURNS TIMESTAMPTZ

从烛台聚合中获取与收盘时间相对应的 Timestamp。

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

从烛台聚合中获取最高价。

必需参数
名称类型描述
candlestick烛台烛台聚合
返回
类型描述
highDOUBLE PRECISION最高价
high_time(
candlestick Candlestick
) RETURNS TIMESTAMPTZ

从烛台聚合中获取与最高价时间相对应的 Timestamp。

必需参数
名称类型描述
candlestick烛台烛台聚合
返回
类型描述
high_timeTIMESTAMPTZ发生最高价的第一个时间
low(
candlestick Candlestick
) RETURNS DOUBLE PRECISION

从烛台聚合中获取最低价。

必需参数
名称类型描述
candlestick烛台烛台聚合
返回
类型描述
lowDOUBLE PRECISION最低价
low_time(
candlestick Candlestick
) RETURNS TIMESTAMPTZ

从烛台聚合中获取与最低价时间相对应的 Timestamp。

必需参数
名称类型描述
candlestick烛台烛台聚合
返回
类型描述
low_timeTIMESTAMPTZ发生最低价的第一个时间
open(
candlestick Candlestick
) RETURNS DOUBLE PRECISION

从烛台聚合中获取开盘价。

必需参数
名称类型描述
candlestick烛台烛台聚合
返回
类型描述
openDOUBLE PRECISION开盘价
open_time(
candlestick Candlestick
) RETURNS TIMESTAMPTZ

从烛台聚合中获取与开盘时间相对应的 Timestamp。

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

从烛台聚合中获取总成交量。

必需参数
名称类型描述
candlestick烛台烛台聚合
返回
类型描述
volumeDOUBLE PRECISION该期间内交易的总成交量
vwap(
candlestick Candlestick
) RETURNS DOUBLE PRECISION

从烛台聚合中获取成交量加权平均价格。

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

必需参数
名称类型描述
candlestick烛台烛台聚合
返回
类型描述
vwapDOUBLE PRECISION成交量加权平均价格
rollup(
candlestick Candlestick
) RETURNS Candlestick

candlestick_aggcandlestick 生成的多个中间烛台聚合组合成单个中间烛台聚合。例如,您可以使用 rollup 将来自 15 分钟桶的烛台聚合组合到日桶中。

必需参数
名称类型描述
candlestick烛台candlestickcandlestick_agg 调用生成的聚合
返回
类型描述
candlestick烛台通过组合输入烛台聚合生成的新烛台聚合

查询您的 Tick 数据表以获取过去一天中每个 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 stocks_real_time
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 stocks_real_time
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 stocks_real_time
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
;

将数据转换为烛台聚合形式的优点是,您可以使用本组中的其他函数,例如 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 上编辑此页面