|
|
|
|
|
"""
|
|
|
|
|
|
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
|