首页 技术指标 帖子

MetaTrader 4 条件扫描仪:轻松识别交易机会

附件
11135.zip (178.96 KB, 下载 0次)

条件扫描仪 (Condition Scanner)

这段附加的代码旨在帮助交易者实现以下目标:

你可以设定一组条件,编写代码来测试这些条件,并将代码嵌入到这些代码块中。只需做几处简单的修改。

最终,你将得到几个指标。其中一个会在当前图表上指示历史上你的条件出现的位置,另一个则会在面板上显示你关注的所有工具和时间框架中,条件是否当前已出现。这将省去你手动扫描货币对和时间框架的麻烦。

如何安装:

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

条件扫描仪的演示:

这个例子基于Power Pro(设置标识为“PP”),这是Russ Horn推广的策略。它是一种带区突破策略,其中上限是高点的指数移动平均线,下限是低点的指数移动平均线。此处并不对这些策略表示任何认可,仅作为你可以开发的例子。

在你的系统中,切换到配置文件cspp。第一次显示可能需要几秒钟,但之后不会消耗太多计算资源。

你应该会看到类似下面的界面:



上述示例包括:
  • 一个图表上的指标,包含四个绘图;
  • 一个独立窗口的指标,显示RSI的EMA;
  • 一个独立窗口的指标,显示历史上建议做多或做空的条件;
  • 一个面板指标,显示在你关注的一系列货币对和时间框架中,当前条件是否出现。

所有扫描的公共代码:

Utils.mqh包含一些可以在任何指标、专家顾问等中使用的实用函数。
cs_Chart.mqh包含进入当前图表指标的几乎所有代码。
cs_Panel.mqh包含进入面板显示指标的几乎所有代码。

特定于PP(Power Pro)策略的代码:

csPP_0.mq4显示相关的“图表窗口”指标。
csPP_1.mq4显示相关的“独立窗口”指标。
csPP_Chart.mq4是显示当前图表上历史发生情况的指标。
csPP_Panel.mq4是显示当前情况的指标,涵盖你关注的所有货币对和时间框架。
csPP_GetBarFlag.mqh是同时包含在图表和面板指标中的代码。它决定特定柱子是否存在感兴趣的条件。


我还包括了另一个较简单的示例(标识为MAX)。

特定于MAX(移动平均交叉)策略的代码:

csMAX_0.mq4是一个自定义指标,显示两个移动平均线。它是完全自包含的。
没有csMAX_1,因为与PP策略不同,它不需要独立窗口显示。
csMAX_Chart.mq4、csMAX_Panel.mq4和csMAX_GetBarFlag.mqh的功能与PP策略相同。

以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,直到达到转向时间,都不会发生任何事情。我不完全确定这个代码是否正确,但它似乎运行得不错。

此外,上述提到的定时机制,面板的最上方显示最近一次条件测试事件发生的日期和时间。此外,在这里提供的示例中,中性小图标会在柱子[0]获得焦点时显示零,而在柱子[1]获得焦点时显示“1”。

相关帖子

评论 (0)