跳轉到

標準資料模型

標準資料模型是整個平台最重要的一層。

它定義公司內部對市場世界的正式語言,讓所有上層服務都能共享一致的資料語意。

設計目標

  • 穩定,不追求一開始就完美
  • 先定義核心欄位,再把 source-specific 欄位放進 metadata
  • 每個 entity 都要有 schema version
  • event time 與 processing time 必須分開

優先定義的 entities

商品主檔

最重要的地基。

建議核心欄位:

  • instrument_id
  • asset_class
  • market
  • venue
  • symbol
  • symbol_aliases
  • currency
  • tick_size
  • lot_size
  • contract_multiplier
  • expiry
  • strike
  • option_type
  • underlying_id
  • status

成交事件

建議核心欄位:

  • event_id
  • instrument_id
  • event_time
  • ingest_time
  • price
  • size
  • venue
  • source
  • source_event_id
  • is_correction
  • metadata

報價事件

建議核心欄位:

  • instrument_id
  • event_time
  • bid_price
  • bid_size
  • ask_price
  • ask_size
  • venue
  • source
  • metadata

K 線事件

建議核心欄位:

  • instrument_id
  • timeframe
  • start_time
  • end_time
  • open
  • high
  • low
  • close
  • volume
  • trade_count
  • vwap
  • session
  • bar_status
  • source
  • metadata

訂單事件

建議核心欄位:

  • order_id
  • broker_order_id
  • strategy_id
  • instrument_id
  • event_time
  • event_type
  • side
  • qty
  • price
  • tif
  • broker
  • account
  • reject_reason
  • metadata

成交回報

建議核心欄位:

  • fill_id
  • order_id
  • broker_fill_id
  • instrument_id
  • fill_time
  • fill_price
  • fill_qty
  • fees
  • venue
  • source
  • metadata

設計原則

1. 內部 ID 優先

不要把外部 symbol 當主鍵;instrument_id 應是內部唯一識別。

2. 核心欄位少而穩

source 特殊欄位盡量放進 metadata,不要讓核心 schema 被 vendor 特例污染。

3. schema version 從第一天就存在

例如:

  • schema_name
  • schema_version

4. 定義語意,不只定義欄位名稱

例如 bar.close 必須明確說清楚:

  • 是 event-time 聚合還是 ingest-time 聚合
  • 是否允許 late event 重算
  • 是否為 adjusted bar
  • 是否只含 regular session

最值得優先落地的部分

第一批先完成:

  • instrument master
  • canonical trade schema
  • canonical quote schema
  • canonical bar schema