feat(candles): support oracle OHLC basis
This commit is contained in:
@@ -121,10 +121,17 @@ CREATE TABLE IF NOT EXISTS public.drift_candles (
|
||||
high numeric,
|
||||
low numeric,
|
||||
close numeric,
|
||||
oracle_open numeric,
|
||||
oracle_high numeric,
|
||||
oracle_low numeric,
|
||||
oracle_close numeric,
|
||||
ticks bigint
|
||||
);
|
||||
|
||||
ALTER TABLE public.drift_candles ADD COLUMN IF NOT EXISTS oracle_open numeric;
|
||||
ALTER TABLE public.drift_candles ADD COLUMN IF NOT EXISTS oracle_high numeric;
|
||||
ALTER TABLE public.drift_candles ADD COLUMN IF NOT EXISTS oracle_low numeric;
|
||||
|
||||
-- Precomputed candle cache (materialized by a worker).
|
||||
-- Purpose: make tf switching instant by reading ready-made candles instead of aggregating `drift_ticks` on demand.
|
||||
-- NOTE: `source=''` means "any source" (no source filter).
|
||||
@@ -137,12 +144,19 @@ CREATE TABLE IF NOT EXISTS public.drift_candles_cache (
|
||||
high numeric NOT NULL,
|
||||
low numeric NOT NULL,
|
||||
close numeric NOT NULL,
|
||||
oracle_open numeric,
|
||||
oracle_high numeric,
|
||||
oracle_low numeric,
|
||||
oracle_close numeric,
|
||||
ticks bigint NOT NULL DEFAULT 0,
|
||||
updated_at timestamptz NOT NULL DEFAULT now(),
|
||||
PRIMARY KEY (bucket, bucket_seconds, symbol, source)
|
||||
);
|
||||
|
||||
ALTER TABLE public.drift_candles_cache ADD COLUMN IF NOT EXISTS oracle_open numeric;
|
||||
ALTER TABLE public.drift_candles_cache ADD COLUMN IF NOT EXISTS oracle_high numeric;
|
||||
ALTER TABLE public.drift_candles_cache ADD COLUMN IF NOT EXISTS oracle_low numeric;
|
||||
|
||||
SELECT create_hypertable('drift_candles_cache', 'bucket', if_not_exists => TRUE, migrate_data => TRUE);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS drift_candles_cache_symbol_source_bucket_idx
|
||||
@@ -174,6 +188,9 @@ AS $$
|
||||
c.high,
|
||||
c.low,
|
||||
c.close,
|
||||
c.oracle_open,
|
||||
c.oracle_high,
|
||||
c.oracle_low,
|
||||
c.oracle_close,
|
||||
c.ticks
|
||||
FROM public.drift_candles_cache c, src
|
||||
@@ -201,6 +218,9 @@ AS $$
|
||||
max(px) AS high,
|
||||
min(px) AS low,
|
||||
(array_agg(px ORDER BY ts DESC))[1] AS close,
|
||||
(array_agg(oracle_px ORDER BY ts ASC))[1] AS oracle_open,
|
||||
max(oracle_px) AS oracle_high,
|
||||
min(oracle_px) AS oracle_low,
|
||||
(array_agg(oracle_px ORDER BY ts DESC))[1] AS oracle_close,
|
||||
count(*) AS ticks
|
||||
FROM raw_fallback
|
||||
@@ -236,6 +256,9 @@ AS $$
|
||||
d.high,
|
||||
d.low,
|
||||
d.close,
|
||||
d.oracle_open,
|
||||
d.oracle_high,
|
||||
d.oracle_low,
|
||||
d.oracle_close,
|
||||
d.ticks
|
||||
FROM series s
|
||||
@@ -261,6 +284,9 @@ AS $$
|
||||
g.high,
|
||||
g.low,
|
||||
g.close,
|
||||
g.oracle_open,
|
||||
g.oracle_high,
|
||||
g.oracle_low,
|
||||
g.oracle_close,
|
||||
g.ticks,
|
||||
COALESCE(
|
||||
@@ -282,6 +308,9 @@ AS $$
|
||||
COALESCE(high, ff_close) AS high,
|
||||
COALESCE(low, ff_close) AS low,
|
||||
COALESCE(close, ff_close) AS close,
|
||||
COALESCE(oracle_open, ff_oracle) AS oracle_open,
|
||||
COALESCE(oracle_high, ff_oracle) AS oracle_high,
|
||||
COALESCE(oracle_low, ff_oracle) AS oracle_low,
|
||||
COALESCE(oracle_close, ff_oracle) AS oracle_close,
|
||||
COALESCE(ticks, 0) AS ticks
|
||||
FROM ff
|
||||
|
||||
Reference in New Issue
Block a user