Backtest Robustness Checker
- 指标
- 版本: 1.2
- 更新: 12 十一月 2026
- 激活: 5
Backtest Robustness Checker 是一款 MetaTrader 5 指标,它读取您已平仓交易的列表,并显示当同样的交易以不同顺序出现、部分交易缺失或去掉最大的盈利交易时,统计数据会如何变化。交易可以来自您的账户历史、以 HTML 保存的策略测试器或账户报告,或者一个简单的 CSV 文件。结果显示在图表上的面板中,并可保存为 CSV。
它只显示过去交易的统计数据。它不预测也不保证未来的结果,不告诉您某个策略或 EA 是否好、是否盈利或是否“稳健”,也不给出“通过 / 不通过”的结论。“最大回撤的第 95 百分位”之类的蒙特卡洛数值描述的是您过去交易被打乱后的副本,并不是未来发生回撤的概率。如何使用这些数字由您自己决定。
只读:它从不下单、修改或平仓,也不提供买入或卖出信号。在策略测试器中(以及市场的自动检查中)没有您自己的交易,因此它会显示内置的示例数据(SAMPLE DATA),并以橙色标注 "not real"(非真实)。
功能
- 三种数据来源:账户历史(可按魔术号、交易品种和平仓日期筛选)、MQL5\Files 中的文件(以 HTML 保存的 MT5 报告或 CSV),或内置的 400 笔演示交易示例。
- 原始顺序:交易数、净利润、盈利因子、胜率、每笔平均盈亏、最大回撤(金额和 %)、最大连续亏损、最长水下期(以交易笔数计)。
- 打乱交易顺序(蒙特卡洛):将同样的交易以随机顺序重复排列(默认 1,000 次)。最大回撤、最大回撤 %、最大连续亏损和最长水下期的最小值、5%、25%、50%、75%、95% 和最大值;回撤不小于原始回撤的打乱次数占比;超过您设定的回撤 % 的占比;直方图。
- 随机剔除交易:每次运行按您设定的概率(默认 10%)逐笔剔除交易,其余交易保持原始顺序。净利润、盈利因子、最大回撤和剩余交易数的百分位、净利润 <= 0 的运行占比,以及直方图。
- 去掉最大的盈利:去掉 K 笔最大盈利交易(默认 5)后的净利润、盈利因子和最大回撤。
- 按年表格(交易数、胜率、净值、PF、年内最大回撤、最长连亏、平均)和按月净利润表格,均按平仓时间统计。较长的表格分页显示。
- 导出 CSV(按钮):设置、全部统计、百分位、按年和按月表格、交易列表,以及可选的每次模拟一行。保存在 MQL5\Files。
- 固定随机种子:相同的数据、设置和种子总是得到相同的结果。
- 面板为英文或日文(根据终端语言自动选择),根据图表背景自动采用浅色或深色,可放在任意角落,三种尺寸,可折叠。同一图表上的多个副本会依次排列。
主要参数
- Trades to analyze:数据来源;账户:魔术号、交易品种、平仓起止日期、包含佣金、费用和库存费;文件:MQL5\Files 中的文件名、从公共 Files 文件夹读取;用于回撤 % 的初始余额(0 = 自动)。
- Simulation:模拟次数(10-100000,默认 1000)、随机种子(默认 12345)、剔除交易的比例(1-90 %,默认 10)、去掉的最大盈利笔数(0-1000,默认 5)、统计最大回撤超过此 % 的模拟(默认 20,0 = 关闭)。
- Panel:首先显示的页面、每页行数、语言、角落、偏移、尺寸、颜色、启动时折叠、CSV 按钮、CSV 中每次模拟一行、有新交易平仓时重新计算。
- 共 4 组 27 个参数。
计算方法
- 每笔交易的盈亏 = 利润 + 佣金和费用 + 库存费(账户历史可选择不计成本)。当盈亏与零的差距超过最小货币单位的一半时为盈利或亏损(文件和示例为 0.005),否则视为持平。盈利因子 = 总盈利 / 总亏损。
- 余额曲线 = 初始余额 + 按平仓顺序累计的交易盈亏。最大回撤 = 从之前高点的最大跌幅;最大回撤 % = 该跌幅除以高点时的余额。不包括未平仓头寸和浮动盈亏。
- 初始余额(自动):账户历史 = 第一笔所选交易平仓前一刻的账户余额;HTML = 第一笔交易之前的 balance 行;示例 = 10,000。第一笔交易之后的入金和出金不加入曲线,因此回撤 % 的分母不包含它们。参数 "Starting balance for DD %" 会替代自动值。
- 账户历史:一笔交易 = 一个持仓(部分平仓属于同一笔交易,两个持仓的 Close By 为一笔交易,净额账户的反手会拆分为前后两笔)。
- HTML 报告:一笔交易 = Deals 表中的一笔平仓成交(out、in/out、out by)。每次部分平仓都算作单独的一笔交易,因此交易数、胜率和 PF 可能与同样交易的账户历史略有不同。报告中没有持仓 ID,因此每笔平仓成交按规则与未平仓数量对应(同一品种、相反方向;剩余数量完全相同的最早开仓成交,否则先进先出)。在数量不同的对冲持仓下,这种对应是估算的,分配给每笔交易的开仓佣金和库存费也是估算的。总计是准确的。
- CSV:每行一笔交易,“时间,盈亏”(逗号、分号或制表符分隔;时间格式为 YYYY.MM.DD HH:MM 或 YYYY.MM.DD HH:MM:SS,也接受 "-" 或 "/"),或只有一列盈亏(此时没有按年和按月表格)。小数点只能用 ".",不能使用千位分隔符。各行按文件中的顺序使用。第一行无法读取时视为标题行;其他无法读取的行计为跳过的行;以 # 开头的行被忽略。CSV 中没有余额:要查看回撤 %,请在参数中设置初始余额。
- 如果初始余额未知,面板显示 "unknown"(未知),并且不计算回撤 % 的数值。金额仍会显示。
- 打乱:每次都从原始顺序开始执行 Fisher-Yates 洗牌。剔除:每笔交易使用一个随机数。随机数:由种子生成的 splitmix64(剔除使用种子 + 1)。百分位:线性插值。
- 计算量上限:每种模拟的模拟次数 x 交易数不超过 1 亿。超过时自动减少模拟次数(至少 10 次),并在面板上注明。例如,50,000 笔交易按 2,000 次模拟计算。大型计算会分步进行并显示进度,图表不会卡住。
注意事项与局限
- 仅为过去交易的统计。它不是预测、不是保证、不是对策略的“通过 / 不通过”测试,也不是交易信号或建议。
- 打乱和剔除把每笔交易视为一个固定金额,与其他交易无关。对于交易彼此依赖或依赖余额的系统(例如网格、马丁格尔、摊平加仓,或手数随余额增长),模拟结果可能与该系统实际可能发生的情况相差很大。
- 回测结果取决于测试设置(期间、品种、点差、佣金、报价模型)。本工具只读取您提供的结果,不检查测试是如何进行的。
- 无法读取 .xlsx(Open XML / Excel)报告。请将报告保存为 HTML,或使用 CSV。超过 64 MB 的文件不会读取,最多使用 2,000,000 笔交易。
- 只能读取 MQL5\Files(或公共 Files 文件夹)中的文件。文件名中不能包含 ".." 或 ":"。
- MT5 报告的默认文件名包含账号(例如 ReportTester-12345678.html)。面板和导出的 CSV 会显示文件名,因此在截图或与他人分享 CSV 之前,请先重命名文件。
- 按年和按月表格使用数据中记录的平仓时间(MT5 报告和历史为服务器时间)。
- 在策略测试器中,"Account history" 来源没有您自己的交易,因此显示示例数据,并隐藏 CSV 按钮。如需分析您自己的数据,请在普通图表上使用。
兼容性与支持
- 仅适用于 MetaTrader 5。支持对冲账户和净额账户,任意交易品种和时间周期(与图表品种无关)。
- 不使用 DLL,不访问互联网。只有在您按下 CSV 按钮时才会写入文件。
- 通过 MQL5 消息提供支持,3 个工作日内回复:安装、设置、读取文件和错误报告。我们无法判断您的策略或 EA 是否好,无法把您的结果解读为建议,也不提供行情观点或替您做交易决定。
- 不承诺也不暗示您的交易会有任何结果。
