English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
了解如何设计基于轨道线(Envelopes)的交易系统

了解如何设计基于轨道线(Envelopes)的交易系统

MetaTrader 5交易 | 20 五月 2022, 16:22
1 745 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

概述

在我的上一篇文章中,我编写了一个最流行的指标 — 布林带 — 它允许我们进行波带交易。 本文可从以下链接获得:了解如何设计基于布林带的交易系统

正如我在这篇关于布林带的文章中提到的,波带交易的概念有许多现成的方法,我们可以直接使用。 每种方法都有其不同的计算方法和策略,但它们的共通点是我们进行波带交易的概念。

现在,我将分享另一种与波带交易概念相关的方法 — 轨道线(Envelopes)指标。 该指标由围绕价格及其移动平均线的两条波带表示。 在本文中,我们将研究更多细节,包括以下主题:

贯穿这些主题,我尝试以一种能够深入理解其原理的方式来解释指标。 这些信息应有助于制定更好的交易计划或策略,进而产生更好的结果。因此,通过轨道线定义这一主题,我将与您分享有关轨道线指标概念的更多详细信息。 我们将研究其算法,从而更好地理解该概念。 然后,我们将尝试制定策略,来提升我们的交易结果。

在轨道线策略部分,我将与您分享一些简单的基本策略,这些策略可作为我们如何使用它的示例,如此就可以让我们见识到更多的策略,来获得更好的结果。 然后,在“轨道线交易策略系统蓝图”部分,我认为这个话题非常有趣,我将与您分享如何基于轨道线指标的策略来创建交易系统的蓝图。 稍后,在“轨道线交易系统”部分,我将与您分享以 MQL5 语言来设计基于轨道线指标策略的交易系统的方法,该系统未来可运行在 MetaTrader 5 里。

我希望这篇文章能对您有帮助,您会发现一些新见解,这些见解将帮助您开发自己的交易系统,或帮助您改善交易结果。

重要!本文中的所有代码都是以 MQL5 编写的。 这些代码能够在 MetaTrader 5 中执行。 因此,您需要使用 MetaTrader 5 来运行该应用程序。 如果您还没有 MetaTrader 5 终端,可以从以下链接下载:https://www.metatrader5.com/zh/download

下载之后,如下图显示 MetaTrader 5 的窗口:

MT5 平台

若要打开 MetaQuotes 语言编辑器(MetaEditor)来编写代码,下图显示了如何执行此操作:

Metaeditor 打开 1

另一种打开它的方法:

Metaeditor 打开 2

或者,您可以在 MetaTrader 5 窗口里按 F4 打开。

随后会打开以下窗口:

Metaeditor 窗口

此处是如何打开新文件:

Metaeditor 窗口


Metaeditor - 新建文件


  1. 打开新建文件来编写智能交易系统
  2. 打开新建文件来编写自定义指标
  3. 打开新建文件来编写脚本

有关更多信息,请参阅我之前的文章:了解为什么以及如何设计算法交易系统

免责声明:本文内容仅用于教学目的,无关其它。 因此,您应自行对基于本文内容所采取的任何行动负责,因为本文内容并不保证任何结果。

现在,我们开始研究轨道线指标,看看它对我们的交易有什么好处。


轨道线定义

轨道线指标是波带交易的一种方法,就像我之前提到的,有很多波带交易的方法,如布林带、通道、轨道线、等等。

简而言之,我们可以说,轨道线是两条按照一定比例围绕移动平均线构成的波带,通常围绕价格。 这些轨道线可用来过滤趋势走势,并在横盘交易期间进行交易。

有时在趋势中,我们会遇到一些逆向走势,如假突破或反抽。 这种走势可能会产生假信号,之后状况会重返相反的场景。 例如,如果价格越过移动平均线向上,这应作为上行的信号。 然后,它们转向并向下穿过移动平均线,即与之前的向上交叉线相反。 顺便说一下,您可以参阅更多关于移动平均线的信息,了解如何使用移动平均线、以及如何基于移动平均线创建交易系统,您可以参阅我之前的文章:了解如何设计不同的移动平均线系统

均线交叉假突破

在上图中,当价格从上方穿过移动平均线后,它会转向并再次上扬。

有时,我们也会出现横盘波动,买家和卖家之间存在平衡,或者没有明显的趋势,我们需要从这种波动中受益。

在这些情况下,轨道线指标对我们来说很有用,因为它可以作为趋势期间走势的过滤器。 如果价格穿过移动平均线向上,我们等待价格越过轨道线指标的上轨。

无轨道线的均线穿越


正如您在上图中所见,对于我们之前提到的同一走势,价格穿超移动平均线向上,但没有超过轨道线指标的上轨。 故此,我们无法只根据这种交叉采取行动,之后我们会发现价格再次下跌。

在此,我需要提及一些有关技术分析的有趣内容,因为它有许多方法和策略,能够组合到一起,从而产生更好的结果。

就像我之前提到的,轨道线是围绕价格的两条波带,因此较宽的波带被触及概率提较低,而较窄的波带被触摸概率较高。

现在,如何计算信轨道线指标? 轨道线被设置为按照某个百分比自移动平均线偏离。 该百分比取决于价格行动、时间帧和用户策略。

如何计算轨道线:

  1. 计算移动平均值
  2. 轨道线的 % = 移动平均值 * %
  3. 轨道线上轨 = 移动平均值 + 移动平均值的偏离 %
  4. 轨道线下轨 = 移动平均值 - 移动平均值的偏离 %

我们来看一个如何做到这一点的示例。

如果我们有如下 14 天的价格数据:

计算示例

  • 获取移动平均值(此处我们计算的是一条简单移动平均值,但您可以使用任何移动平均值 - 我在上一篇文章中曾详细介绍了其中的一些移动平均值: 了解如何设计不同的移动平均线系统

Env 计算

  • 根据您的首选项计算轨道线的百分比

Env 计算 2

  • 计算轨道线的上轨

Env 计算 3

  • 计算轨道线的下轨

Env 计算 4

该算法会在每次即时报价来临时进行,然后在价格上方绘制上轨的数值,在价格下方绘制下轨的数值。

但今天,我们不会手动执行计算操作,因为在平台中内置轨道线指标,我们所要做的一切都是选择它,之后就会在我们的图表上绘制它,下面的图片介绍了如何执行此操作:

指标插入


指标插入 1


指标参数


上图显示了轨道线的参数:

  1. 确定移动平均线的周期。
  2. 轨道线的 %。
  3. 价格种类(收盘价、中间价、典型价、等等)
  4. 图表上轨道线的偏移值。
  5. 移动平均线的类型。
  6. 轨道线上轨的颜色。
  7. 轨道线上轨的线条样式。
  8. 轨道线下轨的颜色。
  9. 轨道线下轨的线条样式。

确定所有参数后,指标将出现在图表上,如下图所示:

图表上的指标



轨道线策略

在这一部分中,我将与您分享一些轨道线策略。 这些策略需根据市场状况或行情方向来运用。

众所周知,行情呈现上升趋势、下降趋势和横盘方向。 根据特定的行情方向,我们选用特定的策略,令我们能够从这一行情走势中获益。

可以将轨道线与其它工具相结合,并基于此组合创建策略。 运用这种组合的结果能够优于单一工具。 如此,您可以将轨道线指标与另一种类似于价格动作形态的工具相结合,例如:从轨道线指标中获取信号,然后从价格形态中获取另一个信号作为确认信号。 可选择地,能用另一个技术来分析指标。 我认为在技术分析交易中,这是一种惊人的方式,可以将多种概念结合在一起,从而获得更好的结果,并改善您的决策。

根据这一点,我们将策略划分为可以在趋势走势中运用的策略,和其它可以在横向走势中运用的策略。 

    在趋势行情期间
      • 策略 1: 上行趋势

        在上行趋势行情中,价格在上行趋势中移动,形成更高的低点和更高的高点。 现在,我们需要知道价格和轨道线指标在上行趋势中的表现。

        由于该指标是一段时间内偏离价格移动平均值的百分比,因此在上行趋势期间,价格将高于轨道线指标的上轨。 因此,我们在上行趋势中的策略如下:

        当价格越过轨道线上轨时,我们会收到买入信号,然后当价格穿过轨道线下轨时,我们会获利了结。

        • 价格 > 波带上轨 = 买入
        • 价格 < 波带下轨 = 获利了结

        策略 1 - 上行趋势

        • 策略 2: 下行趋势

        在下行趋势行情期间,价格在下行趋势中移动,形成更低的高点和更低的低点。 现在,我们需要知道价格和轨道线指标在下行趋势中的作用。

        在下行趋势期间,价格将低于轨道线指标下轨。 因此,我们在下行趋势中的策略如下:

        当价格向下穿过轨道线下轨时,我们会得到一个卖出信号,然后当价格向上穿过轨道线上轨时,我们则获利了结。

        • 价格 < 波带下轨 = 做空
        • 价格 > 波带上轨 = 获利了结

        策略 2 - 下行趋势


        • 策略 3: 横盘:

        在横盘行情期间,价格在一些横盘形态中移动,形成相同的高点和低点。 或者买卖双方之间存在平衡,一方不能压制另一方,这是介于两个价位间的简单形式。 它示意的是平衡。 这并不意味着没有其它形式的横盘走势,但最好知道横盘走势是除了上行趋势和下行趋势之外的任何走势或形式。 现在,我们需要知道价格和轨道线指标在横盘走势中的表现。

        横盘期间,价格将在轨道线指标的下轨和上轨之间移动。 因此,我们的横盘策略如下:

        当价格触及轨道线的下轨时,我们将收到买入信号,然后当价格触及轨道线的上轨时,我们将获利了结。 当价格触及轨道线的上轨时,我们将收到一个做空信号,然后当价格触及轨道线的下轨时,我们将获利了结。

        • 价格 = 波带下轨 = 买入
        • 价格 = 波带上轨 = 获利了结
        • 价格 = 波带上轨 = 做空
        • 价格 = 波带下轨 = 获利了结

        策略 3 - 横盘

        请注意,此处提供的这些策略只是为了帮助您理解如何使用指标。 为了能够正确使用,它还需要改进和进一步开发。 始终确保彻底地测试您参阅或学习的每个策略。 在未经过测试和检验结果的情况下,它们只能用于教学目的。


        轨道线交易策略系统蓝图

        在这个有趣的部分,我们将设计之前提过的策略,并把其作为蓝图,来判定我们到底想做什么、以及我们想让程序做什么。 那么,我们行动吧。

          在趋势行情期间
            • 策略 1: 上行趋势
                • 价格 > 波带上轨 = 买入
                • 价格 < 波带下轨 = 获利了结

              故此,该策略的蓝图如下所示:

              上行趋势策略蓝图


                • 策略 2: 下行趋势:
                    • 价格 < 波带下轨 = 做空
                    • 价格 > 波带上轨 = 获利了结

                  故此,该策略的蓝图如下所示:

                  下行趋势策略蓝图

                    横盘期间,
                      • 策略 3: 横盘:
                          • 价格 = 波带下轨 = 买入
                          • 价格 = 波带上轨 = 获利了结
                          • 价格 = 波带上轨 = 做空
                          • 价格 = 波带下轨 = 获利了结
                        故此,该策略的蓝图如下所示:

                        横盘策略蓝图



                        轨道线交易系统

                        在这一部分中,我将与您分享如何使用 MQL5 编写这些策略,最终形成 EA(智能交易系统)程序。 这可以帮助某些人增强交易能力,并能自动地轻松识别信号。 现在,我将与您分享如何编写基础轨道线 EA,并在图表上用我们的程序标示轨道线指标的上轨和下轨值。

                        我们来设计一个程序,允许我们查看轨道线上下轨的值,并在图表上作为注释:

                        //+------------------------------------------------------------------+
                        //|                                          Simple Envelopes EA.mq5 |
                        //|                                  Copyright 2022, MetaQuotes Ltd. |
                        //|                                             https://www.mql5.com |
                        //+------------------------------------------------------------------+
                        #property copyright "Copyright 2022, MetaQuotes Ltd."
                        #property link      "https://www.mql5.com"
                        #property version   "1.00"
                        
                        //+------------------------------------------------------------------+
                        //| Expert tick function                                             |
                        //+------------------------------------------------------------------+
                        void OnTick()
                          {
                           //Creating an array for price info
                           MqlRates PriceInfo[];
                           
                           //Sorting it from current data to old data
                           ArraySetAsSeries(PriceInfo, true);
                           
                           //Copy prices data to array
                           int Data = CopyRates(Symbol(), Period (), 0, Bars(Symbol(), Period()), PriceInfo);
                           
                           //Creating two arrays for prices of upper and lower band
                           double UpperBandArray[];
                           double LowerBandArray[];
                           
                           //Identify Envelopes indicator
                           int EnvelopesIdentify = iEnvelopes(_Symbol,_Period,14,0,MODE_SMA,PRICE_CLOSE,0.100);
                           
                           //Copying prices data to arrays
                           CopyBuffer(EnvelopesIdentify,0,0,1,UpperBandArray);
                           CopyBuffer(EnvelopesIdentify,1,0,1,LowerBandArray);
                           
                           //Calculation for the current data
                           double UpperBandValue=NormalizeDouble(UpperBandArray[0],6);
                           double LowerBandValue=NormalizeDouble(LowerBandArray[0],6);
                           
                           //Comments on the chart with values of Band of Envelopes
                           Comment("Envelopes Upper Band =",UpperBandValue,"\n" "Envelopes Lower Band =",LowerBandValue,"\n");
                           
                          }
                        //+------------------------------------------------------------------+
                        

                        MetaTrader 5 中的代码可以执行,如下图所示:

                        基础轨道线 EA 插入

                        将文件拖放到图表上,或双击该文件,然后代码将会执行,并打开以下窗口。

                        1

                        之后,程序将出现在图表上:

                        11

                        在 MetaTrader 5 交易终端内执行代码后,我们将看到以下图表和信号:

                        基础轨道线 EA


                        我们有两条轨道线指标轨迹 — 下轨和上轨 — 且我们可在图表上看到它们的值。

                        现在,我们针对上述三种策略进行编码,策略一是关于在上行趋势中买入并获利了结;策略二是关于在下行趋势中做空并获利了结;然后策略三是关于在横盘的下轨买入并获利了结,然后在上轨做空并获利了结。 

                          在趋势行情期间
                            • 策略 1: 上行趋势:
                                • 价格 > 波带上轨 = 买入
                                • 价格 < 波带下轨 = 获利了结

                              以下代码就是设计执行此策略的程序:

                              //+------------------------------------------------------------------+
                              //|                                   Envelopes uptrend Strategy.mq5 |
                              //|                                  Copyright 2022, MetaQuotes Ltd. |
                              //|                                             https://www.mql5.com |
                              //+------------------------------------------------------------------+
                              #property copyright "Copyright 2022, MetaQuotes Ltd."
                              #property link      "https://www.mql5.com"
                              #property version   "1.00"
                              
                              //+------------------------------------------------------------------+
                              //| Expert tick function                                             |
                              //+------------------------------------------------------------------+
                              void OnTick()
                                {
                                 //Creating an array for price info
                                 MqlRates PriceInfo[];
                                 
                                 //Sorting it from current data to old data
                                 ArraySetAsSeries(PriceInfo, true);
                                 
                                 //Copy prices data to array
                                 int Data = CopyRates(Symbol(), Period (), 0, Bars(Symbol(), Period()), PriceInfo);
                                 
                                 //Creating two arrays for prices of upper and lower band
                                 double UpperBandArray[];
                                 double LowerBandArray[];
                                 
                                 //Identify Envelopes indicator
                                 int EnvelopesIdentify = iEnvelopes(_Symbol,_Period,14,0,MODE_SMA,PRICE_CLOSE,0.100);
                                 
                                 //Copying prices data to arrays
                                 CopyBuffer(EnvelopesIdentify,0,0,1,UpperBandArray);
                                 CopyBuffer(EnvelopesIdentify,1,0,1,LowerBandArray);
                                 
                                 //Calculation for the current data
                                 double UpperBandValue=NormalizeDouble(UpperBandArray[0],6);
                                 double LowerBandValue=NormalizeDouble(LowerBandArray[0],6);
                                 
                                 //Comment Buy signal on the chart or no signal
                                 if (PriceInfo[0].close > UpperBandValue)
                                 Comment("Envelopes Buy Signal");
                                 
                                 if (PriceInfo[0].close < LowerBandValue)
                                 Comment("Envelopes Take Profit or Stop Loss");
                                 
                                }
                              //+------------------------------------------------------------------+
                              

                              代码可从 MetaTrader 执行,如下图所示:

                              轨道线上行趋势策略插入


                              将文件拖放到图表上,或双击该文件,然后代码将会执行,并打开以下窗口。

                              2

                              之后,程序将加载到图表上:

                              22

                              在 MetaTrader 5 交易终端内执行代码后,我们将看到以下图表和信号:

                              轨道线上行趋势策略 - 买入信号

                              正如我们在上一张图表中所见,当价格在上行趋势中越过上轨时,该程序发给我们一个买入信号。

                              轨道线上行趋势策略 - 获利了结

                              正如我们在上一张图表中所见,当价格越过下轨时,该程序发给我们一个获利了结信号。

                                • 策略 2: 下行趋势
                                    • 价格 < 波带下轨 = 做空
                                    • 价格 > 波带上轨 = 获利了结

                                  以下代码就是设计执行此策略的程序:

                                  //+------------------------------------------------------------------+
                                  //|                                 Envelopes Downtrend Strategy.mq5 |
                                  //|                                  Copyright 2022, MetaQuotes Ltd. |
                                  //|                                             https://www.mql5.com |
                                  //+------------------------------------------------------------------+
                                  #property copyright "Copyright 2022, MetaQuotes Ltd."
                                  #property link      "https://www.mql5.com"
                                  #property version   "1.00"
                                  
                                  //+------------------------------------------------------------------+
                                  //| Expert tick function                                             |
                                  //+------------------------------------------------------------------+
                                  void OnTick()
                                    {
                                     //Creating an array for price info
                                     MqlRates PriceInfo[];
                                     
                                     //Sorting it from current data to old data
                                     ArraySetAsSeries(PriceInfo, true);
                                     
                                     //Copy prices data to array
                                     int Data = CopyRates(Symbol(), Period (), 0, Bars(Symbol(), Period()), PriceInfo);
                                     
                                     //Creating two arrays for prices of upper and lower band
                                     double UpperBandArray[];
                                     double LowerBandArray[];
                                     
                                     //Identify Envelopes indicator
                                     int EnvelopesIdentify = iEnvelopes(_Symbol,_Period,14,0,MODE_SMA,PRICE_CLOSE,0.100);
                                     
                                     //Copying prices data to arrays
                                     CopyBuffer(EnvelopesIdentify,0,0,1,UpperBandArray);
                                     CopyBuffer(EnvelopesIdentify,1,0,1,LowerBandArray);
                                     
                                     //Calculation for the current data
                                     double UpperBandValue=NormalizeDouble(UpperBandArray[0],6);
                                     double LowerBandValue=NormalizeDouble(LowerBandArray[0],6);
                                     
                                     //Comment Buy signal on the chart or no signal
                                     if (PriceInfo[0].close < LowerBandValue)
                                     Comment("Envelopes Short Signal");
                                     
                                     if (PriceInfo[0].close > UpperBandValue)
                                     Comment("Envelopes Take Profit or Stop Loss");
                                     
                                    }
                                  //+------------------------------------------------------------------+

                                  我们可以从 MetaTrader 5 中执行代码,如下图所示:

                                  轨道线下行趋势策略插入


                                  我们可以在图表上拖放文件或双击文件,然后执行代码,并打开以下窗口。

                                  3

                                  之后,我们将看到图表中所附的程序:

                                  33

                                  轨道线下行趋势策略 - 做空信号

                                  正如我们在上一张图表中所见,当价格在下行趋势中越过下轨时,该程序发给我们一个做空信号。

                                  轨道线下行趋势策略 - 获利了结

                                  正如我们在上一张图表中所见,当价格在下行趋势中越过上轨时,该程序发给我们一个获利了结信号。

                                    • 策略 3: 横盘
                                  • 价格 = 波带下轨 = 买入
                                  • 价格 = 波带上轨 = 获利了结
                                  以下代码就是设计执行此策略的程序:
                                  //+------------------------------------------------------------------+
                                  //|                              Envelopes Sideways Buy Strategy.mq5 |
                                  //|                                  Copyright 2022, MetaQuotes Ltd. |
                                  //|                                             https://www.mql5.com |
                                  //+------------------------------------------------------------------+
                                  #property copyright "Copyright 2022, MetaQuotes Ltd."
                                  #property link      "https://www.mql5.com"
                                  #property version   "1.00"
                                  
                                  //+------------------------------------------------------------------+
                                  //| Expert tick function                                             |
                                  //+------------------------------------------------------------------+
                                  void OnTick()
                                    {
                                     //Creating an array for price info
                                     MqlRates PriceInfo[];
                                     
                                     //Sorting it from current data to old data
                                     ArraySetAsSeries(PriceInfo, true);
                                     
                                     //Copy prices data to array
                                     int Data = CopyRates(Symbol(), Period (), 0, Bars(Symbol(), Period()), PriceInfo);
                                     
                                     //Creating two arrays for prices of upper and lower band
                                     double UpperBandArray[];
                                     double LowerBandArray[];
                                     
                                     //Identify Envelopes indicator
                                     int EnvelopesIdentify = iEnvelopes(_Symbol,_Period,14,0,MODE_SMA,PRICE_CLOSE,0.150);
                                     
                                     //Copying prices data to arrays
                                     CopyBuffer(EnvelopesIdentify,0,0,1,UpperBandArray);
                                     CopyBuffer(EnvelopesIdentify,1,0,1,LowerBandArray);
                                     
                                     //Calculation for the current data
                                     double UpperBandValue=NormalizeDouble(UpperBandArray[0],6);
                                     double LowerBandValue=NormalizeDouble(LowerBandArray[0],6);
                                     
                                     //Comment Buy signal on the chart or no signal
                                     if (PriceInfo[0].close <= LowerBandValue)
                                     Comment("Envelopes Buy Signal");
                                     
                                     if (PriceInfo[0].close >= UpperBandValue)
                                     Comment("Envelopes Take Profit");
                                     
                                     if (PriceInfo[0].close > LowerBandValue
                                     &&  PriceInfo[0].close < UpperBandValue)
                                     Comment("No Signal"); 
                                    }
                                  //+------------------------------------------------------------------+
                                  
                                  MetaTrader 5 中的代码可以执行,如下图所示:

                                  轨道线横盘买入策略插入


                                  将文件拖放到图表上,或双击该文件,然后代码将会执行,并打开以下窗口。

                                  4

                                  之后,程序将出现在图表上:

                                  44

                                  轨道线横盘买入策略 - 无信号

                                  在 MetaTrader 5 交易终端内执行代码后,我们将看到以下图表和信号:

                                  轨道线横盘买入策略 - 买入信号

                                  正如我们在上一张图表中所看到的那样,该程序发给我们一个买入信号,因为价格在横盘期间触及下轨。


                                  轨道线横盘买入策略 - 获利了结

                                  正如我们在上一张图表中所见,该程序发给我们一个获利了结信号,因为价格在横盘期间触及上轨

                                  • 价格 = 波带上轨 = 做空
                                  • 价格 = 波带下轨 = 获利了结

                                  以下代码就是设计执行此策略的程序:

                                  //+------------------------------------------------------------------+
                                  //|                            Envelopes Sideways Short Strategy.mq5 |
                                  //|                                  Copyright 2022, MetaQuotes Ltd. |
                                  //|                                             https://www.mql5.com |
                                  //+------------------------------------------------------------------+
                                  #property copyright "Copyright 2022, MetaQuotes Ltd."
                                  #property link      "https://www.mql5.com"
                                  #property version   "1.00"
                                  
                                  //+------------------------------------------------------------------+
                                  //| Expert tick function                                             |
                                  //+------------------------------------------------------------------+
                                  void OnTick()
                                    {
                                     //Creating an array for price info
                                     MqlRates PriceInfo[];
                                     
                                     //Sorting it from current data to old data
                                     ArraySetAsSeries(PriceInfo, true);
                                     
                                     //Copy prices data to array
                                     int Data = CopyRates(Symbol(), Period (), 0, Bars(Symbol(), Period()), PriceInfo);
                                     
                                     //Creating two arrays for prices of upper and lower band
                                     double UpperBandArray[];
                                     double LowerBandArray[];
                                     
                                     //Identify Envelopes indicator
                                     int EnvelopesIdentify = iEnvelopes(_Symbol,_Period,14,0,MODE_SMA,PRICE_CLOSE,0.150);
                                     
                                     //Copying prices data to arrays
                                     CopyBuffer(EnvelopesIdentify,0,0,1,UpperBandArray);
                                     CopyBuffer(EnvelopesIdentify,1,0,1,LowerBandArray);
                                     
                                     //Calculation for the current data
                                     double UpperBandValue=NormalizeDouble(UpperBandArray[0],6);
                                     double LowerBandValue=NormalizeDouble(LowerBandArray[0],6);
                                     
                                     //Comment Buy signal on the chart or no signal
                                     if (PriceInfo[0].close >= UpperBandValue)
                                     Comment("Envelopes Short Signal");
                                     
                                     if (PriceInfo[0].close <= LowerBandValue)
                                     Comment("Envelopes Take Profit");
                                    
                                     if (PriceInfo[0].close > LowerBandValue
                                     &&  PriceInfo[0].close < UpperBandValue)
                                     Comment("No Signal"); 
                                     
                                    }
                                  //+------------------------------------------------------------------+
                                  
                                  MetaTrader 5 中的代码可以执行,如下图所示:

                                  轨道线横盘卖出策略插入


                                  将文件拖放到图表上,或双击该文件,然后代码将会执行,并打开以下窗口。

                                  5

                                  之后,程序将出现在图表上:

                                  55

                                  轨道线横盘卖出策略 - 无信号

                                  正如我们在上一张图表中所见,该程序没有给我们任何信号,因为价格在横盘期间在上轨和下轨之间波动。


                                  轨道线横盘卖出策略 - 卖出信号

                                  正如我们在上一张图表中所见,该程序发给我们一个做空信号,因为价格在横盘期间触及上轨。

                                  轨道线横盘卖出策略 - 获利了结

                                  正如我们在上一张图表中所见,该程序发给我们一个获利了结信号,因为价格在横盘期间触及下轨。


                                  结束语

                                  在本文中,我们以轨道线指标为例研究了波带交易的概念。 我们还研究了波带交易的益处,以及在趋势和横盘走势期间如何运用轨道线指标的方式。

                                  我们还见识了轨道线是如何计算指标的,而理解我们所要采用的工具的内部信息总是很好的。 轨道线是一个指标,它可以让我们对如何改善交易结果和决策有了新的见解和思路。

                                  进而,我们还研究了一个简单的策略,允许在不同的行情条件下运用该指标:趋势行情上行趋势、和下行趋势、或横盘。 我们在此还看到了如何设计交易系统蓝图,从而帮助我们理解、并能够轻松地编写这些策略。

                                  此外,本文还介绍了 MQL5 语言,以及基于轨道线策略的实现相关的代码。 我要再次提请,本文的主要目的是学习编码的益处,以及如何帮助我们轻松有效地进行交易。

                                  我建议您编写自己的代码,并执行它们,从而增强您对该主题的理解。 我希望您已发现了这篇文章对您和交易的有益之处。


                                  本文由MetaQuotes Ltd译自英文
                                  原文地址: https://www.mql5.com/en/articles/10478

                                  学习如何基于动量设计交易系统 学习如何基于动量设计交易系统
                                  在我上一篇文章中,我曾提到了判断价格走势的重要性。 在本文中,我将分享最重要的概念和指标之一,即动量指标。 我还将分享如何基于这个动量指标设计一款交易系统。
                                  一张图表上的多个指标(第 05 部分):将 MetaTrader 5 转变为 RAD 系统(I) 一张图表上的多个指标(第 05 部分):将 MetaTrader 5 转变为 RAD 系统(I)
                                  有很多人不知道如何编程,但他们很有创造力,亦有杰出的想法。 然而,由于缺乏编程知识,他们无法实现这些想法。 我们一起看看如何利用 MetaTrader 5 平台本身创建图表交易,就如同它是一个 IDE。
                                  DoEasy 函数库中的图形(第九十九部分):依据单个控制点移动扩展图形对象 DoEasy 函数库中的图形(第九十九部分):依据单个控制点移动扩展图形对象
                                  在前一篇文章中,我实现了依据控件窗体移动扩展图形对象轴点的功能。 现在,我将实现依据单个图形对象控制点(窗体)移动复合图形对象的功能。
                                  一张图表上多个指标(第 04 部分):晋升为一款智能交易系统 一张图表上多个指标(第 04 部分):晋升为一款智能交易系统
                                  在我之前的文章里,我已经解释了如何创建拥有多个子窗口的指标,在使用自定义指标时如此这般会变得很有趣。 这次,我们将看到如何为智能交易系统添加多个窗口。