程式交易能獲利嗎?決定散戶成敗的幾個數字
程式交易是一種方法,不是優勢。散戶期貨交易者要獲利,必須同時做到兩件事:一套經過檢驗的規則,在扣除手續費與滑價後,於未經調校的資料上仍維持正的平均每筆損益;而且帳戶要撐得過比回測更大的回撤。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
程式交易對散戶期貨交易者能獲利嗎?
散戶期貨交易者要靠程式交易獲利,必須同時做到兩件事:一套經過檢驗的規則,在扣除手續費與滑價後,於未經調校的資料上仍維持正的平均每筆損益;而且帳戶要撐得過比回測更大的回撤。這些都不是軟體決定的,而是研究流程決定的。
程式交易(algorithmic trading)是指由寫好的規則決定每一次進場、出場與部位大小,並由程式執行這些規則,而不是由人逐筆決定。這個定義完全沒有提到獲利。規則可以被完美執行卻仍然虧損,因為程式只會照規則做事。因此「程式交易能不能獲利」的答案,就像「食譜好不好吃」一樣:取決於食譜,烤箱不會讓它變好吃。
對散戶帳戶而言,決定結果的因素大致依序如下:
- 規則本身到底有沒有優勢,也就是價格是否存在一種重複出現、頻率高到值得交易的行為。
- 這個優勢是否在規則未曾調校過的資料上量測過,因為只在調校資料上量測的結果,有一部分是在擬合雜訊。
- 這個優勢能否扛得住交易它的成本,這些成本每筆交易都要付,卻不會出現在價格圖上。
- 交易者能否陪策略度過糟糕的月份,這需要足夠的資金,以及何時該停手的計畫。
優勢從哪裡來,又從哪裡流失?
優勢是一種可重複的價格行為,每筆帶來的價值高於交易它的成本;它會從兩個洞流失:交易成本(手續費、規費與滑價),以及讓回測看起來比實際行為更漂亮的過度最佳化。多數在實單中失敗的散戶策略,回測時看起來都有優勢,是被這兩個洞吃掉的,而不是因為市場變了。
可以把毛優勢想成桶子裡的水,每個漏洞都是一個洞。水少、又有兩個洞的桶子,還沒提到任何地方就已經空了。
- 交易成本是真實委託要付、但價格圖上看不到的一切。手續費與規費包括期貨商的手續費,加上交易所、結算與法規相關費用,進場和出場都要收;它們是按每口固定收取,所以對每筆波動幅度很小的策略傷害最大。滑價是回測假設的價格與真實委託成交價之間的差距;市價單與停損單通常至少比觸發價差一個跳動點成交,在開盤與消息前後更多。回測中的交易成本說明了如何誠實估算這兩個部分。
- 過度最佳化是回測結果中來自擬合測試資料雜訊、而非真實行為的那一部分。這是最常被交易者忘記的漏洞,因為它不會以任何項目出現。Bailey、Borwein、López de Prado 與 Zhu(2014)指出,在同一份資料上嘗試足夠多的參數組合,幾乎任何樣本內結果都能做得出來,而預期的樣本外結果反而下降。回測過度最佳化用白話介紹了這項研究。
假設範例
某個微型 E-mini S&P 500 期貨(MES)的策略,回測中毛平均每筆損益為每口 +$12。手續費與規費每一買一賣(來回)為 $2.40。每邊一個跳動點的滑價,以每跳動點 $1.25 計(目前的每跳動點價值請用期貨合約計算器或交易所的合約頁面確認),合計 $2.50。同一條規則在未經調校的資料上,每筆毛損益只有 $8,而不是 $12,所以過度最佳化吃掉 $4.00。剩下的是 $12 − $2.40 − $2.50 − $4.00 = 每筆 +$3.10。優勢仍然為正,但只剩原本的四分之一,而且每邊再多一個跳動點的滑價,又會再削掉 $2.50。
實務上的檢驗很簡單:在你信任它之前,毛平均每筆損益應該是一買一賣(來回)成本的好幾倍。如果平均每筆損益和成本差不多大,扣掉費用後這個策略就只是擲硬幣。
實單交易時,回測數字代表什麼?
樣本外結果、最大回撤與獲利因子各自回答不同的問題,而實單帳戶通常會看到比樣本內回測更差的回撤與更低的獲利因子。依每個數字所回答的問題來解讀,可以避免最常見的失望:期待樣本內那條平滑的曲線,拿到的卻是顛簸的那條。
先講三個定義。樣本內結果是在用來挑選規則與參數的資料上得到的回測結果。樣本外結果是在沒有用於任何這些選擇的資料上得到的結果。最大回撤是權益曲線從一個高點跌到創新高之前的下一個低點的最大跌幅,通常以帳戶百分比表示。獲利因子是本文唯一的公式:
獲利因子 = 總獲利 ÷ 總虧損,其中總獲利是所有獲利交易的加總,總虧損是所有虧損交易的加總,兩者都已扣除成本。數值 1.0 代表賺賠相抵;1.5 代表策略每虧 $1.00 就賺 $1.50。
| 數字 | 它回答的問題 | 實單中通常會怎麼變 |
|---|---|---|
| 樣本內結果 | 規則對挑選它們時所用的資料擬合得多好? | 幾乎總是太好;把它當成上限,而不是預測。 |
| 樣本外結果 | 同一套規則在從未見過的資料上有效嗎? | 最接近實單;預期實單會落在它附近或更低。 |
| 最大回撤 | 帳戶在恢復前跌了多少? | 實單回撤通常更深,因為在短短的歷史中,最壞的情況還沒發生。 |
| 獲利因子 | 每虧一塊錢賺多少? | 滑價高於模型假設時會下降;要與樣本外數值比較,而不是樣本內的。 |
假設範例
同一個策略的樣本內獲利因子為 1.9,最大回撤為 8%。在樣本外的年份,獲利因子是 1.3,最大回撤是 14%。如果交易者依 8% 的回撤來配置帳戶,一個樣本外的正常月份就會讓他被洗出場。14% 才是該用來規劃的數字,而實單交易仍可能更深。
取得樣本外數字的可靠方法,是在開始調校之前先切分歷史資料,或執行推進分析,它會在整段歷史上反覆進行這種切分。Harvey 與 Liu(2015)建議,要依挑出這個策略之前嘗試過的策略數量,調降所報告的夏普比率;同樣的想法也適用於獲利因子與回撤。
程式交易比手動交易好嗎?
整體而言沒有誰更好:系統化策略擅長紀律、測試,以及同時操作多個市場;手動交易者擅長解讀情境,並在條件改變時退場觀望。所以誠實的選擇,取決於交易者真正用得上哪些強項。
市場型態(market regime)是指市場以某種方式運行的一段時間,例如長趨勢或窄幅盤整。在某一種型態上調校的規則,到下一種型態可能表現不佳,而程式不會自己察覺這種變化。手動交易者往往一天內就能察覺,但同一個人在壓力下也會放寬停損,這是程式絕不會做的事。
| 任務 | 系統化 | 手動 |
|---|---|---|
| 壓力下的紀律 | 強:規則不會在連虧兩次後改變心意 | 弱:停損被移動、部位被加倍 |
| 交易前先測試想法 | 強:規則可以用多年資料回測 | 弱:主觀的方法無法用同樣方式測試 |
| 同時操作多個市場 | 強:一支程式同時盯十個市場就像盯一個一樣容易 | 弱:看到兩三張圖表,注意力就不夠用 |
| 對突發消息的反應 | 弱:除非另行設定,否則規則會照常交易穿越消息 | 強:人可以選擇退場觀望 |
| 適應新的市場型態 | 視情況:需要定期重新檢驗 | 強:直接解讀情境 |
| 盯盤時間 | 低:做研究與檢討,不用盯盤 | 高:每筆交易都要在場 |
許多散戶最後會採取分工:由規則決定進場、出場與部位大小,人則按固定時程判斷每個策略是否仍如測試時那樣運作,以及是否繼續執行。這種分工同時用到兩欄的優點。
實際上需要多少資金與時間?
帳戶必須涵蓋交易所保證金,加上比回測最糟情況更大的回撤,並留有餘裕可以繼續交易;而時間預算是每週的研究與檢討,而不是盯盤時間,這也是這種做法能與正職並行的原因。回撤計算器可以算出一段權益序列的最大回撤與恢復情況,也就是這個加總中間的那一層。
保證金是交易所要求每持有一口未平倉合約所需的押金,由交易所訂定與調整;目前的數值請查看交易所的合約頁面。保證金只是第一層。帳戶可由三層組成:
- 交易所保證金,對應策略同時持有的口數。
- 樣本外最大回撤,以金額而非百分比表示,且對應相同口數。
- 安全層,讓帳戶能撐過比測試時更深的回撤。常見做法是以測試回撤的大約兩倍來配置,因為短短幾年的歷史很少包含最壞的情況。
假設範例
一口微型 E-mini 合約。本範例中的交易所保證金為 $1,500。樣本外最大回撤為 $2,000。安全層再加 $2,000,讓交易者能撐過兩倍於測試規模的回撤,仍能持有部位。一口的最低帳戶資金是 $1,500 + $2,000 + $2,000 = $5,500。本範例中每週的時間預算,大約是三小時研究新的候選策略,以及約三十分鐘的檢討,將當週的實單交易與回測做比較。
如果三層加起來超過帳戶資金,應該少交易幾口,或改用較小的合約,而不是砍掉安全層。砍掉安全層,等於決定在第一次比測試稍差的回撤時就停手。要看帳戶撐得起幾口、或該改用哪種合約,部位大小計算機能把帳戶風險和停損距離換算成口數。
哪三個習慣讓交易者能保住優勢?
能保住優勢的交易者,從第一次執行就把真實成本放進搜尋中,在投入資金前先用未見過的資料做檢驗,並按時程比較實單交易與回測,以便在策略不再如測試時運作時及早察覺。這三個習慣構成一個循環,少了任何一個,循環就斷了。
- 搜尋時就把真實成本算進去。在評估第一個候選策略之前,先設定好手續費、滑價與下一根 K 棒成交。下一根 K 棒成交是指在某根 K 棒收盤時算出的訊號,在下一根 K 棒成交,而不是以算出訊號的那個收盤價成交。不計成本就替候選策略排名的搜尋,會讓排行榜頂端塞滿交易過於頻繁的策略,事後再加入成本,大部分都會被淘汰。AlphaPrime(Valynox)在回測中評估每個候選策略時,都已納入手續費、滑價與下一根 K 棒成交,所以排名已經反映出實際可交易的結果。
- 交易前用未見過的資料檢驗。執行推進分析,閱讀樣本外結果,並設定策略必須通過的回撤門檻。AlphaPrime 的策略檢驗會套用自訂門檻,並在策略未通過其中一項時停止後續檢查,讓每個候選策略都適用同一套標準。
- 小額交易,並按固定時程比較實單交易與回測,例如每週簡短檢查、每月做較完整的比較。把實單的平均每筆損益、勝率與回撤,和樣本外的數值並列記下來。當實單數字偏離測試範圍的時間,超過回測中一段正常的糟糕期,就回到第 1 步,而不是手動調整參數。
如果你使用 AlphaPrime,這代表:你在研究設定中設定的成本與下一根 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.

