# -*- coding: utf-8 -*- """ =================================== 股票数据相关模型 =================================== 职责: 1. 定义股票实时行情模型 2. 定义历史 K 线数据模型 """ from typing import Optional, List from pydantic import BaseModel, Field class StockQuote(BaseModel): """股票实时行情""" stock_code: str = Field(..., description="股票代码") stock_name: Optional[str] = Field(None, description="股票名称") current_price: float = Field(..., description="当前价格") change: Optional[float] = Field(None, description="涨跌额") change_percent: Optional[float] = Field(None, description="涨跌幅 (%)") open: Optional[float] = Field(None, description="开盘价") high: Optional[float] = Field(None, description="最高价") low: Optional[float] = Field(None, description="最低价") prev_close: Optional[float] = Field(None, description="昨收价") volume: Optional[float] = Field(None, description="成交量(股)") amount: Optional[float] = Field(None, description="成交额(元)") update_time: Optional[str] = Field(None, description="更新时间") class Config: json_schema_extra = { "example": { "stock_code": "600519", "stock_name": "贵州茅台", "current_price": 1800.00, "change": 15.00, "change_percent": 0.84, "open": 1785.00, "high": 1810.00, "low": 1780.00, "prev_close": 1785.00, "volume": 10000000, "amount": 18000000000, "update_time": "2024-01-01T15:00:00" } } class KLineData(BaseModel): """K 线数据点""" date: str = Field(..., description="日期") open: float = Field(..., description="开盘价") high: float = Field(..., description="最高价") low: float = Field(..., description="最低价") close: float = Field(..., description="收盘价") volume: Optional[float] = Field(None, description="成交量") amount: Optional[float] = Field(None, description="成交额") change_percent: Optional[float] = Field(None, description="涨跌幅 (%)") class Config: json_schema_extra = { "example": { "date": "2024-01-01", "open": 1785.00, "high": 1810.00, "low": 1780.00, "close": 1800.00, "volume": 10000000, "amount": 18000000000, "change_percent": 0.84 } } class StockHistoryResponse(BaseModel): """股票历史行情响应""" stock_code: str = Field(..., description="股票代码") stock_name: Optional[str] = Field(None, description="股票名称") period: str = Field(..., description="K 线周期") data: List[KLineData] = Field(default_factory=list, description="K 线数据列表") class Config: json_schema_extra = { "example": { "stock_code": "600519", "stock_name": "贵州茅台", "period": "daily", "data": [] } }