管線總覽

報價從市場端的原始深度出發,經過兩個調整階段才變成對客戶的最終報價: 第一階段把「分散在多個價位的深度」壓成「針對指定量的成本價」, 第二階段再疊上自家的價差政策。兩個階段都對三個 Order Book Tier 各自獨立計算。

原始 OZ Quote 市場端真實掛單深度(多價位 × 各自的量),一切計算的原料。
Stage 1 OZ Quote Adj 依 Vol Band 逐層吃深度,得出該量的加權平均成本價(VWAP)。
Stage 2 OZ Quote Adj Final 疊上 Spread / Markup 政策,產生對外掛出的 bid / ask。

每個階段的核心意義

原始

OZ Quote · 市場原始深度

從 OZ feed 收到的原始委託簿:每一列 Order Book 代表一個價位,帶有該價位可成交的 bid / ask 量。bid 由高價到低價、ask 由低價到高價排列。

核心意義:代表市場此刻「真的能成交多少、各在什麼價位」。它是原料, 本身不做任何加工,後面兩個階段都在它之上運算。

Stage 1

OZ Quote Adj · 把深度壓成成本價(VWAP)

針對每個 tier 指定的量(Vol Band Bid / Ask),從深度佇列頭開始逐層取用, 算出這筆量的成交量加權平均價(VWAP)

  • 為什麼要算:成交較大的量會一路吃掉好幾個價位,只看第一檔並不真實;VWAP 才是這筆量的實際平均成本。
  • 共用佇列:三個 tier 共用同一條 bid / ask 佇列,指標只往前、不重置,同一批量不會被重複計算。
  • 深度不足時:把剩餘的量全部拿去 VWAP(部分成交);其後已無深度的 tier 顯示「-」且不套 spread。

核心意義:把「分散在多價位的深度」壓縮成「針對指定量的一個代表成本價」。

Stage 2

OZ Quote Adj Final · 疊上價差政策成為對外報價

把成本價(adj)套上自家的價差 / 加價政策(Spread Points), 得出最終要掛給客戶的 bid / ask。依 Spread Type 有三種算法:

  • Dynamic:直接在 Bidadj / Askadj 各自加上對應 Markup。
  • Fix(Ask SP − Bid SP ≠ 0):先取 Mid =(Bidadj + Askadj)÷ 2,再對稱加減 Spread Points;spread 固定由加價點決定。
  • Fix(差值 = 0):Ask 直接等於 Bid,spread 固定為 0。

核心意義:把「成本價」轉成「對外報價」——adj 是成本,Final 再疊上利潤與風險緩衝。

輸入資料

OZ Quote(原始深度)

Order Book Bid Vol Bid Spread Ask Ask Vol
1501002102100
250994103300
3300987105400

Order Book Setting

每個 tier 的加價點與目標消耗量(Vol Band)。

Order Book Tier Bid Spread Points Ask Spread Points Target Spread Point Vol Band – Bid Vol Band – Ask
1-123200100
2-23550300
3-347100400

Stage 1:OZ Quote → OZ Quote Adj

核心邏輯:將原始 bid / ask 深度,分別依照各 tier 指定的 Vol Band Bid / Vol Band Ask 逐層消耗,計算 VWAP(成交量加權平均價),得出每個 tier 的新 bid / ask。

展開深度佇列

bid 依最佳價(highest first)、ask 依最佳價(lowest first)各排成一條消耗佇列:

Bid 佇列

50 @ 100 50 @ 99 300 @ 98

Ask 佇列

100 @ 102 300 @ 103 400 @ 105

bid 與 ask 各自獨立佇列。每側佇列是共享資源,三個 tier 依序從頭取用、 指標不重置,確保同一量不被重複消耗。

VWAP 公式

Bidadj[n] = Σi vn,i · pn,i Vn
Askadj[n] = Σi qn,i · an,i An
nOrder 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 逐 Tier 範例

Bid Tier 1(V₁ = 200)

消耗來源取用量Bid 價格
OZ Book 150100
OZ Book 25099
OZ Book 310098
合計200
Bidadj[1] = 50×100 + 50×99 + 100×98 200 = 19,750200 = 98.75

Bid Tier 2(V₂ = 50)

佇列指標停在 OZ Book 3,剩餘 300 − 100 = 200:

Bidadj[2] = 50×9850 = 98.00

Bid Tier 3(V₃ = 100)

指標仍在 OZ Book 3,剩餘 150:

Bidadj[3] = 100×98100 = 98.00

Ask 逐 Tier 範例

本範例的 Vol Band Ask(100k / 300k / 400k)剛好等於原始 Ask Vol,故每個 tier 只消耗一個 level,調整後 ask 與原始相同。

TierAn計算Askadj
1100100×102 ÷ 100102.00
2300300×103 ÷ 300103.00
3400400×105 ÷ 400105.00

Stage 1 結果

TierBid VolBid (adj)Ask (adj)Ask Vol
120098.75102.00100
25098.00103.00300
310098.00105.00400

Stage 2:OZ Quote Adj → OZ Quote Adj Final

根據 Spread Type 決定計算方式,共有三種情境:

決策邏輯

Spread Type條件計算方式
Dynamic直接以 Bidadj / Askadj 加上對應 Markup
FixAsk SP − Bid SP ≠ 0先算 Mid,再加 Markup
FixAsk SP − Bid SP = 0Bidfinal = Bidadj + Bid SP;Askfinal = Bidfinal

公式:Spread Type = Dynamic

Bidfinal= Bidadj + Bid Spread Points
Askfinal= Askadj + Ask Spread Points
Spreadfinal= Askfinal − Bidfinal

逐 Tier 範例(Dynamic)

使用 Stage 1 相同的 adj 輸入(Bid SP = −1/−2/−3,Ask SP = 2/3/4):

Tier 1

Bid = 98.75 + (−1) = 97.750 | Ask = 102 + 2 = 104.000 | Spread = 6.250

Tier 2

Bid = 98.00 + (−2) = 96.000 | Ask = 103 + 3 = 106.000 | Spread = 10.000

Tier 3

Bid = 98.00 + (−3) = 95.000 | Ask = 105 + 4 = 109.000 | Spread = 14.000
TierBid VolBidSpreadAskAsk Vol
120097.7506.250104.000100
25096.00010.000106.000300
310095.00014.000109.000400

公式:Spread Type = Fix(Ask SP − Bid SP ≠ 0)

Mid= Bidadj + Askadj2
Bidfinal= Mid + Bid Spread Points
Askfinal= Mid + Ask Spread Points
Spreadfinal= Ask Spread Points − Bid Spread Points

Spread 只取決於 Markup 設定,與 Mid 無關。

逐 Tier 範例(Fix,SP ≠ 0)

Tier 1

Mid = (98.75 + 102) ÷ 2 = 100.375 |  Bid = 100.375 − 1 = 99.375 |  Ask = 100.375 + 2 = 102.375 | Spread = 3

Tier 2

Mid = (98.00 + 103) ÷ 2 = 100.500 |  Bid = 100.500 − 2 = 98.500 |  Ask = 100.500 + 3 = 103.500 | Spread = 5

Tier 3

Mid = (98.00 + 105) ÷ 2 = 101.500 |  Bid = 101.500 − 3 = 98.500 |  Ask = 101.500 + 4 = 105.500 | Spread = 7
TierBid VolBidSpreadAskAsk Vol
120099.3753102.375100
25098.5005103.500300
310098.5007105.500400

公式:Spread Type = Fix(Ask SP − Bid SP = 0)

Bidfinal= Bidadj + Bid Spread Points
Askfinal= Bidfinal
Spreadfinal= 0

逐 Tier 範例(Fix,SP = 0)

此情境使用不同的 Markup 輸入(Ask SP = Bid SP):

TierBid (adj)Ask (adj)Bid Spread PointsAsk Spread Points
198.7510211
298.0010322
398.0010533

Tier 1

Bid = 98.75 + 1 = 99.750 | Ask = 99.750 | Spread = 0

Tier 2

Bid = 98.00 + 2 = 100.000 | Ask = 100.000 | Spread = 0

Tier 3

Bid = 98.00 + 3 = 101.000 | Ask = 101.000 | Spread = 0
TierBid VolBidSpreadAskAsk Vol
120099.750099.750100
250100.0000100.000300
3100101.0000101.000400

互動計算器

修改下方 Order Book Setting 與 OZ Quote,按「計算」即可看到 Adj、Final 與每 tier 的消耗明細。

載入範例:
Spread Type:

OZ Quote

BookBid VolBidAskAsk Vol

Order Book Setting

TierVol Band BidBid Spread PtsAsk Spread PtsVol Band Ask

更多範例

範例 A · Ask 真正跨多個 level

當 Vol Band Ask 大於單一 ask level 的量時,VWAP 會橫跨多個價位, 調整後 ask 會與原始 ask 不同。設定 Vol Band Ask = 250、 而第一個 ask level 只有 100 @ 102、第二個 200 @ 104 時:

Askadj[1] = 100×102 + 150×104 250 = 103.20

按上方「範例 A · Ask 跨多層」即可在計算器中看到完整結果。

範例 B · 深度不足自動降級

若某 tier 的 Vol Band 累積超過佇列剩餘總深度,演算法不再丟出錯誤,而是 把佇列剩餘的量全部消耗,並以實際取用量為分母計算 VWAP(部分成交)。 該側深度耗盡後,之後的每個 tier 價格顯示為「-」,且不套用 spread。

Bidadj = Σ 剩餘 origin 量 × 價格 剩餘 origin 總量  → 後續 tier = 「-」

按「範例 B · 深度不足降級」觀察某 tier 起變成「-」且無 spread。

範例 B-2 · 剩餘量跨多層的部分成交 VWAP

部分成交那層的「剩餘量」不一定落在單一 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(跨兩層)全部取用:

Bidadj[2] = 50×99 + 100×98 150 = 14,750150 = 98.333

Tier 3 已無剩餘深度,Bid 顯示「-」且不套用 spread。

按「範例 B-2 · 剩餘跨層 VWAP」載入,於消耗明細可見 Tier 2 的兩段來源。

範例 C · 不同加價設定

Final 的 spread 只由 Bid / Ask Spread Points 決定,與 Mid 無關。 將 Tier 1 設成 Bid −5 / Ask 5,spread 固定為 10,無論深度如何變化。

Spreadfinal = 5 − (−5) = 10

按「範例 C · 不同加價」載入並比較。

範例 D · Spread Type = Dynamic

Dynamic 模式下,Final 報價直接由 Adj 加減 Markup 決定,不計算 Mid。 因此 bid 與 ask 的 spread 等於原始 adj spread 加上 Markup 擴張, 每個 tier 的 spread 通常各不相同。

Bidfinal = Bidadj + Bid SP | Askfinal = Askadj + Ask SP

按「範例 D · Dynamic」載入,並與預設(Fix)比較 Final 結果的差異。

範例 E · Fix Spread = 0

當 Fix 模式下 Ask SP 與 Bid SP 相同(差值為 0),Mid 不再參與計算。 改為直接以 Bidadj 加上 Bid SP,而 Askfinal 強制等於 Bidfinal,Spread 固定為 0。

Bidfinal = Bidadj + Bid SP | Askfinal = Bidfinal | Spread = 0

按「範例 E · Fix Spread=0」載入,觀察三個 tier 的 spread 全部為 0。

關鍵要點