# 寫死的交易時段，在颱風假面前沒有任何意義

- URL: https://justfly.idv.tw/%e5%af%ab%e6%ad%bb%e7%9a%84%e4%ba%a4%e6%98%93%e6%99%82%e6%ae%b5%ef%bc%8c%e5%9c%a8%e9%a2%b1%e9%a2%a8%e5%81%87%e9%9d%a2%e5%89%8d%e6%b2%92%e6%9c%89%e4%bb%bb%e4%bd%95%e6%84%8f%e7%be%a9/
- 日期: 2026-06-13
- 分類: WEB&amp;RIA
- 標籤: api, server, 神島

![寫死的交易時段，在颱風假面前沒有任何意義]

颱風假是前一晚宣布的。縣市政府直播、媒體輪播、LINE 通知一起炸。隔天早上六點多，有人還是出門了——走到捷運站閘門才看到手寫告示：「今日因颱風停止營運」。原地轉身。

##### 技術環境

Python 自動交易系統，排程器定時觸發訊號產出函式。原始設計：單層靜態時窗判斷，`datetime.time` 比較 09:00–13:30，通過即產出訊號。問題模式：時窗判斷純本地運算，對交易所當天是否開市毫無感知。台股以 TWSE MIS 為授時來源，美股以第三方 API（如 FMP）確認半日市。兩者共通：颱風假、補班、臨時休市屬於 runtime 動態資訊，靜態規則追不上。

某個自動交易系統，那天也沒有轉身。

交易時段的判斷邏輯很直觀：上午九點到下午一點半之間，就是可以交易的時間。台股下午一點半收盤，這個數字沒錯，規則跑了好一段時間也沒出問題。颱風假那天，交易所臨時休市。系統對這件事毫無所知，時間框架通過了，信號照常產出。

就像公司排班系統只寫了「週一到週五九點到六點是工作時間」，颱風假當天照樣發提醒：「再過三十分鐘到班了。」

##### 問題藏在假設裡

時段寫死本身不是錯誤。錯的是這條規則暗含的前提：每個落在時段內的交易日，都是正常開盤的。

現實有幾種破口。颱風假是前一晚才宣布的，不在任何固定的假日表裡。端午節補班讓原本的平日變成休市日。美股的感恩節半日市，讓交易所在下午就提前關門，時段判斷這時會拿到一個「還在時段內但市場已經收了」的錯誤狀態。

三種情況都一樣：需要查詢才能知道，沒辦法預先寫死。

##### 判斷失效時序：訊號衝出去但市場是關的

```
修法前：

排程器         交易閘門 (TradingGate)       TWSE MIS
   |                  |                        |
   |── fire() ───────>|                        |
   |                  |── time_check(09:00–13:30)
   |                  |   return True  ✓       |
   |                  |                        |
   |                  | （沒有查詢步驟）        |
   |                  |                        |
   |                  |── generate_signal() ──>|  |
   |                  |
