first commit
This commit is contained in:
49
app/schemas/indicator.py
Normal file
49
app/schemas/indicator.py
Normal file
@@ -0,0 +1,49 @@
|
||||
"""Pydantic schemas for technical indicator endpoints."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import date
|
||||
from typing import Any, Literal
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class IndicatorRequest(BaseModel):
|
||||
"""Query parameters for indicator computation."""
|
||||
|
||||
start_date: date | None = None
|
||||
end_date: date | None = None
|
||||
period: int | None = None
|
||||
|
||||
|
||||
class IndicatorResult(BaseModel):
|
||||
"""Raw indicator values plus normalized score."""
|
||||
|
||||
indicator_type: str
|
||||
values: dict[str, Any]
|
||||
score: float = Field(ge=0, le=100)
|
||||
bars_used: int
|
||||
|
||||
|
||||
class IndicatorResponse(BaseModel):
|
||||
"""Envelope-ready indicator response."""
|
||||
|
||||
symbol: str
|
||||
indicator: IndicatorResult
|
||||
|
||||
|
||||
class EMACrossResult(BaseModel):
|
||||
"""EMA cross signal details."""
|
||||
|
||||
short_ema: float
|
||||
long_ema: float
|
||||
short_period: int
|
||||
long_period: int
|
||||
signal: Literal["bullish", "bearish", "neutral"]
|
||||
|
||||
|
||||
class EMACrossResponse(BaseModel):
|
||||
"""Envelope-ready EMA cross response."""
|
||||
|
||||
symbol: str
|
||||
ema_cross: EMACrossResult
|
||||
Reference in New Issue
Block a user