交易回撤压力测试:蒙特卡洛模拟怎么做

 / 
1

做交易回撤的蒙特卡洛模拟,核心动作不是"预测最大回撤是多少",而是把你历史交易的结果重新打乱顺序,跑上千遍,看回撤的分布范围。单次回测里的那个回撤数字只代表一种特定的交易顺序,蒙特卡洛回答的是:同样的策略,换一种运气排列,回撤可能深到什么程度。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

一个具体的参考:有分析指出,单次回测显示的回撤可能明显低于蒙特卡洛揭示的最坏情况。某策略回测回撤为 -12%,但在模拟的最差 5% 情景中,回撤可达 -25% 到 -30%,是回测值的两倍以上。这个差距就是序列风险,也是做压力测试的理由。

先确认你手头有什么数据

做模拟的前提是至少有一份逐笔交易记录,包含每笔的盈亏金额或收益率,以及交易方向。回测软件导出的 trade list、交易日志、券商对账单都可以。如果只有一条净值曲线而没有逐笔数据,能做"净值曲线打乱",但效果不如逐笔打乱精细。

交易笔数对结果可靠性有直接影响。有教程建议至少 200–300 笔历史交易,低于约 100 笔时模拟结果噪声很大。如果你的策略交易频率低、历史样本少,模拟出的回撤分布本身就不稳定,只能当作方向性参考,不能当作精确的风险预算。

选哪种打乱方式,决定了模拟是否诚实

这是实际操作中最容易做错的一步。常见的做法有两种:

IID 随机打乱(简单重排):把所有交易的盈亏随机重新排序,假设每笔交易相互独立。实现最简单,适合均值回归类策略,因为这类策略的交易之间关联性弱。问题在于,它破坏了你策略中可能存在的连续亏损或连续盈利结构,可能低估持续回撤的概率。

Block Bootstrap(分块重抽样):把连续的若干笔交易作为一个"块"整体抽取,保留块内的顺序。块大小通常取交易笔数的平方根左右。如果你的策略有趋势跟踪特征、或者亏损倾向于扎堆出现,分块方法给出的回撤分布更保守、也更接近真实情况。有代码库的注释明确写道:对于趋势策略,IID 打乱会低估持续回撤的概率。

我的判断是:如果你不确定策略属于哪一类,先用 IID 跑一遍,再用 block bootstrap(块大小取 √N)跑一遍。如果两者给出的 95 分位回撤差距不大,用哪个都行;如果 block 的结果明显更深,说明你的交易存在序列依赖,应该以 block 的结果为准。

跑多少次,看什么指标

迭代次数建议至少 1000 次,要得到较稳定的尾部指标(5 分位),跑 5000–10000 次更可靠。计算量在现代机器上不是瓶颈,一次简单的重排模拟在秒级完成。

输出不要只看平均值。回撤分布的关键切点:

  • 中位数(50 分位):典型情况下的回撤深度。
  • 95 分位(即最差 5% 情景):这是设置仓位和止损线的依据。如果 95 分位回撤是你无法承受的,说明当前仓位过重。
  • 最大值:模拟中出现的最深回撤,用于理解极端尾部风险。

有分析给出了一个可参考的决策逻辑:如果策略在 2% 单笔风险下,95 分位回撤接近 -25%,降低到 1% 风险可能让 95 分位回撤控制在 -25% 以内,代价是收益中位数下降,但存活概率显著提升。这个取舍比"追求最高收益"更符合压力测试的目的。

一个需要留意的失效条件

蒙特卡洛模拟假设你用来重排的历史交易盈亏,能够代表未来的盈亏分布。如果市场结构发生了根本变化,这个假设就不成立。2015 年瑞郎脱钩、2020 年新冠冲击这类事件,历史数据中的盈亏分布无法覆盖。模拟结果告诉你"基于过去的数据,回撤可能有多深",不告诉你"未来不会出现历史上从未有过的亏损幅度"。

另一个限制:如果你在模拟中同时调整了仓位大小,需要确保每个模拟路径中的仓位逻辑与实盘一致。有论坛讨论提到,有人做蒙特卡洛时误把仓位设成了 100% 权益,而回测中实际是 10% 仓位,导致模拟回撤远大于回测回撤,无法比较。模拟的参数必须和你要评估的策略参数对齐,否则跑出来的数字没有意义。

实际可以怎么跑

如果你不想自己写代码,一些回测平台内置了蒙特卡洛模块。Wealth-Lab 的 Monte Carlo-Lab 支持交易打乱、跳过交易概率等选项;StrategyQuant 也提供交易重排和跳过交易模拟。自己写的话,Python 里用 numpy.random 做 bootstrap 重抽样,循环累积权益曲线,记录每条路径的最大回撤,最后取分位数即可。核心循环不超过几十行。

跳过交易(skip trade)是一个值得加的变体:随机丢弃一定比例的交易(比如 1%–5%),模拟实盘中可能错过的信号或未成交的情况。如果你的策略收益高度依赖少数几笔大盈利,跳过测试会让回撤明显恶化,这本身就是有用的信息。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

参考资料

  1. Switch Markets·Monte Carlo Simulation in Trading,2026-07-01
  2. Docs.rs·MonteCarloMethod(IID Shuffle 与 Block Bootstrap 说明)
  3. GitHub·Learn-Quant Bootstrap 说明(IID vs Block Bootstrap),2026-05-31
  4. Switch Markets(西班牙语版)·Simulación Monte Carlo en Trading,2026-08-26
  5. Wealth-Lab·Monte Carlo-Lab 扩展说明
  6. Wealth-Lab·Monte-Carlo-Lab-Stress-Test 讨论(跳过交易选项),2025-11-12
  7. Wealth-Lab·MetaStrategy drawdown vs Monte Carlo drawdown 讨论(仓位参数不一致问题),2025-11-12
  8. StrategyQuant·Tests de Monte Carlo(交易重排与跳过),2025-08-28
  9. arXiv·Drawdown Risk Beyond Brownian Motion(蒙特卡洛回撤路径生成方法参考)