26 lines
953 B
Python
26 lines
953 B
Python
from datetime import date as date_type
|
|
|
|
from sqlalchemy import Date, Float, String, UniqueConstraint
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from app.database import Base
|
|
|
|
|
|
class BenchmarkPrice(Base):
|
|
"""Daily close for a benchmark index (e.g. SPY), used to compute trade alpha.
|
|
|
|
A standalone price series, deliberately NOT a tracked ``Ticker`` — so the
|
|
benchmark never becomes a trade candidate or rankings-table row. Its closes
|
|
are used for residual momentum and trade alpha. One row per (symbol, date).
|
|
"""
|
|
|
|
__tablename__ = "benchmark_prices"
|
|
__table_args__ = (
|
|
UniqueConstraint("symbol", "date", name="uq_benchmark_symbol_date"),
|
|
)
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
symbol: Mapped[str] = mapped_column(String(20), nullable=False, index=True)
|
|
date: Mapped[date_type] = mapped_column(Date, nullable=False)
|
|
close: Mapped[float] = mapped_column(Float, nullable=False)
|