from sqlalchemy import create_engine, MetaData from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy import Integer, String, Float, DateTime, DECIMAL, func from datetime import datetime from typing import Optional import json class Base(DeclarativeBase): """SQLAlchemy基础类""" pass class StrategyPosition(Base): """持仓表模型""" __tablename__ = 'deh_strategy_position_new' id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, comment='自增id') st_id: Mapped[int] = mapped_column(Integer, nullable=False, comment='策略id') k_id: Mapped[int] = mapped_column(Integer, default=0, comment='对应strategy_key 的ID') asset: Mapped[str] = mapped_column(String(32), default='USDT', comment='使用资产名称') symbol: Mapped[str] = mapped_column(String(50), nullable=False, comment='交易对') price: Mapped[Optional[float]] = mapped_column(Float, comment='持仓均价') side: Mapped[str] = mapped_column(String(10), nullable=False, comment='方向') # 注意:这里属性名是 qty,但对应数据库字段是 sum qty: Mapped[float] = mapped_column("sum", Float, nullable=False, comment='仓位(张数)') asset_num: Mapped[float] = mapped_column(DECIMAL(20, 8), default=0.00000000, comment='资产数量') asset_profit: Mapped[Optional[float]] = mapped_column(DECIMAL(20, 8), comment='利润数量') leverage: Mapped[int] = mapped_column(Integer, default=0, comment='杠杆倍数') uptime: Mapped[int] = mapped_column(Integer, nullable=False, comment='更新时间') profit_price: Mapped[float] = mapped_column(DECIMAL(20, 8), default=0.00000000, comment='止盈价格') stop_price: Mapped[float] = mapped_column(DECIMAL(20, 8), default=0.00000000, comment='止损价格') liquidation_price: Mapped[float] = mapped_column(DECIMAL(20, 8), default=0.00000000, comment='强平价格') def __repr__(self) -> str: return f"StrategyPosition(id={self.id!r}, k_id={self.k_id!r}, symbol={self.symbol!r})" class StrategyOrder(Base): """订单表模型""" __tablename__ = 'deh_strategy_order_new' id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) st_id: Mapped[Optional[int]] = mapped_column(Integer, comment='策略id') k_id: Mapped[int] = mapped_column(Integer, default=0, comment='对应strategy_key 的ID') asset: Mapped[Optional[str]] = mapped_column(String(32), default='USDT', comment='资产名称') order_id: Mapped[Optional[str]] = mapped_column(String(765), comment='订单id') symbol: Mapped[Optional[str]] = mapped_column(String(120), comment='交易对') side: Mapped[Optional[str]] = mapped_column(String(120), comment='订单方向') price: Mapped[Optional[float]] = mapped_column(Float, comment='订单价格') time: Mapped[Optional[int]] = mapped_column(Integer, comment='订单时间') order_qty: Mapped[Optional[float]] = mapped_column(Float, comment='订单挂单数量') last_qty: Mapped[Optional[float]] = mapped_column(Float, comment='订单成交数量') avg_price: Mapped[Optional[float]] = mapped_column(Float, comment='订单成交均价') exchange_id: Mapped[Optional[int]] = mapped_column(Integer, comment='交易所id') def __repr__(self) -> str: return f"StrategyOrder(id={self.id!r}, order_id={self.order_id!r})" class StrategyKX(Base): """账户信息表模型""" __tablename__ = 'deh_strategy_kx_new' id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, comment='自增id') st_id: Mapped[Optional[int]] = mapped_column(Integer, comment='策略id') k_id: Mapped[int] = mapped_column(Integer, default=0, comment='对应strategy_key 的ID') asset: Mapped[Optional[str]] = mapped_column(String(32), default='USDT', comment='资产名') balance: Mapped[float] = mapped_column(DECIMAL(20, 8), default=0.00000000, comment='当日账户金额') withdrawal: Mapped[float] = mapped_column(DECIMAL(20, 8), default=0.00000000, comment='当日提现') deposit: Mapped[float] = mapped_column(DECIMAL(20, 8), default=0.00000000, comment='当日充值') other: Mapped[float] = mapped_column(DECIMAL(20, 8), default=0.00000000, comment='当日其他') profit: Mapped[float] = mapped_column(DECIMAL(20, 8), default=0.00000000, comment='当日利润') time: Mapped[Optional[int]] = mapped_column(Integer, comment='时间') up_time: Mapped[Optional[datetime]] = mapped_column(DateTime, default=func.now(), onupdate=func.now(), comment='最后更新时间') def __repr__(self) -> str: return f"StrategyKX(id={self.id!r}, k_id={self.k_id!r}, time={self.time!r})"