Files
exchange_monitor_sync/models/orm_models.py

76 lines
4.7 KiB
Python
Raw Normal View History

2025-12-02 22:05:54 +08:00
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})"