Files
ai-exchange/src/models/dealing_range.py
T
2026-04-24 13:39:01 +08:00

24 lines
1.1 KiB
Python

from typing import Any, Optional, Union
from sqlalchemy import ForeignKey, Numeric, Text
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import Mapped, mapped_column
from src.db.base import Base
class DealingRange(Base):
__tablename__ = "dealing_ranges"
id: Mapped[int] = mapped_column(primary_key=True)
instrument_id: Mapped[int] = mapped_column(ForeignKey("instruments.id"), nullable=False)
timeframe: Mapped[str] = mapped_column(Text, nullable=False)
high: Mapped[float] = mapped_column(Numeric(20, 10), nullable=False)
low: Mapped[float] = mapped_column(Numeric(20, 10), nullable=False)
equilibrium: Mapped[float] = mapped_column(Numeric(20, 10), nullable=False)
high_swing_id: Mapped[Optional[int]] = mapped_column(ForeignKey("swings.id"))
low_swing_id: Mapped[Optional[int]] = mapped_column(ForeignKey("swings.id"))
state: Mapped[str] = mapped_column(Text, nullable=False, default="valid")
ts_start: Mapped[object] = mapped_column(nullable=False)
ts_end: Mapped[Optional[object]] = mapped_column()
meta: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict)