iT邦幫忙

2026 iThome 鐵人賽

DAY 27
0
Software Development

台股日頻量化交易:開發一條從資料、特徵、模型到每日下單清單的產線系列 第 27

Day 27 - 日頻回測引擎:把整張、手續費、證交稅和漲停鎖死放進去

  • 分享至 

  • xImage
  •  

到 Day 26 為止的回測都是同一種假設:名單出來、隔天開盤按比例成交、來回扣 0.471%。這對量 IC 和比規則夠用,對「我拿一百萬照做會怎樣」不夠。一百萬買不起一張創意,這件事在按比例成交的世界裡不存在。

這篇把引擎換成日頻、逐筆、按台股的規矩成交,然後把同一條規則(分類器選股、風險平價、只買排名前 20、掉出前 20 就賣、不擇時)跑不同本金,看摩擦到底吃掉多少、吃在哪裡。


引擎

每個交易日兩段。開盤先執行昨天排定的賣單和買單,收盤算市值,如果當天是訊號日就排明天的單。五個摩擦:

整張        買賣以 1,000 股為單位(另跑一版允許零股)
手續費      0.1425%,最低 20 元,買賣各一次
證交稅      賣出 0.3%
漲跌停鎖死  開盤就在漲停價而且全日一價 → 買單不成交;開盤在跌停價且全日一價 → 賣單改明天
成交量      單筆不超過當日成交量的 5%,超過就縮

損益用還原價算,除權息不會變成假虧損;整張、漲跌停、量的限制用原始價和原始量算,因為那是真正掛單時看到的數字。理想版就是同一支程式把這五條關掉、成本改回來回 0.471%,兩者只差這五個開關。


五種設定

摩擦

                              年化     Sharpe   回檔    10.4 年變幾倍   買單    成交    湊不到一張   被量限縮   漲停買不到
理想版                       +36.2%   1.82    −22%    25.1          3,553   3,553   0            0          0
實務版 100 萬,零股           +33.7%   1.72    −22%    20.6          3,556   3,545   0            28         11
實務版 100 萬,整張           +17.9%   1.74    −12%     5.6          4,493   1,849   2,629        10         13
實務版 1,000 萬,整張         +31.0%   1.79    −20%    16.7          3,589   3,485   92           602        12
實務版 1 億,整張             +22.4%   1.60    −18%     8.2          3,561   3,539   10           1,903      12

同一條規則、同一批訊號,年化從 36% 到 18% 都有。差別不在策略,在能不能成交、成交要付多少。


一層一層加摩擦

把五個開關分開加,才知道哪個貴。用零股版當中間態,可以把「成交限制」和「費率」拆開:

歸因

理想版(比例成交、0.471%)                36.2%
零股成交、漲跌停與量的限制都在、費率仍 0.471%   35.6%    −0.6
費率改成不打折的 0.585%                    33.7%    −1.9
改成整張(本金 100 萬)                    17.9%   −15.8

成交限制只值 0.6 個百分點,因為漲停鎖死和量的限制在這個本金下幾乎不發作。費率值 1.9 個百分點。真正的斷崖是整張,一個開關砍掉 15.8 個百分點,比其他四個加起來的十倍還多。


成本階梯:每 1% 吃掉 16 個百分點

費率既然值 1.9 點,那把它當成一個參數掃一遍,可以看出這條規則對成本有多敏感。其他條件完全相同,只改來回費率:

成本階梯

來回成本    年化      Sharpe
0%         43.3%     2.14
0.2%       40.0%     2.00
0.471%     35.6%     1.81     Day 3 算的:手續費打 6 折 + 證交稅
0.585%     33.7%     1.72     手續費不打折
0.8%       30.3%     1.58
1.2%       24.2%     1.30

幾乎是一條直線,斜率是每 1% 的來回成本換掉 16 個百分點年化。這條規則平均持有 10 天、一年換手十幾次,所以成本是乘上去的,不是加上去的。

換算回現實:手續費打 6 折,來回從 0.585% 降到 0.471%,年化多 1.9 個百分點;再談到 3 折是 0.386%,又多 1.4 個百分點。折扣是少數「打電話就能拿到」的報酬,全部拿滿也只有 3 點出頭,因為那 0.3% 的證交稅誰都拿不掉。

右邊那張是 3,532 筆交易的報酬分布。成本線 0.585% 就在最密的那一叢裡,平均每筆賺 3.2%。勝率只有 48%,錢是右邊那條長尾賺的。成本不會動到長尾,它吃掉的是中間那層本來就差不多打平的單子,把勝率從 50% 壓到 48%。


一百萬為什麼做不了整張

整張門檻

一個位置是總資金的三十分之一。本金一百萬,一格三萬三,只買得起 33 元以下的股票,而前 20 名候選裡只有 24% 的股價在 33 元以下。中位數是 72 元,一張要七萬二,超過兩格。

本金       一格資金     一張買得起的股價    佔候選的比例
100 萬     33,333      33 元以下          24%
300 萬     100,000     100 元以下         62%
1,000 萬   333,333     333 元以下         90%
3,000 萬   1,000,000   1,000 元以下       98%

所以一百萬整張版有 4,493 張買單,2,629 張湊不到一張,58% 的單子直接作廢。剩下的 1,849 筆平均報酬 3.8%,比零股版的 3.2% 還高,因為買得起的都是低價股,而低價股的波動大、右尾厚。但錢大半時間躺在現金,年化只剩 17.9%,回檔也跟著只有 −12%。那不是風控好,是沒進場。

零股在 2020 年 10 月開放盤中交易,這條路現在是通的。一百萬零股版年化 33.7%,三百萬零股版 33.6%,兩者幾乎一樣,因為在這個規模下零股完全不受限制。


大錢卡在量,不是卡在價

容量

把本金從一百萬拉到三億,整張版的年化先升後降:

本金        年化      湊不到一張   被量限縮
100 萬     17.9%     58.5%       0.2%
300 萬     29.3%     18.9%       3.5%
1,000 萬   31.0%      2.6%      16.8%
3,000 萬   27.9%      0.3%      34.3%
1 億       22.4%      0.3%      53.4%
3 億       15.7%      0.3%      68.2%

兩種卡法此消彼長,中間夾出一個甜蜜點在一千萬附近。一千萬時只有 2.6% 的買單湊不到一張、16.8% 被量限縮;拿掉量的限制可以到 32.1%,跟理想版只差 4 個百分點。

再往上,量的限制變成主角。三億時 68% 的買單被縮,年化 15.7%,Sharpe 掉到 1.37。這條規則買的是中小型股,一格一千萬要吃掉不少個漲停板前的成交量,想不驚動市場是不可能的。要放大只有三條路:放寬股票池的流動性下限、拉長持有期、或者接受分批進場的滑價。這三條都會改變策略本身,不是調參數能解決的。


漲停鎖死幾乎不發生

這是我原本最擔心的一項:訊號最強的股票隔天開盤鎖死漲停,看得到買不到。

實際上 10,360 次前 20 名的訊號裡,隔天開盤鎖死的只有 28 次,0.27%。原因是「建議」篩選早就把量比超過 3.4 的爆量股拿掉了,鎖死的那種型態在名單產生的時候就不在裡面。

更有意思的是,那 28 檔之後 20 天平均只漲 0.2%,其餘的漲 3.0%。買不到的不是最好的,是最擠的。同樣的檢查按排名拆開,前 5 名的鎖死率 0.42%、6 到 10 名 0.39%、11 到 20 名 0.14%,都在同一個量級。


費用長什麼樣

一百萬零股版十年付了 176 萬手續費、187 萬證交稅,合計 363 萬,資產從 100 萬變 2,064 萬。每筆交易的費用是 0.585%,平均每筆賺 3.2%、抱 10 天、勝率 48%。費用占毛利約 15%。

這個比例在一千萬和一億都一樣,因為它是每筆固定的百分比,會隨規模變的是量的限制,不是費用。證交稅占了來回成本的一半以上,而且沒得打折,這是台股高換手策略共同的天花板,Day 3 算過同一件事:來回 0.471% 裡有 0.3% 是稅。


跟 Day 3、Day 21 對照

Day 3 算過,每月換股的六因子組合年化被成本吃掉 5.91 個百分點,事前預測 5.7%,對得上。Day 21 算過,每天照排名換股的版本一年換手 5,927%,成本一年吃 14 個百分點,年化從 23.8% 變 7.7%。

這篇的規則一年換手十一次左右,不打折的費率吃掉 1.9 個百分點。差別不在成本算得比較便宜,而在換手次數:排名掉出前 20 才賣,平均持有 10 天,而不是每天重排。Day 21 那道緩衝是這篇能活下來的前提。

策略每筆平均賺 3.2%,成本 0.585%,是門檻的五倍多。這條規則不是靠薄利多銷,是靠一成多的單子賺兩三成,成本吃掉的是薄的那一層。


小結

**摩擦不是一個數字,是四種型態。**整張讓小資金進不了場(−15.8 個百分點),費率是固定的百分比(−1.9),成交限制在小錢身上幾乎不發作(−0.6),漲停鎖死 0.27% 且那些股票之後不漲。

**成本是乘上去的。**每多 1% 的來回成本換掉 16 個百分點年化,因為一年換手十一次左右。手續費從不打折談到 3 折值 3.3 個百分點,證交稅那 0.3% 誰都拿不掉。

**這條規則的適用區間是一百萬零股到一千萬整張。**兩端年化 33.7% 和 31.0%,跟理想版差 3 到 5 個百分點。一百萬整張做不了,58% 的買單湊不到一張;三億會被量卡到 15.7%,68% 的買單被縮。甜蜜點在一千萬。

**同一支引擎開關摩擦。**理想版和實務版差的只有五個開關,之後每一層(Day 29)都用實務版、一千萬、整張跑,數字才可以直接比。


上一篇
Day 26 - 特徵工程的負面結果:怎麼確定它真的是零
下一篇
Day 28 - 回測引擎驗證:怎麼確認它沒有在騙我
系列文
台股日頻量化交易:開發一條從資料、特徵、模型到每日下單清單的產線29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言