72 lines
1.8 KiB
Python
Raw Permalink Normal View History

from datetime import date, datetime
from decimal import Decimal
from typing import List, Optional
from pydantic import BaseModel
from app.schemas.portfolio import FloatDecimal
class ScreeningSignalResponse(BaseModel):
id: int
screen_date: date
ticker: str
name: Optional[str] = None
sector: Optional[str] = None
market_cap: Optional[int] = None
trading_value: Optional[int] = None
is_limit_up: bool = False
daily_return: Optional[FloatDecimal] = None
trigger_low: Optional[FloatDecimal] = None
market_state: Optional[str] = None
status: str
entry_date: Optional[date] = None
entry_price: Optional[FloatDecimal] = None
exit_date: Optional[date] = None
exit_price: Optional[FloatDecimal] = None
created_at: datetime
class Config:
from_attributes = True
class AutoOrderResponse(BaseModel):
id: int
order_date: datetime
ticker: str
order_type: Optional[str] = None
qty: Optional[int] = None
price: Optional[FloatDecimal] = None
order_no: Optional[str] = None
status: Optional[str] = None
screening_signal_id: Optional[int] = None
created_at: datetime
class Config:
from_attributes = True
class WatchlistItem(BaseModel):
ticker: str
name: Optional[str] = None
sector: Optional[str] = None
screen_date: date
trading_value: Optional[int] = None
is_limit_up: bool = False
daily_return: Optional[FloatDecimal] = None
trigger_low: Optional[FloatDecimal] = None
market_state: Optional[str] = None
status: str
class Config:
from_attributes = True
class ScreeningSummary(BaseModel):
date: date
market_state: str
total_screened: int
limit_up_count: int
watchlist_count: int
signals: List[ScreeningSignalResponse]