量化交易:一步步建立自己的流程
量化交易流程是一組固定順序的階段,規則寫成文字,通過門檻也在測試前設定好。每一次測試都要記錄,策略必須通過每個階段才能進入下一關。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
目錄
量化交易流程有哪些階段?
要建立自己的量化交易流程,讓每個想法都走過同樣的七個階段:想法、資料、策略搜尋、回測、檢驗、模擬交易和實單交易。在測試之前,先把資料、成本、交易時段和通過門檻的規則寫下來。每一次測試都要記錄。只有通過某個階段的策略,才能進入下一個階段。
量化交易是指進場、出場和部位大小都來自書面規則,並且可以由電腦在歷史資料上測試的交易方式。流程就像機師的檢查清單。機師每次飛行都照同樣的順序執行同樣的步驟,所以疲倦的日子或好心情都不會改變檢查的內容。許多想自己建立演算法交易系統的交易人,一開始就從策略著手。其實應該先有流程,因為流程決定了你能信任哪些策略。
每個階段都以一道關卡作結。關卡是一項書面條件,策略必須符合才能繼續往下走。
| 階段 | 要做什麼 | 關卡:進入下一階段前必須寫下的內容 |
|---|---|---|
| 1. 想法 | 說明你認為會重複出現的市場行為,以及原因。 | 一句話的假設,包含市場、K 棒週期和理由。 |
| 2. 資料 | 選擇並清理歷史 K 棒。 | 資料來源、轉倉方式、時區、交易時段和清理規則。 |
| 3. 策略搜尋 | 在你設定的範圍內嘗試規則與參數的組合。 | 搜尋範圍限制,以及測試過的變體數量。 |
| 4. 回測 | 加入成本與貼近實際的成交方式,執行候選策略。 | 成本設定、成交規則和完整的結果清單。 |
| 5. 檢驗 | 用建立策略時沒有用過的資料與市場條件,測試留下來的策略。 | 依事先訂好的門檻判定通過或不通過。 |
| 6. 模擬交易 | 不用真錢,向前執行策略。 | 訊號與成交價和回測的比對結果。 |
| 7. 實單 | 先以最小部位交易。 | 部位大小、檢討日期和退場規則。 |
第一次測試前該先固定哪些規則?
在第一次回測之前,先固定資料、成本和交易時段的規則,因為任何在看到結果後才選的規則,都會變成隱藏的參數。如果你因為結果比較好看,就把日盤 K 棒換成全時段 K 棒,那你其實是在最佳化交易時段,而你的紀錄不會顯示這一點。
哪些資料選擇要先固定?
決定 K 棒的來源、使用的 K 棒週期,以及如何把各期期貨合約接成一條連續的序列。同時也要決定時間戳記使用的時區,以及如何處理跳空和異常的跳動點。把這些選擇寫成一份簡短的清單,並在整輪研究期間使用同一個版本的資料。回測資料品質:跳空、異常跳動點、時區與轉倉這篇指南會詳細說明每一項檢查。
要設定哪些成本與成交規則?
滑價是指回測所假設的價格,和你實際能成交的價格之間的差距。測試前就要設定每一買一賣(來回)的手續費、交易所費用和滑價,單位要與你的結果一致。對於以市價單或停損單交易的高流動性期貨,常見的起點是每一邊至少一個跳動點的滑價。同時也要規定,K 棒收盤時出現的訊號,在下一根 K 棒成交,而不是在同一個收盤價成交。回測中的交易成本與平均每筆損益這篇文章說明如何拿成本和每筆交易的優勢相比。在 AlphaPrime(Valynox) 裡,這些成本設定要在第一次執行前填進回測,訊號一律在下一根 K 棒成交,所以像每邊一個跳動點這樣的滑價,會套用到整輪研究的每一次測試。
策略要交易哪些交易時段?
決定策略只交易日盤,還是交易包含夜盤的全時段。也要決定如何處理假日和提早收盤。你可以用免費的期貨交易時間工具查詢市場的交易時間,它會用你的時區顯示各交易所的交易時段。交易所可能調整交易時間、每跳動點價值和費用,最終仍以交易所自己的合約頁面為準,所以每輪研究開始前都要到那裡確認目前的數值。
如何把想法變成可以測試的策略?
當你能把想法寫成包含市場、K 棒週期、理由,以及明確進場與出場條件的假設時,這個想法就可以測試了。「指數期貨有趨勢」無法測試。「在指數期貨上,若突破第一個小時的區間,且方向與前一日收盤一致,往往會持續到交易時段結束」就可以測試。它指出了市場、時間範圍、觸發條件和出場方式。
策略搜尋是由軟體在你設定的範圍內,嘗試大量規則與參數範圍組合的步驟。軟體能測試的組合遠多於人工所能及,但搜尋的方向仍由你決定。搜尋開始前就要先設定限制:
- 哪些規則類型和指標可以組合在一起。
- 每條規則的參數範圍,例如回看期間介於 10 到 50 根 K 棒之間。
- 一個策略可以使用多少個條件。條件越少,擬合雜訊的空間就越小。
- 最低交易筆數,避免單一一筆幸運的交易撐起整個結果。
在 AlphaPrime中,策略生成會把研究想法轉換成可測試的交易規則。你可以設定規則與指標、參數範圍、進場與出場條件,以及搜尋限制。搜尋範圍越廣,下一個階段就越重要。
為什麼每次測試都要記錄,包括失敗的?
每次測試都要記錄,包括失敗的,因為你嘗試過的變體數量,會改變最佳結果的意義。想像有 200 個人,每人擲十次硬幣,其中一個人很可能擲出八次或九次正面。這個人並不是擲硬幣高手,他只是 200 次嘗試中最好的那一個。策略搜尋也是同樣的道理:眾多回測中最好的那個,有一部分只是眾多運氣中最好的運氣。
關於資料窺探(data snooping)的研究把這件事說得很精確。White(2000)提出一種檢定,用來問:把整個搜尋過程都考慮進去之後,搜尋中最好的規則是否仍然勝過基準。Bailey 和 López de Prado(2014)則說明了如何依試驗次數來折減夏普比率。夏普比率是平均報酬除以報酬的波動程度。這兩種方法都需要一項多數交易人從來不寫下的輸入:測試了多少個變體。
每次測試都要記錄日期、假設、市場與資料版本、成本與交易時段設定、變體數量、結果,以及你的決定和理由。
假設性範例
在三個月內,你總共測試了 12 個想法、約 50,000 個變體。其中最好的一個在回測中的夏普比率是 1.8。沒有紀錄的話,你只記得一個夏普比率 1.8 的策略。有紀錄的話,你知道它是約 50,000 個變體中最好的那一個。折減後的夏普比率需要的正是這個數字。
AlphaPrime 的策略資料庫會保存通過篩選的策略供檢討,具備搜尋與排序、批次動作和重新檢驗等功能。被淘汰的候選策略不會留下,所以失敗測試的紀錄要另外保存。
如何事先選定檢驗門檻?
在執行檢驗之前,就把通過與不通過的門檻寫下來,這樣是由結果決定策略,而不是由策略決定門檻。檢驗是用策略建立時沒有用過的資料與市場條件來測試策略的階段。樣本內資料是搜尋和參數選擇用過的歷史資料。樣本外資料是搜尋和參數選擇從未用過的歷史資料。
在看任何檢驗結果之前,先決定下列每一項檢查及其限制:
| 檢查項目 | 它回答的問題 | 事先要決定的內容 |
|---|---|---|
| 交易筆數 | 結果是否建立在足夠的交易筆數上? | 最低交易筆數。 |
| 扣除成本後的平均每筆損益 | 優勢能否扛得住手續費和滑價? | 未扣成本的平均每筆損益與一買一賣(來回)成本的最低比值。 |
| 成本壓力測試 | 在更差的成交下是否仍能存活? | 要測試的滑價倍數,以及結果必須維持為正。 |
| 最大回撤 | 你能否承受最糟的虧損? | 以金額表示、並與你的帳戶掛鉤的回撤上限。 |
| 樣本外結果 | 在沒看過的資料上是否仍然成立? | 樣本內績效必須保留多少比例。 |
| 推進分析的一致性 | 調整方法向前推進時是否有效? | 必須為正的視窗比例。 |
| 鄰近參數 | 是一大片穩定區域,還是一個幸運的尖峰? | 設定可以偏移多遠,結果才會崩潰。 |
假設性範例
一位交易人寫下:至少 200 筆交易;未扣成本的平均每筆損益至少是一買一賣(來回)成本的三倍;滑價加倍後仍為正;最大回撤低於帳戶的 20%;樣本外每年至少保留樣本內結果的一半;10 個推進分析視窗中至少 6 個為正。這些數值只是某一位交易人的選擇,並非建議設定。
推進分析是一種反覆在一段期間上調整策略,再拿到下一段沒看過的期間交易的測試。推進分析,以及為什麼只做一次回測不夠這篇文章說明如何選擇視窗。Bailey 及同事(2017)則描述了如何估計一種機率:樣本內被選為最佳的策略,在樣本外表現比中位數更差的機率。這正是你的門檻要攔截的風險。
如果策略沒通過,而你想放寬門檻,請把新的門檻寫下來並記錄這次變更。然後,把在新門檻下測試的每一個策略,都視為新一輪的一部分。
在轉為實單之前,模擬交易該證明什麼?
模擬交易應該證明的是策略的執行方式和測試時一致,而不是證明它在幾週內就能賺錢。模擬交易是在模擬帳戶中,用即時價格向前執行策略,不使用真錢。幾週的模擬結果幾乎無法說明優勢,卻能充分說明運作機制。
- 訊號一致。在相同的 K 棒上,實際運行的策略給出的進場與出場,與回測相同。
- 成交在你的成本假設之內。把每一筆模擬或實際成交,與訊號價格比較。如果滑價比你的設定大,就用實測值重新執行回測。
- 交易時段與假日運作正常。策略不會在你測試過的交易時段之外交易,而且能正確處理假日後的重新開盤。
- 委託單正常運作。停損單、限價單和市價單的下單與取消方式,和回測所假設的一致。
轉為實單時,從市場提供的最小部位開始,例如交易所有掛牌的微型期貨。在第一筆交易之前,先寫下兩件事:檢討結果的日期,以及退場規則。退場規則的一個例子是:實單回撤超過回測最糟回撤的某個設定倍數。實單結果和其他每一次測試一樣,都要回到紀錄中。
該為哪些限制預做規劃?
要圍繞三項限制來規劃:你的時間、你的資金,以及沒有任何測試能確保未來結果這個事實。
- 時間。一個想法從假設走到模擬交易可能要花數週,而且大多數想法都會卡在某道關卡。把研究分成一輪一輪,並訂下固定的結束日期。運算時間也取決於你的處理器或顯示卡、資料長度和搜尋範圍的大小。
- 資金。保證金和回撤決定你能持有多少口數,也決定一個策略是否適合你的帳戶。部位大小要依你願意承受的最糟回撤來決定,而不是依回測的報酬。
- 確定性。回測描述的是規則在過去資料上的表現,並不是預測。通過每一道關卡能降低你在交易雜訊的機會,但無法讓任何結果變得確定。
如果你使用 AlphaPrime,這代表:你可以在執行前就設定搜尋限制、成本、交易時段和檢驗門檻。通過篩選的候選策略會留在同一個地方供檢討。你寫下的關卡與失敗測試的紀錄,請另外保存在一起。
常見問題
個人要如何開始做量化交易?
先從你了解的一個市場和一個 K 棒週期開始,在測試任何東西之前,先寫下資料、成本和交易時段的規則。接著一次讓一個想法走過想法、資料、搜尋、回測、檢驗、模擬交易和實單這些階段。從第一天起就為每次測試留下紀錄。
建立自己的演算法交易系統,一定要會寫程式嗎?
你需要精確的規則,但不一定要自己寫程式。策略生成軟體可以把規則和參數範圍轉換成可測試的策略,而 AlphaPrime 會把它們的原始碼匯出到平台匯出頁面所列的平台。懂得閱讀匯出的程式碼,仍然有助於你確認實際運行的策略和回測一致。
在挑選一個策略之前,應該測試多少個策略?
沒有標準答案。每多一個變體,最佳結果其實只是運氣的機會就會提高。依你的想法所需測試,記錄數量,並以這個數量來評斷勝出的策略,例如使用折減後的夏普比率。經過小而聚焦的搜尋就通過檢驗的策略,比從龐大搜尋中選出的最佳者更容易讓人信任。
一個策略應該做多久的模擬交易?
做到你確認了運作機制為止:訊號一致、成交在你的滑價設定之內,以及在各交易時段和假日的行為正確。對於一週交易數次的策略,這通常需要幾週。很短的模擬期間無法確認優勢,所以不要拿它來做這個用途。
好的回測能告訴我策略會賺多少嗎?
不能。回測顯示的是固定規則在過去資料上,依你的成本與成交假設的表現。在沒看過的資料上做檢驗,以及向前測試,能降低結果只是雜訊的可能性。未來的結果仍然取決於可能改變的市場。
參考文獻
- White, H. (2000). A Reality Check for Data Snooping. Econometrica, 68(5), 1097–1126.
- Bailey, D. H., & López de Prado, M. (2014). The Deflated Sharpe Ratio: Correcting for Selection Bias, Backtest Overfitting and Non-Normality. The Journal of Portfolio Management, 40(5), 94–107.
- Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2017). The Probability of Backtest Overfitting. Journal of Computational Finance, 20(4), 39–69.

