OZ Quote · 市場原始深度
從 OZ feed 收到的原始委託簿:每一列 Order Book 代表一個價位,帶有該價位可成交的 bid / ask 量。bid 由高價到低價、ask 由低價到高價排列。
核心意義:代表市場此刻「真的能成交多少、各在什麼價位」。它是原料, 本身不做任何加工,後面兩個階段都在它之上運算。
報價從市場端的原始深度出發,經過兩個調整階段才變成對客戶的最終報價: 第一階段把「分散在多個價位的深度」壓成「針對指定量的成本價」, 第二階段再疊上自家的價差政策。兩個階段都對三個 Order Book Tier 各自獨立計算。
從 OZ feed 收到的原始委託簿:每一列 Order Book 代表一個價位,帶有該價位可成交的 bid / ask 量。bid 由高價到低價、ask 由低價到高價排列。
核心意義:代表市場此刻「真的能成交多少、各在什麼價位」。它是原料, 本身不做任何加工,後面兩個階段都在它之上運算。
針對每個 tier 指定的量(Vol Band Bid / Ask),從深度佇列頭開始逐層取用, 算出這筆量的成交量加權平均價(VWAP)。
核心意義:把「分散在多價位的深度」壓縮成「針對指定量的一個代表成本價」。
把成本價(adj)套上自家的價差 / 加價政策(Spread Points), 得出最終要掛給客戶的 bid / ask。依 Spread Type 有三種算法:
核心意義:把「成本價」轉成「對外報價」——adj 是成本,Final 再疊上利潤與風險緩衝。
| Order Book | Bid Vol | Bid | Spread | Ask | Ask Vol |
|---|---|---|---|---|---|
| 1 | 50 | 100 | 2 | 102 | 100 |
| 2 | 50 | 99 | 4 | 103 | 300 |
| 3 | 300 | 98 | 7 | 105 | 400 |
每個 tier 的加價點與目標消耗量(Vol Band)。
| Order Book Tier | Bid Spread Points | Ask Spread Points | Target Spread Point | Vol Band – Bid | Vol Band – Ask |
|---|---|---|---|---|---|
| 1 | -1 | 2 | 3 | 200 | 100 |
| 2 | -2 | 3 | 5 | 50 | 300 |
| 3 | -3 | 4 | 7 | 100 | 400 |
核心邏輯:將原始 bid / ask 深度,分別依照各 tier 指定的 Vol Band Bid / Vol Band Ask 逐層消耗,計算 VWAP(成交量加權平均價),得出每個 tier 的新 bid / ask。
bid 依最佳價(highest first)、ask 依最佳價(lowest first)各排成一條消耗佇列:
bid 與 ask 各自獨立佇列。每側佇列是共享資源,三個 tier 依序從頭取用、 指標不重置,確保同一量不被重複消耗。
| n | Order Book tier 編號(1 / 2 / 3) |
|---|---|
| Vn / An | 第 n 個 tier 的目標 bid / ask 量(= Vol Band Bid / Ask) |
| vn,i / qn,i | 該 tier 第 i 段實際取用的 bid / ask volume |
| pn,i / an,i | 對應的 bid / ask price |
| 消耗來源 | 取用量 | Bid 價格 |
|---|---|---|
| OZ Book 1 | 50 | 100 |
| OZ Book 2 | 50 | 99 |
| OZ Book 3 | 100 | 98 |
| 合計 | 200 |
佇列指標停在 OZ Book 3,剩餘 300 − 100 = 200:
指標仍在 OZ Book 3,剩餘 150:
本範例的 Vol Band Ask(100k / 300k / 400k)剛好等於原始 Ask Vol,故每個 tier 只消耗一個 level,調整後 ask 與原始相同。
| Tier | An | 計算 | Askadj |
|---|---|---|---|
| 1 | 100 | 100×102 ÷ 100 | 102.00 |
| 2 | 300 | 300×103 ÷ 300 | 103.00 |
| 3 | 400 | 400×105 ÷ 400 | 105.00 |
| Tier | Bid Vol | Bid (adj) | Ask (adj) | Ask Vol |
|---|---|---|---|---|
| 1 | 200 | 98.75 | 102.00 | 100 |
| 2 | 50 | 98.00 | 103.00 | 300 |
| 3 | 100 | 98.00 | 105.00 | 400 |
根據 Spread Type 決定計算方式,共有三種情境:
| Spread Type | 條件 | 計算方式 |
|---|---|---|
| Dynamic | — | 直接以 Bidadj / Askadj 加上對應 Markup |
| Fix | Ask SP − Bid SP ≠ 0 | 先算 Mid,再加 Markup |
| Fix | Ask SP − Bid SP = 0 | Bidfinal = Bidadj + Bid SP;Askfinal = Bidfinal |
使用 Stage 1 相同的 adj 輸入(Bid SP = −1/−2/−3,Ask SP = 2/3/4):
| Tier | Bid Vol | Bid | Spread | Ask | Ask Vol |
|---|---|---|---|---|---|
| 1 | 200 | 97.750 | 6.250 | 104.000 | 100 |
| 2 | 50 | 96.000 | 10.000 | 106.000 | 300 |
| 3 | 100 | 95.000 | 14.000 | 109.000 | 400 |
Spread 只取決於 Markup 設定,與 Mid 無關。
| Tier | Bid Vol | Bid | Spread | Ask | Ask Vol |
|---|---|---|---|---|---|
| 1 | 200 | 99.375 | 3 | 102.375 | 100 |
| 2 | 50 | 98.500 | 5 | 103.500 | 300 |
| 3 | 100 | 98.500 | 7 | 105.500 | 400 |
此情境使用不同的 Markup 輸入(Ask SP = Bid SP):
| Tier | Bid (adj) | Ask (adj) | Bid Spread Points | Ask Spread Points |
|---|---|---|---|---|
| 1 | 98.75 | 102 | 1 | 1 |
| 2 | 98.00 | 103 | 2 | 2 |
| 3 | 98.00 | 105 | 3 | 3 |
| Tier | Bid Vol | Bid | Spread | Ask | Ask Vol |
|---|---|---|---|---|---|
| 1 | 200 | 99.750 | 0 | 99.750 | 100 |
| 2 | 50 | 100.000 | 0 | 100.000 | 300 |
| 3 | 100 | 101.000 | 0 | 101.000 | 400 |
修改下方 Order Book Setting 與 OZ Quote,按「計算」即可看到 Adj、Final 與每 tier 的消耗明細。
| Book | Bid Vol | Bid | Ask | Ask Vol |
|---|
| Tier | Vol Band Bid | Bid Spread Pts | Ask Spread Pts | Vol Band Ask |
|---|
| Tier | Bid Vol | Bid (adj) | Ask (adj) | Ask Vol |
|---|
| Tier | Bid Vol | Bid | Spread | Ask | Ask Vol |
|---|
當 Vol Band Ask 大於單一 ask level 的量時,VWAP 會橫跨多個價位, 調整後 ask 會與原始 ask 不同。設定 Vol Band Ask = 250、 而第一個 ask level 只有 100 @ 102、第二個 200 @ 104 時:
按上方「範例 A · Ask 跨多層」即可在計算器中看到完整結果。
若某 tier 的 Vol Band 累積超過佇列剩餘總深度,演算法不再丟出錯誤,而是 把佇列剩餘的量全部消耗,並以實際取用量為分母計算 VWAP(部分成交)。 該側深度耗盡後,之後的每個 tier 價格顯示為「-」,且不套用 spread。
按「範例 B · 深度不足降級」觀察某 tier 起變成「-」且無 spread。
部分成交那層的「剩餘量」不一定落在單一 origin level。當佇列指標停在某層中段, 且剩餘需求橫跨多個價位時,部分成交的 VWAP 會把剩下的每一段都加權平均。
此範例 Bid 佇列為 100@100 → 100@99 → 100@98(共 300)。Tier 1 取 150
(100@100 + 50@99),指標停在第二層剩 50;Tier 2 需求 500 遠超剩餘,
於是把剩下的 50@99 + 100@98(跨兩層)全部取用:
Tier 3 已無剩餘深度,Bid 顯示「-」且不套用 spread。
按「範例 B-2 · 剩餘跨層 VWAP」載入,於消耗明細可見 Tier 2 的兩段來源。
Final 的 spread 只由 Bid / Ask Spread Points 決定,與 Mid 無關。 將 Tier 1 設成 Bid −5 / Ask 5,spread 固定為 10,無論深度如何變化。
按「範例 C · 不同加價」載入並比較。
Dynamic 模式下,Final 報價直接由 Adj 加減 Markup 決定,不計算 Mid。 因此 bid 與 ask 的 spread 等於原始 adj spread 加上 Markup 擴張, 每個 tier 的 spread 通常各不相同。
按「範例 D · Dynamic」載入,並與預設(Fix)比較 Final 結果的差異。
當 Fix 模式下 Ask SP 與 Bid SP 相同(差值為 0),Mid 不再參與計算。 改為直接以 Bidadj 加上 Bid SP,而 Askfinal 強制等於 Bidfinal,Spread 固定為 0。
按「範例 E · Fix Spread=0」載入,觀察三個 tier 的 spread 全部為 0。