跳轉到

保證金檢查

保證金檢查回答一個核心問題:

這筆新單送出後,該帳號需要的保證金是否仍在可動用額度之內?

期貨是保證金交易:成交後,交易所會從客戶帳戶凍結一筆保證金以覆蓋潛在虧損。Tapio 的任務是在委託送出之前先行試算——若試算結果顯示「成交後可用資金會不足」,就直接在本地攔下,不讓該委託抵達交易所。

這個檢查是事前即時每筆都算的,而非定時批次或事後補算。


計算方式

所需保證金(單一商品)

對同一個商品,所需保證金由兩部分構成:

\[ \text{所需保證金} = \text{原始保證金} \times \max(|B + N|,\ |S - N|) + (\text{手續費} + \text{預估稅}) \times (B + S) \]

其中:

符號 意義
原始保證金 交易所公告的該商品單口原始保證金(低流動性月份合約的原始保證金自動加成 20%,判斷方式見下方說明)。加成在開盤前一次性計算完畢。
\(B\) 買方有效委託單口數
\(S\) 賣方有效委託單口數
\(N\) 淨部位 = 多頭部位 − 空頭部位(正值代表淨多、負值代表淨空)
手續費 按該帳號、該商品的手續費率預收一筆(每口)。乘以 \((B + S)\) 是因為所有在途委託均可能成交並產生手續費,故全數預收作為保守估算。
預估稅 以漲停價估算的交易稅上限(每口,保守估計),開盤前一次性計算。同樣乘以 \((B + S)\) 對所有在途委託預收。

只使用原始保證金,不使用維持保證金

期交所對每個商品公告兩種保證金:

種類 意義 數值
原始保證金 開新倉時帳戶須持有的最低金額 較高
維持保證金 持倉期間帳戶須維持的最低金額 較低(低於原始保證金)

Tapio 的所有保證金計算只採用原始保證金。由於維持保證金低於原始保證金,以原始保證金作為基準是更保守的設計:客戶無論在開倉當下或持倉期間,面對的都是同一套更嚴格的門檻,不存在「開倉後自動鬆綁至維持水準」的空間。

兩個 max 分支在模擬什麼

  • \(|B + N|\)假設所有買方委託全部成交後,帳戶的最大多頭曝險
  • \(|S - N|\)假設所有賣方委託全部成交後,帳戶的最大空頭曝險

取兩者較大值,代表「最壞情況下需要多少保證金才夠」。這是保守設計:不管市場往哪邊走,保證金都不會突然跳水。

低流動性月份的判斷方式

「低流動性月份」的判定依商品而異,以合約到期月份在所有上市合約中的排名為依據(最近月為第 1 名):

  • 高流動性商品(目前為 TXF、MXF):排名第 4 以後的月份合約視為低流動性
  • 其他商品(如 TJF):排名第 3 以後的月份合約視為低流動性

高流動性商品清單由設定檔決定,預設包含 TXF 與 MXF。

所需保證金(跨商品)

一個帳戶可能同時持有多個商品。系統會把每個商品各自算出的所需保證金,以即時匯率折算為 NTD 後加總,得到該帳戶的總所需保證金。匯率由交易所行情資料即時更新;若商品幣別無法識別,以原值計算:

\[ \text{總所需保證金} = \sum_{\text{每個商品}} \text{所需保證金}_{\text{商品}} \]

可動用額度

帳戶真正能用於保證金的額度,是以下兩者較小值:

\[ \text{可動用額度} = \min(\text{可用資金},\ \text{帳號保證金額度上限}) \]
  • 可用資金:當日餘額 + min(未沖銷期貨浮動損益, 0)——未實現利潤不計入、未實現損失立即扣除,詳見「餘額與可用資金
  • 帳號保證金額度上限:由風控主管設定的天花板,依優先序如下:

    1. 已取得專業投資人資格 → 無上限,仍受可用資金本身制約
    2. 強制套用帳戶額度旗標開啟 → 只取「帳戶額度」,忽略交易額度
    3. 預設 → 取「交易額度」與「帳戶額度」的較小值

    若帳號已取得專業投資人資格,強制套用帳戶額度旗標不產生效果——兩者同時啟用時,以無上限為準。

通過條件

\[ \text{可動用額度} \ge \text{總所需保證金} \]

不滿足即回覆「保證金不足」錯誤。


檢查流程

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\) 分支可能改變

平倉豁免條件

平倉委託可豁免保證金檢查,但需同時滿足兩個條件:

  1. 系統判定的開平方向為平倉(Close)
  2. 同方向在途委託口數 ≤ 淨部位絕對值

平倉豁免的判斷時機

平倉豁免的判斷發生在新訂單已計入在途委託之後,因此此時的在途委託數量已包含本筆新單本身。

邊界情況:在途委託過多導致平倉單被視為開倉

若帳號同方向已有多筆委託在途,可能使條件 2 不成立。例如:

  • 淨多頭部位 3 口
  • 已有 3 口賣方委託在途(等待成交)
  • 此時再送 1 口賣單平倉 → 同方向在途委託 4 口 > 淨部位絕對值 3 口

在此情況下,條件 2 不成立,新的賣單不被視為平倉,仍須通過完整保證金檢查。這是設計本意:系統無法確定哪些在途委託會成交,保守地把超出部位的單視為潛在開倉。

完整的生命週期與狀態轉換

每筆委託從送出、被鎖定額度、到成交或取消的完整過程,以及系統如何追蹤這些狀態,詳見「委託追蹤」。


改單、減量、刪單的保證金行為

這三類動作不會增加帳戶曝險,因此不走完整的保證金檢查。

動作 保證金行為
改價(保持口數) 不變
減量 所需保證金下降(額度釋出)
刪單 所需保證金下降(額度釋出)

額度釋出時機

減量與刪單雖然不走完整保證金檢查,但額度不會在請求送出時立即釋出。Tapio 在請求送往交易所、並收到交易所的委託回報確認後,才正式更新有效委託單口數並釋出對應保證金額度。

這樣設計的理由是嚴謹性:在交易所確認生效之前,無法保證減量或刪單一定成功(例如委託已在瞬間成交)。依據委託回報更新帳本,才能確保系統狀態與交易所實際委託狀態一致,不因提前釋放額度而產生帳面與實際曝險的落差。


支援限制

目前保證金計算器的設計僅支援原始保證金為固定金額的商品:

商品類型 支援狀態
期貨(TXF / MXF / TMF) 支援
選擇權(Call / Put) 不支援
價差單(Calendar Spread / Two-leg) 不支援
股票期貨(百分比保證金) 不支援
非 NTD 計價商品 不支援

對上述不支援的商品類型,系統會在首次接到相關委託時直接拒絕(詳見「常見錯誤對照」)。