|
|
"""数据库模型定义"""
|
|
|
from datetime import datetime
|
|
|
from typing import Optional
|
|
|
|
|
|
from sqlalchemy import (
|
|
|
Column, Integer, String, Float, DateTime,
|
|
|
Boolean, Numeric, BigInteger, Index, Text
|
|
|
)
|
|
|
|
|
|
from app.repositories.database import Base
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
# 股票相关表
|
|
|
# ============================================
|
|
|
|
|
|
class StockSymbol(Base):
|
|
|
"""股票标的表"""
|
|
|
__tablename__ = "stock_symbols"
|
|
|
|
|
|
symbol_id = Column(String(20), primary_key=True, index=True, comment="标的代码")
|
|
|
symbol_type = Column(String(20), nullable=False, comment="标的类型")
|
|
|
exchange = Column(String(10), nullable=False, index=True, comment="交易所")
|
|
|
name = Column(String(100), nullable=False, comment="名称")
|
|
|
name_en = Column(String(100), nullable=True, comment="英文名称")
|
|
|
list_date = Column(DateTime, nullable=True, comment="上市日期")
|
|
|
delist_date = Column(DateTime, nullable=True, comment="退市日期")
|
|
|
industry = Column(String(50), nullable=True, comment="行业分类")
|
|
|
status = Column(String(20), nullable=False, default="active", comment="状态")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
class StockTradingCalendar(Base):
|
|
|
"""股票交易日历表"""
|
|
|
__tablename__ = "stock_trading_calendar"
|
|
|
|
|
|
trade_date = Column(String(8), primary_key=True, comment="交易日期")
|
|
|
is_trading_day = Column(Boolean, nullable=False, comment="是否交易日")
|
|
|
week_day = Column(Integer, nullable=True, comment="星期几")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
class StockKLine1M(Base):
|
|
|
"""股票1分钟K线"""
|
|
|
__tablename__ = "stock_klines_1m"
|
|
|
__table_args__ = (
|
|
|
Index("idx_stock_1m_symbol_ts", "symbol_id", "ts"),
|
|
|
)
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="标的代码")
|
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
|
|
|
|
|
|
class StockKLine5M(Base):
|
|
|
"""股票5分钟K线"""
|
|
|
__tablename__ = "stock_klines_5m"
|
|
|
__table_args__ = (
|
|
|
Index("idx_stock_5m_symbol_ts", "symbol_id", "ts"),
|
|
|
)
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="标的代码")
|
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
|
|
|
|
|
|
class StockKLine1D(Base):
|
|
|
"""股票日线K线"""
|
|
|
__tablename__ = "stock_klines_1d"
|
|
|
__table_args__ = (
|
|
|
Index("idx_stock_1d_symbol_ts", "symbol_id", "ts"),
|
|
|
)
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="标的代码")
|
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
|
|
|
|
# 新增字段
|
|
|
trade_date = Column(String(10), nullable=True, index=True, comment="交易日 (YYYY-MM-DD)")
|
|
|
is_limit_up = Column(Boolean, nullable=True, comment="是否涨停")
|
|
|
is_limit_down = Column(Boolean, nullable=True, comment="是否跌停")
|
|
|
total_market_cap = Column(Numeric(20, 2), nullable=True, comment="总市值(元)")
|
|
|
float_market_cap = Column(Numeric(20, 2), nullable=True, comment="流通市值(元)")
|
|
|
inst_holding_ratio = Column(Numeric(8, 4), nullable=True, comment="机构持仓占比(%)")
|
|
|
trading_days = Column(Integer, nullable=True, comment="可交易日数(从上市至今)")
|
|
|
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
# 期货相关表
|
|
|
# ============================================
|
|
|
|
|
|
class FuturesSymbol(Base):
|
|
|
"""期货合约表"""
|
|
|
__tablename__ = "futures_symbols"
|
|
|
|
|
|
symbol_id = Column(String(20), primary_key=True, index=True, comment="合约代码")
|
|
|
symbol_type = Column(String(20), nullable=False, comment="标的类型")
|
|
|
exchange = Column(String(10), nullable=False, index=True, comment="交易所")
|
|
|
name = Column(String(100), nullable=False, comment="名称")
|
|
|
underlying = Column(String(10), nullable=False, index=True, comment="品种代码")
|
|
|
contract_month = Column(String(6), nullable=False, comment="合约月份")
|
|
|
list_date = Column(DateTime, nullable=True, comment="上市日期")
|
|
|
delist_date = Column(DateTime, nullable=True, comment="退市日期")
|
|
|
status = Column(String(20), nullable=False, default="active", comment="状态")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
class FuturesTradingCalendar(Base):
|
|
|
"""期货交易日历表"""
|
|
|
__tablename__ = "futures_trading_calendar"
|
|
|
|
|
|
trade_date = Column(String(8), primary_key=True, comment="交易日期")
|
|
|
is_trading_day = Column(Boolean, nullable=False, comment="是否交易日")
|
|
|
has_night_session = Column(Boolean, default=False, comment="是否有夜盘")
|
|
|
week_day = Column(Integer, nullable=True, comment="星期几")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
class FuturesKLine1M(Base):
|
|
|
"""期货1分钟K线"""
|
|
|
__tablename__ = "futures_klines_1m"
|
|
|
__table_args__ = (
|
|
|
Index("idx_futures_1m_symbol_ts", "symbol_id", "ts"),
|
|
|
)
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="合约代码")
|
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
|
open_interest = Column(BigInteger, nullable=True, comment="持仓量")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
|
|
|
|
|
|
class FuturesKLine1D(Base):
|
|
|
"""期货日线K线"""
|
|
|
__tablename__ = "futures_klines_1d"
|
|
|
__table_args__ = (
|
|
|
Index("idx_futures_1d_symbol_ts", "symbol_id", "ts"),
|
|
|
)
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="合约代码")
|
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
|
open_interest = Column(BigInteger, nullable=True, comment="持仓量")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
# 公共表
|
|
|
# ============================================
|
|
|
|
|
|
class DataSourceConfig(Base):
|
|
|
"""数据源配置表"""
|
|
|
__tablename__ = "data_source_config"
|
|
|
|
|
|
asset_class = Column(String(20), primary_key=True, comment="资产类别")
|
|
|
active_source = Column(String(50), nullable=False, comment="当前激活源")
|
|
|
standby_sources = Column(Text, nullable=True, comment="待命源列表(JSON)")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
class DataQualityCheck(Base):
|
|
|
"""数据质量检查表"""
|
|
|
__tablename__ = "data_quality_checks"
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
check_date = Column(String(8), nullable=False, index=True, comment="检查日期")
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="标的代码")
|
|
|
freq = Column(String(10), nullable=False, comment="周期")
|
|
|
check_type = Column(String(20), nullable=False, comment="检查类型")
|
|
|
status = Column(String(10), nullable=False, comment="状态 pass/fail")
|
|
|
expect_count = Column(Integer, nullable=True, comment="期望数量")
|
|
|
actual_count = Column(Integer, nullable=True, comment="实际数量")
|
|
|
detail = Column(String(500), nullable=True, comment="详情")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
|
|
|
|
|
|
class StockAdjustFactor(Base):
|
|
|
"""股票复权系数表"""
|
|
|
__tablename__ = "stock_adjust_factors"
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="标的代码")
|
|
|
trade_date = Column(String(10), nullable=False, index=True, comment="交易日期 YYYY-MM-DD")
|
|
|
qfq_factor = Column(Numeric(18, 8), nullable=False, default=1.0, comment="前复权系数")
|
|
|
hfq_factor = Column(Numeric(18, 8), nullable=False, default=1.0, comment="后复权系数")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
__table_args__ = (
|
|
|
Index("idx_adj_factor_symbol_date", "symbol_id", "trade_date"),
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
# 期货分表结构 (新增)
|
|
|
# ============================================
|
|
|
|
|
|
class FuturesKLine1DBase(Base):
|
|
|
"""期货日线K线 - 基础表"""
|
|
|
__tablename__ = "futures_klines_1d_base"
|
|
|
__table_args__ = (
|
|
|
Index("idx_futures_1d_base_symbol_ts", "symbol_id", "ts"),
|
|
|
Index("idx_futures_1d_base_symbol_date", "symbol_id", "trade_date"),
|
|
|
)
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="合约代码")
|
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
|
trade_date = Column(String(10), nullable=False, index=True, comment="交易日 YYYY-MM-DD")
|
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
|
open_interest = Column(BigInteger, nullable=True, comment="持仓量")
|
|
|
settlement = Column(Numeric(18, 4), nullable=True, comment="结算价")
|
|
|
pre_settlement = Column(Numeric(18, 4), nullable=True, comment="昨结算价")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
class FuturesKLine1DQuote(Base):
|
|
|
"""期货日线K线 - 行情指标表"""
|
|
|
__tablename__ = "futures_klines_1d_quote"
|
|
|
__table_args__ = (
|
|
|
Index("idx_futures_1d_quote_symbol_date", "symbol_id", "trade_date"),
|
|
|
)
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="合约代码")
|
|
|
trade_date = Column(String(10), nullable=False, index=True, comment="交易日 YYYY-MM-DD")
|
|
|
change_pct = Column(Numeric(8, 4), nullable=True, comment="涨跌幅%")
|
|
|
change_5d_pct = Column(Numeric(8, 4), nullable=True, comment="5日涨跌幅%")
|
|
|
change_10d_pct = Column(Numeric(8, 4), nullable=True, comment="10日涨跌幅%")
|
|
|
change_20d_pct = Column(Numeric(8, 4), nullable=True, comment="20日涨跌幅%")
|
|
|
ma5 = Column(Numeric(18, 4), nullable=True, comment="5日均线")
|
|
|
ma10 = Column(Numeric(18, 4), nullable=True, comment="10日均线")
|
|
|
ma20 = Column(Numeric(18, 4), nullable=True, comment="20日均线")
|
|
|
ma30 = Column(Numeric(18, 4), nullable=True, comment="30日均线")
|
|
|
ma60 = Column(Numeric(18, 4), nullable=True, comment="60日均线")
|
|
|
macd_dif = Column(Numeric(18, 6), nullable=True, comment="MACD DIF")
|
|
|
macd_dea = Column(Numeric(18, 6), nullable=True, comment="MACD DEA")
|
|
|
macd_bar = Column(Numeric(18, 6), nullable=True, comment="MACD BAR")
|
|
|
oi_change = Column(BigInteger, nullable=True, comment="持仓量变化")
|
|
|
oi_change_pct = Column(Numeric(8, 4), nullable=True, comment="持仓量变化%")
|
|
|
amplitude = Column(Numeric(8, 4), nullable=True, comment="振幅%")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
class FuturesKLine1MBase(Base):
|
|
|
"""期货1分钟K线 - 基础表"""
|
|
|
__tablename__ = "futures_klines_1m_base"
|
|
|
__table_args__ = (Index("idx_futures_1m_base_symbol_ts", "symbol_id", "ts"),)
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="合约代码")
|
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
|
trade_date = Column(String(10), nullable=False, comment="交易日")
|
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
|
open_interest = Column(BigInteger, nullable=True, comment="持仓量")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
class FuturesKLine5MBase(Base):
|
|
|
"""期货5分钟K线 - 基础表"""
|
|
|
__tablename__ = "futures_klines_5m_base"
|
|
|
__table_args__ = (Index("idx_futures_5m_base_symbol_ts", "symbol_id", "ts"),)
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="合约代码")
|
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
|
trade_date = Column(String(10), nullable=False, comment="交易日")
|
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
|
open_interest = Column(BigInteger, nullable=True, comment="持仓量")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
class FuturesRealTimeQuote(Base):
|
|
|
"""期货实时行情快照"""
|
|
|
__tablename__ = "futures_realtime_quotes"
|
|
|
symbol_id = Column(String(20), primary_key=True, comment="合约代码")
|
|
|
update_time = Column(DateTime, nullable=False, comment="更新时间")
|
|
|
last_price = Column(Numeric(18, 4), nullable=True, comment="最新价")
|
|
|
open = Column(Numeric(18, 4), nullable=True, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=True, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=True, comment="最低价")
|
|
|
pre_close = Column(Numeric(18, 4), nullable=True, comment="昨收")
|
|
|
pre_settlement = Column(Numeric(18, 4), nullable=True, comment="昨结算")
|
|
|
settlement = Column(Numeric(18, 4), nullable=True, comment="结算价")
|
|
|
volume = Column(BigInteger, nullable=True, comment="成交量")
|
|
|
amount = Column(Numeric(20, 4), nullable=True, comment="成交额")
|
|
|
open_interest = Column(BigInteger, nullable=True, comment="持仓量")
|
|
|
bid1 = Column(Numeric(18, 4), nullable=True, comment="买一价")
|
|
|
bid1_volume = Column(BigInteger, nullable=True, comment="买一量")
|
|
|
ask1 = Column(Numeric(18, 4), nullable=True, comment="卖一价")
|
|
|
ask1_volume = Column(BigInteger, nullable=True, comment="卖一量")
|
|
|
limit_up = Column(Numeric(18, 4), nullable=True, comment="涨停价")
|
|
|
limit_down = Column(Numeric(18, 4), nullable=True, comment="跌停价")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
# 向后兼容别名
|
|
|
FuturesKLine1M = FuturesKLine1MBase
|
|
|
FuturesKLine5M = FuturesKLine5MBase
|
|
|
FuturesKLine1D = FuturesKLine1DBase
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
# 股票日线历史数据表 (1d) - 分表 (新增)
|
|
|
# ============================================
|
|
|
|
|
|
class StockKLine1DBase(Base):
|
|
|
"""股票日线K线 - 基础表
|
|
|
|
|
|
存储最基础的K线数据,对应 query_kline 接口
|
|
|
"""
|
|
|
__tablename__ = "stock_klines_1d_base"
|
|
|
__table_args__ = (
|
|
|
Index("idx_stock_1d_base_symbol_ts", "symbol_id", "ts"),
|
|
|
Index("idx_stock_1d_base_symbol_date", "symbol_id", "trade_date"),
|
|
|
)
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="标的代码")
|
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
|
trade_date = Column(String(10), nullable=False, index=True, comment="交易日 YYYY-MM-DD")
|
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
|
volume = Column(BigInteger, nullable=False, comment="成交量(股)")
|
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额(元)")
|
|
|
adj_factor = Column(Numeric(18, 8), nullable=True, comment="复权系数")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
class StockKLine1DQuote(Base):
|
|
|
"""股票日线K线 - 行情指标表
|
|
|
|
|
|
存储需要计算的行情指标
|
|
|
"""
|
|
|
__tablename__ = "stock_klines_1d_quote"
|
|
|
__table_args__ = (
|
|
|
Index("idx_stock_1d_quote_symbol_date", "symbol_id", "trade_date"),
|
|
|
)
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="标的代码")
|
|
|
trade_date = Column(String(10), nullable=False, index=True, comment="交易日 YYYY-MM-DD")
|
|
|
change_pct = Column(Numeric(8, 4), nullable=True, comment="涨跌幅%")
|
|
|
change_5d_pct = Column(Numeric(8, 4), nullable=True, comment="5日涨跌幅%")
|
|
|
change_10d_pct = Column(Numeric(8, 4), nullable=True, comment="10日涨跌幅%")
|
|
|
change_20d_pct = Column(Numeric(8, 4), nullable=True, comment="20日涨跌幅%")
|
|
|
change_30d_pct = Column(Numeric(8, 4), nullable=True, comment="30日涨跌幅%")
|
|
|
change_60d_pct = Column(Numeric(8, 4), nullable=True, comment="60日涨跌幅%")
|
|
|
ma5 = Column(Numeric(18, 4), nullable=True, comment="5日均线")
|
|
|
ma10 = Column(Numeric(18, 4), nullable=True, comment="10日均线")
|
|
|
ma20 = Column(Numeric(18, 4), nullable=True, comment="20日均线")
|
|
|
ma30 = Column(Numeric(18, 4), nullable=True, comment="30日均线")
|
|
|
ma60 = Column(Numeric(18, 4), nullable=True, comment="60日均线")
|
|
|
ma120 = Column(Numeric(18, 4), nullable=True, comment="120日均线")
|
|
|
ma250 = Column(Numeric(18, 4), nullable=True, comment="250日均线")
|
|
|
macd_dif = Column(Numeric(18, 6), nullable=True, comment="MACD DIF")
|
|
|
macd_dea = Column(Numeric(18, 6), nullable=True, comment="MACD DEA")
|
|
|
macd_bar = Column(Numeric(18, 6), nullable=True, comment="MACD BAR")
|
|
|
bias_5 = Column(Numeric(8, 4), nullable=True, comment="5日乖离率%")
|
|
|
bias_10 = Column(Numeric(8, 4), nullable=True, comment="10日乖离率%")
|
|
|
bias_20 = Column(Numeric(8, 4), nullable=True, comment="20日乖离率%")
|
|
|
is_limit_up = Column(Boolean, nullable=True, comment="是否涨停")
|
|
|
is_limit_down = Column(Boolean, nullable=True, comment="是否跌停")
|
|
|
limit_up_price = Column(Numeric(18, 4), nullable=True, comment="涨停价")
|
|
|
limit_down_price = Column(Numeric(18, 4), nullable=True, comment="跌停价")
|
|
|
is_st = Column(Boolean, nullable=True, comment="是否ST")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
class StockKLine1DFinance(Base):
|
|
|
"""股票日线K线 - 财务数据表
|
|
|
|
|
|
存储财务相关数据
|
|
|
"""
|
|
|
__tablename__ = "stock_klines_1d_finance"
|
|
|
__table_args__ = (
|
|
|
Index("idx_stock_1d_finance_symbol_date", "symbol_id", "trade_date"),
|
|
|
)
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="标的代码")
|
|
|
trade_date = Column(String(10), nullable=False, index=True, comment="交易日 YYYY-MM-DD")
|
|
|
total_market_cap = Column(Numeric(20, 4), nullable=True, comment="总市值(元)")
|
|
|
float_market_cap = Column(Numeric(20, 4), nullable=True, comment="流通市值(元)")
|
|
|
total_shares = Column(BigInteger, nullable=True, comment="总股本(股)")
|
|
|
float_shares = Column(BigInteger, nullable=True, comment="流通股本(股)")
|
|
|
inst_holding_shares = Column(BigInteger, nullable=True, comment="机构持股数量")
|
|
|
inst_holding_ratio = Column(Numeric(8, 4), nullable=True, comment="机构持仓占比%")
|
|
|
top10_holders_ratio = Column(Numeric(8, 4), nullable=True, comment="前十大股东持股占比%")
|
|
|
net_profit = Column(Numeric(20, 4), nullable=True, comment="净利润")
|
|
|
revenue = Column(Numeric(20, 4), nullable=True, comment="营业总收入")
|
|
|
eps = Column(Numeric(12, 4), nullable=True, comment="每股收益")
|
|
|
roe = Column(Numeric(8, 4), nullable=True, comment="净资产收益率%")
|
|
|
trading_days = Column(Integer, nullable=True, comment="从上市至今交易日数")
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
class StockRealTimeQuote(Base):
|
|
|
"""股票实时行情快照"""
|
|
|
__tablename__ = "stock_realtime_quotes"
|
|
|
|
|
|
symbol_id = Column(String(20), primary_key=True, comment="标的代码")
|
|
|
update_time = Column(DateTime, nullable=False, comment="更新时间")
|
|
|
last_price = Column(Numeric(18, 4), nullable=True, comment="最新价")
|
|
|
open = Column(Numeric(18, 4), nullable=True, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=True, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=True, comment="最低价")
|
|
|
pre_close = Column(Numeric(18, 4), nullable=True, comment="昨收")
|
|
|
volume = Column(BigInteger, nullable=True, comment="成交量")
|
|
|
amount = Column(Numeric(20, 4), nullable=True, comment="成交额")
|
|
|
bid1 = Column(Numeric(18, 4), nullable=True, comment="买一价")
|
|
|
ask1 = Column(Numeric(18, 4), nullable=True, comment="卖一价")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
# 股票表向后兼容别名
|
|
|
StockKLine1D = StockKLine1DBase
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
# 股票15/30/60分钟K线表 (新增)
|
|
|
# ============================================
|
|
|
|
|
|
class StockKLine15M(Base):
|
|
|
"""股票15分钟K线"""
|
|
|
__tablename__ = "stock_klines_15m"
|
|
|
__table_args__ = (
|
|
|
Index("idx_stock_15m_symbol_ts", "symbol_id", "ts"),
|
|
|
)
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="标的代码")
|
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
|
trade_date = Column(String(10), nullable=False, comment="交易日")
|
|
|
|
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
|
|
|
|
change_pct = Column(Numeric(8, 4), nullable=True, comment="涨跌幅%")
|
|
|
macd_dif = Column(Numeric(18, 6), nullable=True, comment="MACD DIF")
|
|
|
macd_dea = Column(Numeric(18, 6), nullable=True, comment="MACD DEA")
|
|
|
macd_bar = Column(Numeric(18, 6), nullable=True, comment="MACD BAR")
|
|
|
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
class StockKLine30M(Base):
|
|
|
"""股票30分钟K线"""
|
|
|
__tablename__ = "stock_klines_30m"
|
|
|
__table_args__ = (
|
|
|
Index("idx_stock_30m_symbol_ts", "symbol_id", "ts"),
|
|
|
)
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="标的代码")
|
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
|
trade_date = Column(String(10), nullable=False, comment="交易日")
|
|
|
|
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
|
|
|
|
change_pct = Column(Numeric(8, 4), nullable=True, comment="涨跌幅%")
|
|
|
macd_dif = Column(Numeric(18, 6), nullable=True, comment="MACD DIF")
|
|
|
macd_dea = Column(Numeric(18, 6), nullable=True, comment="MACD DEA")
|
|
|
macd_bar = Column(Numeric(18, 6), nullable=True, comment="MACD BAR")
|
|
|
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
class StockKLine60M(Base):
|
|
|
"""股票60分钟K线"""
|
|
|
__tablename__ = "stock_klines_60m"
|
|
|
__table_args__ = (
|
|
|
Index("idx_stock_60m_symbol_ts", "symbol_id", "ts"),
|
|
|
)
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="标的代码")
|
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
|
trade_date = Column(String(10), nullable=False, comment="交易日")
|
|
|
|
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
|
|
|
|
change_pct = Column(Numeric(8, 4), nullable=True, comment="涨跌幅%")
|
|
|
macd_dif = Column(Numeric(18, 6), nullable=True, comment="MACD DIF")
|
|
|
macd_dea = Column(Numeric(18, 6), nullable=True, comment="MACD DEA")
|
|
|
macd_bar = Column(Numeric(18, 6), nullable=True, comment="MACD BAR")
|
|
|
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
# 期货15/30/60分钟K线表 (新增)
|
|
|
# ============================================
|
|
|
|
|
|
class FuturesKLine15MBase(Base):
|
|
|
"""期货15分钟K线 - 基础表"""
|
|
|
__tablename__ = "futures_klines_15m_base"
|
|
|
__table_args__ = (
|
|
|
Index("idx_futures_15m_base_symbol_ts", "symbol_id", "ts"),
|
|
|
)
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="合约代码")
|
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
|
trade_date = Column(String(10), nullable=False, comment="交易日")
|
|
|
|
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
|
open_interest = Column(BigInteger, nullable=True, comment="持仓量")
|
|
|
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
class FuturesKLine30MBase(Base):
|
|
|
"""期货30分钟K线 - 基础表"""
|
|
|
__tablename__ = "futures_klines_30m_base"
|
|
|
__table_args__ = (
|
|
|
Index("idx_futures_30m_base_symbol_ts", "symbol_id", "ts"),
|
|
|
)
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="合约代码")
|
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
|
trade_date = Column(String(10), nullable=False, comment="交易日")
|
|
|
|
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
|
open_interest = Column(BigInteger, nullable=True, comment="持仓量")
|
|
|
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
|
|
|
class FuturesKLine60MBase(Base):
|
|
|
"""期货60分钟K线 - 基础表"""
|
|
|
__tablename__ = "futures_klines_60m_base"
|
|
|
__table_args__ = (
|
|
|
Index("idx_futures_60m_base_symbol_ts", "symbol_id", "ts"),
|
|
|
)
|
|
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="合约代码")
|
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
|
trade_date = Column(String(10), nullable=False, comment="交易日")
|
|
|
|
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
|
open_interest = Column(BigInteger, nullable=True, comment="持仓量")
|
|
|
|
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|