交易数据模型
概述
交易数据模型定义了量化交易系统中所有与交易相关的数据结构,包括资产、持仓、订单等核心业务实体。
资产模型 (Assets)
用户资产 (UserAsset)
class UserAsset(BaseModel):
id: str # 资产ID
user_id: str # 用户ID
currency: str # 货币类型 (USD|HKD|CNY)
amount: float # 资产金额
asset_type: str # 资产类型 (cash|position)
created_at: datetime # 创建时间
updated_at: datetime # 更新时间
用户持仓 (UserPosition)
class UserPosition(BaseModel):
id: str # 持仓ID
user_id: str # 用户ID
symbol: str # 股票代码 (如: YINN.US)
quantity: int # 持仓数量
cost_price: float # 成本价
current_price: float # 当前价格
market_value: float # 市值
currency: str # 货币类型
created_at: datetime # 创建时间
updated_at: datetime # 更新时间
模拟资产 (SimulatedAsset)
class SimulatedAsset(BaseModel):
id: str # 资产ID
user_id: str # 用户ID
currency: str # 货币类型 (USD|HKD|CNY)
amount: float # 资产金额
asset_type: str # 资产类型 (cash|position)
created_at: datetime # 创建时间
updated_at: datetime # 更新时间
模拟持仓 (SimulatedPosition)
class SimulatedPosition(BaseModel):
id: str # 持仓ID
user_id: str # 用户ID
symbol: str # 股票代码 (如: YINN.US)
quantity: int # 持仓数量
cost_price: float # 成本价
current_price: float # 当前价格
market_value: float # 市值
currency: str # 货币类型
created_at: datetime # 创建时间
updated_at: datetime # 更新时间
股票信息 (Stock)
class Stock(BaseModel):
symbol: str # 股票代码 (如: YINN.US)
name: str # 股票名称
market: str # 市场 (US|HK|CN)
sector: Optional[str] # 行业
market_cap: Optional[float] # 市值
price: float # 当前价格
change: float # 涨跌幅
volume: int # 成交量
last_update: datetime # 最后更新时间
交易订单 (Order)
class Order(BaseModel):
id: str # 订单ID
user_id: str # 用户ID
account_id: str # 账户ID
symbol: str # 股票代码 (如: YINN.US)
side: OrderSide # 买卖方向 (buy|sell)
order_type: OrderType # 订单类型 (market|limit|stop)
quantity: int # 数量
price: Optional[float] # 价格 (限价单)
stop_price: Optional[float] # 止损价格
status: OrderStatus # 订单状态
filled_quantity: int # 已成交数量
average_price: float # 平均成交价
created_at: datetime # 创建时间
updated_at: datetime # 更新时间
订单相关枚举
class OrderSide(str, Enum):
BUY = "buy"
SELL = "sell"
class OrderType(str, Enum):
MARKET = "market"
LIMIT = "limit"
STOP = "stop"
class OrderStatus(str, Enum):
PENDING = "pending"
FILLED = "filled"
CANCELLED = "cancelled"
REJECTED = "rejected"
持仓记录 (Position)
class Position(BaseModel):
id: str # 持仓ID
user_id: str # 用户ID
account_id: str # 账户ID
symbol: str # 股票代码 (如: YINN.US)
quantity: int # 持仓数量
average_price: float # 平均成本价
current_price: float # 当前价格
market_value: float # 市值
unrealized_pnl: float # 未实现盈亏
realized_pnl: float # 已实现盈亏
currency: str # 货币类型
created_at: datetime # 创建时间
updated_at: datetime # 更新时间
交易历史 (Trade)
class Trade(BaseModel):
id: str # 交易ID
order_id: str # 订单ID
user_id: str # 用户ID
account_id: str # 账户ID
symbol: str # 股票代码 (如: YINN.US)
side: OrderSide # 买卖方向 (buy|sell)
quantity: int # 数量
price: float # 成交价格
amount: float # 成交金额
commission: float # 手续费
currency: str # 货币类型
timestamp: datetime # 成交时间
资产概览模型
资产概览 (AssetOverview)
class AssetOverview(BaseModel):
total_assets: float # 总资产
cash_assets_by_currency: Dict[str, float] # 现金资产按货币分组
position_assets_by_currency: Dict[str, float] # 持仓资产按货币分组
today_pnl: Optional[float] # 今日盈亏
模拟资产概览 (SimulatedAssetOverview)
class SimulatedAssetOverview(BaseModel):
total_assets: float # 总资产
cash_assets_by_currency: Dict[str, float] # 现金资产按货币分组
position_assets_by_currency: Dict[str, float] # 持仓资产按货币分组
数据存储
Redis存储结构
user_asset:{user_id}:{currency} # 用户资产 (Hash)
user_position:{user_id}:{symbol} # 用户持仓 (Hash)
simulated_asset:{user_id}:{currency} # 模拟资产 (Hash)
simulated_position:{user_id}:{symbol} # 模拟持仓 (Hash)
API接口
资产管理
GET /api/v1/assets/overview
- 获取资产概览POST /api/v1/assets/
- 创建用户资产GET /api/v1/assets/
- 获取用户资产PUT /api/v1/assets/
- 更新用户资产DELETE /api/v1/assets/
- 删除用户资产
持仓管理
GET /api/v1/assets/positions
- 获取持仓列表POST /api/v1/assets/positions
- 创建持仓PUT /api/v1/assets/positions/{id}
- 更新持仓DELETE /api/v1/assets/positions/{id}
- 删除持仓
模拟资产管理
GET /api/v1/assets/simulated/overview
- 获取模拟资产概览POST /api/v1/assets/simulated/
- 创建模拟资产GET /api/v1/assets/simulated/
- 获取模拟资产PUT /api/v1/assets/simulated/
- 更新模拟资产
资产同步
POST /api/v1/assets/sync-from-longport
- 从LongPort同步资产POST /api/v1/assets/sync-to-simulated
- 同步到模拟资产POST /api/v1/assets/sync
- 通用同步接口
业务规则
资产管理
- 支持多币种资产 (USD, HKD, CNY)
- 资产金额必须 ≥ 0
- 资产类型分为现金和持仓
- 支持真实资产和模拟资产
持仓管理
- 持仓数量必须 ≥ 0
- 成本价和当前价格必须 ≥ 0
- 市值 = 数量 × 当前价格
- 支持多币种持仓
数据同步
- 支持从LongPort API同步真实资产
- 支持真实资产同步到模拟资产
- 同步过程支持WebSocket实时日志
- 同步失败时保持原有数据不变
安全考虑
- 用户只能访问自己的资产数据
- 敏感操作需要管理员权限
- 资产变更需要审计日志
- 支持数据备份和恢复