日期運算與金融營業日邏輯

Day5:布林過濾演算法解析

探討「假日檔產生工具」底層邏輯與外國基金 T+n 結算應用

今日議程 Agenda

  • 金融營業日的挑戰與痛點
  • 演算法核心:假日檔產生邏輯
  • 模式解析:參數 N (預設) vs 參數 Y (進階)
  • 實戰應用:國外基金申購 T+n 推算
  • 跨國結算的複合假日時程

為何需要精準的營業日計算?

在金融交易中,「日期」代表著資金的流動與成本

實務痛點:

一般日曆日 (Calendar Days) 無法反映市場開市狀況。若算錯結算日,將導致資金閒置、違約交割或利息損失。

核心工具溯源

本節邏輯源自內部自動化體系的智慧結晶:

參考文件:自動化作業工具操作手冊彙編

記載了大量自動化工具的運作原理,其中針對「假日檔產生工具」與「國外基金申購匯款日計算工具」的演算法,是我們今日探討的基石。

布林過濾演算法概念

要計算未來的營業日,系統並非一天天去「數」,而是建立一個精準的休假日資料庫 (Holiday Array) 進行陣列過濾。

構成這個資料庫的三大要素:

  • Default: 常規週末 (週六、週日)
  • 正面表列: 法定國定假日 (如中秋節、元旦)
  • 負面表列: 補班日 (週末但需營業的日子)

術語解析:表列過濾法

正面表列 (Positive List)

平時是營業日,但因為特殊節慶被宣告為「休假」的日子。
作用:增加休假天數

負面表列 (Negative List)

平時是休假日(週末),但因為彈性放假機制被宣告為「營業(補班)」的日子。
作用:減少休假天數 (從休假陣列中剔除)。

邏輯模式:N (Default 預設)

適用於無彈性補班機制的市場,或純粹計算基礎休假。

Mode N = Default(六日) + 正面表列

演算法表現:

系統將全年所有的週末抓出,並加入國定假日名單。取聯集 (Union) 即可得到該年度的完整休假陣列。

邏輯模式:Y (啟用負面表列)

這是我國金融環境最常見的模式,完美處理「彈性放假與補班」。

Mode Y = Default(六日) + 正面表列 - 負面表列

演算法表現:

先結合週末與國定假日(聯集),然後再將政府宣告的「補班日」從這個休假陣列中拔除 (差集 Difference)。

運算流程視覺化

1

產生 52 週
六日陣列

2

聯集 (+)
正面表列節日

3

判斷 Flag
Y / N

4

差集 (-)
負面表列補班

演算法進階應用

產生出精準的「假日陣列」後,我們才能夠正確運行:

國外基金申購的 T+n / T-n 結算日推算

根據《自動化作業工具操作手冊彙編》的規範,工具能自動計算前後五個營業日的日期。這背後仰賴的就是強大的假日陣列比對。

T+n 營業日遞迴運算邏輯

假設今天是 T 日 (Trade Date),要推算 T+3:

Step 1: 將日期 +1 天。
Step 2: 檢查新日期是否存在於「假日陣列」中。
Step 3: 若是假日,跳過不計;若非假日,計數器 (n) 加 1。
Step 4: 重複迴圈,直到計數器達到 3。

國外基金的特殊挑戰:多重行事曆

買賣國外基金,不能只看單一國家的假日!

交集結算日:

一筆申購往往牽涉:投資地 (如 US)、結算地 (如 LU 盧森堡)、發行地 (如 HK 香港) 與在地結算日。必須同時載入多國的假日陣列進行比對。

複合假日過濾演算法

遇到多國結算,系統如何判定某一天是否為「營業日」?

IsBusinessDay = NOT ( isHoliday(Local) OR isHoliday(US) OR isHoliday(LU) )

只要任何一個關鍵國家放假,當天就無法進行跨國清算,必須順延至下一個「所有國家共同的工作日」。

系統維護實務提醒

根據自動化手冊的防呆與維護守則:

  • 年底必須定期維護 holiday 頁籤
  • 需分別輸入下一年度的本地與各國休假日。
  • 預設模式的切換 (Y/N) 需人工覆核負面表列正確性。

本節總結

  • 布林過濾是計算金融營業日的最穩健架構。
  • Mode Y 透過正負面表列,完美解決複雜的補班機制。
  • 自動化工具的 T+n 演算法,大幅降低了人為推算結算日的違約風險。
  • 跨國基金需考量多重市場聯集休假

Q & A

開放提問交流

Thanks for your attention.