第一支程式交易策略:30 天新手路線
第一支程式交易策略的 30 天路線:第一週寫出一條清楚的規則,例如「價格突破開盤後前 30 分鐘的高點就買進」,第二週選軟體、備好乾淨資料與成本,第三週回測,第四週做樣本外與推進分析。軟體的選擇取決於你想怎麼建立規則:自己寫程式,或讓策略生成軟體去搜尋規則。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
目錄
30 天足夠讓第一支程式交易策略從想法走到有結論。第一週:把一個想法寫成明確的規則。第二週:選好軟體,備好乾淨的歷史資料,並把手續費、交易稅與滑價算進去。第三週:跑回測。第四週:用規則從未見過的資料做樣本外與推進分析檢驗。
什麼是程式交易,流程怎麼走?
程式交易是由電腦依照一組固定的書面規則,決定何時進場與出場的交易方式,流程從書面規則、經過檢驗的策略,一路到實單下單。量化交易指的是用資料與統計來制定這些規則。在散戶期貨交易中,這兩個詞指的幾乎是同一件事。
無論你交易的是台指期、小型台指期,還是美國指數期貨,流程都一樣:
- 想法。用一句話寫下想法,例如「價格突破前 30 分鐘高點時買進」。
- 規則。把這句話轉成明確的條件:進場、出場、停損、部位大小,以及交易的交易時段。
- 資料。準備乾淨的 K 棒資料,交易時段與合約轉倉都要正確。
- 回測。回測是用你的規則跑過歷史資料,並記錄規則會做出的每一筆交易的模擬。要納入所有成本,並以下一根 K 棒成交。
- 檢驗。用規則建立時沒用過的資料來測試。
- 檢視。要看權益曲線、回撤與交易明細,而不是只看最後的獲利。
- 匯出並模擬。把策略移到你的交易平台,先以模擬交易執行。
- 小額實單。只交易一口,並把實單成交與回測做比較。
如何把交易想法變成明確的規則?
當每個可能有兩種解讀的字詞都有一個固定的意思,並且在第一次測試前就寫下來,想法才成為可測試的規則。新手寫程式的錯誤,多半來自模糊的規則,而不是程式語言。下表以第 1 步的想法為例,逐一把模糊的字詞定下來。明確的版本只是範例選擇,不是建議。
| 模糊的字詞 | 要回答的問題 | 一種明確的版本 |
|---|---|---|
| 「前 30 分鐘」 | 哪個交易時段、哪幾根 K 棒? | 台指期一般交易時段,台灣時間 08:45 到 09:15 的 K 棒 |
| 「突破高點」 | 是碰到、成交價高於,還是收盤高於? | 有一根 K 棒收盤高於這些 K 棒的最高價 |
| 「買進」 | 用哪種委託、在哪一根 K 棒? | 在下一根 K 棒開盤以市價單進場 |
| 「停損」 | 設在哪裡,會移動嗎? | 固定停損,設在前 30 分鐘的最低價 |
| 「出場」 | 沒被停損的交易何時結束? | 在 13:30 那根 K 棒的開盤出場 |
| 「交易」 | 多久一次、什麼方向、多大部位? | 每天最多一筆多單,一口 |
可以用一個簡單的測試:把規則和一張圖表交給朋友。如果他不用問任何問題,就標出和你相同的交易,規則就夠明確。接著每一列都會變成程式平台上的一行程式碼,或策略生成軟體中的一項設定。
需要什麼軟體:程式平台還是策略生成軟體?
如果你已經有一個明確的想法要測試,就選程式平台;如果想搜尋大量的規則組合,就選策略生成軟體。程式平台是自帶腳本語言的看盤與交易軟體,每個策略都要手寫。策略生成軟體則是用你選定的積木(例如指標、參數範圍與出場類型),建立並測試大量規則組合的軟體。
| 程式平台 | 策略生成軟體 | |
|---|---|---|
| 你要做的事 | 用程式碼寫出每一條規則 | 設定積木、範圍與限制 |
| 所需技能 | 該平台的腳本語言 | 清楚的研究設定;搜尋時不需寫程式 |
| 測試的策略 | 你自己寫的那些 | 由同一組設定產生的大量變體 |
| 主要風險 | 程式錯誤、測試想法的速度慢 | 選到碰巧擬合了過去的變體 |
| 適合 | 精確測試一個已知的想法 | 探索哪些規則在某個市場上站得住腳 |
許多交易者兩種都用。每個變體都手寫,會讓你只能測試自己寫得出來的少數想法;策略生成軟體則能由同一組設定測試大量變體。下單最終仍是在程式平台上送進市場。常見的平台各有自己的語言:MultiCharts 使用 PowerLanguage,TradingView 使用 Pine Script,TradeStation 使用 EasyLanguage,NinjaTrader 使用 NinjaScript。
在 AlphaPrime(Valynox)中,策略生成會把你的研究設定轉成可測試的進場與出場規則,因此你要設定的是規則、參數範圍與搜尋限制,而不是逐一輸入每個策略。
台指期需要什麼資料與成本?
你需要與你要交易的交易時段相符的 K 棒資料,以及包含手續費、期貨交易稅與滑價的成本模型。少了這兩者,回測描述的就是一個你實際無法交易的市場。
資料:交易時段要相符,並檢查轉倉
測試時要使用與你實際交易相同的交易時段選擇(只有日盤或全時段),並檢查你的連續月在哪裡轉倉。連續月是把各月份合約接成一段長歷史的價格序列。我們的期貨回測中只用日盤與全時段 K 棒的差異說明了為什麼交易時段的選擇會改變訊號。AlphaPrime 的回測交易時段設定讓你把同一條台指期規則,分別用只有日盤和全時段的 K 棒各跑一次,再比較兩邊的結果。
成本:每筆交易有三個項目
每種合約每一指數點都有固定價值:台指期(TX)為 NT$200,小型台指期(MTX)為 NT$50,微型台指期(TMF)為 NT$10。股價指數期貨的期貨交易稅在交易的每一邊都要課徵:
每邊稅額 = 指數點位 × 每點價值 × 0.00002
這裡的「指數點位」是以點數表示的期貨價格,「每點價值」是你的合約每一點的金額,0.00002 是稅率(十萬分之二)。再加上你的期貨商每邊的手續費,以及每邊至少一點的滑價。滑價是回測假設的價格與你實際成交價格之間的差距。交易所與主管機關可能調整這些數值,因此設定測試前請先查閱期交所的合約頁面。期貨合約計算機可以顯示每跳動點價值、每點價值,以及一筆交易的損益。
假設性範例
一口小型台指期在指數點位 20,000 時,價值為 20,000 × NT$50 = NT$1,000,000。稅額每邊 NT$20,一買一賣(來回)NT$40。假設手續費每邊 NT$50(來回 NT$100),滑價每邊一點(來回 NT$100)。來回總成本為 NT$240,也就是 4.8 點。策略在扣除成本前的平均每筆損益必須明顯高於 4.8 點,否則扣除成本後就會虧損。
如何知道回測不只是運氣?
你要用策略建立時沒用過的資料來測試,先用樣本外期間,再用推進分析。可以想成模擬考:如果你是對著答案讀書,滿分並不能說明什麼。只有新的考試才能顯示你學到了什麼。
樣本內資料是你用來建立並調整策略的那一段歷史。樣本外資料則是你留在一旁、較晚的一段歷史,只在規則定案後使用一次。如果策略在樣本內賺得很好,在樣本外卻虧損或毫無起色,就表示它學到的是雜訊。
推進分析是一種重複的樣本外測試,會逐個視窗沿著歷史向前移動。我們的推進分析指南說明了如何選擇視窗長度並解讀結果。
在第一次測試前寫下通過規則
在看到任何結果之前,先決定什麼算通過,因為看到結果後才選的規則,往往會去配合那個結果。
| 要先決定的事 | 為什麼重要 |
|---|---|
| 樣本外期間 | 先固定下來,你就不會不小心拿它來調整 |
| 最少交易筆數 | 交易筆數少時,結果多半只是機率 |
| 平均每筆損益與一買一賣(來回)成本的比較 | 上面範例中以點數表示的成本就是底線 |
| 你能接受的最大回撤 | 必須是你在自己的帳戶上撐得過去的虧損 |
| 你要測試多少個變體 | 測得越多,最佳的那個裡面運氣的成分就越大 |
假設性範例
在第一次測試前你寫下:最近兩年保持封閉,作為樣本外資料;樣本外至少 100 筆交易;扣除成本前平均每筆損益至少 15 點,約為小型台指期 4.8 點成本的三倍;一口的最大回撤不超過 NT$100,000;最多 200 個變體。一個樣本內結果很強、但樣本外只有 60 筆交易的策略,就違反第二條規則。你不會為了讓它通過而降低規則。
AlphaPrime 的策略檢驗把檢查依耗時分為基礎、標準與完整,包含推進分析與自訂門檻,並且在策略未通過其中一項時,停止後面的檢查。你寫下的通過規則,就是你要填入的那些門檻數字。
新手最常犯的錯誤是什麼?
最常見的錯誤是過度最佳化,而最簡單的防範方式是把所有測試過的東西寫成紀錄。過度最佳化是指策略的規則配合的是過去價格的隨機細節,而不是會重複出現的規律。就像照著一個人的一張照片去量身訂做西裝:完全合照片,卻不合那個人。
測試的變體越多,最好的那個只是碰巧表現好的可能性就越高。關於回測過度最佳化的研究顯示,測試大量變體可以產生漂亮的回測,背後卻沒有真正的優勢(Bailey et al., 2014),而且回報的回測結果應依所做測試的次數打折(Harvey & Liu, 2015)。
假設性範例
你在小型台指期上測試 500 組移動平均設定。沒有任何一組有真正的優勢,但碰巧有幾組看起來很強。你挑了其中最好的一組,權益曲線平滑。到了樣本外它卻虧錢,因為它是被挑出來的運氣,而不是實力。
研究紀錄能讓測試的次數看得見。每個想法都要記錄:
- 日期,以及用一句話寫下的想法。
- 測試過的變體數量,包括被你丟掉的。
- 每一次規則修改與原因。
- 成本設定,以指數點表示。
- 你打開樣本外資料的日期,以及它顯示了什麼。
當紀錄顯示某個想法背後有 300 個變體時,對最佳結果的懷疑要遠高於只出自三個變體的結果。紀錄也能立刻讓你看出自己是否即將重複使用樣本外資料。
如何把檢驗過的策略轉到實單交易?
把策略匯出到你的平台,確認它在一段樣本期間內的交易方式相同,先跑模擬交易,再交易一口。AlphaPrime 的平台匯出會把策略寫成原始碼,支援 MultiCharts(PowerLanguage)、TradingView(Pine Script v6)、TradeStation(EasyLanguage)、NinjaTrader(NinjaScript)、MetaTrader 4(MQL4)與 MetaTrader 5(MQL5)。
- 在平台上載入與回測相同的商品、K 棒週期與交易時段。
- 用幾週的資料比對進場與出場。小差異通常來自資料來源或交易時段設定,所以先修正這些。
- 以模擬交易執行策略數週,並把成交與回測假設的價格做比較。
- 用一口開始實單交易,並量測你實際的滑價。把這個數字回饋到你接下來的回測中。
如果你使用 AlphaPrime,這代表:你只需設定一次研究積木與成本,AlphaPrime 會在計入手續費、滑價與下一根 K 棒成交的前提下搜尋並測試規則,而策略檢驗會在你匯出任何東西之前,依你自己的門檻濾掉未通過的變體。
常見問題
開始程式交易需要懂程式設計嗎?
不需要。你需要的是精確地寫出規則,這與寫程式是不同的技能。策略生成軟體讓你不用寫程式就能搜尋規則,而且你可以把完成的策略匯出成原始碼。學會讀懂你平台的語言,在檢查匯出的策略時仍然有幫助。
新手應該選哪一種程式交易軟體?
依你想要的工作方式選擇。如果你有一個想法要測試,程式平台讓你能精確地寫出它。如果你想探索大量的規則組合,策略生成軟體負責搜尋,之後策略會在你的交易平台上執行。
台指期回測需要多少歷史資料?
要足以涵蓋上漲、下跌與盤整的行情,並有足夠的交易筆數來判斷結果。許多交易者會使用數年的 K 棒。把最近的一段留作樣本外資料,並使用與你打算交易相同的交易時段(只有日盤或全時段)。
回測結果好,就代表策略會賺錢嗎?
不會。回測描述的是規則在過去資料上的表現,不是預測。樣本外與推進分析的結果,顯示的是你建立策略的方式在沒見過的資料上是否站得住腳,這比單一次回測是更強的檢驗。
程式交易與量化交易有什麼差別?
量化交易用資料與統計來設計交易決策。程式交易指的是由電腦執行固定的規則。對散戶期貨交易者來說,工作內容大致相同:用資料建立規則、測試它們,再讓軟體執行。
參考資料
- 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.
- Harvey, C. R., & Liu, Y. (2015). Backtesting. The Journal of Portfolio Management, 42(1), 13–28.

