什麼是蒙地卡羅模擬?期貨交易範例
蒙地卡羅模擬是以隨機輸入重複同一個計算很多次,再觀察所有結果的範圍。對期貨交易者而言,輸入就是回測本身的交易:把順序打亂很多次,報表中那一個回撤就會變成一個回撤範圍,可據以規劃帳戶資金。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
什麼是蒙地卡羅模擬?
蒙地卡羅模擬是一種方法:以隨機輸入重複同一個計算很多次,並觀察全部結果的範圍,而不是只看一個數字。對期貨交易者而言,輸入就是策略自己的交易,而回測的權益曲線只是這些交易可能出現的眾多順序之一。
想像一副撲克牌。牌組裡的牌是固定的,但每次洗牌都會改變哪一張排在最前面。交易明細也一樣:回測給你一組固定的獲利與虧損,但它們出現的順序有一部分是運氣。最大回撤是指權益從高點下跌到下一個低點、直到創下新高之前的最大跌幅,而它在很大程度上取決於這個順序。三筆虧損分散在一整年,只會是淺淺的下挫;同樣三筆虧損連在一起,就會是很深的回撤。你可以用免費的回撤計算器計算任何權益序列的回撤;蒙地卡羅問的是:換成其他順序,這個數字會是多少。
蒙地卡羅方法在工程與金融領域的用法相同:當單一答案隱藏了一整片可能性時,就多次抽取隨機輸入,然後觀察分布範圍。在交易中,多數人所指的版本是交易順序蒙地卡羅,也是本文要說明的內容。
蒙地卡羅模擬如何套用在交易明細上?
交易順序蒙地卡羅保留每一筆交易結果,只改變順序,因此它唯一衡量的,就是順序對回撤造成了多大的影響。流程很短:
- 取出回測的已平倉交易明細:每筆交易一個損益,已扣除手續費與滑價。
- 打亂順序。單純洗牌時,每筆交易只用一次。有放回的重抽則是隨機挑選交易,可能重複挑到同一筆;這是自助法(bootstrap),它不僅改變順序,也改變出現哪些交易。
- 依照新的順序重建權益曲線。
- 記錄該曲線的最大回撤與最終結果。
- 重複一千到 10000 次,把記錄下來的回撤彙整成一個分布。
分布就是所有記錄下來的回撤的集合,通常畫成直方圖:每個大小區間內,有多少次模擬的回撤落在其中。原始回測的回撤只是其中某處的一個值。整個流程可以在試算表中完成;用 Excel 做蒙地卡羅模擬的指南會逐欄建立。
一個簡單的實例:十筆交易,一千次洗牌
同樣的十筆交易,可能產生超過原始回撤兩倍的回撤,所以規劃用的數字應來自分布,而不是回測。用整數來看會更清楚。
假設性範例
某策略依下列順序平倉了十筆交易:+$400、−$300、−$300、+$500、+$600、−$200、+$300、−$400、+$500、−$200。淨損益為 +$900,這個順序下的回撤是 $600(第一筆獲利之後的兩筆虧損)。五筆虧損合計 $1,400,所以若全部連續出現,在相同淨損益下回撤會是 $1,400。假設一千次洗牌得到的直方圖在 $800 附近達到高峰,且每 100 次洗牌中有 95 次的回撤低於 $1,200。這個 $1,200 就是第 95 百分位,也是帳戶資金應該對應的回撤。原本的 $600 只是運氣好的順序。
真實的交易明細看起來像下面這次 AlphaPrime(Valynox)的執行。它測試的是以 MACD 規則作為唯一進場與出場,沒有停損、停利或過濾條件,標的為 ES 日 K 棒,期間 2019-01-02 至 2025-06-30,多空皆做,一口。MACD 規則只是以標準指標建立的替代品,並非本文主題。這次執行是搜尋在所嘗試的 1,024 個中留下的那一個候選策略,依其報酬相對於回撤挑選,而事後挑出被留下的那一個,會讓它的數字看起來更漂亮。它的 169 筆已平倉交易就是你要洗牌的輸入,而 $22,175 是實際發生順序下的回撤。
來源:AlphaPrime 產品引擎(CPU),2026-10-31 執行。ES 日線,2019-01-02 至 2025-06-30,多空都做,1 口,每筆手續費 $20、滑價 $25。
| 項目 | 結果 |
|---|---|
| 淨利(已平倉) | $69,220 |
| 最大回撤 | $22,175 |
| 交易筆數 | 169 |
| 勝率 | 50.89% |
| 獲利因子 | 1.46 |
| 平均每筆 | $409.59 |
| 在場時間 | 16.23% |
把這 169 筆交易洗牌,就能看出 $22,175 是落在回撤分布的中間,還是落在運氣好的尾端。洗牌絲毫不會改變這條規則是事後挑選出來的事實,因此淨損益只是對過去的描述,而不是讀者可以預期的結果。
蒙地卡羅模擬能告訴你什麼,不能告訴你什麼?
蒙地卡羅只是重新排列交易明細中的證據,從不增加證據。這一句話就分出了它能回答的問題與無法回答的問題。
| 問題 | 交易順序蒙地卡羅 |
|---|---|
| 光是交易順序,就會讓回撤的範圍有多寬? | 能回答 |
| 回測的回撤是典型的,還是運氣好? | 能回答 |
| 要涵蓋所選的回撤百分位,帳戶資金需要多大? | 能回答 |
| 出現特定長度的虧損期間,可能性有多高? | 能回答 |
| 規則是否對歷史資料過度最佳化? | 不能回答 |
| 測試 1,024 個變體,是否讓被留下的候選策略虛胖? | 不能回答 |
| 未來的交易會和過去相似嗎? | 不能回答 |
| 成本與成交是否模擬正確? | 不能回答 |
第二組問題很重要,因為多數回測正是在這裡出錯。測試許多變體並只留下最好的,所造成的選擇偏誤,已由 Bailey 等人(2014)記載;被灌水的交易明細,無論洗牌多少次,依然是被灌水的。為什麼最好的回測通常是被高估的談的就是這個問題,而蒙地卡羅回測能顯示與不能顯示的事則更深入探討這裡列出的限制。
在研究流程中應該何時執行?
蒙地卡羅應在計入成本與完成策略檢驗之後、決定帳戶資金之前執行,因為它只是詮釋給它的那些交易。整個流程的順序是:
- 回測時納入手續費與滑價,讓明細中的每一筆都是扣除成本後的交易。
- 檢驗。AlphaPrime 策略檢驗中的推進分析步驟會產生樣本外(OOS)交易,值得洗牌的是這些交易,而不是樣本內(IS)的交易。
- 對該樣本外交易明細執行蒙地卡羅,並讀取第 95 百分位的回撤。
- 依該百分位決定帳戶資金與口數;免費的部位大小計算器可以把風險金額與停損距離換算成口數。
- 將策略匯出到交易平台。
這個方法並不在意交易的是什麼商品。期貨的交易明細、股票的明細與 ETF 的明細,洗牌方式都一樣;台股與 ETF 回測指南展示了一個 0050 的範例,其交易明細同樣適用這個流程。
你的下一步:取出上一次回測的已平倉交易明細,洗牌一千次,並將第 95 百分位的回撤與你原本規劃的帳戶資金相比。如果該百分位大於你準備承受的回撤,先減少口數,再做其他調整。
常見問題
用簡單的話說,蒙地卡羅模擬是什麼?
它是一種回答問題的方式:以隨機輸入重複同一個計算很多次,再觀察答案的分布範圍。在交易中,隨機輸入就是回測交易的順序。多次洗牌後的回撤分布,會告訴你單一回測的回撤有多少是順序上的運氣。
交易中的蒙地卡羅分析是什麼?
蒙地卡羅分析是模擬執行完之後對結果的解讀:回撤的直方圖、你據以規劃的百分位,以及原始回測與它的比較。模擬產生分布;分析則把它轉成帳戶資金與口數。
蒙地卡羅要跑幾次才夠?
對多數交易明細而言,一千次洗牌就能對分布的中段得到穩定的概況。尾端,例如第 95 或第 99 百分位,收斂得比較慢,所以當該百分位要決定帳戶資金時,常會跑幾千次。每次執行的成本很低,因此把整個模擬重複兩次,檢查該百分位幾乎沒有變動。
蒙地卡羅模擬能預測未來報酬嗎?
不能。它只是重新排列策略已經產生的交易,並顯示這些交易可能形成的回撤範圍。它無法得知未來的交易是否會和過去相似,也無法修復因測試許多變體並只留下最好的而被灌水的交易明細。
References
- Efron, B. (1979). Bootstrap Methods: Another Look at the Jackknife. The Annals of Statistics, 7(1), 1–26.
- 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.
- Magdon-Ismail, M., & Atiya, A. F. (2004). Maximum Drawdown. Risk, 17(10), 99–102.

