Skip to main content
交易系统中的蒙特卡洛模拟
blog 中级 · ~2 min read

交易系统中的蒙特卡洛模拟

蒙特卡洛模拟通过打乱交易顺序,揭示真实的回撤与破产概率。本文给新手系统开发者讲清楚这套技术怎么用、怎么看结果。

· Lead Editor · · ~2 min read
#trading-systems#backtesting
本文为英文。需要查看中文翻译吗?

交互工具在翻译视图中可能无法使用。

交易系统中的蒙特卡洛模拟

你的回测只跑出了一条资金曲线。蒙特卡洛能告诉你,原本可能经历的几百条等概率曲线长什么样。

为什么单一回测会骗人

回测是按时间顺序跑出来的一串交易。顺序很关键:同一批交易换个排列方式,回撤能差出一倍,心理压力也完全不是一回事。你回测里看到的 15% 回撤,把同样的交易重新排个序,可能就变成 30%——期望值没变,能不能活下来完全是两个故事。

蒙特卡洛模拟(Monte Carlo Simulation,MCS)就是解决这个问题的:把交易列表重采样几千次,构建一个结果分布出来。

两种主流做法

1. 交易重采样(shuffle)

把回测出的交易拿出来,随机打乱顺序,算出对应的资金曲线。重复 1000 到 10000 次。

能看出什么:在历史胜率/亏损分布给定的情况下,可能出现的回撤和最终资金的分布。连亏这种事任何顺序都可能撞上——MCS 告诉你每种场景发生的概率。

2. 有放回重采样(bootstrap)

有放回地随机抽样,构造任意长度的新序列。这不仅能估回撤,还能估破产概率(probability of ruin)——一串亏损把账户打光的概率。

能看出什么:系统对历史样本里没出现过的极端连亏的抗压能力。

蒙特卡洛报告都给什么

一份典型的 MCS 输出包括:

指标 含义
中位数最大回撤 正常排序下你能预期的回撤
95 分位最大回撤 "倒霉"排序下的回撤
99 分位最大回撤 接近最坏情况的回撤
破产概率 撞上破产阈值的概率
中位数最终资金 预期账户终值
最终资金分布 结果的离散度

一个具体例子

回测交易:200 笔,期望值 +0.3R,最大回撤 12R。

跑 1000 次蒙特卡洛 shuffle:

  • 中位数最大回撤:14R
  • 95 分位:22R
  • 99 分位:28R

回测给你看的是 12R;MCS 说有 5% 的概率会撞上 22R 回撤。如果你的账户只能扛 20R,那这个系统虽然期望值为正,还是太危险。

在仓位管理里怎么用

MCS 直接喂给仓位决策。假设 99 分位回撤是 28R,你想把最坏回撤压在账户的 25% 以内:

单笔风险 = 25% / 28 = 每笔约 0.9%

把仓位调小,让自己待在最坏包络线以内。这比满大街"每笔 1%"的经验法则严谨多了。

破产概率

先把破产定义清楚(比如回撤 50%)。MCS 估算有多少比例的序列会撞到这个阈值。破产概率超过 5% 已经不太舒服;超过 10% 不可接受。

账户必须扛住 N 笔连续亏损。
每笔 1% 风险:破产需要连亏 50 笔。
每笔 5% 风险:破产需要连亏 10 笔。
MCS 揭示 10 连亏实际多久出现一次。

常用工具

  • TradesViz、QuantAnalyzer:自带 MCS 模块
  • Python:用 numpy.random.choice 几行搞定
  • Excel:用 RAND() 打乱交易再重算
  • NinjaTrader / MultiCharts:有 MCS 插件

一段 30 行的 Python 脚本就能把 CSV 里的交易结果打乱,几秒跑出完整分布。

MCS 的局限

  • 假设交易独立:实际交易会扎堆(同一市场状态下亏损集中来)
  • 分布固定:未来的交易分布可能跟过去不一样
  • 不建模状态切换:默认未来像过去
  • 假设回测本身无偏:垃圾进,垃圾出

想要更贴近现实,用 block bootstrap——按块打乱连续交易,保留短期相关性。

常见错误

  • 把中位数回撤当最坏情况(要看 95 分位)
  • 样本太少就跑 MCS(至少 200 笔才稳)
  • 用绝对金额而不是 R 倍数(会掩盖仓位变化)
  • 忘了算成本(滑点波动)
  • 只报中位数最终资金(下行尾部才要命)

结果怎么读

稳健的系统长这样:

  • 中位数最大回撤接近或低于回测值
  • 95 分位回撤不超过回测值的 2 倍
  • 破产概率低于 1–2%
  • 中位数最终资金为正,下行尾部有限

脆弱的系统长这样:

  • 95 分位回撤是回测值的 3–5 倍
  • 破产概率不低
  • 最终资金分布很宽——运气压过技术

实操流程

  1. 在回测里跑出 200+ 笔交易(先修掉各种偏差)
  2. 导出交易列表(R 倍数)
  3. 跑 1000+ 次蒙特卡洛 shuffle
  4. 把 95 分位回撤当你的规划数
  5. 设仓位让 99 分位回撤低于破产阈值
  6. 实盘交易累积后每季度重跑一次

一句话经验法则

如果你的系统 MCS 跑出来 95 分位回撤超过回测回撤的 2.5 倍,说明系统比你以为的更靠运气——要么加样本,要么简化规则。


下一篇:再稳健的回测,上实盘前也得先过 forward demo testing 这一关。

相关市场数据由 TradingView 提供。

分享:
𝕏 f in r/
·
📝

我的笔记

登录后可在本文保存笔记并与社区分享。

✓ 已核查事实 审阅人 Timi Chen, 编辑顾问 · 发布于: 2026-06-04 · 编辑政策
由 Marcus Cole 起草 · 由 Timi Chen 于 2026-06-04 审核 · 最后检查于 2026-06-04

教育内容 · 非财务建议 · 风险自担

相关内容

相关术语

下一篇推荐

trading-systemsbacktesting 2026-07-01

Trading System Development Lifecycle: Hypothesis to Deployment

A complete development lifecycle from hypothesis through testing, optimization, and live deployment with concrete gates and kill criteria at each stage.

阅读更多 →

Smart Recommendations