保證金檢查¶
保證金檢查回答一個核心問題:
這筆新單送出後,該帳號需要的保證金是否仍在可動用額度之內?
期貨是保證金交易:成交後,交易所會從客戶帳戶凍結一筆保證金以覆蓋潛在虧損。Tapio 的任務是在委託送出之前先行試算——若試算結果顯示「成交後可用資金會不足」,就直接在本地攔下,不讓該委託抵達交易所。
這個檢查是事前、即時、每筆都算的,而非定時批次或事後補算。
計算方式¶
所需保證金(單一商品)¶
對同一個商品,所需保證金由兩部分構成:
其中:
| 符號 | 意義 |
|---|---|
| 原始保證金 | 交易所公告的該商品單口原始保證金(低流動性月份合約的原始保證金自動加成 20%,判斷方式見下方說明)。加成在開盤前一次性計算完畢。 |
| \(B\) | 買方有效委託單口數 |
| \(S\) | 賣方有效委託單口數 |
| \(N\) | 淨部位 = 多頭部位 − 空頭部位(正值代表淨多、負值代表淨空) |
| 手續費 | 按該帳號、該商品的手續費率預收一筆(每口)。乘以 \((B + S)\) 是因為所有在途委託均可能成交並產生手續費,故全數預收作為保守估算。 |
| 預估稅 | 以漲停價估算的交易稅上限(每口,保守估計),開盤前一次性計算。同樣乘以 \((B + S)\) 對所有在途委託預收。 |
只使用原始保證金,不使用維持保證金
期交所對每個商品公告兩種保證金:
| 種類 | 意義 | 數值 |
|---|---|---|
| 原始保證金 | 開新倉時帳戶須持有的最低金額 | 較高 |
| 維持保證金 | 持倉期間帳戶須維持的最低金額 | 較低(低於原始保證金) |
Tapio 的所有保證金計算只採用原始保證金。由於維持保證金低於原始保證金,以原始保證金作為基準是更保守的設計:客戶無論在開倉當下或持倉期間,面對的都是同一套更嚴格的門檻,不存在「開倉後自動鬆綁至維持水準」的空間。
兩個 max 分支在模擬什麼
- \(|B + N|\):假設所有買方委託全部成交後,帳戶的最大多頭曝險
- \(|S - N|\):假設所有賣方委託全部成交後,帳戶的最大空頭曝險
取兩者較大值,代表「最壞情況下需要多少保證金才夠」。這是保守設計:不管市場往哪邊走,保證金都不會突然跳水。
低流動性月份的判斷方式
「低流動性月份」的判定依商品而異,以合約到期月份在所有上市合約中的排名為依據(最近月為第 1 名):
- 高流動性商品(目前為 TXF、MXF):排名第 4 以後的月份合約視為低流動性
- 其他商品(如 TJF):排名第 3 以後的月份合約視為低流動性
高流動性商品清單由設定檔決定,預設包含 TXF 與 MXF。
所需保證金(跨商品)¶
一個帳戶可能同時持有多個商品。系統會把每個商品各自算出的所需保證金,以即時匯率折算為 NTD 後加總,得到該帳戶的總所需保證金。匯率由交易所行情資料即時更新;若商品幣別無法識別,以原值計算:
可動用額度¶
帳戶真正能用於保證金的額度,是以下兩者較小值:
- 可用資金:當日餘額 + min(未沖銷期貨浮動損益, 0)——未實現利潤不計入、未實現損失立即扣除,詳見「餘額與可用資金」
-
帳號保證金額度上限:由風控主管設定的天花板,依優先序如下:
- 已取得專業投資人資格 → 無上限,仍受可用資金本身制約
- 強制套用帳戶額度旗標開啟 → 只取「帳戶額度」,忽略交易額度
- 預設 → 取「交易額度」與「帳戶額度」的較小值
若帳號已取得專業投資人資格,強制套用帳戶額度旗標不產生效果——兩者同時啟用時,以無上限為準。
通過條件¶
不滿足即回覆「保證金不足」錯誤。
檢查流程¶
flowchart TD
A[新單抵達風控層] --> B[讀取最新的<br/>部位 / 餘額 / 未沖銷期貨浮動損益]
B --> C[把此筆新單<br/>加入有效委託單口數]
C --> D[重算此商品的<br/>所需保證金]
D --> E[加總所有商品<br/>得到總所需保證金]
E --> F[計算可動用額度<br/>= min 可用資金, 額度上限]
F --> G{可動用額度<br/>≥ 總所需保證金?}
G -->|是| H[通過<br/>進入部位限制檢查]
G -->|否| I[還原有效委託單口數<br/>回覆保證金不足]
還原有效委託單口數
檢查過程中,系統先假設這筆新單會被加入,試算完新的所需保證金再比對。若比對失敗,系統會把「假設」的有效委託單口數還原,確保被拒的委託不會在帳本上留下痕跡。
範例:台指期(TXF)¶
以下以台指期貨 TXF 為例示範計算過程。
範例數字僅供說明
以下保證金數字接近現行期交所公告值,手續費、稅額仍為示意數字。實際金額以期交所當日公告與所屬期貨商收費標準為準。
共同參數
- 原始保證金:526,000 NTD / 口
- 手續費:60 NTD / 口
- 預估稅(以漲停價估):25 NTD / 口
情境 A|空倉帳戶下 10 口多單¶
- 帳戶可用資金 600 萬 NTD
- 無既有部位、無既有委託
- 欲下:買 TXF 10 口 @ 20000
| 項目 | 數值 |
|---|---|
| 買方有效委託單口數 \(B\) | 10 |
| 賣方有效委託單口數 \(S\) | 0 |
| 淨部位 \(N\) | 0 |
| \(\max(\|10 + 0\|,\ \|0 - 0\|)\) | 10 |
| 部位保證金 | 526,000 × 10 = 5,260,000 |
| 手續費 + 稅預收 | (60 + 25) × (10 + 0) = 850 |
| 所需保證金 | 5,260,850 |
可動用額度 6,000,000 ≥ 5,260,850 → 通過。
情境 B|已持有多方 5 口,再加買 5 口¶
- 帳戶可用資金 600 萬 NTD
- 既有部位:多方 5 口
- 欲下:買 TXF 5 口(開倉加碼)
| 項目 | 數值 |
|---|---|
| 買方有效委託單口數 \(B\) | 5 |
| 賣方有效委託單口數 \(S\) | 0 |
| 淨部位 \(N\) | +5(多) |
| \(\max(\|5 + 5\|,\ \|0 - 5\|)\) | 10 |
| 部位保證金 | 526,000 × 10 = 5,260,000 |
| 手續費 + 稅預收 | 85 × 5 = 425 |
| 所需保證金 | 5,260,425 |
可動用額度 6,000,000 ≥ 5,260,425 → 通過。
情境 C|保證金不足¶
- 帳戶可用資金 500 萬 NTD
- 既有部位:多方 5 口(佔用保證金約 2,630,000)
- 欲下:買 TXF 5 口
套用情境 B 公式,所需保證金 5,260,425,超過可動用額度 5,000,000 → 拒絕:保證金不足。
保證金不足時的常見應對
客戶收到「保證金不足」拒絕後,通常可選擇:降低委託口數、先平倉釋放保證金、或向券商補入金。平倉委託在符合條件時不受此檢查約束(詳細判斷邏輯見下方「平倉豁免條件」說明)。
有效委託單如何佔用額度¶
保證金檢查的一個關鍵設計是:有效委託單也算佔用額度。
這是為了避免「連環下單」導致超額損失(Over Loss)——客戶若可以無視有效委託單繼續下新單,第一筆成交時就可能發現總曝險已遠超保證金。
佔用時機¶
stateDiagram-v2
direction LR
[*] --> 送出
送出 --> 委託中 : 通過風控
委託中 --> 成交 : 收到成交回報
委託中 --> 已取消 : 收到取消回報
送出 --> 拒絕 : 保證金不足等原因
note right of 委託中
佔用保證金
(影響下一筆新單檢查)
end note
note right of 成交
轉為部位佔用
(保證金需求一般不變,
但有例外,見下方說明)
end note
note right of 已取消
釋放佔用
(下一筆可用額度回升)
end note
成交後保證金需求何時會改變
成交後,在途委託數量減少而淨部位增加(或方向反轉)。以多單成交為例:買方在途 \(B\) 減 1、淨部位 \(N\) 加 1,代入公式後 \(|B + N|\) 的值不變,因此所需保證金通常維持不動。
但以下情況所需保證金會改變:
- 平倉成交:成交後 \(|N|\) 縮小,所需保證金下降,額度釋出
- 成交導致淨部位方向反轉(例如空頭部位被多單成交超過而反轉為多頭):\(\max\) 的優勝分支切換,所需保證金會調整
- 另一側委託中有單:同一商品若同時有買賣兩側委託,成交改變 \(N\) 後,另一側的 \(\max\) 分支可能改變
平倉豁免條件¶
平倉委託可豁免保證金檢查,但需同時滿足兩個條件:
- 系統判定的開平方向為平倉(Close)
- 同方向在途委託口數 ≤ 淨部位絕對值
平倉豁免的判斷時機
平倉豁免的判斷發生在新訂單已計入在途委託之後,因此此時的在途委託數量已包含本筆新單本身。
邊界情況:在途委託過多導致平倉單被視為開倉
若帳號同方向已有多筆委託在途,可能使條件 2 不成立。例如:
- 淨多頭部位 3 口
- 已有 3 口賣方委託在途(等待成交)
- 此時再送 1 口賣單平倉 → 同方向在途委託 4 口 > 淨部位絕對值 3 口
在此情況下,條件 2 不成立,新的賣單不被視為平倉,仍須通過完整保證金檢查。這是設計本意:系統無法確定哪些在途委託會成交,保守地把超出部位的單視為潛在開倉。
完整的生命週期與狀態轉換¶
每筆委託從送出、被鎖定額度、到成交或取消的完整過程,以及系統如何追蹤這些狀態,詳見「委託追蹤」。
改單、減量、刪單的保證金行為¶
這三類動作不會增加帳戶曝險,因此不走完整的保證金檢查。
| 動作 | 保證金行為 |
|---|---|
| 改價(保持口數) | 不變 |
| 減量 | 所需保證金下降(額度釋出) |
| 刪單 | 所需保證金下降(額度釋出) |
額度釋出時機¶
減量與刪單雖然不走完整保證金檢查,但額度不會在請求送出時立即釋出。Tapio 在請求送往交易所、並收到交易所的委託回報確認後,才正式更新有效委託單口數並釋出對應保證金額度。
這樣設計的理由是嚴謹性:在交易所確認生效之前,無法保證減量或刪單一定成功(例如委託已在瞬間成交)。依據委託回報更新帳本,才能確保系統狀態與交易所實際委託狀態一致,不因提前釋放額度而產生帳面與實際曝險的落差。
支援限制¶
目前保證金計算器的設計僅支援原始保證金為固定金額的商品:
| 商品類型 | 支援狀態 |
|---|---|
| 期貨(TXF / MXF / TMF) | 支援 |
| 選擇權(Call / Put) | 不支援 |
| 價差單(Calendar Spread / Two-leg) | 不支援 |
| 股票期貨(百分比保證金) | 不支援 |
| 非 NTD 計價商品 | 不支援 |
對上述不支援的商品類型,系統會在首次接到相關委託時直接拒絕(詳見「常見錯誤對照」)。