76 lines
4.7 KiB
Python
76 lines
4.7 KiB
Python
|
|
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})"
|