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})" |