31ece2e99a
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
24 lines
1.1 KiB
Python
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)
|