台指期程式交易:從零到第一個策略,不用寫程式
要開始做台指期程式交易,你需要一個能執行策略規則的平台、一家 API 能與之連接的期貨商,以及你所交易時段的歷史 K 棒資料。先做一條簡單規則,納入成本回測,在未見過的資料上檢驗,模擬交易,再以一口微型台指期(TMF)實單交易。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
目錄
什麼是程式交易?什麼不是?
要開始做台指期程式交易:準備一個能執行策略規則的平台、一家 API 能與之連接的期貨商,以及你所交易時段的歷史 K 棒資料。先做一條簡單規則,納入成本回測,在未見過的資料上檢驗,模擬交易,再以一口微型台指期(TMF)實單交易。
程式交易(程式交易)是指由書面規則決定每一次進場、出場和部位大小,軟體在歷史資料上測試這些規則,並由同一套軟體透過期貨商連線送出委託。規則事先就已固定。如果規則寫的是「價格突破前 30 分鐘高點就買進」,那每次出現這種情況,軟體都會買進,不管你當天喜不喜歡這筆交易。
可以把它想成寫食譜,而不是憑口味下廚。食譜可以在過去資料上測試上千次,任何人都能照同樣方式執行。但食譜裡放什麼,仍然由你決定:哪個市場、哪個交易時段、冒多少風險、何時停止使用。研究和風險的選擇仍屬於交易者,軟體只是讓你不必再親手操作滑鼠。
程式交易不是一個黑盒子,不能產生訊號後不加檢查就照單全收,也不是繞過學習市場的捷徑。如果你不理解一條規則為什麼應該在台指期上有效,回測並不會告訴你;它只會告訴你這條規則如何擬合了過去。下面各節依序列出能讓這件事保持誠實的步驟。
開始需要什麼:平台、期貨商 API 與資料?
第一套環境需要三個必須互相配合的獨立部分:一個執行策略程式碼的平台、一家該平台能透過其 API 送單的期貨商,以及你打算交易的台指期時段的歷史 K 棒資料。三者各自選擇,任兩者不相容,整套環境就無法運作。
交易平台是存放你的策略規則、在歷史資料上執行回測、並在即時價格上執行規則以產生委託的程式。期貨商 API 是期貨商提供的連線,讓軟體而不是人來送出委託並接收成交回報。台灣多數期貨商會要求你在開通這項連線前簽署 API 約定書,而且各家只支援特定的平台清單。歷史 K 棒資料則是每個時間區間的開盤、最高、最低與收盤價紀錄,例如每分鐘一根 K 棒或每天一根 K 棒。
| 項目 | 作用 | 付費前先確認 |
|---|---|---|
| 歷史 K 棒資料 | 提供回測使用 | 你需要的解析度(1 分鐘、5 分鐘、日線);只涵蓋日盤,還是含夜盤的全時段;年數足夠涵蓋上漲、下跌和盤整的行情 |
| 平台 | 執行規則、回測、送出委託 | 能執行你的規則所用的策略語言;你的期貨商將其列為支援平台 |
| 期貨商 API | 接收委託、回傳成交 | 能連接你選的平台;API 約定書已簽署;每口費用已有書面確認 |
資料必須符合你所交易的交易時段。台指期的日盤為台灣時間 08:45 至 13:45,夜盤為 15:00 至隔天 05:00。只做日盤的策略可以使用僅含日盤的資料。持倉過了 13:45 的策略則需要全時段資料,因為夜盤可能觸發停損,而僅含日盤的資料永遠看不到。交易所可能調整這些時間,所以請查閱 TAIFEX 的契約頁面,或用期貨交易時間工具查詢你所在時區的時間。
在台灣,平台的選擇通常從期貨商出發:有數家台灣期貨商提供 MultiCharts 對其 API 的連接,其他平台則有些期貨商支援、有些不支援。AlphaPrime(Valynox)是策略研究程式,不是送單平台;它會把策略原始碼匯出到平台匯出頁面所列的交易平台,所以實務上的順序是:先問期貨商其 API 支援哪些平台,從中選一個,並確認你的研究工具能匯出到該平台。
如何不寫程式就做出並回測第一個策略?
從一條簡單規則開始,在第一次執行前就固定好交易時段、手續費、滑價和下一根 K 棒成交,並以扣除成本後的平均每筆損益,而不是權益曲線的外形,來判斷結果。策略生成軟體讓你用設定而不是程式碼完成這一切:你選擇指標、參數範圍以及進場與出場類型,AlphaPrime 的策略生成再把這些選擇變成可測試的規則。
回測是讓規則在歷史 K 棒上跑一遍,並回報規則會做的每一筆交易。結果的真實程度取決於設定,所以步驟順序很重要:
- 選一條簡單規則。例如:價格突破日盤前 30 分鐘高點就買進,跌破低點就放空,在日盤收盤出場。第一次測試,一條帶兩三個參數的規則就夠了。
- 設定交易時段。只做日盤(08:45–13:45)或全時段。回測只能看到實單策略將要交易的那些時段的 K 棒。
- 輸入每一買一賣(來回)的手續費與交易所費用。一買一賣(來回)就是一次進場加一次出場。台灣對指數期貨每邊按契約價值課徵 0.002% 的期貨交易稅;再加上期貨商每口的手續費。
- 輸入滑價。滑價是回測假設的價格與真實委託成交價之間的差距。市價單與停損單,每邊至少用一個跳動點。
- 設定下一根 K 棒成交。下一根 K 棒成交的意思是:以某根 K 棒收盤計算出的訊號,在下一根 K 棒成交,這是真實委託最早能到達交易所的時點。
- 執行,然後看扣除成本後的平均每筆損益。
平均每筆損益是淨損益除以交易筆數。扣除成本後,它就是未扣成本的平均每筆損益減去一買一賣(來回)的成本。它是第一個該看的數字,因為向上的權益曲線可能掩蓋一個付完手續費和滑價後每筆都小賠的策略。AlphaPrime 的回測會對每個候選策略套用手續費、滑價、交易時段和下一根 K 棒成交,所以你看到的排名已經是扣除成本後的結果。如何估算這些成本的細節,請見回測中的交易成本。
假設範例
一條 TMF 突破規則在 1,200 筆交易中顯示未扣成本的結果為 NT$300,000,也就是扣成本前每筆 NT$250。TMF 在 20,000 點時,契約價值約為 NT$200,000(每點 NT$10),所以交易稅每邊約 NT$4。再加上期貨商手續費和每邊一個跳動點的滑價,一買一賣(來回)約 NT$300。扣除成本後的平均每筆損益是 NT$250 − NT$300 = −NT$50,1,200 筆交易合計虧損約 NT$60,000。未扣成本的曲線向上,扣除成本後的曲線向下。
如何確認第一次回測不是碰巧擬合?
保留一部分歷史資料不去看,並讓測試沿時間往前推進,因為在全部資料上選出來的規則,在那些資料上看起來永遠都很好;該相信的是樣本外結果。這是大多數新手跳過的步驟,也正是區分經過檢驗的策略與曲線擬合策略的關鍵。
樣本內資料是你用來選擇規則及其設定的那段歷史。樣本外資料則是這個選擇從未看過的歷史。這樣切分之所以重要,道理很簡單:如果你在同一段十年資料上測試二十種規則變體,然後留下最好的,這個贏家看起來好,部分原因是它贏了這場競賽,而不是它真有優勢。Bailey、Borwein、López de Prado 與 Zhu(2014)指出,當在同一份資料上嘗試許多變體時,即使沒有任何一個變體真的有優勢,最佳的樣本內結果預期看起來也會很漂亮。唯一的解方是使用沒有參與這場競賽的資料。
推進分析是把這種切分沿時間重複進行的方法:在樣本內視窗選定設定,原封不動地在緊接著的樣本外視窗測試,把兩個視窗都往前移動,然後重複。把樣本外片段接起來,就形成一個從未被用來挑選任何東西的結果。單次切分只給你一段未見過的期間,而這段期間可能剛好運氣好。滾動切分則給你好幾段未見過的期間,你可以數有幾段為正,以及最差的一段有多糟。視窗的選擇請見推進分析:為什麼單次回測不夠。
樣本外結果要看什麼:
- 大多數樣本外視窗在扣除成本後為正,而不是靠某一個大視窗撐起其餘的。
- 相鄰視窗選出的設定彼此接近。設定在視窗之間跳來跳去,表示這條規則沒有穩定的區域。
- 樣本外的平均每筆損益與樣本內處於同一範圍。大幅下降,表示樣本內結果多半是擬合出來的。
AlphaPrime 的策略檢驗會用你設定的門檻執行這些檢查,讓每個候選策略都以同一標準被評判,而且候選策略一旦未通過前面的檢查,後面的檢查就會停止。
何時該上實單,一開始該用幾口?
依序進行:回測、檢驗、模擬交易直到實際成交符合回測假設,然後一口微型台指期(TMF),只有在實單紀錄與測試相似之後才加大部位。每個階段都有一個出場條件,跳過任何階段,就等於用真錢去學那一課。最後階段的口數,來自帳戶風險與停損距離;部位大小計算器可根據帳戶大小、每筆交易風險與以點數計的停損算出這個數字。
模擬交易(paper trading)是讓策略在即時價格上透過平台執行,委託只被記錄而不送到交易所,或是送到期貨商的模擬帳戶。它的目的不是證明策略有效,而是檢查管線:平台產生的訊號是否與回測產生的相同、委託是否送到期貨商 API、成交是否落在你假設的滑價之內。回測可能是對的,連線卻仍然可能有問題。
| 階段 | 何時進入下一階段 |
|---|---|
| 1. 扣除成本後的回測 | 扣除成本後的平均每筆損益明顯高於一買一賣(來回)成本 |
| 2. 以樣本外視窗做檢驗 | 大多數樣本外視窗為正,且設定穩定 |
| 3. 模擬交易 | 訊號與回測一致,成交落在你假設的滑價之內 |
| 4. 一口 TMF 實單交易 | 實單期間的回撤與交易筆數,與回測中同一期間相似 |
| 5. 增加口數 | 部位大小來自帳戶風險與停損距離,而不是近期的獲利 |
TMF 是很自然的第一個契約,因為台指期有三種大小,跳動點都是一個指數點:TX 每點 NT$200,小型台指(MTX)每點 NT$50,微型台指(TMF)每點 NT$10。一口 TMF 讓你能以每點最低的成本,對照實單紀錄與回測。交易所可能調整這些數值;請以 TAIFEX 的契約頁面為準。
假設範例
一個 NT$500,000 的帳戶每筆交易風險 1%,也就是 NT$5,000。策略的停損是 50 點,在 TMF 上每口為 NT$500。依帳戶風險最多可到十口 TMF,但實單紀錄從一口開始。在實單的回撤與交易筆數於相當數量的交易中都與回測相符之後,部位才分階段往依風險算出的數字加大,絕不超過它。
論壇上的新手對程式交易常犯哪些錯?
在 PTT 之類論壇上反覆出現的錯誤包括:回測不計成本、在訊號同一根 K 棒成交、一直調整到曲線平滑、用日盤資料測試全時段策略、相信沒有附設定的分享回測,以及一上場就用全額部位。每個錯誤都有明確的修正方式,而每個修正都是一項設定或一個習慣,不是什麼秘密。
| 錯誤 | 為什麼會誤導 | 修正 |
|---|---|---|
| 回測不含成本 | 偏愛交易頻繁、每次小波動的規則,而這類規則在扣除手續費後最先虧損 | 從第一次執行起,每次都含手續費與滑價 |
| 訊號與成交在同一根 K 棒 | 用了委託根本來不及拿到的收盤價;每筆交易的結果都被灌水 | 下一根 K 棒成交 |
| 調整到曲線平滑為止 | 樣本內資料上的平滑是擬合的跡象,不是優勢的跡象 | 在做任何判斷前,先做樣本外與推進分析檢查 |
| 用日盤資料測試隔夜持倉的策略 | 夜盤的波動和停損觸發都不會出現;回測直接從 13:45 跳到 08:45 | 只要規則持倉過日盤收盤,就用全時段資料 |
| 照抄分享的回測卻沒有它的設定 | 沒有交易時段、成本、資料來源與成交設定,這張圖就無法重現 | 先用你自己的交易時段、成本和資料重跑規則,再決定是否相信 |
| 一上場就用全額部位 | 實單的前幾週測試的是連線與成交,不是優勢;全額部位下的管線錯誤代價很高 | 先模擬交易,再一口 TMF |
被分享的權益曲線是最常見的陷阱,因為它看起來像證據。一條沒有交易時段、成本設定、資料來源和成交設定的曲線,只是一幅圖畫。四項都要問清楚,或者自己重建規則,在自己的資料上執行。如果結果在你的設定下仍然成立,你就學到了東西;如果不成立,你就省下了上實單才發現的代價。AlphaPrime 的績效報表會列出一條曲線背後的權益、回撤與交易,自己重建的規則因此有明細可查,不像截圖只有一條線。
如果你使用 AlphaPrime,這意味著:交易時段、手續費、滑價與下一根 K 棒成交都是研究中的設定,所以每個生成的候選策略都已按實單策略的交易方式測試過,而匯出的原始碼會把同一條規則帶到你的期貨商所支援的平台。
常見問題
開始程式交易需要會寫程式嗎?
不需要。策略生成軟體讓你以設定的方式選擇指標、參數範圍以及進場與出場類型,並為你產生規則和原始碼。你仍然需要理解每項設定的意義,尤其是交易時段、成本和成交時點,因為這些決定了回測是否反映出你真的能交易的東西。
台指期程式交易該用哪個程式交易軟體?
從你的期貨商開始,而不是從軟體開始。先問期貨商的 API 支援哪些平台,再從該清單中選一個平台,並選擇能把策略程式碼匯出到該平台的研究工具。付費買任何一項之前,先確認它能處理你需要的資料解析度和交易時段。
上實單前應該模擬交易多久?
要夠久,久到能看出平台產生的訊號與回測相同,且成交落在你假設的滑價之內。對大多數日子都會交易的日內規則,幾週通常就能累積足夠的交易筆數來檢查這件事。目標是確認連線和成交假設,而不是證明優勢。
可以用 PTT 或其他論壇上貼的策略嗎?
只有在你用自己的交易時段、成本、資料和下一根 K 棒成交重建之後才行。一條沒有那些設定的貼文權益曲線是無法檢驗的。如果這條規則在你的資料上仍顯示平均每筆損益明顯高於一買一賣(來回)成本,再做樣本外與推進分析檢查,然後才交易它。
為什麼從微型台指期(TMF)開始,而不是 TX?
TMF 是三種台指期大小中每點價值最小的,所以主要在測試連線與成交的實單前幾週,每個錯誤的代價最低。一旦實單的回撤與交易筆數與回測相符,部位就可以依帳戶風險與停損距離加大。
參考文獻
- Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2014). Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance. Notices of the American Mathematical Society, 61(5), 458–471.

