""" 期货数据模型 """ from datetime import datetime, date from sqlalchemy import Column, Integer, String, BigInteger, Numeric, Boolean, Date, DateTime from app.db.base import Base class FutureInfo(Base): """期货基础信息表""" __tablename__ = "future_info" id = Column(Integer, primary_key=True, index=True) code = Column(String(20), unique=True, nullable=False, index=True) symbol = Column(String(100), nullable=False) underlying = Column(String(20)) contract_month = Column(String(10)) pre_close = Column(Numeric(12, 4)) high_limited = Column(Numeric(12, 4)) low_limited = Column(Numeric(12, 4)) price_tick = Column(Numeric(10, 4)) exchange = Column(String(10), default="CFE") list_date = Column(Date) expire_date = Column(Date) is_active = Column(Boolean, default=True) created_at = Column(DateTime(timezone=True), default=datetime.utcnow) updated_at = Column(DateTime(timezone=True), default=datetime.utcnow, onupdate=datetime.utcnow) class FutureKlineDaily(Base): """期货日线数据表""" __tablename__ = "future_kline_daily" id = Column(BigInteger, primary_key=True, index=True) code = Column(String(20), nullable=False, index=True) trade_date = Column(Date, nullable=False, index=True) open = Column(Numeric(12, 4), nullable=False) high = Column(Numeric(12, 4), nullable=False) low = Column(Numeric(12, 4), nullable=False) close = Column(Numeric(12, 4), nullable=False) volume = Column(BigInteger, nullable=False) amount = Column(Numeric(18, 4), nullable=False) settle = Column(Numeric(12, 4)) open_interest = Column(BigInteger) pre_settle = Column(Numeric(12, 4)) created_at = Column(DateTime(timezone=True), default=datetime.utcnow) updated_at = Column(DateTime(timezone=True), default=datetime.utcnow, onupdate=datetime.utcnow) class FutureKlineMin(Base): """期货分钟数据表""" __tablename__ = "future_kline_min" id = Column(BigInteger, primary_key=True, index=True) code = Column(String(20), nullable=False, index=True) period_type = Column(String(10), nullable=False) trade_datetime = Column(DateTime, nullable=False, index=True) open = Column(Numeric(12, 4), nullable=False) high = Column(Numeric(12, 4), nullable=False) low = Column(Numeric(12, 4), nullable=False) close = Column(Numeric(12, 4), nullable=False) volume = Column(BigInteger, nullable=False) amount = Column(Numeric(18, 4), nullable=False) settle = Column(Numeric(12, 4)) open_interest = Column(BigInteger) created_at = Column(DateTime(timezone=True), default=datetime.utcnow)