交易系统 XtradingTime

蒙特卡洛模拟:比任何交易技术都重要的系统验证工具

蒙特卡洛模拟:比任何交易技术都重要的系统验证工具

本文属于专题 《系统验证:怎么知道它真的有效》 ,按顺序读效果更好。

本文目录(17 节)



很多人花了三年时间学技术分析,却从来没有认真验证过自己的系统在极端情况下能不能活下来。这才是真正的问题所在。


引子:你的回测结果,可能只是幸存者的故事

你花了三个月搭了一套交易系统。回测跑完,数字很好看:年化收益20%,最大回撤15%,盈亏比1.5:1,胜率55%。

你心里觉得这套系统可以用了。

然后你开始实盘。头两个月还行,第三个月遇到连续止损,第四个月看着账户从高点回撤了22%,超过了回测的最大回撤。你开始怀疑自己,怀疑系统,最后在最低点附近停掉了这套系统。

结果之后的两个月,系统本来会把亏损全部收回来。

这种情况,每天都在发生。

问题出在哪里?不是技术不对,不是参数没调好,而是你从来没有认真问过自己一个问题:

如果历史上那些盈利和亏损,不是按照时间顺序发生,而是随机排列的,最坏的情况会有多糟糕?

蒙特卡洛模拟就是回答这个问题的工具。


一、什么是蒙特卡洛模拟

蒙特卡洛(Monte Carlo)这个名字来自摩纳哥的著名赌城,这不是巧合。这个方法本来就是用来研究随机事件的。

用最简单的话解释:

把你的历史交易结果随机打乱顺序,重复这个过程1000次,看在所有这些不同的排列顺序下,你的账户会经历什么。

举个具体的例子。假设你的交易系统过去跑了200笔交易,结果是这样的:有110笔盈利,平均每笔赚1.5%;有90笔亏损,平均每笔亏1%。总体来看,系统期望值是正的。

但这200笔交易是按照时间顺序发生的。第1笔到第50笔可能运气不错,后面遇到了一段好行情,账户曲线比较好看。

问题是:如果这90笔亏损集中在一起出现,会怎样?

蒙特卡洛模拟就是把这200个结果(110个+1.5%,90个-1%)放进一个袋子里随机抽,抽完200次算一次账户曲线,记录最大回撤和最终收益。然后再放回去,再抽200次,再算一条曲线。

做1000次,你就有1000条不同的账户曲线。

这1000条曲线里,有的很好,有的很差。蒙特卡洛模拟告诉你的,不是最好的情况,而是:

  • 最坏的5%的情况,最大回撤会达到多少?
  • 最坏的1%的情况,最大回撤会达到多少?
  • 在所有情况里,有多少比例的情况你会账户归零?

蒙特卡洛模拟不是预测未来,它是在告诉你:如果市场用了一种极端的方式对待你,你的账户能不能撑住。

这才是你在实盘之前必须知道的事情。


二、为什么回测的结果会骗你

很多人以为回测已经足够了。回测也是用历史数据,也能告诉你系统的表现,为什么还需要蒙特卡洛模拟?

因为回测有一个根本性的局限:它是线性的。

回测按照时间顺序,一笔一笔地跑你的历史数据。它告诉你的是:在那段特定的历史时期,用那个特定的顺序,你的系统表现如何。

但实际市场不是线性的,未来也不会是过去的简单重播。

问题一:好运可能恰好集中在你测试的那段时间

假设你的系统在2020年到2023年回测结果很好,最大回撤只有12%。但你有没有想过,也许2020年那段大涨恰好给你的系统创造了很好的发挥空间,而如果那段大涨出现在2023年底、你系统里正好遭遇了一连串止损之后,结果会完全不同?

问题二:连续亏损的实际影响比你想象的大

回测显示的最大回撤是15%。但这个15%是怎么构成的?也许是分散在12个月里,每次亏一点,中间有盈利缓冲。

如果同样这15%的亏损集中在两个月里连续发生,心理压力会完全不同。更重要的是,如果在更极端的随机排列下,连续亏损的数量比历史上实际发生的更多,回撤会超过15%。

问题三:回测的最大回撤往往是低估的

这一点最关键。回测给你的是”历史上实际发生过的最坏情况”。但这只是无数种可能顺序里的其中一种。

在其他排列方式下,最坏情况可能比历史上实际发生的更糟糕。

蒙特卡洛模拟把这些可能性都展示出来,让你看到完整的风险分布,而不只是那一条恰好发生了的历史曲线。

你的回测最大回撤是历史的产物,蒙特卡洛模拟的回撤分布才是你真正需要为之准备的范围。


三、怎么做蒙特卡洛模拟:从零开始的操作指南

听起来复杂,其实不是。你不需要懂数学,只需要会用Excel或者会跑一段Python代码。

第一步:整理你的历史交易数据

你需要一份你的历史交易记录,里面至少包含:每笔交易的盈亏百分比(或者盈亏金额)。

如果你做了两年,有300笔交易,那就整理成300个数字,类似这样:

+2.1%, -0.8%, +1.5%, -1.0%, +3.2%, -0.9%, ...

没有历史交易记录也可以。如果你的系统已经有明确的参数(胜率和盈亏比),可以直接用这两个参数生成模拟数据。比如胜率55%、盈亏比1.5:1、每笔风险1%,就生成1000个随机交易结果,然后拿这1000个结果去做蒙特卡洛。

第二步:用Excel做简化版

Excel方法不用写代码,适合大多数人。

方法如下:

  1. 把你的历史盈亏数据放在A列,比如A1到A200,每格一个数字(百分比)
  2. 在B列用=INDEX($A$1:$A$200,RANDBETWEEN(1,200))随机抽取一个结果,填200行
  3. 在C列计算累积账户价值:C1=10000,C2=C1*(1+B2/100),依次填到C200
  4. 在D1用=MIN(C1:C200)/MAX(C1:C200)-1计算这次模拟的最大回撤
  5. 按F9刷新,Excel会重新随机抽取一次,记录D1的数字
  6. 重复按F9,记录100次(或者用宏自动运行1000次)

100到1000次的结果就是你的蒙特卡洛样本。

第三步:用Python做完整版

如果你会一点Python,10行代码就够了:

import numpy as np
import pandas as pd

# 你的历史交易盈亏(百分比)
returns = np.array([2.1, -0.8, 1.5, -1.0, 3.2, -0.9, ...])  # 替换为你的数据

n_simulations = 1000
results = []

for _ in range(n_simulations):
    # 随机打乱顺序
    shuffled = np.random.choice(returns, size=len(returns), replace=True)
    # 计算账户曲线
    equity = np.cumprod(1 + shuffled/100) * 10000
    # 计算最大回撤
    rolling_max = np.maximum.accumulate(equity)
    drawdown = (equity - rolling_max) / rolling_max
    max_dd = drawdown.min()
    results.append(max_dd)

results = np.array(results)
print(f"中位数最大回撤: {np.median(results)*100:.1f}%")
print(f"5% 最坏情况回撤: {np.percentile(results, 5)*100:.1f}%")
print(f"1% 最坏情况回撤: {np.percentile(results, 1)*100:.1f}%")

第四步:解读结果

运行完之后,你会看到一个回撤分布。关键数字是:

  • 中位数回撤:1000次里有500次比这个好,500次比这个差
  • 5%分位数:最坏的50次里的最差情况,也就是”坏情况中的坏情况”
  • 1%分位数:最坏的10次,极端情况

如果5%分位数的最大回撤是40%,说明每20次市场走势里,就有1次会让你回撤超过40%。你能接受吗?你的账户能撑住吗?


四、用模拟结果调整你的系统

蒙特卡洛模拟做完,你会得到一个风险分布。接下来的关键是:根据这个分布,做出实际决定。

情况一:结果还可以接受

如果1000次模拟里,95%的情况最大回撤都在25%以内,而你的承受能力是30%以内,那这个系统对你来说风险可控。

但也不要就此放松。你还需要看另一个数字:在最坏的5%情况下,系统最终还能盈利吗?

如果最坏的情况是最大回撤35%,但最终仍然盈利,说明系统的期望值足够强,即使运气极差也能熬过去。

如果最坏的情况是最大回撤35%且最终也是亏损的,说明系统本身的边际优势不够,需要改进。

情况二:结果超出你的承受范围

如果1000次里有10%的情况最大回撤超过40%,而你只有10万本金、只能接受20%回撤,这个系统对你现在的条件来说风险太高。

有两种调整方式:

方式一:降低每笔交易的风险比例

如果你现在每笔交易风险1%,把它改成0.5%。回撤会同比例缩小,但收益也会同比例减少。这是最直接的调整方法。

用蒙特卡洛重新跑一遍,确认降仓后的风险分布在你的接受范围内。

方式二:改善系统本身

如果降仓后系统的期望收益太低、没有实际意义,就要考虑改进系统:提高胜率、改善盈亏比、减少亏损笔数。

改进后再做一次蒙特卡洛,重新评估。

情况三:系统有致命缺陷

如果1000次里有相当比例的情况最终账户归零,或者回撤超过50%,这个系统不适合实盘。不管回测看起来多好。

这种情况不少见。很多看起来很美的系统,蒙特卡洛一跑,发现在某些极端顺序下会触发破产。这正是蒙特卡洛模拟的价值:在你拿真钱去冒险之前,告诉你最坏的可能性。

蒙特卡洛模拟的核心价值不是优化收益,而是在最坏的情况发生之前,让你做好准备。


五、进阶:让蒙特卡洛模拟更接近真实

基础版的蒙特卡洛已经很有用了,但还有几个进阶的改进值得了解。

改进一:考虑交易笔数对结果的影响

交易次数越多,结果越稳定。如果你的历史数据只有50笔,1000次模拟里结果的离散度会很大,置信度较低。

一般来说,至少需要100笔以上的历史交易,蒙特卡洛结果才有较高的参考价值。300笔以上更好。

如果历史数据太少,可以结合理论参数(胜率+盈亏比)来生成更多模拟数据点,但要标注这是理论推演,不是历史实测。

改进二:加入”灾难事件”概率

真实市场里,偶尔会出现回测数据里没有出现过的极端事件:闪崩、黑天鹅、一天暴跌30%。

你可以在蒙特卡洛的数据集里手动加入几个极端亏损数字(比如-10%、-15%的单笔亏损),模拟如果这类事件发生会怎样。这让你的风险评估更加保守,也更接近真实世界。

改进三:用蒙特卡洛设置止损规则

当实盘发生连续亏损,什么时候该停下来检查系统,什么时候只是正常的亏损周期?

蒙特卡洛可以告诉你答案。

如果1000次模拟里,最糟糕的5%情况下最多连续亏损8笔,那么当实盘里连续亏损超过10笔时,你有理由认为这可能不只是随机波动,而是系统出了问题,需要暂停检查。

连续亏损到第几笔该停?蒙特卡洛告诉你这个阈值,不是你的情绪。


总结:验证比技术更重要

交易者花在学习技术分析上的时间,往往是花在验证系统上的100倍。

这个比例反了。

一个没有经过严格验证的系统,不管它看起来多精妙、回测曲线多漂亮,都是未知的风险。你不知道它在极端情况下会表现如何,你也不知道你能不能在最坏的时候撑过去。

蒙特卡洛模拟不是高深的数学工具,它就是一个思维方式:市场不会按照历史顺序重演,但它会用各种顺序来测试你的系统。你需要知道最坏的测试会有多难。

做好这步,你对自己的系统才有真正的信心,而不是因为回测数字好看而自我安慰。

实盘中遇到连续止损,知道这在模拟里出现过,而且系统最终都能恢复,和不知道这一点、完全靠感觉撑着,心理状态完全不同。

这种心理稳定性,才是让你能够持续执行系统的基础。

先验证,再交易。这个顺序不能颠倒。


如果这篇文章对你有帮助,点个「在看」让更多交易者看到。 有问题欢迎在评论区交流,我会逐条回复。

往期精选


免责声明:本文内容仅供学习交流,不构成任何投资建议。交易有风险,入市需谨慎。

微信搜一搜 Tom讲交易

在微信里搜「Tom讲交易」即可关注,每周更新交易教学

推荐课程

合约陪跑实战训练营

不只教方法,更带你实盘执行。从仓位管理到止损止盈,手把手纠正你的交易习惯,建立可复制的盈利系统。

相关文章

交易系统

A股实战复盘:我用这套方法在A股做了什么

我做外汇做了将近十五年,然后有一段时间专门跑去做A股。我不是因为觉得A股容易,而是想搞清楚:一套在外汇里跑通的系统,在A股里能走多远。 引子 这篇文章是复盘性质的,不是来推荐A股的,也不是来劝你回避A股的。我只是想诚实地说说我在A股里具体做了什么,遇到了什么,最后得出了什么结论。 时间节点大概在几年前,市场处于一个中等活跃度的阶段,不是极端牛市,也不是全面熊市,就是那种

交易系统

复盘测试的真正作用:90%交易者都搞错了

你以为复盘是在找错误,找哪里做错了,然后下次不犯。这个理解没有错,但它只抓到了复盘价值的10%。剩下90%,是你一直在忽视的东西。 引子 交易圈里有一种人,复盘做得比谁都勤。每天收盘,把所有亏损的单子翻出来,仔细研究哪里出了问题:这里的支撑没看准,那里的止损设太紧,这笔应该等信号更明确再进…… 他们真的在认真复盘,也真的在认真反思。但做了一年、两年,账户还是亏损的。

交易系统

比特币多头交易复盘:我在这笔交易里学到了什么

做完这笔交易之后,我坐在椅子上发了很久的呆。不是因为赚钱了,而是因为我终于想清楚了一件事:那些在这个点位犹豫不决的人,和那些割肉跑路的人,根本上没有区别。 引子 2022年11月,FTX崩塌。 这件事的冲击规模,放在加密货币历史上大概能排进前三。一家世界排名第二的交易所,几乎在一夜之间清零。创始人被捕,数十亿美元的用户资产蒸发,行业声誉跌到了谷底。比特币那段时间跌穿了160

交易系统

黄金中线波段交易复盘:3笔真实交易的完整记录

中线波段交易最难的不是找买点,而是在对的时候坐得住,在该走的时候真的走。这篇文章是2020年我做的3笔黄金交易的完整复盘,包括我当时怎么想的,怎么做的,哪里做对了,哪里差点犯错。 引子 2020年对黄金来说是一个特殊的年份。 那一年,黄金从年初的1550美元附近,先是在3月因流动性危机暴跌到1450以下,然后一路反弹,5月突破1700,7月突破1800,8月冲破2000美元

交易系统

复盘方法论:职业交易员每天收盘后做的5件事

复盘是拉开职业交易员和业余者最大差距的单一习惯。不需要神秘策略,不需要高级指标,就是每天收盘后30分钟做5件事。坚持做这5件事,一年后你就能看到天壤之别。拆解职业交易员的每日复盘清单和具体步骤。

交易系统

非农数据交易策略:该不该做数据行情

每个月第一个周五,外汇市场就像进入了一种特殊状态。点差变宽,价格忽上忽下,评论区里一堆人问:这次非农怎么做?今晚能抄底吗? 引子 如果你在外汇交易圈子待过一段时间,你一定见过这样的场景: 非农数据前一小时,各种预测帖铺天盖地。有人说要做多美元,有人说要做空,还有人发出了具体的入场价格和止盈止损。数据一出来,价格猛冲。评论区的人有的在喊赚了,有的在喊被止损了,还有人说

觉得有用?关注公众号

扫码或在微信里搜「Tom讲交易」,每周更新交易教学文章

扫码关注 Tom讲交易,或微信搜一搜 Tom讲交易

配套免费工具

交易规则卡片

打开