简介

执行金融资产数据分析。这些专门的超级函数使编写涉及蜡烛图数据的金融分析查询更加容易。

它们帮助您回答如下问题

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

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

聚合

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

伪聚合

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

访问器

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

Rollup

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

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

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

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

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

此函数将预聚合的蜡烛图数据转换为蜡烛图聚合对象。此对象包含的数据格式正确,可以与此函数组中的访问器和 rollup 一起使用。

如果您从原始tick数据而不是蜡烛图数据开始,请改用 candlestick_agg()

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

从蜡烛图聚合中获取收盘价。

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

从蜡烛图聚合中获取与收盘时间对应的时间戳。

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

从蜡烛图聚合中获取最高价。

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

从蜡烛图聚合中获取与最高时间对应的时间戳。

必需参数
名称类型描述
candlestick蜡烛图蜡烛图聚合
返回值
类型描述
high_timeTIMESTAMPTZ最高价首次发生的时间
low(
candlestick Candlestick
) RETURNS DOUBLE PRECISION

从蜡烛图聚合中获取最低价。

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

从蜡烛图聚合中获取与最低时间对应的时间戳。

必需参数
名称类型描述
candlestick蜡烛图蜡烛图聚合
返回值
类型描述
low_timeTIMESTAMPTZ最低价首次发生的时间
open(
candlestick Candlestick
) RETURNS DOUBLE PRECISION

从蜡烛图聚合中获取开盘价。

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

从蜡烛图聚合中获取与开盘时间对应的时间戳。

必需参数
名称类型描述
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
;

将您按分钟的连续聚合rollup到每日桶中,并返回过去一个月 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
;

将您按分钟的连续聚合rollup到每小时桶中,并返回过去一天中每 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

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

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 上编辑此页面