股票量化交易软件:一张图表上多个指标4-晋升为一款智能交易系统

文章讲述了如何在MetaTrader的智能交易系统(EA)中创建和使用子窗口来展示自定义指标,强调了编程在实现这一功能中的重要性。通过创建一个通用指标并将其放在资源目录下,然后在EA中引用这个指标,可以解决在主图表窗口中应用指标的问题,实现了在子窗口中展示的功能。
摘要由CSDN通过智能技术生成

我之前的文章里,我已经解释了如何创建拥有多个子窗口的指标,在使用自定义指标时如此这般会变得很有趣。 这很容易做到。 但当我们尝试在智能交易系统中实现相同的功能时,事情会越加变得复杂,因为在自定义指标中我们没有可用的工具。 在这一点上,编程变得至关重要:能够编写正确的代码来创建子窗口至关重要。 尽管这项任务并非那么容易,但知道如何在 EA 中设置子窗口并不需要很多编码,只需通晓 MQL5 的工作原理。赫兹量化软件

编辑搜图

请点击输入图片描述(最多18字)

​计划

我们已经有了自定义指标,也就是说,我们的对象类已经功能齐备,而且由于这是一个对象类,我们可以轻松地将其转换到其它模型。 然而,在我们的 EA 中简单地声明并尝试使用这个类,并不能让事情如同我们在自定义指标中一样工作,原因是我们的 EA 中未提供子窗口功能。 但又冒出了这样一个想法:“如果我们用一个已经编译过,且可工作的自定义指标,然后用 iCustom 命令从 EA 调用它,会怎么样? 好吧,这也许是可行的,因为这样不需要子窗口,命令如下所示:赫兹量化软件

#property copyright "Daniel Jose"//+------------------------------------------------------------------+input string user01 = "";                //Used indicatorsinput string user02 = "";                //Assets to follow//+------------------------------------------------------------------+int OnInit()
{
        int m_handleSub;//... Expert Advisor code ...        if ((m_handleSub = iCustom(NULL, 0, "Chart In SubWindows\\Chart In SubWindow.ex5", user01, user02)) == INVALID_HANDLE) return INIT_FAILED;
        if (!ChartIndicatorAdd(ChartID(), 0, m_handleSub)) return INIT_FAILED;//... Expert Advisor code ...        ChartRedraw();
        
        return(INIT_SUCCEEDED);
}//...The rest of the Expert Advisor code ...

这个简单的代码片段能够加载我们的自定义指标,然而它还不能正常工作,因为我们没有子窗口。 在这种情况下,当代码在 EA 里执行时,EA 将直接在主窗口中应用我们的指标,这意味着图表会被指标加载的模板掩盖,这绝对不是我们想要的。赫兹量化软件

因此,我们真正的主要问题是创建一个可用的子窗口,以便我们可以使用已经功能齐备的指标。 但为何我们要为随后启动的指标创建一个子窗口呢? 这没有意义,最好直接往 EA 里添加功能,从而克服可能出现的任何限制。赫兹量化软件

有基于此,我们需要执行若干个任务:

任务目的
1 => 创建一个通用指标。它允许在不污染图表的情况下创建和使用 iCustom 命令。
2 => 在 EA 里以某种方式包含该指标。 这令您能够毫无问题地将其转换为具有完整功能的智能交易系统。
3 => 针对子窗口生成通用对象类 允许经由 EA 添加子窗口
4 => 获取已绑定到 window 类的 C_TemplateChart 类。这允许我们管理子窗口的内容,而无需更改功能齐备的代码中的任何内容。

虽然这看起来很难,但困难很简单就解决了。 那好,我们来逐点处理。赫兹量化软件

实现:创建通用指标

这一部分可以通过创建一个完全干净、但功能齐全的自定义指标代码来解决。 本例中的代码如下所示:

#property copyright "Daniel Jose"#property version   "1.00"#property description "This file only enables support of indicators in SubWin."#property indicator_chart_window#property indicator_plots 0//+------------------------------------------------------------------+int OnInit()
{
        return INIT_SUCCEEDED;
}//+------------------------------------------------------------------+int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[])
{
        return rates_total;
}//+------------------------------------------------------------------+

只有这些,没别的。 我们将此文件另存为 SubSupport.mq5。 但其所在与其它指标不同 — 我们将其移到智能交易系统的 RESOURCE 目录。 因此,文件结构如下图所示:

编辑搜图

这有一个很好的理由,但我们暂时把它搁置一旁。 现在我们进入下一个任务。

实现:在 EA 里包含通用指标

为此,我们需要在 EA 的顶部添加以下代码。赫兹量化软件

//+------------------------------------------------------------------+#define def_Resource "Resources\\SubSupport.ex5"//+------------------------------------------------------------------+#resource def_Resource//+------------------------------------------------------------------+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值