看股功能更新
This commit is contained in:
@@ -7,9 +7,9 @@ Candle 表设计与 TimescaleDB hypertable 完全兼容:将来在目标 PG 库
|
||||
智能选股三表(stock_basic / market_daily / daily_snapshot)与回测 candles(qfq)
|
||||
完全隔离:选股用未复权日线按 trade_date 全市场批量落地,避免污染回测复权缓存。
|
||||
"""
|
||||
from datetime import datetime
|
||||
from datetime import date, datetime
|
||||
|
||||
from sqlalchemy import BigInteger, Boolean, DateTime, Float, ForeignKey, Integer, String, Text, UniqueConstraint
|
||||
from sqlalchemy import BigInteger, Boolean, Date, DateTime, Float, ForeignKey, Integer, String, Text, UniqueConstraint
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
|
||||
from .db import Base
|
||||
@@ -173,6 +173,30 @@ class WatchlistItem(Base):
|
||||
)
|
||||
|
||||
|
||||
class UserTrade(Base):
|
||||
"""交割单导入的实盘成交流水(K线买卖点的数据源,价格为券商成交原始价、不复权)。"""
|
||||
__tablename__ = "user_trades"
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
user_id: Mapped[int] = mapped_column(BigInteger, ForeignKey("users.id", ondelete="CASCADE"), index=True)
|
||||
ts_code: Mapped[str] = mapped_column(String(12), index=True)
|
||||
code: Mapped[str] = mapped_column(String(10)) # 6 位纯数字
|
||||
name: Mapped[str | None] = mapped_column(String(32))
|
||||
trade_date: Mapped[date] = mapped_column(Date, index=True) # 成交日期
|
||||
direction: Mapped[str] = mapped_column(String(4)) # buy | sell
|
||||
price: Mapped[float | None] = mapped_column(Float) # 成交价
|
||||
qty: Mapped[float] = mapped_column(Float) # 股数
|
||||
amount: Mapped[float | None] = mapped_column(Float) # 成交金额(元)
|
||||
fee: Mapped[float] = mapped_column(Float, default=0.0) # 手续费合计(元)
|
||||
raw_json: Mapped[str | None] = mapped_column(Text) # 原始行(审计/排错)
|
||||
created_at: Mapped[datetime] = mapped_column(DateTime, default=_utcnow)
|
||||
|
||||
__table_args__ = (
|
||||
# 重复上传同一份交割单幂等(price 可空导致 PG 对 NULL 不去重,导入时另有 Python 侧兜底)
|
||||
UniqueConstraint("user_id", "trade_date", "ts_code", "direction", "price", "qty", name="uq_user_trade_dedup"),
|
||||
)
|
||||
|
||||
|
||||
class ScreenerQuery(Base):
|
||||
"""自然语言选股提问历史(文本 + 解析出的条件,便于一键重跑)。"""
|
||||
__tablename__ = "screener_queries"
|
||||
|
||||
Reference in New Issue
Block a user