Files
exchange_monitor_sync/models/orm_models.py
lz_db 64c993319a 1
2025-12-05 13:25:26 +08:00

76 lines
4.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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}, st_id={self.st_id!r}, time={self.time!r})"