Indicator Test Report MT4
- 实用工具
-
Narayanan Mohanan Mohanan Krishnan
我为 MetaTrader 开发测量工具。它们描述市场已经发生了什么,并明确说明每项测量的局限,而不是加以掩饰。
三十年的生产系统与自动化经验,2020 年转向量化研究。研究工作在 Python 中进行——回测框架、前向验证、对大量候选策略的统计评估——经受住检验的成果才会成为指标或智能交易系统。方法论以证伪为先:在样本外得到验证之前,任何结果都被视为假象。上架的每件工具都载明自身测量的局限,说明读数在何处不再具有意义,并记录两个平台出现分歧之处,而不是悄悄取平均值。
此处发布的任何产品都不产生交易信号,也都不附带任何业绩宣称。 - 版本: 3.10
MetaTrader 4 的Indicator Test Report — MT4 重绘检查器和指标测试器,显示任何指标的实际行为
您无法看到编译指标的内部情况。Indicator Test Report加载任何指标(购买的、编写的或内置到 MetaTrader 中)并回答描述无法回答的问题:它是否重新绘制、它需要多少历史记录以及它真正发布了什么?它报告行为。它不评分。
将任何指标加载到策略测试器中,并获得有关其行为的十二个方面的简单语言报告:它发布了多少缓冲区,在其值有意义之前需要多少历史记录,闭合柱上的值随后是否会发生变化,以及读取成本。
没有分数,没有及格分数,也没有关于指标是否良好的判断——只有观察到的内容,以及它证明了什么和没有证明什么。
它回答什么
1. 缓冲器。该指标实际发布了多少个编号数据系列,以及响应的最高指数。这通常比图表显示的要多:两线指标可能会发布 6 个缓冲区,而 EA 按索引读取需要实数。报告指出,如果索引不连续,则通过计数进行索引会读取错误的序列。
2. 计算状态。目标根据存在的柱数计算了多少柱。填充缓冲区为零是一种真实的命名状态,而不是错误。
3.闭杆稳定性。每个条形看到的第一个值被冻结,然后与以后读取的每个值进行比较。如果已经关闭的柱上的值随后发生变化,则报告会给出柱时间、缓冲区索引以及这两个值。移动的当前柱不是重新绘制——重新计算成形柱是正确且可取的。重要的是一个封闭的柱,其值稍后会发生变化。
4.热身。每个缓冲区在保存任何值之前所需的柱数,是在最旧的可用柱上测量的,而不是在最近的窗口中测量的,在最近的窗口中每个答案都为零。缓冲区确实不同:信号线需要比它平滑的系列更多的历史记录。图表上的前五十条可能还没有意义。
5.条内信号闪烁。平仓前成形柱是否在空和数字信号之间闪烁。信号指示器正常;您的 EA 是否作用于成形柱很重要。
6. 缓冲区访问成本。每条柱检索值的微秒成本,因此您可以预算每个价格变动读取多个值的 EA。用于比较指标的相对数字,而不是绝对 VPS 数字。
7. 输出域。每个缓冲区发出的最小和最大值,精确到小数点后十六位 — 用于调整 EA 中的阈值大小。这些是观察到的范围,而不是可能的范围。
8. 信号持久性。对于箭头、点和旗形:如果一个值出现在形成柱上,那么收盘时它还在那里吗?连续线的构造分数为 100%,并如此标记,因为该数字是算术数字而不是结果。
9. 非数字值。是否有任何缓冲区发出非数字值。与 NaN 的每次比较都是错误的(包括大于和小于),因此阈值测试永远不会触发并且不会报告任何错误,并且任何涉及该值的算术都会依次产生 NaN。这是目标中的缺陷,对于针对其编写的防护程序来说是不可见的 EMPTY_VALUE 独自的。
10. 图表对象足迹。目标运行时出现了多少图表对象,以及在实时图表上有多少图表对象在被删除后仍然存在。面板、区域和仪表板指示器使用对象而不是缓冲区绘制,因此对于这些产品,每隔一次检查都会测量空的一半。无法清理的指示器会留下您用手清理的碎片。
11. 模型依赖性。运行两次,仅更改测试仪模型。每个跳动点和 1 分钟 OHLC 都是不同的模拟价格路径,因此故意对柱内波动做出反应的指标可以合理地有所不同。当目标声称封闭柱值是最终的时,这一点很重要。
12.历史依赖。运行两次,仅更改日期范围。差异意味着目标根据其之前的历史记录为同一柱报告不同的值,这是导致回测与实时图表不一致的缺陷。
尝试一些你已经知道的事情
它读取任何可通过以下方式到达的内容 iCustom,包括 MetaTrader 自己的指标。将其指向 ZigZag:每个人都知道 ZigZag 重新绘制,报告将向您显示已更改的柱线以及两个值。将其指向 Ichimoku,观察两个未来转移的跨度与三个未转移的跨度的行为不同。根据您已经了解其行为的指标检查该工具是决定是否信任您刚购买的工具的最快方法 - 而且不需要任何成本。
这个工具是如何测试的
每一项检查都针对故意行为不当的特制指标进行验证:一项在每个价格变动时重写其历史记录中的每一根柱,一项发出非数字值,一项需要 399 根柱的预热,一项在删除时留下图表对象。检查发现了它们,包括条形时间和前后值。一个报告其他人指标的工具应该能够说明它自己是如何测试的。
引擎也相互对抗。在 MetaTrader 4 和 MetaTrader 5 上测量的同一指标在 12 项检查中有 10 项一致;两者不同的是报告中标记的平台事实 - MetaTrader 4 没有 BarsCalculated 并且无法提前卸载指标,因此这些检查会说明他们无法测量的内容,而不是报告一个舒适的零。
如果您编写指标而不是购买它们
同一份报告回答了不同的问题:我自己的产品实际上是做什么的,我可以在描述中这么说吗?当涉及到其背后的比较次数时,“闭栏值是最终的”这一说法更有价值——而且最好自己找到重新绘制,而不是让审阅者找到它。
在两个平台上运行它,两者将向您展示 MT4 和 MT5 构建的差异:不同的缓冲区计数、移动的热身、在一个平台上发生变化而不是在另一个平台上发生变化的值。这种差异通常会作为购买这两款产品的人的一星评论而传达给您。
生成的代码片段是您需要手动编写的集成文档 - 每个缓冲区都已命名,包括其预热、范围以及是否为空。发送它,或将其粘贴到您自己的描述中。这是经过衡量的产品行为,而不是声明。
它不做什么
它不会告诉您信号是否有优势,指标是否值得购买,或者策略是否有利可图。它不评分、评分或排名。它不读取源代码——仅通过记录的缓冲区接口观察到的行为。它在自己的默认输入上运行目标。
发现不是错误
重新绘制、长时间的热身、柱内运动和图表对象都是设计选择,许多好的指标都是有意为之。该工具衡量发生了什么;只有卖家自己的描述才能说明是否有意为之。每份报告都包含这句话,还有一句:如果有什么事情让你感到惊讶,请询问开发人员。报告是向卖家提出的一个好问题。这并不是针对他们发表的证据,而且它也不是为此而设计的。
干净的结果并不能证明
每个Indicator Test Report都有其自己的文字说明。一次运行是一种交易品种、一种时间范围、一种周期、一种测试模型。该报告指出,检查给定运行无法测试 - 蜱虫太少的运行无法测试柱内行为,并且它是这么说的,而不是报告舒适的零。没有观察到并不能证明没有观察到。
每个报告以所有 12 个检查的单屏摘要结束,再加上同一目标上每个早期运行的表格,因此可以将不同条件下的多次运行作为一组进行读取。
输入
- 指标名称— 目标,与导航器中显示的一模一样,包括其文件夹。市场产品位于 Market\ 和它自己的名字; MetaTrader 示例如下 Examples\。犯这个错误是导致跑步停止的一个错误,报告用简单的语言说明了这一点,而不是默默地失败。
- 先等这么多酒吧— 直到图表包含这么多历史记录后,报告才开始。默认 500。
- 关闭的酒吧需要注意重新粉刷— 每个刻度重新读取和比较多远。这是检查 3 的深度。默认 300。
- 报道前值得关注的新酒吧 — 样本大小。运行在这么多柱关闭后结束,因此较小的数字是较弱的测试,而不是捷径。默认 200。
- 探测预热的最大历史记录— 在每个缓冲区上查找第一个实际值的时间。默认 10000。
- 数字重绘检查的容差- 在此之下,差异被视为浮点噪声而不是变化。与值的大小成比例,因此价格系列和数量系列是根据相同的条件来判断的。默认 0.00000001。
- 基线:自动/锁定/重置- 决定第二次运行的比较结果。自动是大多数人所说的运行目标两次的意思:第一次运行设置参考,稍后运行比较而不替换它。默认自动。
- 运行标签— 如何声明两次运行之间发生的更改。 MetaTrader 使程序无法查看哪个测试器模型正在运行,因此标签是报告可以区分模型更改和重复的唯一方法。
- 目标显示名称— 报告标题的可读名称。文件路径仍显示在其旁边,因为显示名称绝不能取代所测量内容的标识。
- 编写一个现成的 EA 片段— 默认情况下打开。如果您只想要报告,请将其关闭。
- 输出文件前缀— 让同一目标上的两次运行写入单独的文件,而不是共享一个摘要。
截图显示了什么
- 快照。所有十二个检查都在一个屏幕上 - 每次运行都以此块结束,无论报告包含什么其他内容。
- 一个发现。其值随柱时间和两个值发生变化的闭合柱。这就是该工具的用途;剩下的就是上下文。
- 两个平台。在 MetaTrader 4 和 MetaTrader 5 上测量的指标相同,因此可以逐行比较两个报告。
- 诚实的拒绝。无法测试某些内容并这样说的运行,而不是打印一个读取为通过的零。
- 生成的片段。这 .mqh 文件运行写入,每个缓冲区已命名并且已写入读取函数。
阅读屏幕截图
琥珀不是红色的。琥珀色判决意味着发现了一种行为,这是证据, 不是这个指标坏了。重新绘制、长时间的热身和图表对象都是设计选择,许多好的指标都是有意为之的——报告为您提供了时间条和两个值,以便您可以向开发人员询问,这就是该页面告诉您要做的事情。
蓝色的判决是值得理解的。 [NOT TESTED] 和[NOT FOUND] 意味着运行无法测量某些内容 - 刻度数太少,或者扫描达到上限。它们不是通行证。大多数工具都会在那里打印一个舒适的零;这个告诉你问题没有得到解答,这就是衡量和保证之间的区别。
奇偶校验图像显示了在两个平台上测量的相同指标,因此可以逐行比较两个报告。图像中显示的结果来自为此目的而故意损坏的测试指标,而不是来自市场上的产品。
关于屏幕截图。每张图像都是从实际运行中捕获的:报告是工具写入的文件,而不是模型。这些图像是在 MetaTrader 4 上捕获的,因为十二个检查中的两个在此处合法地读取不同,并且在 MetaTrader 4 列表中显示 MetaTrader 5 输出会歪曲它。奇偶校验图像在同一指标上并排显示两个平台:十二个检查中的十个是相同的,并且报告中指出了两个不同的名称。这两个问题取决于平台可以提供什么,而不是端口编写得有多仔细:MQL4 没有 BarsCalculated 函数,并且无法提前卸载指标。 MetaTrader 4 构建中没有遗漏任何内容 — 它报告 MetaTrader 4 能够报告的所有内容,并在无法报告的地方进行说明。该工具旨在说明它无法测量的内容,并且首先适用于其自己的列表。
输出
文本报告、用于交叉运行比较的 CSV 基线以及累积摘要(每次运行一行)写入共享文件文件夹,以便它们在运行之间保留下来。当比较找到一个不同的值时,每个不同的值都会写入其自己的 CSV 中。
和一个现成的代码片段:一个可编译的 .mqh 使用已经为您运行的平台编写的读取函数来命名每个实时缓冲区、其预热、其观察范围以及是否为空。否则呼叫者会通过试验发现这一点。如果运行发现封闭条更改或 NaN 值,则该代码片段会在顶部进行说明,并将其示例指向缓冲区,但没有发现任何结果。
信用到期
缓冲区读取方法如下I自定义指标测试仪作者:Piotr Latoszynski,自 2020 年起在市场免费。Brahim Ben Abla 在 mql5.com 帖子 772704(2026 年 7 月 17 日)中描述了用于检测变化的封闭柱值的冻结和比较方法,其中包含实数;方法是他的,只是运费是我的。
MetaTrader 4 有何不同
十二项检查中的十项与基于同一指标的 MetaTrader 5 的读数相同。两个不能:MQL4 没有 BarsCalculated,因此计算状态是经验探针并标记为[MT4代理];并且 MQL4 无法提前卸载指标,因此图表对象清理问题仅在实时图表上得到回答并读取[未测试]在策略测试器中。两者都在报告中被提及而不是隐藏。该工具的限制或端口中的快捷方式都不是:它们是 MetaTrader 4 本身的容量,报告会说明它正在查看两者中的哪一个,而不是报告一个舒适的零。
笔记
- 这是一个编写报告的 EA 交易。它从不交易。它不下订单,不开仓和平仓,也不触及您账户中的任何内容——它读取指标并写入文本文件。
- 必须启用自动交易。MetaTrader 会控制该权限后的每个 EA 交易,无论其是否进行交易,因此,关闭按钮后,终端将停止调用程序,您将看不到任何报告,也不会出现错误。如果您不想在真实账户上启用它,请将其附加到模拟账户;结果是相同的,因为这里没有任何内容取决于帐户。
- 在策略测试器中运行,并在实时图表上运行,其中检查需要真实的价格变动。通过文档读取目标 iCustom 界面。
- 一些在内部构建自己的指标句柄的目标从不报告计算状态。该报告指出了该案例的名称,而不是报告零。
- 输出进入共享文件文件夹,因此报告在运行之间保留下来,并且每个报告都会累积一个摘要行。
- 支持多个实例。两个图表可以同时测量不同的交易品种,并且两次运行都会附加到相同的累积摘要,而不是相互覆盖 - 使用两个间隔一秒完成的实例进行测试。如果您希望将两个历史记录分开,请给它们不同的输出前缀。
- 没有外部依赖。它不调用任何库,也不调用其他指示器。
| 该开发者提供的更多工具 我编写 MetaTrader 指标和智能交易系统,注重代码的整洁与文档化:收盘K线逻辑、经过验证的缓冲区,且不依赖其他指标。开发这个工具,是因为我想先在自己的作品上验证这一点,然后才请别人相信它。 在报告中发现了您没有预料到的内容,或者想要检查十二项不涵盖的内容?给我发私信——我很乐意回复。 |
由 Narayanan Mohanan 开发和维护,ML/Python/MQL Developer。
如您发现本页译文有误,欢迎与我联系,我会及时更正。
