如何使用MA分频器作为MACD滤波器的输入信号的EA -- 知识铺
在我开始教你如何编程一个使用MA分频器作为MACD滤波器的输入信号的EA之前,我需要告诉你,我已经改变了我们上次写的代码的一些编程风格。
如果你下载新文件,你会看到我已经缩写了很多。如果您将新文件与旧文件进行比较,那么阅读和理解它应该不是问题。这是一种使用布尔值更简单的方法。这也可以通过布尔函数来完成。(见下一个示例)而且你必须知道,有时你可以把大括号放在一边。但前提是你只在它后面写一个命令行。
// you can do this
if(IsNewBar()) Print("There is a new bar");
// but you cannot do this
if(IsNewBar()) Print("There is a new bar"); Comment("There is a new bar");
// in the second case the Comment would be displayed even if the IsNewBar function returns a false. It's like the Comment is on a new line.
战略
我们将制作一个具有两条移动平均线的 MA 交叉 EA。周期为 12 的快速 MA 和周期为 16 的慢速 MA。我们只想在 MACD (12,26,9) 高于 0 且 MACD 主线高于 MACD 信号线时进行买入交易。
该指标的数据应来自日线图。(我还不知道这是否是一个成功的策略,但这并不重要)。
Let’s start
在本章中,我们只看一下我们的自定义函数 InitIndicators()、BuySignal() 和 SellSignal() 以及新指标的全局变量,因为这些是我们唯一需要改变的东西,以使我们的新策略发挥作用。首先,我们编写全局变量,以便我们的指标存储那里的值。我们列出了下面列出的 4 个。但是等等。对于这个策略,我们需要比这 4 个更多的数据。对于分频器,每个 MA 需要 2 个变量。我们需要交叉前后两个均线的价格来检测交叉。
我们需要第二根和第三根蜡烛的价格(记住蜡烛 0 是当前蜡烛,蜡烛 1 是过去的蜡烛,依此类推)。对于MACD,我们使用当前蜡烛的价格。因此,我们编写: 接下来,我们需要在 InitIndicators() 函数中用指标 price 填充变量。您可以在此处找到有关 iMACD 功能的更多信息:http://docs.mql4.com/indicators/imacd
入场信号
现在我们只需要写入场信号。这很容易。让我们从 MA 开始。如果蜡烛 1 上的快速 MA 高于蜡烛 2 上的慢速 马,而蜡烛 2 上的快速 MA 低于蜡烛 2 上的慢速 MA,则 BuySignal 函数将返回 true。
默认情况下,该函数返回 false。卖出信号反之亦然
MACD filter
如果 MACD 主线不高于 0,MACD 信号线也不高于 0,则“MACD 零线滤波器”将返回 false。如果 MACD 主线不在 MACD 信号线上方,则“MACD 趋势过滤器”将返回 false。我们在写入策略的括号前用感叹号实现 not。下载源代码
美化代码
EA 现已完成并且运行良好。但我不喜欢它的一些细节。现在,我将向您展示如何使用数组使代码看起来更美观。我们应该使用数组,而不是为我们想要存储的每个价格使用变量。
如果您不知道数组是什么,请先阅读以下内容:http://book.mql4.com/variables/arrays。因此,我们使用一个数组作为 MACD,一个用于快速 MA,一个用于慢速 MA。我们将在每个价格中存储 2 个价格。MACD 中的主线和信号线[]。fast_MA[] 和 slow_MA[] 数组中两个 MA 的 Candle1 和 candle2。
但是,由于数组总是开始计数 0,如果我们将 Mas candle1 存储在 [1] 中会更好,因此我们使用数组的 3 个内存插槽并将第一个 [0] 留空。为了将指标价格存储在这些数组中,我们使用 for 循环。请参阅: http://docs.mql4.com/basis/operators/for 第一次运行 for 循环时,EA 将存储 ….
- int i 为 0
- MACD的主要价格[0]
- fast_MA快速均线的蜡烛1价格[1]
- slow_MA中慢速均线的蜡烛1价格[1]
第二次运行 for 循环时,EA 将存储 ….
- int i 为 1
- MACD中的MACD信号价格[1]
- fast_MA中快速均线的蜡烛2价格[2]
- slow_MA中慢速均线的蜡烛2价格[2]
void InitIndicators()
{
for(int i=0;i<2;i++)
{
// MACD (0-MODE_MAIN, 1-MODE_SIGNAL)
MACD[<strong>i</strong>]=iMACD(_Symbol,PERIOD_D1,12,26,9,PRICE_CLOSE,<strong>i</strong>,0);
// Fast MA
fast_MA[<strong>i+1</strong>]=iMA(_Symbol,PERIOD_CURRENT,12,0,MODE_EMA,PRICE_CLOSE,<strong>1+i</strong>);
// Slow MA
slow_MA[<strong>i+1</strong>]=iMA(_Symbol,PERIOD_CURRENT,16,0,MODE_EMA,PRICE_CLOSE,<strong>1+i</strong>);
}
}
在我们进行这些更改后,我们可以调整入场信号如下: 我认为它现在😀看起来好多了 请下载文件以查看完整的源代码。
我还没有写过关于如何平仓的教程,但如果你想知道如何做,请查看这个主题:
https://quivofx.com/boards/topic/orderclose-function/
Go to the next tutorial.
对本 mql4 教程有疑问吗?在论坛中发表评论或打开主题(如果还没有答案)
如果您看到错误,请与我联系。
本 MQL4 教程创建于 2015 年 12 月 14 日。
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/stocktactics/post/20240413/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8MA%E5%88%86%E9%A2%91%E5%99%A8%E4%BD%9C%E4%B8%BAMACD%E6%BB%A4%E6%B3%A2%E5%99%A8%E7%9A%84%E8%BE%93%E5%85%A5%E4%BF%A1%E5%8F%B7%E7%9A%84EA--%E7%9F%A5%E8%AF%86%E9%93%BA/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com