權益曲線模擬器:一條回測曲線藏起了什麼
一次回測只給出一條權益曲線,也就是這些交易的其中一種排列順序。權益曲線模擬器會把這些交易重新洗牌或重新抽樣數百次,呈現同一個策略可能產生的各種回撤與期末數值,讓你用中位數路徑設定預期,用糟糕路徑決定部位大小。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
目錄
權益曲線模擬器能看到哪些回測看不到的東西?
權益曲線模擬器呈現的是一個策略可能產生的權益路徑範圍,而不只是回測碰巧走出的那一條。它會把策略的交易重新洗牌或重新抽樣數百次,讓你看到回撤與期末數值的分布,讀出較貼近現實的中位數,並且依糟糕路徑而不是單一一條線來決定部位大小。
權益曲線是策略已平倉交易結果的累計總和,依交易順序或時間順序畫出。回測績效報表只畫出一條這樣的曲線,並把最深的那一段下跌標為最大回撤。最大回撤是指權益從一個高點下跌、到創下新高之前的最低點之間的最大跌幅,通常以帳戶百分比或金額表示。
權益曲線模擬器是一種程式,它以交易明細或交易統計為輸入,據此產生許多條替代曲線。常見的方法是蒙地卡羅模擬:把交易洗成新的隨機順序,或以相同的勝率與賺賠比隨機抽出新的交易,得到一條新曲線。重複幾百或幾千次,就得到一束曲線。回測曲線就落在這一束之中的某處,模擬器會告訴你在哪裡。
輸入來自交易明細。AlphaPrime(Valynox)在績效報表中列出每一筆交易,並附上回測的權益曲線與回撤。在模擬之前,先用免費的勝率與期望值計算器確認策略每筆交易具有正的優勢;模擬器無法把負期望值變成正的,它只是呈現某個期望值在許多種排列下會如何展開。
為什麼一條權益曲線只是一個樣本?
口數固定時,同一組交易換個順序,最終會停在同一個地方,但途中經歷的回撤可能差異很大,所以回測報表上的最大回撤只是從寬廣分布中抽出的一個點,不是策略固定的屬性。
想像一副 200 張的牌。每張牌是一筆交易,上面寫著賺或賠。把牌洗開,一張一張發出,邊發邊把結果加總:這就是你的回測曲線。再洗一次、再發一次:牌面總和不變,但虧損出現的位置不同了。如果碰巧有五張虧損牌連在中段,曲線就會在那裡出現深深的下挫;如果它們分散開來,曲線看起來就很平順。策略沒有變,變的只是順序。
如果你交易的口數固定,交易結果的總和與順序無關,所以每一條重新洗牌的曲線都停在同一個最終值。改變的是通往那個終點的路徑。同樣的交易,某一次洗牌的最深下挫可能是另一次的兩倍深。
假設性範例
假設有 200 筆交易,其中 90 筆賺 2R、110 筆賠 1R,R 是單筆交易所冒的風險金額。不管順序如何,這份明細加總都是 70R。把它洗牌五次,建出五條權益曲線。下圖中這五條曲線都停在同樣的 70R,但最大回撤從約 8R 到約 22R 不等;若 1R 是起始帳戶的 1%,那就是帳戶的 8% 到 22%。回測報表只會顯示這五個數字中的其中一個。
這就是為什麼一個十年回測顯示 10% 回撤的策略,並不保證下一年也是如此。下一年是從同一副牌再發一次,而這副牌有許多種排列,裡面就含有 20% 的下挫。
如何用勝率、賺賠比與交易筆數模擬權益曲線?
從回測或交易紀錄取得三個輸入就足以建出一束路徑:勝率、賺賠比,以及每年的交易筆數。
- 勝率是以獲利平倉的交易所占的比例,例如 100 筆中有 45 筆。
- 賺賠比是平均獲利交易除以平均虧損交易。賺賠比為 2,代表平均賺的金額是平均賠的兩倍。
- 每年交易筆數決定一條模擬路徑的長度。一年有 250 筆交易的策略,需要抽 250 次才能模擬一年。
勝率與賺賠比合起來就得到期望值,也就是以風險單位表示的單筆交易平均結果。你只需要這個公式:
期望值 =(勝率 × 平均獲利)−(敗率 × 平均虧損)
其中勝率是獲利交易的比例,敗率是 1 減勝率,平均獲利是獲利交易的平均利潤,平均虧損是虧損交易的平均損失,兩者都以 R(每筆交易所冒的風險金額)計。正的期望值代表策略平均而言每筆交易都有獲利;模擬器接著告訴你,通往這個平均值的路可能多顛簸。
模擬本身是一個四步驟的迴圈:
- 設定三個起始值:勝率、平均獲利與平均虧損,以及每年的交易筆數。
- 抽出一組隨機的交易序列,筆數與上述相同。每一筆交易,以等於勝率的機率判為獲利,否則判為虧損。
- 把結果依序相加,得到一條權益路徑。
- 重複步驟 2 和 3 一千次,再依期末數值與最大回撤把路徑排序,以便讀取百分位數。百分位數是指有特定比例的路徑落在其下的水準:第 5 百分位是每 100 條路徑中只有 5 條會跌破的值。
假設性範例
勝率 45%,平均獲利 2R,平均虧損 1R,一年 250 筆交易。期望值 = 0.45 × 2R − 0.55 × 1R = 0.90R − 0.55R = 每筆 0.35R。250 筆交易下,平均路徑約在 87R 結束。以這些輸入抽出一千條路徑,得到的最大回撤中位數約為 12R,第 5 百分位的最大回撤約為 24R,另有少數路徑深於 30R。產生這些統計的回測只顯示單一的 15R 回撤,接近這束曲線的中間。
以真實交易洗牌建出的模擬會保留每筆交易的實際大小,因此保留了大的極端值。只用勝率與賺賠比建出的模擬,則假設每筆獲利與每筆虧損大小相同,會把極端值抹平。有交易明細時用洗牌法;只有摘要統計時才用三個輸入的方法。免費的蒙地卡羅模擬器可以貼上你的交易明細,用洗牌法產生許多條隨機順序的曲線,不必自己手動建出整束路徑。
如何讀這束曲線:中位數路徑、糟糕路徑與恢復時間?
這束曲線有三件事值得讀:用中位數路徑看預期、用第 5 百分位路徑看能否存活、用最長一段沒有創新高的時間看耐心。
| 要讀什麼 | 它是什麼 | 怎麼運用 |
|---|---|---|
| 中位數路徑 | 位於中間的路徑:一半的模擬路徑期末在它之上,一半在它之下 | 用它設定正常年度的預期,而不是用回測曲線 |
| 第 5 百分位路徑 | 每 100 條模擬路徑中只有 5 條會跌破的那條路徑 | 把它的最大回撤當作你必須撐得過的虧損 |
| 最長橫盤區間 | 典型路徑上,從一個權益高點到下一個高點之間最長的交易筆數或月數 | 事先決定你願意在沒有創新高的情況下持續交易多久 |
中位數路徑是回測曲線的誠實版本。如果回測曲線遠高於中位數,代表回測碰上了幸運的排列;如果遠低於中位數,代表回測運氣不好,這也會發生。
第 5 百分位路徑對部位大小才是關鍵。它不是這束曲線中最糟的路徑,因為一千條隨機路徑中最糟的那條本身就是一個隨機極端;第 5 百分位則是衡量糟糕年度的穩定、可重複的指標。
最長橫盤區間是多數交易人略過、卻最需要的數字。一年 250 筆交易、勝率 45% 的策略,即使一切正常,也常常會好幾個月沒有創新高。事先知道這個數字,可以避免你在最糟的時間點把策略關掉。
這束曲線會繼承輸入的所有缺陷。如果回測的勝率與賺賠比來自過度配適的搜尋,整束曲線都會偏高。可以的話,用推進分析的樣本外視窗中的交易來跑模擬,讓輸入來自調參時沒看過的資料。
如何用模擬出來的回撤決定部位大小?
決定口數時,要讓糟糕路徑的回撤,而不是回測的回撤,落在你願意虧損的帳戶比例之內。這通常意味著口數比單一曲線所暗示的更少。
步驟有三個:
- 決定你能接受的最大回撤占帳戶的比例,例如四分之一。
- 取第 5 百分位路徑的最大回撤,以每口的 R 計。
- 選定口數,使這個回撤乘以每口 R 的金額價值再乘以口數,維持在你的上限之下。
假設性範例
帳戶 100,000。上限:帳戶的 25%,即 25,000。一口每筆交易冒 500 的風險,所以每口 1R = 500。回測回撤為 15R,即每口 7,500;三口是 22,500,低於上限。模擬得到的第 5 百分位回撤是 24R,即每口 12,000。
| 部位大小的依據 | 口數 | 採用的回撤 | 該回撤下的虧損 | 占帳戶比例 |
|---|---|---|---|---|
| 回測回撤(15R) | 3 | 回測曲線 | 22,500 | 22.5% |
| 同樣 3 口走第 5 百分位路徑 | 3 | 24R | 36,000 | 36% |
| 第 5 百分位回撤(24R) | 2 | 24R | 24,000 | 24% |
依回測曲線決定部位是三口,碰上糟糕的一年會虧掉帳戶的 36%。依第 5 百分位路徑決定部位是兩口,把糟糕的一年控制在 24%。
免費的部位大小計算器可以針對給定的帳戶風險與停損距離完成最後一步。
權益曲線交易規則有用嗎?有哪些陷阱?
權益曲線交易規則多加了一個會落後的參數,常常錯過回撤之後的回升,所以必須像其他規則一樣用樣本外資料檢驗,而不是假設它有幫助。
權益曲線交易規則是依據策略自身權益曲線的形狀來關閉或開啟策略的規則。常見的形式是:當權益跌破權益的移動平均時暫停交易,當權益升回其上時恢復交易。這個想法聽起來很安全,實務上卻會出現三個問題。
- 它反應得晚。權益的移動平均要在連續幾筆虧損之後才會下降。等到規則讓策略暫停時,大部分的回撤已經吃下去了。
- 它恢復得晚。平均線要在連續幾筆獲利之後才會上升,而暫停中的帳戶並不會做這些交易。因此過濾後的曲線會錯過回升的第一段,而那往往是最強的一段。
- 它多了一個參數。移動平均的長度是一個要自己挑的新數字,而你是在看過回測曲線之後才挑的。這樣選出來的規則,是對同一份資料做挑選的一種形式,而這正是一開始就會讓回測膨脹的機制(Bailey, Borwein, López de Prado & Zhu, 2014)。
模擬器為這類規則提供了一個乾淨的檢驗方式。在由洗牌交易建出的這束曲線中,順序是隨機的,所以最近幾筆交易不帶有關於下一筆的任何資訊,這條規則從構造上就不可能改善結果。只有當你策略的獲利與虧損會以持續存在的方式聚集時,規則才可能有幫助,例如市場在適合策略的盤勢與不適合的盤勢之間交替。所以要比較兩件事:把規則套用在真實的交易序列上,以及套用在一千組洗牌後的序列上。如果真實序列的表現沒有明顯優於洗牌後的序列,就代表沒有聚集現象,這條規則只是成本。
如何用你自己的數字跑一次模擬?
從你自己的交易明細取得勝率、平均獲利與平均虧損,檢查期望值,在試算表或任何模擬器中跑抽樣,並在實際交易之前,把模擬出的回撤範圍與回測報表中的回撤做比較。
- 匯出交易明細。你需要每筆已平倉交易一列,並附上其損益。由此數出獲利交易的筆數、算出勝率,並算出以金額或 R 表示的平均獲利與平均虧損。
- 檢查期望值。把這三個數字輸入本文開頭連結的勝率與期望值計算器。如果扣除手續費與滑價後的期望值不是明確為正,就到此為止;期望值為零的策略,其曲線束以零為中心,只會告訴你隨機波動有多大。
- 跑抽樣。試算表就夠了。用一欄隨機數決定每筆交易是賺或賠;第二欄把結果累加成一條路徑;把這些欄位往旁邊複製,就得到許多條路徑。逐步的試算表做法見用 Excel 做蒙地卡羅模擬。如果你有交易明細,就用洗牌取代由勝率與賺賠比抽樣,這樣大的極端值才會保留。
- 讀三個數字。對每條路徑記錄期末數值與最大回撤;免費的回撤計算器可以找出任何單一權益序列的最大回撤與恢復時間。把路徑排序,讀出期末數值的中位數、第 5 百分位的最大回撤,以及典型的最長橫盤區間。
- 與報表比較。把回測回撤放在模擬範圍旁邊。如果回測回撤落在這束曲線較淺的一端,代表回測碰上了友善的排列,實際交易的策略會感覺更顛簸。依上一節的做法,用第 5 百分位回撤來決定部位大小。
- 改動後重複。規則、成本或市場的任何改變,都會改變交易統計,所以輸入一變動,就要重跑模擬並重新決定部位大小。
如果你使用 AlphaPrime,這代表:績效報表提供回測的權益曲線、它的回撤,以及完整的交易明細,這些正是模擬所需的輸入;模擬本身在你的試算表或模擬器中執行,在你選定口數之前,告訴你圍繞那一條曲線的區間有多寬。
常見問題
什麼是權益曲線模擬器?
權益曲線模擬器是一種程式,它根據策略的交易或交易統計,建出許多條替代的權益曲線。它把交易洗成新的順序,或以相同的勝率與賺賠比抽出新的交易,並把結果畫成一束路徑。這束曲線顯示策略可能產生的回撤與期末數值的範圍,而回測只顯示一條路徑。
需要模擬多少條路徑?
幾百條路徑就能顯示這束曲線的形狀;大約一千條可以讓百分位數(例如第 5 百分位回撤)穩定。再往上,百分位數的變化就很小了。每條路徑的交易筆數更重要:它應該與策略在你想規劃的期間內的交易筆數一致,例如一年。
為什麼模擬出的回撤與回測的回撤不同?
回測的回撤來自交易的某一種特定順序。同樣的交易換個順序,可能產生淺得多或深得多的回撤,卻停在同一個期末值。模擬呈現的是整個範圍,所以回測的數字通常落在其中某處,而且常常不在中間。
決定部位大小該用回撤中位數還是第 5 百分位回撤?
決定部位大小用第 5 百分位回撤,因為那是你在糟糕的一年中需要撐過的回撤;預期則用中位數路徑。依中位數決定部位,意味著大約有一半的年度會比你規劃的更糟。依這束曲線中單一最糟的路徑決定部位則不穩定,因為每次重跑模擬,那條路徑都會變。
策略的權益曲線下跌時暫停它,能改善結果嗎?
預設不會。權益的移動平均在回撤已經發生之後才反應,並在回升已經開始之後才把策略重新開啟,所以過濾後的曲線常常收得更低。只有當策略的獲利與虧損以持續存在的方式聚集時,這條規則才有幫助,而這必須用樣本外資料證明,不能只是假設。
參考文獻
- 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.

