feat: add postgres market time series schema
This commit is contained in:
@@ -385,6 +385,36 @@ Table engine_history.market_vs_engine_gap_history {
|
|||||||
// Schema: engine_history (V5 normalized learning history)
|
// Schema: engine_history (V5 normalized learning history)
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|
||||||
|
Table quantengine.price_history_daily {
|
||||||
|
ticker TEXT [not null]
|
||||||
|
trade_date DATE [not null]
|
||||||
|
open NUMERIC [not null]
|
||||||
|
high NUMERIC [not null]
|
||||||
|
low NUMERIC [not null]
|
||||||
|
close NUMERIC [not null]
|
||||||
|
volume BIGINT [not null]
|
||||||
|
source TEXT [not null]
|
||||||
|
collected_at TIMESTAMPTZ [not null, default: "NOW()"]
|
||||||
|
provenance JSONB [not null, default: "'{}'::jsonb"]
|
||||||
|
|
||||||
|
indexes {
|
||||||
|
(ticker, trade_date) [pk]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Table quantengine.macro_history_daily {
|
||||||
|
symbol TEXT [not null]
|
||||||
|
trade_date DATE [not null]
|
||||||
|
value NUMERIC [not null]
|
||||||
|
source TEXT [not null]
|
||||||
|
collected_at TIMESTAMPTZ [not null, default: "NOW()"]
|
||||||
|
provenance JSONB [not null, default: "'{}'::jsonb"]
|
||||||
|
|
||||||
|
indexes {
|
||||||
|
(symbol, trade_date) [pk]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Table engine_history.source_observation {
|
Table engine_history.source_observation {
|
||||||
observation_id UUID [pk]
|
observation_id UUID [pk]
|
||||||
observed_at TIMESTAMPTZ [not null]
|
observed_at TIMESTAMPTZ [not null]
|
||||||
|
|||||||
@@ -375,11 +375,11 @@ tasks:
|
|||||||
# M2 — 히스토리 시계열 저장소
|
# M2 — 히스토리 시계열 저장소
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
QE-M2-01:
|
QE-M2-01:
|
||||||
title: "V4 마이그레이션: price_history_daily + macro_history_daily"
|
title: "V6 마이그레이션: price_history_daily + macro_history_daily"
|
||||||
status: PENDING
|
status: PENDING
|
||||||
depends_on: [QE-M1-01]
|
depends_on: [QE-M1-01]
|
||||||
owner_files:
|
owner_files:
|
||||||
- src/dotnet/QuantEngine.Infrastructure/Migrations/V4__Add_Price_History.sql
|
- src/dotnet/QuantEngine.Infrastructure/Migrations/V6__Add_Market_Time_Series.sql
|
||||||
notes: >
|
notes: >
|
||||||
price_history_daily(ticker, trade_date, open/high/low/close numeric, volume bigint,
|
price_history_daily(ticker, trade_date, open/high/low/close numeric, volume bigint,
|
||||||
source text, collected_at timestamptz, PK(ticker, trade_date));
|
source text, collected_at timestamptz, PK(ticker, trade_date));
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
-- V6__Add_Market_Time_Series.sql
|
||||||
|
-- Canonical PostgreSQL daily series for point-in-time factor calculations.
|
||||||
|
|
||||||
|
CREATE SCHEMA IF NOT EXISTS quantengine;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS quantengine.price_history_daily (
|
||||||
|
ticker TEXT NOT NULL,
|
||||||
|
trade_date DATE NOT NULL,
|
||||||
|
open NUMERIC NOT NULL,
|
||||||
|
high NUMERIC NOT NULL,
|
||||||
|
low NUMERIC NOT NULL,
|
||||||
|
close NUMERIC NOT NULL,
|
||||||
|
volume BIGINT NOT NULL,
|
||||||
|
source TEXT NOT NULL,
|
||||||
|
collected_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||||
|
provenance JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||||
|
PRIMARY KEY (ticker, trade_date),
|
||||||
|
CONSTRAINT price_history_daily_ohlc_order CHECK (high >= low AND high >= open AND high >= close AND low <= open AND low <= close),
|
||||||
|
CONSTRAINT price_history_daily_volume_nonnegative CHECK (volume >= 0)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_price_history_daily_date
|
||||||
|
ON quantengine.price_history_daily (trade_date DESC, ticker);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS quantengine.macro_history_daily (
|
||||||
|
symbol TEXT NOT NULL,
|
||||||
|
trade_date DATE NOT NULL,
|
||||||
|
value NUMERIC NOT NULL,
|
||||||
|
source TEXT NOT NULL,
|
||||||
|
collected_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||||
|
provenance JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||||
|
PRIMARY KEY (symbol, trade_date)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_macro_history_daily_date
|
||||||
|
ON quantengine.macro_history_daily (trade_date DESC, symbol);
|
||||||
Reference in New Issue
Block a user