🇨🇳 简体中文
🇺🇸 English
🇯🇵 日本語
Skip to the content.

交易数据模型

概述

交易数据模型定义了量化交易系统中所有与交易相关的数据结构,包括资产、持仓、订单等核心业务实体。

资产模型 (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接口

资产管理

持仓管理

模拟资产管理

资产同步

业务规则

资产管理

  1. 支持多币种资产 (USD, HKD, CNY)
  2. 资产金额必须 ≥ 0
  3. 资产类型分为现金和持仓
  4. 支持真实资产和模拟资产

持仓管理

  1. 持仓数量必须 ≥ 0
  2. 成本价和当前价格必须 ≥ 0
  3. 市值 = 数量 × 当前价格
  4. 支持多币种持仓

数据同步

  1. 支持从LongPort API同步真实资产
  2. 支持真实资产同步到模拟资产
  3. 同步过程支持WebSocket实时日志
  4. 同步失败时保持原有数据不变

安全考虑

  1. 用户只能访问自己的资产数据
  2. 敏感操作需要管理员权限
  3. 资产变更需要审计日志
  4. 支持数据备份和恢复