這一篇記錄台股版的風控加了哪些檢查、各種被擋下的實際畫面,以及為什麼我刻意讓新手第一次執行時「一定會被擋下」。
跟著 Claude 把美股當沖 skill 改成台股版・第 5 篇
風控閘門:讓程式替你說「不」
停損停利和張數都算好了,但在送出之前還有最後一道關卡:風控。這一篇記錄台股版的風控加了哪些檢查、各種被擋下的實際畫面,以及為什麼我刻意讓新手第一次執行時「一定會被擋下」。
1. 為什麼需要一道閘門
當沖最常見的失控,不是不知道規則,而是盤中「再做一筆就好」「這次停損放寬一點」「已經虧了,加碼攤平」。這些決定都發生在情緒最差的時候。
原版 day-trader-skill 的做法,是在下單前放一道風控閘門:每一筆委託都要先通過你事先設定的規則。結果只有兩種:
PASS
通過
符合你的所有規則,可以進入下一步。注意:通過只代表「符合你的規則」,不是建議你買。下單前仍要你親自確認。
BLOCK
擋下
違反任何一條規則就擋下,而且不會再問你「要不要硬做」。想做,只能回頭修改計畫,重新檢查。
這一篇的位置:
- 停損停利第 4 篇
- 計算張數第 4 篇
- 風控本篇
- 你確認逐筆說 yes
- 下單之後的階段
小辭典
- 擋下 vs 注意
- 「擋下」是違反規則,這筆不能做;「注意」是提醒,不影響通過,但你應該看一下。
- 進場 vs 出場
- 進場是買進建立部位;出場是賣出手上已有的股票。兩者的檢查標準不同。
- 處置股
- 股價波動異常、被交易所限制交易方式的股票,處置期間改成每隔幾分鐘撮合一次。
2. 原版有什麼、台股版加了什麼
原版的風控已經有 16 項檢查,例如每筆最大虧損、每日虧損上限、每天交易筆數、進場時間窗。我請 Claude 逐項對照台股規則:
逐項看原版風控的每一個檢查:哪些可以沿用、哪些要依台股規則修改、還缺哪些台股才有的檢查?
列成表格,說明理由。
對照的結果如下(表中的數字是範例設定):
| 檢查 | 擋下的情況 | 和原版比 |
|---|---|---|
| 當沖資格 | 還沒確認自己有現股當沖資格 | 新增(取代美股的 PDT 規則) |
| 處置股 | 股票在處置期間(分盤撮合,開盤突破失效) | 新增 |
| 漲跌停 | 進場價不在今日漲跌停之間;停利超過漲停價 | 新增 |
| 格式 | 代號不是台股格式、超過 1 張卻不是整張、零股沒開啟、限價不在合法檔位 | 修改(原版是美股代號與整數股) |
| 交易日與時間 | 非交易日、09:00 前或 13:30 後、早於 09:15、晚於 13:00、已過 13:20 平倉時間 | 修改(台北時間、台股行事曆) |
| 每筆虧損 | 停損出場虧損(含手續費與證交稅)超過每筆上限 1,500 元 | 修改(原版沒算成本) |
| 報酬風險比 | 扣成本後低於 1.0 | 修改(原版沒算成本) |
| 每日風險 | 今天已進場的最大虧損加總+這筆,超過每日上限 4,500 元 | 沿用 |
| 每日筆數 | 今天已進場 3 筆 | 沿用 |
| 停損必填 | 沒有停損;停損不低於進場價 | 沿用 |
| 金額、部位、現金 | 單筆超過 20 萬、單一股票超過資金 75%、會用到保留現金 | 沿用(改成新台幣) |
| 重複下單 | 同一檔今天已經買過,或同一批提案重複 | 沿用 |
| 禁止清單 | 代號在你的「永遠不做」清單 | 沿用 |
| 放空 | 賣出超過持股(先賣後買) | 修改:第一階段一律擋下 |
每一個數字(每筆上限、每日上限、時間窗)都在設定檔裡,可以依自己的情況調整。
3. 第一次執行,一定會被擋
接續第 4 篇的範例:2409 買 3 張,限價 29.75、停損 29.35、停利 30.55。用預設設定檢查,結果是:
BLOCK #1 買進 2409 3 張,進場
進場 29.75(限價)、停損 29.35、停利 30.55:每股風險 0.4
停損出場虧 1,483 元(含成本 283 元,上限 1,500 元),扣成本後報酬風險比 1.42(下限 1.0)
今天在這筆之前:0 / 3 筆進場,已用風險 0 元 / 4,500 元
擋下:設定 daytrade_eligible 不是 true:尚未確認你有現股當沖資格(需簽當沖契約並符合券商條件)
注意:停損只存在計畫裡,沒有掛在券商:記得設定條件單或開提醒
虧損在上限內、報酬風險比也夠,卻被擋下了。原因是設定裡「我已確認有當沖資格」這個開關預設是關閉的。
為什麼故意這樣設計?
現股當沖需要開戶滿 3 個月、最近一年成交 10 筆以上(已開信用帳戶者不受限),並向券商申請、簽署同意書(詳見第 3 篇)。沒有資格卻下了當沖單,當天賣不掉就得全額交割。與其讓新手在不知情的情況下踩雷,不如第一次就擋下來,逼你先去確認。
向券商確認有資格後,把設定裡的開關打開(可以請 Claude 幫你改:「把設定檔的 daytrade_eligible 改成 true」),再檢查一次:
PASS #1 買進 2409 3 張,進場
進場 29.75(限價)、停損 29.35、停利 30.55:每股風險 0.4
停損出場虧 1,483 元(含成本 283 元,上限 1,500 元),扣成本後報酬風險比 1.42(下限 1.0)
今天在這筆之前:0 / 3 筆進場,已用風險 0 元 / 4,500 元
注意:停損只存在計畫裡,沒有掛在券商:記得設定條件單或開提醒
1 筆通過、0 筆擋下(台北時間 2026-11-13 09:20)。通過後的可用現金 210,674 元。
通過只代表符合你的規則,不是建議。下單前仍要你逐筆確認。
注意那一行「注意」:台股交易所沒有停損停利一起掛的單,這筆的停損只存在計畫裡。通過之後,你仍然要自己用券商的條件單設好停損,或開提醒手動出場。
4. 各種被擋下的實際畫面
以下都是用 2026 年 11 月 13 日的真實資料跑出來的結果,每一個都是開發時寫成自動測試的情境。
處置股
2455 在 11 月 11 日到 17 日是處置期間:
BLOCK #1 買進 2455 1 張,進場
擋下:2455 處置中(2026-11-11 ~ 2026-11-17,第一次處置):分盤撮合,開盤區間突破的規則不適用
這筆的虧損、報酬風險比其實都合格,但處置期間每 5 分鐘以上才撮合一次,「開盤 15 分鐘突破高點」的邏輯完全不成立。
停利超過漲停
2409 當天的漲停價是 32.1,計畫在 31.5 進場、停利 32.5:
BLOCK #1 買進 2409 3 張,進場
擋下:停利 32.5 超過漲停價 32.1,不可能成交
擋下:停損出場虧 1,798 元 超過每筆上限 1,500 元
一筆單可能同時違反好幾條,工具會全部列出來,讓你一次修正,而不是改一條、再被另一條擋。
張數與價格格式
BLOCK #1 買進 2409 1500 股
擋下:1500 股不是整張:整股與零股要分開下單
BLOCK #2 買進 2603 500 股(零股)
擋下:500 股是零股,但設定沒有開啟零股(allow_odd_lot)
BLOCK #3 買進 2884 1 張
擋下:限價 47.33 不在升降單位上
時間與交易日
擋下:現在 09:10 早於最早進場時間 09:15
擋下:2026-10-09 不是交易日
09:15 之前開盤區間還沒形成;10 月 9 日是國慶連假。時間一律用台北時間計算,不受電腦時區設定影響。
今天已經虧不起了
假設今天已經進場兩筆,最大虧損各 1,600 元:
BLOCK #1 買進 2409 3 張,進場
今天在這筆之前:2 / 3 筆進場,已用風險 3,200 元 / 4,500 元
擋下:今天累計風險 3,200 元 + 這筆 1,483 元 會超過每日上限 4,500 元
這裡算的是「如果每筆都停損出場,今天最多會虧多少」,不管前兩筆最後是賺是賠。這是最保守、也最能防止失控的算法。
一次送好幾筆,合起來超標
把每日上限設成 2,500 元,一次送出三筆提案。工具會依序檢查,前一筆通過就當作已成交:
PASS #1 買進 2409 3 張,進場
停損出場虧 1,483 元(含成本 283 元,上限 1,500 元)
BLOCK #2 買進 2884 1 張,進場
停損出場虧 1,348 元(含成本 148 元,上限 1,500 元)
擋下:今天累計風險 1,483 元 + 這筆 1,348 元 會超過每日上限 2,500 元
BLOCK #3 買進 2409 1 張,進場
擋下:2409 今天已經買過,或這批提案裡重複
第二筆單獨看完全合格,但和第一筆加起來就超過每日上限。第三筆則是重複下單。「每一筆都沒問題、合起來出問題」,正是人最容易忽略的情況。
先賣後買
BLOCK #1 賣出 2409 3 張,放空
擋下:賣出 3000 股超過持有的 0 股:先賣後買(放空性質)第一階段不支援
5. 出場永遠不會被擋
風控有一條很重要的原則:買進可以擋,賣出持股不能擋。想像一下:13:22 已經過了平倉時間,手上還有 3 張,這時如果風控說「已過平倉時間,擋下」,你反而出不了場,當沖變成留倉、甚至要交割。
所以賣出手上已有的股票,只檢查格式,其他規則一律只提醒。即使設定裡沒確認當沖資格、時間已過 13:20:
PASS #1 賣出 2409 3 張,出場
出場:賣出持有的 3000 股(持有 3000 股)。出場不受每日上限限制
設計規則時,先想「怎麼出得去」
這是原版就有的設計,我覺得是整套風控最值得學的地方。任何限制都只該用來阻止「進去」,不能阻止「出來」。
6. 拿不到資料時怎麼辦
處置股資料需要 FinMind 的 Backer 方案(第 3 篇),用免費方案就查不到。這時有兩種做法:
| 做法 | 結果 | 適合 |
|---|---|---|
| 預設:警告 | 照樣檢查其他項目,並顯示「注意:無法確認是否為處置股」 | 免費方案、願意自己留意的人 |
| 嚴格:擋下 | 只要有任何資料拿不到,就擋下 | 想讓程式全權把關的人 |
以漲跌停資料為例(模擬查不到 11 月 16 日的資料),預設模式:
PASS #1 買進 2409 3 張,進場
注意:無法確認漲跌停:查不到 2409 2026-11-16 的漲跌停價
切換成嚴格模式(設定 require_market_data 為 true)後,同一筆變成:
BLOCK #1 買進 2409 3 張,進場
擋下:無法確認漲跌停:查不到 2409 2026-11-16 的漲跌停價
我選擇預設「警告」,原因是不想讓免費方案的讀者完全不能用;但工具一定會誠實說出它沒檢查到什麼,而不是假裝都檢查過了。另外要記得:交易日曆無法事先知道颱風假。
7. 改一個數字,就要重新檢查
風控檢查完會留下紀錄,每一筆委託都會算出一個指紋(由股票、張數、價格等內容算出的一串代碼)。原版的下單 skill 只接受「今天檢查過、指紋完全相同」的委託,台股版之後開發下單階段時也會照這個設計。
- 3 張改成 2 張?指紋不同,要重新檢查。
- 限價 29.75 改成 29.80?指紋不同,要重新檢查。
- 昨天檢查過的委託?日期不同,不算數。
這是為了防止「檢查通過之後,偷偷把張數加大」這種事。不管是人還是 AI 改的,都一樣要重新過關。
8. 這一步學到的事
01
規則要在冷靜時寫好
盤中情緒最差的時候,交給事先寫好的規則判斷。
02
擋下就是擋下
不提供「硬做」的選項。想做,就回頭修改計畫。
03
只擋進場,不擋出場
任何限制都不該讓你出不了場。
04
誠實說出沒檢查到什麼
資料拿不到時,警告比假裝通過更重要。
你可以照著說的話
不需要任何現成工具,也能請 Claude 幫你建立自己的風控:
幫我建立一份台股當沖的個人風控規則,逐項問我:每筆最多虧多少(含成本)、每天最多虧多少、每天最多幾筆、幾點後不進場、幾點前一定平倉、單一股票最多占資金幾成。最後整理成一張清單。
用我的風控清單檢查這筆單:2409 買 3 張,限價 29.75,停損 29.35,停利 30.55,手續費 6 折,現股當沖。用 FinMind 資料確認今天的漲跌停和是否為處置股。每一條都告訴我通過或擋下,以及原因。
今天我已經進場兩筆,停損出場最多各虧 1,600 元。如果再做這一筆,今天的總風險會不會超過我的每日上限?
幫我寫一個台股風控檢查程式:照我的清單檢查每一筆委託,結果只有通過或擋下;賣出持股一律不擋;拿不到資料時要明確警告。寫好自動測試,每一條規則至少一個擋下的例子。
常見問題
可以把某些檢查關掉嗎?
大部分限制都在設定檔裡,可以調整數字,時間窗也可以關閉。但建議只在冷靜的時候改,而且不要在盤中為了做某一筆而改規則,那正是風控要防止的事。
怎麼確認自己有沒有當沖資格?
直接問你的券商,或在券商 App 查看是否已簽署現股當沖相關文件。條件以券商與證交所規定為準。
看到「注意」需要理會嗎?
需要看,但不影響通過。最常見的是「停損只存在計畫裡」,提醒你自己去券商設條件單或開提醒;以及「無法確認某項資料」,提醒你要自己查。
每日風險為什麼不看實際賺賠?
因為盤中你不知道前幾筆最後會怎樣。用「每筆都停損出場」的最壞情況計算,才能確保今天最多只虧到你設定的金額。
通過了就代表可以買嗎?
不是。通過只代表符合你自己設定的規則,不是任何建議。下單前仍要你逐筆確認,最後的決定在你。
台股版的程式可以下載嗎?
台股版還在開發中,暫不提供下載。等整個系列完成後,我會整理好放上 GitHub,並詳細說明安裝與使用方式。在那之前,可以用上面「照著說的話」請 Claude 幫你建立自己的風控。
進階:給習慣終端機的讀者
風控相關的設定欄位與檢查指令:
python "$R/tw-risk/check.py" --now "2026-11-13 09:20" # 讀 trader/orders.json,寫 trader/state/risk.json
python "$R/tw-risk/check.py" --no-write --json # 只看,不記錄
# trader/config.json 相關欄位
daytrade_eligible # 已確認有當沖資格(預設 false)
max_loss_per_trade_twd # 每筆最大虧損(含成本)
max_daily_loss_twd # 每日最大風險
max_trades_per_day / max_orders_per_day
min_reward_risk_after_cost # 扣成本後報酬風險比下限
no_entries_before / no_entries_after / flat_by
block_disposition_stocks # 擋下處置股(預設 true)
require_market_data # 拿不到資料就擋下(預設 false)
allow_odd_lot / blocked / max_position_pct / cash_buffer_pct
結束碼 0 代表全部通過、1 代表至少一筆擋下。今天已送出的委託從 trader/state/broker.json 讀取;指紋為委託內容(不含說明欄)的 SHA-256。
下一篇預告
到這裡,台股版第一階段(停損停利、計算張數、風控)全部完成,而且只用免費資料。接下來進入第二階段:盤前準備。美國國會議員交易追蹤在台股沒有對應資料,我打算改成三大法人與券商分點的籌碼追蹤,再加上台股特有的月營收。開發完成後,再繼續寫下一篇。
本文僅為軟體工具教學與開發經驗分享,不構成任何投資建議。範例僅用於說明風控檢查,不代表任何個股的買賣建議。當沖風險極高,請自行評估並為自己的交易決策負責。法規與資格條件以撰文時為準,請以證交所與券商最新規定為依據。









