条件扫描仪 (Condition Scanner)
如何安装:
- 将四个文件夹(Indicators、Include、Templates、Profiles)中的内容复制到你的安装目录相应的文件夹中。这里面的内容都不会对你造成任何伤害,只有指标等。
- 退出并重新进入MetaQuotes程序。
条件扫描仪的演示:

- 一个图表上的指标,包含四个绘图;
- 一个独立窗口的指标,显示RSI的EMA;
- 一个独立窗口的指标,显示历史上建议做多或做空的条件;
- 一个面板指标,显示在你关注的一系列货币对和时间框架中,当前条件是否出现。
所有扫描的公共代码:
特定于PP(Power Pro)策略的代码:
特定于MAX(移动平均交叉)策略的代码:
以csXXXX开头的代码:
我如何为新条件编写代码:
我决定一个策略标识符(例如PB代表Pinbar)。
我像上面“演示扫描仪可以做什么”中一样设置窗口,移除任何现有指标。
如果我的新扫描依赖于图表上的指标,我会使用csXXXX_0.mq4作为模板构建它。我记得要选择“另存为...”csPB_0.mq4,并将我的自定义指标应用到左侧图表。
如果我需要一个独立窗口指标,我也会构建它。我记得要选择“另存为...”csPB_1.mq4,并将其应用到左侧图表。
我构建自定义指标而不是使用标准指标,这样我可以在其他地方通过iCustom函数引用它们。这样,如果我对策略的基本参数(例如移动平均方法)改变主意,只需更改自定义指标。如果使用标准指标,我就必须更改它们,然后深入我的代码进行适应。
我获取csXXXX_Chart.mq4,将所有的“XXXX”替换为我的策略标识符“PB”,并将代码保存为csPB_Chart.mq4。因为还有一些“包含”代码需要编写,所以它不会编译。
现在来提供“包含”代码。
如果我要测试的条件非常简单,我只需使用“包含”文件csXXXX_GetBarFlag.mqh,编写我想要的代码,然后选择“另存为...”csPB_GetBarFlag.mqh。但是如果编码比较复杂,我会回到之前创建的csPB_Chart.mq4,注释掉现在读取的“#include <csPB_GetBarFlag.mqh>”这一行,然后直接在csPB_Chart.mq4文件中构建我想要的代码。当我将代码整理干净后,将查找条件的代码移动到“包含”文件“csPB_GetBarFlag.mqh”中,并取消注释“csPB_Chart.mq4”文件中的#include语句。
此时,csPB_Chart.mq4文件可以编译并应用到左侧图表。
在此时,我将左侧图表的模板保存为csPB-CHART.tpl。它包含任何图表上的自定义指标、独立窗口自定义指标,以及适用于当前图表的结果绘图。
我加载文件“csXXXX_Panel.mq4”,将所有“XXXX”替换为“PB”,然后“另存为...”“csPB_Panel.mq4”。最后这个文件被编译并应用到右侧图表。首次应用时可能运行较慢,但在运行时不会消耗太多资源。
我将csPB_panel.tpl存储为右侧图表的模板。
接下来,我通常会将csPB存储为一个配置文件。
注意:在构建自定义指标并通过iCustom函数引用它们时,我确保名称完全正确。如果iCustom引用不存在的指标,你不会收到任何警告。
注意:可能存在一个bug,当面板指标首次加载时,它产生的结果与特定图表上的结果不一致。我发现,如果我在面板窗口上更改时间尺度(从而强制重新计算),一切就会正确显示。若有人能帮我解决这个问题,我将不胜感激。
注意:在你自己开发的...GetBarFlag.mqh代码中,你可以返回任何整数到调用程序进行显示。根据当前代码,零表示“没有结果”,并导致显示灰色小图标,指示测试的柱子。返回负整数将导致显示红色,而返回正整数将导致显示绿色。
软件的一些方面:
这些代码被写成指标,因此,当面板显示时,如果你想查看特定的货币对和时间框架,只需从市场观察窗口中选择货币对,拖放到当前图表空间,并更改时间框架以适应。模板会处理其余的事情。
为了减少计算机负担,我做了两件事。
首先,在处理时间序列数组时,我通常只回溯200根柱子。
其次,面板显示软件不会在每个tick上测试用户的条件。它使用定时机制,仅在柱子[0]形成90%时应用测试,否者测试柱子[1]。如果柱子[1]获得焦点(即柱子[0]少于90%形成),则进行一次测试,并计算转向柱子[0]的时间。在此之后的每个tick,直到达到转向时间,都不会发生任何事情。我不完全确定这个代码是否正确,但它似乎运行得不错。