VALYNOXSTRATEGY RESEARCH TECHNOLOGY
AlphaPrimeAlphaPrime
策略學院 / 策略生成

第一支程式交易策略:30 天新手路線

第一支程式交易策略的 30 天路線:第一週寫出一條清楚的規則,例如「價格突破開盤後前 30 分鐘的高點就買進」,第二週選軟體、備好乾淨資料與成本,第三週回測,第四週做樣本外與推進分析。軟體的選擇取決於你想怎麼建立規則:自己寫程式,或讓策略生成軟體去搜尋規則。

作者 · 發佈 · 更新於 · 編輯原則

目錄
  1. 什麼是程式交易,流程怎麼走?
  2. 如何把交易想法變成明確的規則?
  3. 需要什麼軟體:程式平台還是策略生成軟體?
  4. 台指期需要什麼資料與成本?
  5. 資料:交易時段要相符,並檢查轉倉
  6. 成本:每筆交易有三個項目
  7. 如何知道回測不只是運氣?
  8. 在第一次測試前寫下通過規則
  9. 新手最常犯的錯誤是什麼?
  10. 如何把檢驗過的策略轉到實單交易?
  11. 常見問題
  12. 參考資料

30 天足夠讓第一支程式交易策略從想法走到有結論。第一週:把一個想法寫成明確的規則。第二週:選好軟體,備好乾淨的歷史資料,並把手續費、交易稅與滑價算進去。第三週:跑回測。第四週:用規則從未見過的資料做樣本外與推進分析檢驗。

什麼是程式交易,流程怎麼走?

程式交易是由電腦依照一組固定的書面規則,決定何時進場與出場的交易方式,流程從書面規則、經過檢驗的策略,一路到實單下單。量化交易指的是用資料與統計來制定這些規則。在散戶期貨交易中,這兩個詞指的幾乎是同一件事。

無論你交易的是台指期、小型台指期,還是美國指數期貨,流程都一樣:

  1. 想法。用一句話寫下想法,例如「價格突破前 30 分鐘高點時買進」。
  2. 規則。把這句話轉成明確的條件:進場、出場、停損、部位大小,以及交易的交易時段。
  3. 資料。準備乾淨的 K 棒資料,交易時段與合約轉倉都要正確。
  4. 回測。回測是用你的規則跑過歷史資料,並記錄規則會做出的每一筆交易的模擬。要納入所有成本,並以下一根 K 棒成交。
  5. 檢驗。用規則建立時沒用過的資料來測試。
  6. 檢視。要看權益曲線、回撤與交易明細,而不是只看最後的獲利。
  7. 匯出並模擬。把策略移到你的交易平台,先以模擬交易執行。
  8. 小額實單。只交易一口,並把實單成交與回測做比較。
工作流程由規則、回測、檢驗到實單交易。策略未通過檢驗時,箭頭會回到規則,而不是更改測試。 修正規則,而非測試 從構想到實單交易 規則 回測 檢驗 實單 通過 未通過:回到規則 更改測試會掩蓋缺陷。 所以:修正規則,再測一次。
從想法到實單交易的流程。策略沒通過檢驗時,要回頭修改規則;不要調整測試直到通過為止。

如何把交易想法變成明確的規則?

當每個可能有兩種解讀的字詞都有一個固定的意思,並且在第一次測試前就寫下來,想法才成為可測試的規則。新手寫程式的錯誤,多半來自模糊的規則,而不是程式語言。下表以第 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 點,否則扣除成本後就會虧損。

一口小型台指期的假設一買一賣成本:稅 0.8 點、手續費 2 點、滑價 2 點,合計每筆 4.8 點,即 NT$240 成本:每筆 4.8 點 小型台指一買一賣,假設值 稅 0.8 點 手續費 2 點 滑價 2 點 合計 4.8 點 未獲利先付 NT$240。 所以:平均每筆損益須超過 4.8 點。
一口小型台指期一買一賣(來回)的假設性成本:每筆交易必須先賺回約 4.8 點,才開始有獲利。

如何知道回測不只是運氣?

你要用策略建立時沒用過的資料來測試,先用樣本外期間,再用推進分析。可以想成模擬考:如果你是對著答案讀書,滿分並不能說明什麼。只有新的考試才能顯示你學到了什麼。

樣本內資料是你用來建立並調整策略的那一段歷史。樣本外資料則是你留在一旁、較晚的一段歷史,只在規則定案後使用一次。如果策略在樣本內賺得很好,在樣本外卻虧損或毫無起色,就表示它學到的是雜訊。

推進分析是一種重複的樣本外測試,會逐個視窗沿著歷史向前移動。我們的推進分析指南說明了如何選擇視窗長度並解讀結果。

推進分析:分三步驟,策略先在樣本內區間調整,再原封不動於下一段樣本外區間交易;只有串接起來的樣本外區間才構成結果 只看未見過的資料 推進分析,逐段進行 調整 交易 調整 交易 調整 交易 結果 未見過的資料 只計入交易區間。 所以:切勿在交易區間調整。
推進分析:在每個藍色視窗調整參數,接著原封不動地交易下一個橘色視窗,然後往前移動。只有橘色視窗構成結果。

在第一次測試前寫下通過規則

在看到任何結果之前,先決定什麼算通過,因為看到結果後才選的規則,往往會去配合那個結果。

要先決定的事為什麼重要
樣本外期間先固定下來,你就不會不小心拿它來調整
最少交易筆數交易筆數少時,結果多半只是機率
平均每筆損益與一買一賣(來回)成本的比較上面範例中以點數表示的成本就是底線
你能接受的最大回撤必須是你在自己的帳戶上撐得過去的虧損
你要測試多少個變體測得越多,最佳的那個裡面運氣的成分就越大

假設性範例

在第一次測試前你寫下:最近兩年保持封閉,作為樣本外資料;樣本外至少 100 筆交易;扣除成本前平均每筆損益至少 15 點,約為小型台指期 4.8 點成本的三倍;一口的最大回撤不超過 NT$100,000;最多 200 個變體。一個樣本內結果很強、但樣本外只有 60 筆交易的策略,就違反第二條規則。你不會為了讓它通過而降低規則。

AlphaPrime 的策略檢驗把檢查依耗時分為基礎、標準與完整,包含推進分析與自訂門檻,並且在策略未通過其中一項時,停止後面的檢查。你寫下的通過規則,就是你要填入的那些門檻數字。

新手最常犯的錯誤是什麼?

最常見的錯誤是過度最佳化,而最簡單的防範方式是把所有測試過的東西寫成紀錄。過度最佳化是指策略的規則配合的是過去價格的隨機細節,而不是會重複出現的規律。就像照著一個人的一張照片去量身訂做西裝:完全合照片,卻不合那個人。

測試的變體越多,最好的那個只是碰巧表現好的可能性就越高。關於回測過度最佳化的研究顯示,測試大量變體可以產生漂亮的回測,背後卻沒有真正的優勢(Bailey et al., 2014),而且回報的回測結果應依所做測試的次數打折(Harvey & Liu, 2015)。

假設性範例

你在小型台指期上測試 500 組移動平均設定。沒有任何一組有真正的優勢,但碰巧有幾組看起來很強。你挑了其中最好的一組,權益曲線平滑。到了樣本外它卻虧錢,因為它是被挑出來的運氣,而不是實力。

研究紀錄能讓測試的次數看得見。每個想法都要記錄:

  1. 日期,以及用一句話寫下的想法。
  2. 測試過的變體數量,包括被你丟掉的。
  3. 每一次規則修改與原因。
  4. 成本設定,以指數點表示。
  5. 你打開樣本外資料的日期,以及它顯示了什麼。

當紀錄顯示某個想法背後有 300 個變體時,對最佳結果的懷疑要遠高於只出自三個變體的結果。紀錄也能立刻讓你看出自己是否即將重複使用樣本外資料。

如何把檢驗過的策略轉到實單交易?

把策略匯出到你的平台,確認它在一段樣本期間內的交易方式相同,先跑模擬交易,再交易一口。AlphaPrime 的平台匯出會把策略寫成原始碼,支援 MultiCharts(PowerLanguage)、TradingView(Pine Script v6)、TradeStation(EasyLanguage)、NinjaTrader(NinjaScript)、MetaTrader 4(MQL4)與 MetaTrader 5(MQL5)。

  1. 在平台上載入與回測相同的商品、K 棒週期與交易時段。
  2. 用幾週的資料比對進場與出場。小差異通常來自資料來源或交易時段設定,所以先修正這些。
  3. 以模擬交易執行策略數週,並把成交與回測假設的價格做比較。
  4. 用一口開始實單交易,並量測你實際的滑價。把這個數字回饋到你接下來的回測中。

如果你使用 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.