English
中文
日本語
ID
Vietnam
한국어
Filipino
 
   学院导航

带过滤器 EA 的 MQL4 趋势指标

MQL4 Trend Indicator With Filters EA

许多日内趋势系统可以使用单独的趋势过滤器进行增强。 这是一个观察近期价格走势并确定整体趋势是上涨、下跌还是中性的指标。 在这篇带过滤器 EA 的 MQL4 趋势指标文章中学习如何在 EA 交易与更大趋势相反时避免不必要的损失。


趋势过滤器是系统按照整体趋势的方向进行交易的一种方式,过滤掉与趋势相反的交易,希望(通过回溯测试证明)趋势过滤器过滤掉的亏损交易多于盈利交易 .


我们系统交易者经常在像 M30 这样的较小时间框架图表上发现或创建一个有趣的趋势系统,我们可以通过回溯测试看到该系统可以在这个相对较小的时间框架上利用许多趋势机会获利。


然而,我们也可以从视觉回溯测试中看到,尽管系统最终盈利,但每当它与大趋势相反地交易时,都会遭受很多不必要的损失。 当我们看到这一点时,我们有必要寻找相同或替代指标的趋势过滤器,设置在更大的时间范围或周期上,这可以帮助系统识别市场的更大趋势,并且只允许交易发生在 更大趋势的方向。


如果我们还为该趋势过滤器编写一个 true / false 布尔值,它会有所帮助,这样我们就可以轻松地在过滤器打开或关闭的情况下进行回测,以查看它是否通过添加而得到增强。


我们将研究一个简单的趋势过滤器的构造,即移动平均趋势过滤器,以便让您了解创建和实施趋势过滤器的过程。 一旦您知道如何编写这个趋势过滤器,您就可以根据不同的指标轻松编写许多备选过滤器,直到您最终找到一组正确的趋势过滤器来测试您的所有趋势策略。

移动平均趋势过滤器

我们将编写一个移动平均线过滤器,当设置为 true 时,仅在收盘价高于移动平均线时交易多头,仅在收盘价低于移动平均线时交易空头。 很简单。


多头头寸:当收盘价高于移动平均线时。

空头头寸:当收盘价低于移动平均线时。

参数

过滤器

Bool:指示您是否要打开或关闭移动平均过滤器。 主要进入系统的交易仅在移动平均线的方向上进行:只有当收盘价高于移动平均线时才做多,只有当收盘价低于移动平均线时才做空。 默认为假。

过滤版本

Bool:指示您是否要打开或关闭移动平均过滤器反转。 主要入场系统的交易仅在移动平均线的相反方向进行:只有当收盘价低于移动平均线时才做多,只有当收盘价高于移动平均线时才做空。 默认为假。 虽然这种反向过滤器不经常使用,但如果您通过回溯测试发现应用上述 MAFilter 严重削弱了您的策略,它可能会很有用。 然后您可能想看看应用 MAFilterRev 是否可以为它充电。

MATime

Int:这是移动平均线的时间范围。 默认为 0,表示图表的同一时间范围。 您应该首先测试相同的时间范围,然后在测试中向上移动,在每个更大的时间范围内进行测试。 例如,如果您的主要策略设置在 M30 图表上,您将使用默认值 0 测试移动平均线,这将是您的 M30,然后您将使用 60 测试它,这将是 H1,然后是 240,这将 是 H4,14440 就是 D1。

MAPeriod

Int:这是移动平均线的周期。 默认值为 50,这是移动平均线确定趋势方向的常用较长周期。 另一个常见的较长周期是 200。我建议将优化设置在 50 到 200 之间,步长间隔为 25 或 50,以查看哪个较长的 MA 周期最能识别您在每个时间范围内该货币的趋势 测试。

方法

int:这是移动平均线的方法或模式,默认为1,指数移动平均线。 请记住:在方法参数中,0 = 简单,1 = 指数,2 = 平滑,3 = 线性加权。 我认为 1 或指数是最好的移动平均线类型。 另一个可以用来测试的好方法是 0,即简单移动平均线。 两者都是非常流行且有效的移动平均线模式。

MT4 代码片段

下面的代码块放在外部变量部分。 外部布尔 MAFilter=真; 外部布尔 MAFilterRev = 假; 外部 int MATime = 0; 外部 int MAPeriod = 50; 外部 int MAMethod=1; 下面的代码块位于指标调用部分。 如果(mafilter1 || mafilter1rev) 双 mafilter=iMA(NULL,MATime,MAPeriod,0,MAMethod,PRICE_CLOSE,shift);

 

MT4代码使用示例

下面是一个 MAFilter 交织到移动平均线交叉策略代码中的示例。 我们之前详细介绍了如何构建移动平均线交叉策略,因此应该很熟悉。 人们可能会认为,将 MAFilter 添加到移动平均线交叉技术是多余的; 但是,有一个案例可以说明它如何起到恭维作用。 例如,如果移动平均线交叉基于 M30 时间框架上的 30 周期进行交易,如果在 H4 时间框架上与 200 周期的 MAFilter 相辅相成,它可能会得到增强。 它可能会受益于根据较短时间框架和周期的趋势进行交易,这些趋势最终会朝着较长时间框架和周期的方向发展。

bool BuyCondition = false;
bool SellCondition = false;

if (
FastMACurrent > SlowMACurrent && FastMAPrevious < SlowMAPrevious){
BuyCondition=true;
if (OppositeClose) CloseSell=true;
}

if (
FastMACurrent < SlowMACurrent && FastMAPrevious > SlowMAPrevious){
SellCondition=true;
if (OppositeClose) CloseBuy=true;
}

if (BuyCondition
&&
(MAFilter==false || (MAFilter && Ask>mafilter))
&&
(MAFilterRev==false || (MAFilter && Ask< mafilter))
OpenBuy = true;

if (SellCondition
&&
(MAFilter==false || (MAFilter && Bid<mafilter))
< mafilter))
&&
(MAFilterRev==false || (MAFilter && Bid> mafilter))
OpenSell = true;
</mafilter))

 

解释

在上面的MT4使用部分,有5个代码块。 在第一段代码中,我为 BuyCondition 创建了一个布尔值,为 SellCondition 创建了一个布尔值,并将它们都默认为 false。 我最初将它们设置为假,因为我只希望它们在我订阅它们的逻辑变为真时为真。 第二和第三个代码块开始根据移动平均线交叉来识别买入和卖出条件。 当快速移动平均线穿越慢速移动平均线时,则 BuyCondition=true; 当快速移动平均线下穿慢速移动平均线时,则 SellCondition=true。 我们已经在基本 Expert Advisor 中讨论了这些条件:MA 交叉。 唯一的区别是我将这些条件包含在 BuyCondition 和 SellCondition 的布尔值中,而不是 OpenBuy 和 OpenSell 的布尔值,我在第四和第五块代码中引用了它们。 它是实现 MAFilter 的第四和第五代码块。 每个都以“if ( )”条件开头,在括号内设置了三个条件。 第一个条件,BuyCondition 或 SellCondition,包含移动平均线交叉的入场逻辑。 第二个条件,MAFilter 条件,是用 || 分隔的括号内的复合语句。 (“或”)运算符。 语句的第一部分表明,如果 MAFilter 设置为 false (MAFilter==false),则 MAFilter 不可操作。 语句的第二部分(在 || 之后)表示如果 MAFilter 设置为 true(注意它不必说 == true,因为 bool 本身就意味着 true),那么它可以继续执行 MAFilter 规则 . 在 BuyCondition 下,MAFilter 规则是 Ask 必须大于 (>) mafilter。 注意:mafilter 的变量(小写)在指标调用部分的 MT4 代码段中定义。 第三个条件,MAFilterRev 条件,也是用 || 分隔的括号内的复合语句。 (“或”)运算符。 语句的第一部分表明,如果 MAFilterRev 设置为 false (MAFilterRev==false),则 MAFilterRev 不可操作。 语句的第二部分(在 || 之后)表示如果 MAFilterRev 设置为 true,那么它可以继续执行 MAFilterRev 规则。 如您所见,MAFilterRev 规则与 MAFilter 规则相反。 如果 MAFilter 规则指示 Ask 必须大于 (>) mafilter,则 MAFilterRev 指示 Ask 必须小于 (<) mafilter。 如果满足上述所有三个条件,则 EA 可以继续执行 OpenBuy = True 或 OpenSell=true,这会在我的代码中触发买入或卖出入场信号。

结论

上面的 MAFilter 只是可以构建和实现的众多可能的趋势过滤器之一。 我选择了 MAFilter,因为它可能是识别趋势方向的最简单和最有效的方法之一。 其他可以充当趋势过滤器的好指标是移动平均线的变体:JMA、Hull、NonLagMA 和斜率方向线。 我已将所有四个指标用作可靠的趋势过滤器。 还可以尝试使用 RSI 和随机指标等动量振荡器。 无论使用何种指标,都应该尝试不同的时期和时间范围,看看哪些可以最好地过滤更大的趋势。 趋势只与时间框架有关,一旦你确定了时间框架,趋势的概念就没有什么特别的了。 没有必要尝试寻找或构建超级花哨的数学趋势过滤器。 许多交易者试图将趋势识别问题过度复杂化。 他们发明了各种花哨的数学方程式和按摩过去价格行为的方法,以更准确地确定趋势是上涨还是下跌,但大多数此类尝试都是毫无意义的。 最简单和最受欢迎的趋势识别方法通常是最好的。 并非每个 EA 都能从趋势过滤器中获益。 一些 EA 包含趋势指标,这些指标在没有额外的趋势过滤器的情况下也能很好地工作。 其他 EA 试图预测趋势反转或反趋势条件,因此在当时趋势对他们不利时进入交易。 请记住,所有过滤器都会阻止交易发生,我们希望被阻止的交易大多是亏损交易。 通常最好一次回测一个过滤器,并尽量不要使用太多。 你的策略应该足够好,可以独立存在,不需要过滤器。 应用于良好策略的趋势过滤器应作为可选增强功能进行测试。 如果我们发现过滤器阻止了很多甚至相同数量的获胜交易,那么为您工作的过滤器就不是一个好的过滤器。 只有在漫长的 5-10 年回溯测试下能够防止更大比例的亏损交易,它才可以接受。