-- ============================================================ -- 量化投资数据库 Schema -- PostgreSQL (Docker: 192.168.27.15:12345) -- 数据来源:Tushare -- ============================================================ -- 先创建数据库(需要超级用户权限,在 psql 中手动执行): -- CREATE DATABASE quant_db ENCODING 'UTF8'; -- ============================================================ -- 1. 股票基本信息表 (stock_basic) -- tushare接口: stock_basic -- ============================================================ CREATE TABLE IF NOT EXISTS stock_basic ( ts_code VARCHAR(20) PRIMARY KEY, -- 股票代码 (如 000001.SZ) symbol VARCHAR(10) NOT NULL, -- 股票代码 (如 000001) name VARCHAR(50) NOT NULL, -- 股票名称 area VARCHAR(30), -- 地区 industry VARCHAR(50), -- 行业 market VARCHAR(10), -- 市场类型 (主板/中小板/创业板/科创板) list_date DATE, -- 上市日期 list_status CHAR(1) DEFAULT 'L', -- 上市状态 L上市 D退市 P暂停上市 is_hs VARCHAR(5), -- 是否沪深港通标的 act_name VARCHAR(100), -- 实控人名称 act_ent_type VARCHAR(50), -- 实控人企业性质 updated_at TIMESTAMP DEFAULT NOW() -- 记录更新时间 ); COMMENT ON TABLE stock_basic IS '股票基本信息表 (Tushare: stock_basic)'; -- 索引 CREATE INDEX IF NOT EXISTS idx_stock_basic_industry ON stock_basic(industry); CREATE INDEX IF NOT EXISTS idx_stock_basic_area ON stock_basic(area); CREATE INDEX IF NOT EXISTS idx_stock_basic_list_status ON stock_basic(list_status); -- ============================================================ -- 2. 日线行情表 (daily) - 按年份分区 -- tushare接口: daily / pro_bar -- ============================================================ CREATE TABLE IF NOT EXISTS daily ( id BIGSERIAL, -- 自增主键 ts_code VARCHAR(20) NOT NULL, -- 股票代码 trade_date DATE NOT NULL, -- 交易日期 open NUMERIC(12,3), -- 开盘价 high NUMERIC(12,3), -- 最高价 low NUMERIC(12,3), -- 最低价 close NUMERIC(12,3), -- 收盘价 pre_close NUMERIC(12,3), -- 昨收价 change NUMERIC(12,3), -- 涨跌额 pct_chg NUMERIC(10,4), -- 涨跌幅 (%) vol NUMERIC(20,2), -- 成交量 (手) amount NUMERIC(20,4), -- 成交额 (千元) turnover_rate NUMERIC(10,4), -- 换手率 (%) volume_ratio NUMERIC(10,4), -- 量比 ma5 NUMERIC(12,3), -- 5日均价 ma10 NUMERIC(12,3), -- 10日均价 ma20 NUMERIC(12,3), -- 20日均价 ma_v_5 NUMERIC(20,2), -- 5日均量 ma_v_10 NUMERIC(20,2), -- 10日均量 ma_v_20 NUMERIC(20,2), -- 20日均量 updated_at TIMESTAMP DEFAULT NOW(), PRIMARY KEY (ts_code, trade_date) ); COMMENT ON TABLE daily IS '日线行情表 (Tushare: daily)'; -- 核心索引 CREATE INDEX IF NOT EXISTS idx_daily_trade_date ON daily(trade_date); CREATE INDEX IF NOT EXISTS idx_daily_ts_code ON daily(ts_code); CREATE INDEX IF NOT EXISTS idx_daily_ts_code_date ON daily(ts_code, trade_date); -- ============================================================ -- 3. 日线行情表 - 按年份分区子表(优化查询性能) -- PostgreSQL 原生分区表 (PG 10+) -- 如果版本不支持,可以跳过,直接使用 daily 表 -- ============================================================ -- 仅 PG 10+ 支持以下语法,如果报错请删除分区表相关语句 -- CREATE TABLE daily_partitioned ( -- id BIGSERIAL, -- ts_code VARCHAR(20) NOT NULL, -- trade_date DATE NOT NULL, -- open NUMERIC(12,3), -- high NUMERIC(12,3), -- low NUMERIC(12,3), -- close NUMERIC(12,3), -- pre_close NUMERIC(12,3), -- change NUMERIC(12,3), -- pct_chg NUMERIC(10,4), -- vol NUMERIC(20,2), -- amount NUMERIC(20,4), -- turnover_rate NUMERIC(10,4), -- volume_ratio NUMERIC(10,4), -- ma5 NUMERIC(12,3), -- ma10 NUMERIC(12,3), -- ma20 NUMERIC(12,3), -- ma_v_5 NUMERIC(20,2), -- ma_v_10 NUMERIC(20,2), -- ma_v_20 NUMERIC(20,2), -- updated_at TIMESTAMP DEFAULT NOW(), -- PRIMARY KEY (ts_code, trade_date, trade_date) -- 分区键必须包含在主键中 -- ) PARTITION BY RANGE (trade_date); -- ============================================================ -- 4. 复权因子表 (adj_factor) -- tushare接口: adj_factor -- 用于计算前复权/后复权价格 -- ============================================================ CREATE TABLE IF NOT EXISTS adj_factor ( ts_code VARCHAR(20) NOT NULL, trade_date DATE NOT NULL, adj_factor NUMERIC(16,8), -- 复权因子 updated_at TIMESTAMP DEFAULT NOW(), PRIMARY KEY (ts_code, trade_date) ); COMMENT ON TABLE adj_factor IS '复权因子表 (Tushare: adj_factor)'; -- ============================================================ -- 5. 个股资金流向表 (moneyflow) -- tushare接口: moneyflow -- ============================================================ CREATE TABLE IF NOT EXISTS moneyflow ( ts_code VARCHAR(20) NOT NULL, trade_date DATE NOT NULL, buy_sm_vol NUMERIC(20,2), -- 小单买入量(手) buy_sm_amount NUMERIC(20,4), -- 小单买入金额(万元) sell_sm_vol NUMERIC(20,2), -- 小单卖出量(手) sell_sm_amount NUMERIC(20,4), -- 小单卖出金额(万元) buy_md_vol NUMERIC(20,2), -- 中单买入量(手) buy_md_amount NUMERIC(20,4), -- 中单买入金额(万元) sell_md_vol NUMERIC(20,2), -- 中单卖出量(手) sell_md_amount NUMERIC(20,4), -- 中单卖出金额(万元) buy_lg_vol NUMERIC(20,2), -- 大单买入量(手) buy_lg_amount NUMERIC(20,4), -- 大单买入金额(万元) sell_lg_vol NUMERIC(20,2), -- 大单卖出量(手) sell_lg_amount NUMERIC(20,4), -- 大单卖出金额(万元) buy_elg_vol NUMERIC(20,2), -- 特大单买入量(手) buy_elg_amount NUMERIC(20,4), -- 特大单买入金额(万元) sell_elg_vol NUMERIC(20,2), -- 特大单卖出量(手) sell_elg_amount NUMERIC(20,4), -- 特大单卖出金额(万元) net_mf_vol NUMERIC(20,2), -- 净流入量(手) net_mf_amount NUMERIC(20,4), -- 净流入额(万元) updated_at TIMESTAMP DEFAULT NOW(), PRIMARY KEY (ts_code, trade_date) ); COMMENT ON TABLE moneyflow IS '个股资金流向表 (Tushare: moneyflow)'; -- ============================================================ -- 6. 每日指标表 (daily_basic) - 包含基本面/估值数据 -- tushare接口: daily_basic -- ============================================================ CREATE TABLE IF NOT EXISTS daily_basic ( ts_code VARCHAR(20) NOT NULL, trade_date DATE NOT NULL, close NUMERIC(12,3), -- 收盘价 turnover_rate NUMERIC(10,4), -- 换手率(%) turnover_rate_f NUMERIC(10,4), -- 自由流通股换手率(%) volume_ratio NUMERIC(10,4), -- 量比 pe NUMERIC(16,4), -- 市盈率(PE) pe_ttm NUMERIC(16,4), -- 市盈率(TTM) pb NUMERIC(16,4), -- 市净率(PB) ps NUMERIC(16,4), -- 市销率(PS) ps_ttm NUMERIC(16,4), -- 市销率(TTM) dv_ratio NUMERIC(10,4), -- 股息率(%) dv_ttm NUMERIC(10,4), -- 股息率(TTM)(%) total_share NUMERIC(20,4), -- 总股本(万股) float_share NUMERIC(20,4), -- 流通股本(万股) free_share NUMERIC(20,4), -- 自由流通股本(万股) total_mv NUMERIC(20,4), -- 总市值(万元) circ_mv NUMERIC(20,4), -- 流通市值(万元) updated_at TIMESTAMP DEFAULT NOW(), PRIMARY KEY (ts_code, trade_date) ); COMMENT ON TABLE daily_basic IS '每日指标表/基本面估值表 (Tushare: daily_basic)'; -- ============================================================ -- 7. 利润表 (income) -- tushare接口: income -- ============================================================ CREATE TABLE IF NOT EXISTS income ( ts_code VARCHAR(20) NOT NULL, ann_date DATE, -- 公告日期 f_ann_date DATE, -- 实际公告日期 end_date DATE NOT NULL, -- 报告期 report_type VARCHAR(10), -- 报告类型 comp_type CHAR(1), -- 公司类型 end_type VARCHAR(10), -- 报告期类型 basic_eps NUMERIC(16,4), -- 基本每股收益 diluted_eps NUMERIC(16,4), -- 稀释每股收益 total_revenue NUMERIC(20,4), -- 营业总收入(元) revenue NUMERIC(20,4), -- 营业收入(元) int_income NUMERIC(20,4), -- 利息收入 prem_earned NUMERIC(20,4), -- 已赚保费 comm_income NUMERIC(20,4), -- 手续费及佣金收入 n_commis_income NUMERIC(20,4), -- 手续费及佣金净收入 n_oth_income NUMERIC(20,4), -- 其他经营净收益 n_oth_b_income NUMERIC(20,4), -- 加:其他业务净收益 prem_income NUMERIC(20,4), -- 保险业务收入 out_prem NUMERIC(20,4), -- 减:分出保费 une_prem_reser NUMERIC(20,4), -- 提取未到期责任准备金 reins_income NUMERIC(20,4), -- 其中:分保费收入 n_sec_tb_income NUMERIC(20,4), -- 代理买卖证券业务净收入 n_sec_uw_income NUMERIC(20,4), -- 证券承销业务净收入 n_asset_mg_income NUMERIC(20,4), -- 受托客户资产管理业务净收入 oth_b_income NUMERIC(20,4), -- 其他业务收入 fv_value_chg NUMERIC(20,4), -- 加:公允价值变动净收益 invest_income NUMERIC(20,4), -- 加:投资净收益 ass_invest_income NUMERIC(20,4), -- 其中:对联营企业和合营企业的投资收益 forex_gain NUMERIC(20,4), -- 加:汇兑净收益 total_cogs NUMERIC(20,4), -- 营业总成本 oper_cost NUMERIC(20,4), -- 减:营业成本 int_exp NUMERIC(20,4), -- 减:利息支出 comm_exp NUMERIC(20,4), -- 减:手续费及佣金支出 biz_tax_surchg NUMERIC(20,4), -- 减:营业税金及附加 sell_exp NUMERIC(20,4), -- 减:销售费用 admin_exp NUMERIC(20,4), -- 减:管理费用 fin_exp NUMERIC(20,4), -- 减:财务费用 assets_impair_loss NUMERIC(20,4), -- 减:资产减值损失 prem_refund NUMERIC(20,4), -- 退保金 compens_payout NUMERIC(20,4), -- 赔付总支出 reser_insur_liab NUMERIC(20,4), -- 提取保险责任准备金 div_payt NUMERIC(20,4), -- 保户红利支出 reins_exp NUMERIC(20,4), -- 分保费用 oper_exp NUMERIC(20,4), -- 营业支出 compens_payout_refu NUMERIC(20,4), -- 减:摊回赔付支出 insur_reser_refu NUMERIC(20,4), -- 减:摊回保险责任准备金 reins_cost_refund NUMERIC(20,4), -- 减:摊回分保费用 other_bus_cost NUMERIC(20,4), -- 其他业务成本 operate_profit NUMERIC(20,4), -- 营业利润 non_oper_income NUMERIC(20,4), -- 加:营业外收入 non_oper_exp NUMERIC(20,4), -- 减:营业外支出 nca_disploss NUMERIC(20,4), -- 其中:减:非流动资产处置净损失 total_profit NUMERIC(20,4), -- 利润总额 income_tax NUMERIC(20,4), -- 所得税费用 n_income NUMERIC(20,4), -- 净利润(含少数股东损益) n_income_attr_p NUMERIC(20,4), -- 净利润(不含少数股东损益) minority_gain NUMERIC(20,4), -- 少数股东损益 oth_compre_income NUMERIC(20,4), -- 其他综合收益 total_compre_income NUMERIC(20,4), -- 综合收益总额 comp_pre_inc_attr_p NUMERIC(20,4), -- 归属于母公司(或股东)的综合收益总额 comp_inc_attr_m_s NUMERIC(20,4), -- 归属于少数股东的综合收益总额 ebit NUMERIC(20,4), -- 息税前利润 ebitda NUMERIC(20,4), -- 息税折旧摊销前利润 insurance_exp NUMERIC(20,4), -- 保险业务支出 undist_profit NUMERIC(20,4), -- 年初未分配利润 distable_profit NUMERIC(20,4), -- 可分配利润 updated_at TIMESTAMP DEFAULT NOW(), PRIMARY KEY (ts_code, end_date, report_type) ); COMMENT ON TABLE income IS '利润表 (Tushare: income)'; -- ============================================================ -- 8. 资产负债表 (balancesheet) -- tushare接口: balancesheet -- ============================================================ CREATE TABLE IF NOT EXISTS balancesheet ( ts_code VARCHAR(20) NOT NULL, ann_date DATE, f_ann_date DATE, end_date DATE NOT NULL, -- 报告期 report_type VARCHAR(10), comp_type CHAR(1), end_type VARCHAR(10), -- 资产 total_hldr_eqy_exc_min_int NUMERIC(20,4), -- 股东权益合计(不含少数股东权益) total_hldr_eqy_inc_min_int NUMERIC(20,4), -- 股东权益合计(含少数股东权益) total_assets NUMERIC(20,4), -- 资产总计 total_cur_assets NUMERIC(20,4), -- 流动资产合计 total_nca NUMERIC(20,4), -- 非流动资产合计 money_cap NUMERIC(20,4), -- 货币资金 trad_asset NUMERIC(20,4), -- 交易性金融资产 notes_receiv NUMERIC(20,4), -- 应收票据 account_receiv NUMERIC(20,4), -- 应收账款 oth_receiv NUMERIC(20,4), -- 其他应收款 prepayment NUMERIC(20,4), -- 预付款项 div_receiv NUMERIC(20,4), -- 应收股利 int_receiv NUMERIC(20,4), -- 应收利息 inventories NUMERIC(20,4), -- 存货 amor_exp NUMERIC(20,4), -- 待摊费用 nca_within_1y NUMERIC(20,4), -- 一年内到期的非流动资产 sett_rsrv NUMERIC(20,4), -- 结算备付金 loanto_oth_bank_fi NUMERIC(20,4), -- 拆出资金 premium_receiv NUMERIC(20,4), -- 应收保费 reinsur_receiv NUMERIC(20,4), -- 应收分保账款 reinsur_res_receiv NUMERIC(20,4), -- 应收分保合同准备金 pur_resale_fa NUMERIC(20,4), -- 买入返售金融资产 oth_cur_assets NUMERIC(20,4), -- 其他流动资产 -- 非流动资产 fa_avail_for_sale NUMERIC(20,4), -- 可供出售金融资产 htm_invest NUMERIC(20,4), -- 持有至到期投资 lt_eqt_invest NUMERIC(20,4), -- 长期股权投资 invest_real_estate NUMERIC(20,4), -- 投资性房地产 time_deposits NUMERIC(20,4), -- 定期存款 oth_assets NUMERIC(20,4), -- 其他资产 lt_rec NUMERIC(20,4), -- 长期应收款 fix_assets NUMERIC(20,4), -- 固定资产 cip NUMERIC(20,4), -- 在建工程 const_materials NUMERIC(20,4), -- 工程物资 fixed_assets_disp NUMERIC(20,4), -- 固定资产清理 produc_bio_assets NUMERIC(20,4), -- 生产性生物资产 oil_and_gas_assets NUMERIC(20,4), -- 油气资产 intan_assets NUMERIC(20,4), -- 无形资产 r_and_d NUMERIC(20,4), -- 研发支出 goodwill NUMERIC(20,4), -- 商誉 lt_amor_exp NUMERIC(20,4), -- 长期待摊费用 defer_tax_assets NUMERIC(20,4), -- 递延所得税资产 decr_in_disbur NUMERIC(20,4), -- 待处理流动资产损益 oth_nca NUMERIC(20,4), -- 其他非流动资产 -- 负债 total_liab NUMERIC(20,4), -- 负债合计 total_cur_liab NUMERIC(20,4), -- 流动负债合计 total_ncl NUMERIC(20,4), -- 非流动负债合计 short_borr NUMERIC(20,4), -- 短期借款 lt_borr NUMERIC(20,4), -- 长期借款 st_notes_payable NUMERIC(20,4), -- 应付票据 acct_payable NUMERIC(20,4), -- 应付账款 adv_receipts NUMERIC(20,4), -- 预收款项 bonds_payable NUMERIC(20,4), -- 应付债券 oth_payable NUMERIC(20,4), -- 其他应付款 div_payable NUMERIC(20,4), -- 应付股利 int_payable NUMERIC(20,4), -- 应付利息 lt_payable NUMERIC(20,4), -- 长期应付款 special_payable NUMERIC(20,4), -- 专项应付款 updated_at TIMESTAMP DEFAULT NOW(), PRIMARY KEY (ts_code, end_date, report_type) ); COMMENT ON TABLE balancesheet IS '资产负债表 (Tushare: balancesheet)'; -- ============================================================ -- 9. 现金流量表 (cashflow) -- tushare接口: cashflow -- ============================================================ CREATE TABLE IF NOT EXISTS cashflow ( ts_code VARCHAR(20) NOT NULL, ann_date DATE, f_ann_date DATE, end_date DATE NOT NULL, -- 报告期 report_type VARCHAR(10), comp_type CHAR(1), end_type VARCHAR(10), -- 经营活动 net_profit NUMERIC(20,4), -- 净利润 fin_exp NUMERIC(20,4), -- 财务费用 c_fr_sale_sg NUMERIC(20,4), -- 销售商品、提供劳务收到的现金 recp_tax_rends NUMERIC(20,4), -- 收到的税费返还 n_depos_incr_fi NUMERIC(20,4), -- 客户存款和同业存放款项净增加额 n_incr_loans_cb NUMERIC(20,4), -- 向中央银行借款净增加额 n_incr_borr_oth_fi NUMERIC(20,4), -- 向其他金融机构拆入资金净增加额 prem_fr_orig_contr NUMERIC(20,4), -- 收到原保险合同保费取得的现金 n_incr_insured_dep NUMERIC(20,4), -- 保户储金净增加额 n_reinsur_prem NUMERIC(20,4), -- 收到再保业务现金净额 n_incr_disp_tfa NUMERIC(20,4), -- 处置交易性金融资产净增加额 ifc_cash_incr NUMERIC(20,4), -- 收取利息、手续费及佣金的现金 n_incr_disp_faas NUMERIC(20,4), -- 处置可供出售金融资产净增加额 n_incr_loans_oth_bank NUMERIC(20,4), -- 拆入资金净增加额 dcr_cash_paym NUMERIC(20,4), -- 回购业务资金净增加额 oth_cash_recp_ral_oper_act NUMERIC(20,4), -- 收到其他与经营活动有关的现金 st_cash_out_act NUMERIC(20,4), -- 经营活动现金流出小计 n_cashflow_act NUMERIC(20,4), -- 经营活动产生的现金流量净额 -- 投资活动 c_inf_fr_invest_act NUMERIC(20,4), -- 投资活动现金流入小计 c_out_invest_act NUMERIC(20,4), -- 投资活动现金流出小计 n_cashflow_inv_act NUMERIC(20,4), -- 投资活动产生的现金流量净额 -- 筹资活动 c_inf_fr_fin_act NUMERIC(20,4), -- 筹资活动现金流入小计 st_cash_out_fin_act NUMERIC(20,4), -- 筹资活动现金流出小计 n_cash_flows_fin_act NUMERIC(20,4), -- 筹资活动产生的现金流量净额 eff_fx_flu_cash NUMERIC(20,4), -- 汇率变动对现金的影响 n_incr_cash_cash_equ NUMERIC(20,4), -- 现金及现金等价物净增加额 c_cash_equ_beg_period NUMERIC(20,4), -- 期初现金及现金等价物余额 c_cash_equ_end_period NUMERIC(20,4), -- 期末现金及现金等价物余额 updated_at TIMESTAMP DEFAULT NOW(), PRIMARY KEY (ts_code, end_date, report_type) ); COMMENT ON TABLE cashflow IS '现金流量表 (Tushare: cashflow)'; -- ============================================================ -- 10. 财务指标表 (fina_indicator) - 核心基本面指标 -- tushare接口: fina_indicator -- ============================================================ CREATE TABLE IF NOT EXISTS fina_indicator ( ts_code VARCHAR(20) NOT NULL, ann_date DATE, end_date DATE NOT NULL, -- 报告期 -- 每股指标 eps NUMERIC(16,4), -- 每股收益 dt_eps NUMERIC(16,4), -- 稀释每股收益 total_revenue_ps NUMERIC(16,4), -- 每股营业总收入 revenue_ps NUMERIC(16,4), -- 每股营业收入 capital_rese_ps NUMERIC(16,4), -- 每股资本公积 surplus_rese_ps NUMERIC(16,4), -- 每股盈余公积 undist_profit_ps NUMERIC(16,4), -- 每股未分配利润 extra_item NUMERIC(16,4), -- 非经常性损益 profit_dedt NUMERIC(16,4), -- 扣除非经常性损益后的净利润(扣非净利润) -- 成长能力 gross_margin NUMERIC(16,4), -- 毛利 current_ratio NUMERIC(16,4), -- 流动比率 quick_ratio NUMERIC(16,4), -- 速动比率 cash_ratio NUMERIC(16,4), -- 保守速动比率 invturn_days NUMERIC(16,4), -- 存货周转天数 arturn_days NUMERIC(16,4), -- 应收账款周转天数 inv_turn NUMERIC(16,4), -- 存货周转率 ar_turn NUMERIC(16,4), -- 应收账款周转率 assets_turn NUMERIC(16,4), -- 总资产周转率 -- 盈利能力 roe NUMERIC(16,4), -- 净资产收益率 roe_dt NUMERIC(16,4), -- 净资产收益率(扣除非经常损益) roa NUMERIC(16,4), -- 总资产净利率 roa2 NUMERIC(16,4), -- 总资产报酬率 roic NUMERIC(16,4), -- 投入资本回报率 -- 杠杆/偿债 longdeb_to_debt NUMERIC(16,4), -- 长期借款与资产总计之比 debt_to_assets NUMERIC(16,4), -- 资产负债率 ncfm NUMERIC(16,4), -- 销售商品提供劳务收到的现金/营业收入 -- 收益质量 profit_to_op NUMERIC(16,4), -- 经营活动净收益/利润总额 cfo_to_or NUMERIC(16,4), -- 经营活动现金流净额/营业收入 ocf_to_or NUMERIC(16,4), -- 经营现金净流量/营业总收入 -- 杜邦分析 dupont_roe NUMERIC(16,4), -- 净资产收益率(杜邦) dupont_assets_turn NUMERIC(16,4), -- 资产周转率(杜邦) dupont_equity_multi NUMERIC(16,4), -- 权益乘数(杜邦) dupont_net_profit_margin NUMERIC(16,4), -- 销售净利率(杜邦) -- 分红 div_rec NUMERIC(16,4), -- 每股股利(税前) -- 其他 ocfps NUMERIC(16,4), -- 每股经营活动产生的现金流量净额 cfps NUMERIC(16,4), -- 每股现金流量净额 ebit_ps NUMERIC(16,4), -- 每股息税前利润 fcff_ps NUMERIC(16,4), -- 每股企业自由现金流量 fcfe_ps NUMERIC(16,4), -- 每股股东自由现金流量 updated_at TIMESTAMP DEFAULT NOW(), PRIMARY KEY (ts_code, end_date) ); COMMENT ON TABLE fina_indicator IS '财务指标表 (Tushare: fina_indicator)'; -- ============================================================ -- 11. 交易日历表 (trade_cal) -- tushare接口: trade_cal -- ============================================================ CREATE TABLE IF NOT EXISTS trade_cal ( exchange VARCHAR(10) NOT NULL, -- 交易所 SSE上交所 SZSE深交所 cal_date DATE NOT NULL, -- 日历日期 is_open INTEGER NOT NULL, -- 是否交易 0休市 1交易 pretrade_date DATE, -- 上一个交易日 updated_at TIMESTAMP DEFAULT NOW(), PRIMARY KEY (exchange, cal_date) ); COMMENT ON TABLE trade_cal IS '交易日历表 (Tushare: trade_cal)'; -- ============================================================ -- 12. 指数日线行情表 (index_daily) -- tushare接口: index_daily -- 用于记录主要指数(沪深300、中证500等)的日线行情 -- ============================================================ CREATE TABLE IF NOT EXISTS index_daily ( ts_code VARCHAR(20) NOT NULL, -- 指数代码 (如 000300.SH) trade_date DATE NOT NULL, close NUMERIC(12,4), open NUMERIC(12,4), high NUMERIC(12,4), low NUMERIC(12,4), pre_close NUMERIC(12,4), change NUMERIC(12,4), pct_chg NUMERIC(10,4), vol NUMERIC(20,2), amount NUMERIC(20,4), updated_at TIMESTAMP DEFAULT NOW(), PRIMARY KEY (ts_code, trade_date) ); COMMENT ON TABLE index_daily IS '指数日线行情表 (Tushare: index_daily)'; -- ============================================================ -- 常用查询视图 -- ============================================================ -- 视图1: 日线行情 + 估值指标联合查询 CREATE OR REPLACE VIEW v_daily_with_valuation AS SELECT d.ts_code, d.trade_date, b.name, b.industry, b.area, d.open, d.high, d.low, d.close, d.pre_close, d.pct_chg, d.vol, d.amount, d.turnover_rate, db.pe, db.pe_ttm, db.pb, db.ps, db.ps_ttm, db.total_mv, db.circ_mv, db.dv_ratio, db.dv_ttm FROM daily d LEFT JOIN stock_basic b ON d.ts_code = b.ts_code LEFT JOIN daily_basic db ON d.ts_code = db.ts_code AND d.trade_date = db.trade_date; COMMENT ON VIEW v_daily_with_valuation IS '日线行情+估值联合查询视图'; -- 视图2: 最新财务指标 + 股票基本信息 CREATE OR REPLACE VIEW v_latest_financials AS SELECT DISTINCT ON (f.ts_code) f.ts_code, b.name, b.industry, b.area, b.list_date, f.end_date AS report_date, f.eps, f.roe, f.roa, f.roic, f.current_ratio, f.quick_ratio, f.debt_to_assets, f.gross_margin, f.assets_turn, f.cfps, f.ocfps, f.div_rec FROM fina_indicator f JOIN stock_basic b ON f.ts_code = b.ts_code ORDER BY f.ts_code, f.end_date DESC; COMMENT ON VIEW v_latest_financials IS '最新财务指标+股票信息'; -- ============================================================ -- 完成 -- ============================================================