You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.8 KiB

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