""" K线数据Schema """ from datetime import date, datetime from typing import List, Optional, Dict, Any from pydantic import BaseModel, Field class KlineRequest(BaseModel): """K线数据请求""" codes: str = Field(..., description="股票代码,多个用逗号分隔") start_date: str = Field(..., description="开始日期(YYYYMMDD)") end_date: str = Field(..., description="结束日期(YYYYMMDD)") period: str = Field(default="daily", description="周期: daily, min1, min5, min15, min30, min60") class KlineData(BaseModel): """单条K线数据""" trade_date: Optional[str] = None trade_datetime: Optional[str] = None open: float high: float low: float close: float volume: int amount: float settle: Optional[float] = None open_interest: Optional[int] = None class KlineResponse(BaseModel): """K线数据响应""" code: str data: List[KlineData] class KlineChartData(BaseModel): """K线图数据(ECharts格式)""" categoryData: List[str] values: List[List[float]] # [open, close, low, high, volume] volumes: List[List[float]] # [index, volume, sign] class BatchKlineRequest(BaseModel): """批量K线请求""" codes: List[str] start_date: str end_date: str period: str = "daily" class SnapshotData(BaseModel): """快照数据""" trade_time: str pre_close: Optional[float] = None last: Optional[float] = None open: Optional[float] = None high: Optional[float] = None low: Optional[float] = None close: Optional[float] = None volume: Optional[int] = None amount: Optional[float] = None ask_price1: Optional[float] = None ask_volume1: Optional[int] = None bid_price1: Optional[float] = None bid_volume1: Optional[int] = None