140 lines
5.4 KiB
SQL
140 lines
5.4 KiB
SQL
-- 股票数据表结构
|
|
|
|
-- 1. 股票基本信息表
|
|
CREATE TABLE IF NOT EXISTS stock_info (
|
|
code VARCHAR(10) PRIMARY KEY,
|
|
name VARCHAR(50),
|
|
industry VARCHAR(50),
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- 2. 实时价格表
|
|
CREATE TABLE IF NOT EXISTS stock_realtime_price (
|
|
code VARCHAR(10) PRIMARY KEY,
|
|
name VARCHAR(50),
|
|
price DECIMAL(12, 4),
|
|
change_pct DECIMAL(8, 4),
|
|
change_amount DECIMAL(12, 4),
|
|
volume BIGINT,
|
|
amount DECIMAL(20, 2),
|
|
high DECIMAL(12, 4),
|
|
low DECIMAL(12, 4),
|
|
open DECIMAL(12, 4),
|
|
prev_close DECIMAL(12, 4),
|
|
pe DECIMAL(12, 4),
|
|
pb DECIMAL(12, 4),
|
|
total_market_cap DECIMAL(20, 2),
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- 3. 今日资金流向表
|
|
CREATE TABLE IF NOT EXISTS stock_fund_flow_today (
|
|
code VARCHAR(10) PRIMARY KEY,
|
|
name VARCHAR(50),
|
|
main_net_inflow DECIMAL(20, 2), -- 主力净流入
|
|
main_net_inflow_pct DECIMAL(8, 4), -- 主力净流入占比
|
|
super_net_inflow DECIMAL(20, 2), -- 超大单净流入
|
|
super_net_inflow_pct DECIMAL(8, 4), -- 超大单净流入占比
|
|
big_net_inflow DECIMAL(20, 2), -- 大单净流入
|
|
big_net_inflow_pct DECIMAL(8, 4), -- 大单净流入占比
|
|
mid_net_inflow DECIMAL(20, 2), -- 中单净流入
|
|
mid_net_inflow_pct DECIMAL(8, 4), -- 中单净流入占比
|
|
small_net_inflow DECIMAL(20, 2), -- 小单净流入
|
|
small_net_inflow_pct DECIMAL(8, 4), -- 小单净流入占比
|
|
price DECIMAL(12, 4),
|
|
change_pct DECIMAL(8, 4),
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- 4. 历史资金流向表(保留最近6个月)
|
|
CREATE TABLE IF NOT EXISTS stock_fund_flow_history (
|
|
id SERIAL PRIMARY KEY,
|
|
code VARCHAR(10) NOT NULL,
|
|
trade_date DATE NOT NULL,
|
|
close_price DECIMAL(12, 4),
|
|
change_pct DECIMAL(8, 4),
|
|
main_net_inflow DECIMAL(20, 2),
|
|
main_net_inflow_pct DECIMAL(8, 4),
|
|
super_net_inflow DECIMAL(20, 2),
|
|
super_net_inflow_pct DECIMAL(8, 4),
|
|
big_net_inflow DECIMAL(20, 2),
|
|
big_net_inflow_pct DECIMAL(8, 4),
|
|
mid_net_inflow DECIMAL(20, 2),
|
|
mid_net_inflow_pct DECIMAL(8, 4),
|
|
small_net_inflow DECIMAL(20, 2),
|
|
small_net_inflow_pct DECIMAL(8, 4),
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE(code, trade_date)
|
|
);
|
|
|
|
-- 5. 日K线表(供全景扫描、回测等使用)
|
|
CREATE TABLE IF NOT EXISTS stock_kline_daily (
|
|
code VARCHAR(10) NOT NULL,
|
|
trade_date DATE NOT NULL,
|
|
open DECIMAL(12, 4),
|
|
high DECIMAL(12, 4),
|
|
low DECIMAL(12, 4),
|
|
close DECIMAL(12, 4),
|
|
volume BIGINT,
|
|
amount DECIMAL(20, 2),
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (code, trade_date)
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_kline_daily_date ON stock_kline_daily(trade_date);
|
|
CREATE INDEX IF NOT EXISTS idx_kline_daily_code_date ON stock_kline_daily(code, trade_date);
|
|
|
|
-- 6. 数据更新日志表
|
|
CREATE TABLE IF NOT EXISTS data_update_log (
|
|
id SERIAL PRIMARY KEY,
|
|
data_type VARCHAR(50) NOT NULL, -- realtime_price, fund_flow_today, fund_flow_history
|
|
status VARCHAR(20) NOT NULL, -- success, failed
|
|
records_count INT,
|
|
error_message TEXT,
|
|
started_at TIMESTAMP,
|
|
finished_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- 7. 历史全景扫描结果表(回测专用,每日 11:30 + 16:30 两次扫描)
|
|
CREATE TABLE IF NOT EXISTS stock_scan_history (
|
|
id SERIAL PRIMARY KEY,
|
|
scan_date DATE NOT NULL,
|
|
scan_time VARCHAR(5) NOT NULL, -- '11:30' 或 '16:30'
|
|
code VARCHAR(10) NOT NULL,
|
|
recommend_display VARCHAR(10), -- '买入','卖出','加仓','持有','关注','观察','观望'
|
|
recommend_type VARCHAR(10), -- 'buy','sell','watch'
|
|
recommend_reason TEXT,
|
|
recommend_rate INT DEFAULT 0, -- 0~100
|
|
triggered_count INT DEFAULT 0,
|
|
signal_status JSONB,
|
|
indicators JSONB,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE(scan_date, scan_time, code)
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_scan_hist_date_time ON stock_scan_history(scan_date, scan_time);
|
|
CREATE INDEX IF NOT EXISTS idx_scan_hist_code ON stock_scan_history(code);
|
|
CREATE INDEX IF NOT EXISTS idx_scan_hist_display ON stock_scan_history(scan_date, scan_time, recommend_display);
|
|
|
|
-- 8. 5分钟K线表(盘中价格历史,供精确回测使用)
|
|
CREATE TABLE IF NOT EXISTS stock_kline_5min (
|
|
code VARCHAR(10) NOT NULL,
|
|
dt TIMESTAMP NOT NULL, -- K线时间戳 (如 2026-02-25 09:35:00)
|
|
open DECIMAL(12, 4),
|
|
high DECIMAL(12, 4),
|
|
low DECIMAL(12, 4),
|
|
close DECIMAL(12, 4),
|
|
volume BIGINT,
|
|
amount DECIMAL(20, 2),
|
|
change_pct DECIMAL(8, 4), -- 涨跌幅
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (code, dt)
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_kline_5min_dt ON stock_kline_5min(dt);
|
|
CREATE INDEX IF NOT EXISTS idx_kline_5min_code_date ON stock_kline_5min(code, (dt::date));
|
|
|
|
-- 创建索引
|
|
CREATE INDEX IF NOT EXISTS idx_fund_flow_history_code ON stock_fund_flow_history(code);
|
|
CREATE INDEX IF NOT EXISTS idx_fund_flow_history_date ON stock_fund_flow_history(trade_date);
|
|
CREATE INDEX IF NOT EXISTS idx_fund_flow_history_code_date ON stock_fund_flow_history(code, trade_date);
|
|
CREATE INDEX IF NOT EXISTS idx_realtime_price_updated ON stock_realtime_price(updated_at);
|
|
CREATE INDEX IF NOT EXISTS idx_fund_flow_today_updated ON stock_fund_flow_today(updated_at);
|