English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
preview
学习如何基于鳄鱼(Alligator)设计交易系统

学习如何基于鳄鱼(Alligator)设计交易系统

MetaTrader 5交易 | 1 二月 2023, 08:59
2 105 1
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

概述

这是来自我们系列中的一篇新文章,是有关如何基于最流行的技术指标设计交易系统。 在本文中,我们将详细学习有关鳄鱼指标是什么、它衡量什么、我们如何计算它、以及如何读取和运用它。 然后,我们将基于该指标的主要意图,在一些简单策略基础上创建一个交易系统。 我们会通过以下主题涵盖该指标:

  1. 鳄鱼定义
  2. 鳄鱼策略
  3. 鳄鱼策略蓝图
  4. 鳄鱼交易系统
  5. 结束语

我建议您尝试应用自己所学知识,尤其是本文中的代码,来开发您的编程技能,因为这是达成这一开发意图的重要一步。 在本文中,我们将利用内置在 MetaTrader 5 交易终端中的 MQL5(MetaQuotes 语言 5)IDE,如果您不知道如何下载 MetaTrader 5,以及如何使用 MQL5,您可以阅读在 MetaEditor 中编写 MQL5 代码的主题来了解更多信息。

免责声明:所有信息“按原样”提供仅用于教学目的,并非出于交易目的或建议。 这些信息不能保证任何结果。 如果您选择在您的任何交易账户上使用这些材料,您将自行承担风险,您是唯一的责任人。

鳄鱼定义

鳄鱼技术指标是一种趋势跟踪,由比尔·威廉姆斯(Bill Williams)开发。 它所依据的趋势并非来自金融市场金融产品经历年代的大多数时间,它只需要其 15% 到 30% 的时间,而它在窄幅震荡区间消耗了大部分时间,大约花费了 70% 到 85% 的时间。 故此,我们有时出于一段趋势,要么是上升趋势,要么是下降趋势,但大多数时候我们都有范围周期。 如果您想了解有关趋势、它们的类型、以及我们如何识别它们的更多信息,您可以阅读我上一篇文章中的趋势定义主题,它在这种情况下会很实用。 它在计算中用到了一些斐波那契级数,就像我们即将看到的那样,因为它所用到的三个平滑移动平均线,周期分别为一组数字 5、8、13。 正如我们所说,鳄鱼指标由三条平滑移动平均线组成,它们如下:

  • 鳄鱼下颌。
  • 鳄鱼牙齿。
  • 鳄鱼嘴唇。

我们可以按以下步骤手工计算此指标:

鳄鱼下颌 = SMMA (Median price, 13, 8)

鳄鱼牙齿 = SMA (Median price, 8, 5)

鳄鱼嘴唇 = SMMA (Median price, 5, 3)

Median Price = (High + Low)/2

其中:

SMMA = 平滑移动均线

Median price = 数据中位价

High = 最高价

Low = 最低价

在前面的步骤之后,我们就得到了鳄鱼指标,但我们不再需要手工计算它,因为在 MetaTrader 5 终端中将其作为内置指标,我们需要做的就是从可用的技术指标中选择它,如下所示:

打开交易终端时,我们按下插入 --> 指标 --> 比尔·威廉姆斯 --> 鳄鱼。

 鳄鱼插入

之后,我们可以找到参数,如下所示:

 鳄鱼参数

1 - 鳄鱼下颌周期。

2 - 鳄鱼下颌水平平移。

3 - 鳄鱼牙齿周期。

4 - 鳄鱼牙齿水平偏移。

5 - 鳄鱼嘴唇周期。

6 - 鳄鱼牙齿水平平移。

7 - 平滑周期。

8 - 选用的价格类型。

经由以下窗口,我们可以确定指标的样式:

 鳄鱼参数1

1 - 下颌线颜色。

2 - 下颌线样式。

3 - 下颌线宽度。

4 - 牙齿线颜色。

5 - 牙齿线样式。

6 - 牙齿线宽度。

7 - 嘴唇线颜色。

8 - 嘴唇线样式。

9 - 嘴唇线宽度。

确定所有参数并按“确定”后,我们可以发现指标加载到图表上,如下所示:

 鳄鱼加载

正如我们在上一个图表中所见,我们将指标插入到图表中,并得到三条线:

1 - 鳄鱼嘴唇

2 - 鳄鱼牙齿

3 - 鳄鱼下颌

我们可以简单地观察这些线距价格的相对位置来读取指标。 如果价格高于嘴唇、牙齿,然后是下颌,我们可以说趋势上升。 如果价格低于嘴唇、牙齿,然后是下颌,我们可以说趋势下降。 如果价格在三条线穿行,我们可以说是横盘整理。

鳄鱼策略

在交易中运用鳄鱼指标的方式有很多,但我还需反复提请本主题的简单策略所基于的主要意图旨在教学,您必须在真实账户中使用它们之前对其进行测试,并确保它们有利可图。 您也许会发现上述策略需要优化,这是很正常的,这样做您就能得到最符合您的交易风格的的最佳公式。

    策略一:鳄鱼趋势识别器:

      基于此策略,我们需要根据特定条件获得看涨和看跌信号。 如果嘴唇值大于牙齿值和下颌值两个值,同时大于牙齿值和下颌值,则为看涨信号。 在其它情况下,如果嘴唇值低于牙齿值和下颌值,同时牙齿值低于下颌值,则为看跌信号。

      嘴唇 > 牙齿值,嘴唇 > 下颌值,且牙齿 > 下颌值 --> 看涨

      嘴唇 < 牙齿值,嘴唇 < 下颌值,且牙齿<> 下颌值 --> 看跌

        策略二: 鳄鱼信号系统

          基于此策略,我们需要根据嘴唇、牙齿和下颌值之间的交叉来获取买入和卖出信号。 如果嘴唇值大于牙齿值和下颌值,这将是一个买入信号。 在另一种场景下,如果嘴唇值低于牙齿和下颌值,则为卖出信号。

          嘴唇 > 牙齿值,嘴唇 > 下颌值 --> 买入

          嘴唇 < 牙齿值,嘴唇 < 下颌值 --> 卖出

            策略三: 鳄鱼信号系统增强

              基于这个策略,我们需要根据嘴唇、牙齿和下颌之间的交叉,然后是收盘价和牙齿价值之间的交叉,来获得买入和卖出信号。 如果嘴唇线低于牙齿和下颌,且收盘价大于牙齿值,这将是一个买入信号。 在其它情况下,如果嘴唇线大于牙齿和下颌,且收盘价低于牙齿值,这将是一个卖出信号。

              嘴唇 < 牙齿值,嘴唇 < 下颌值,且收盘价 > 牙齿 --> 买入

              嘴唇 < 牙齿值,嘴唇 > 下颌值,且收盘价 < 牙齿 --> 卖出

              鳄鱼策略蓝图

              现在,我们需要基于上一个主题中拟议的策略创建一个交易系统,为此,我们将设计一个分步蓝图来帮助我们创建这个交易系统。

                策略一:鳄鱼趋势识别器:

                  根据此策略,我们需要创建一个交易系统,基于持续检查以下值来生成看涨或看跌信号:

                  • 嘴唇值
                  • 牙齿值
                  • 下颌值

                  我们需要交易系统来判定这些值的位置,并基于此生成合适的信号。 如果嘴唇线大于牙齿,嘴唇大于下颌,牙齿线大于下颌,在这种情况下,我们要求交易系统在图表上返回含有以下值的注释:

                  • 看涨
                  • 下颌值 = n
                  • 牙齿 = n
                  • 嘴唇值 = n

                  在另一种情况下,如果嘴唇线低于齿线,嘴唇线低于下颌线,同时牙齿线低于下颌线,在这种情况下,我们要求交易系统在图表上返回含有以下值的注释:

                  • 看跌
                  • 下颌值 = n
                  • 牙齿 = n
                  • 嘴唇值 = n

                  以下是该交易系统的分步蓝图:

                  鳄鱼趋势识别器蓝图

                    策略二: 鳄鱼信号系统

                      根据此策略,我们需要创建一个交易系统,基于持续检查以下值来判定每个值的位置来生成买入或卖出信号:

                      • 嘴唇值
                      • 牙齿值
                      • 下颌值

                      如果嘴唇线大于牙齿值,同时嘴唇线大于下颚值,在这种情况下,我们要求交易系统在图表上返回含有以下值的注释:

                      • 买入
                      • 下颌值 = n
                      • 牙齿 = n
                      • 嘴唇值 = n

                      在另一种情况下,如果嘴唇线低于牙齿值,同时嘴唇线低于下颌线,我们要求交易系统在图表上返回含有以下值的信号注释:

                      • 卖出
                      • 下颌值 = n
                      • 牙齿 = n
                      • 嘴唇值 = n

                      以下是该交易系统的分步蓝图:

                      鳄鱼信号系统蓝图

                        策略三: 鳄鱼信号系统增强

                          根据此策略,我们需要创建一个交易系统,检查以下值来生成买入和卖出信号,从而判定它们彼此的位置:

                          • 嘴唇值
                          • 牙齿值
                          • 下颌值
                          • 收盘价

                          如果嘴唇值低于牙齿值,嘴唇线低于牙齿线,然后收盘价高于牙齿值,我们要求交易系统在图表上返回含有以下值的信号注释:

                          • 买入
                          • 嘴唇值 = n
                          • 牙齿值 = n
                          • 收盘价 = n
                          • 下颌值 = n

                          如果嘴唇线大于齿线,唇线低于下颌线,然后收盘价变为齿值以下,我们要求交易系统在图表上返回含有以下值的信号注释:

                          • 卖出
                          • 嘴唇值 = n
                          • 牙齿值 = n
                          • 收盘价 = n
                          • 下颌值 = n

                          以下是该交易系统的分步蓝图:

                          鳄鱼信号系统增强蓝图

                          鳄鱼交易系统

                          现在,我们将为每个拟议的策略创建一个交易系统,以便在 MetaTrader 5 终端中执行,并可自动生成所需的信号。 首先,我们将创建一个基础交易系统,生成鳄鱼分量值的信号,以便在我们的交易系统中使用。 以下是创建此系统类型的步骤:

                          创建每个鳄鱼分量值(嘴唇、牙齿、下颚)的数组。

                             double jawsArray[];
                             double teethArray[];
                             double lipsArray[]; 

                          调用 "ArraySetAsSeries" 函数设置数据排列顺序。 其参数:

                          • array[]
                          • flag
                             ArraySetAsSeries(jawsArray,true);
                             ArraySetAsSeries(teethArray,true);
                             ArraySetAsSeries(lipsArray,true);

                          调用 “iAlligator” 函数定义鳄鱼指标句柄: 其参数:

                          • symbol: 我们采用 (_Symbol) 对应当前应用的品种名称。
                          • period: 我们采用 (_Period) 应用当前时间帧。
                          • jaw_period: 确定下颌的计算周期,我们将采用(13)。
                          • jaw_shift: 确定下颌的水平偏移,我们将采用(8)。
                          • teeth_period: 确定牙齿的计算周期,我们将采用(8)。
                          • teeth_shift: 确定牙齿的水平偏移,我们将采用(5)。
                          • lips_period: 确定嘴唇的计算周期,我们将采用(5)。
                          • lips_shift: 确定嘴唇的水平偏移,我们将采用(3)。
                          • ma_method: 确定移动均线类型,我们将采用(MODE_SMA)。
                          • applied_price: 确定价格类型我们将采用 (PRICE_MEDIAN)。
                          int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);

                          调用 “CopyBuffer” 函数定义数据,并存储结果。 其参数:

                          • indicator_handle: 确定指标句柄,我们将采用(allicanDef)。
                          • buffer_num: 确定指标缓冲区数,我们将采用(0 表示下颌)、(1 表示牙齿)和(2 表示嘴唇)。
                          • start_pos: 确定起始位置,我们将采用(0)。
                          • count: 确定要复制的数量,我们将采用(3)。
                          • buffer[]: 确定要复制的目标数组,我们将采用(jawsArray,toothArray,lipsArray)。
                             CopyBuffer(alligatorDef,0,0,3,jawsArray);
                             CopyBuffer(alligatorDef,1,0,3,teethArray);
                             CopyBuffer(alligatorDef,2,0,3,lipsArray);

                          获取三个分量的值。

                             double jawsValue=NormalizeDouble(jawsArray[0],5);
                             double teethValue=NormalizeDouble(teethArray[0],5);
                             double lipsValue=NormalizeDouble(lipsArray[0],5);

                          用指标的三个分量值作为注释。

                             Comment("jawsValue = ",jawsValue,"\n",
                             "teethValue = ",teethValue,"\n",
                             "lipsValue = ",lipsValue);

                          以下是创建该交易系统的完整代码:

                          //+------------------------------------------------------------------+
                          //|                                      Simple Alligator System.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"
                          //--------------------------------------------------------------------
                          void OnTick()
                            {
                             //creating price array
                             double jawsArray[];
                             double teethArray[];
                             double lipsArray[];   
                             //Sorting data
                             ArraySetAsSeries(jawsArray,true);
                             ArraySetAsSeries(teethArray,true);
                             ArraySetAsSeries(lipsArray,true);
                             //define Alligator
                             int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);      
                             //define data and store result
                             CopyBuffer(alligatorDef,0,0,3,jawsArray);
                             CopyBuffer(alligatorDef,1,0,3,teethArray);
                             CopyBuffer(alligatorDef,2,0,3,lipsArray);
                             //get value of current data
                             double jawsValue=NormalizeDouble(jawsArray[0],5);
                             double teethValue=NormalizeDouble(teethArray[0],5);
                             double lipsValue=NormalizeDouble(lipsArray[0],5);
                             //comment on the chart
                             Comment("jawsValue = ",jawsValue,"\n",
                             "teethValue = ",teethValue,"\n",
                             "lipsValue = ",lipsValue);
                            }
                          //+------------------------------------------------------------------+

                          编译此代码后,我们将在智能系统文件夹的导航器中找到它,如下所示:

                          简单鳄鱼系统 - Nav.

                          将其拖放到所需的图表上,我们将找到此 EA 的窗口,如下所示:

                          简单鳄鱼系统 - 窗口

                          在勾选“允许算法交易”旁边的“确定”后,EA 将加载到图表,如下所示:

                          简单鳄鱼系统 - 加载

                          正如我们在右上角附加的上一张图表中一样,EA 已加载。 现在,我们已准备好接收信号。 以下是来自测试生成的信号的示例。

                           简单鳄鱼系统信号

                          正如我们在上一张图表中所见,我们在左上角有一个注释,其中包含以下值:

                          下颌值 = n

                          牙齿 = n

                          嘴唇值 = n

                            策略一:鳄鱼趋势识别器

                              我们可以基于此策略创建一个交易系统,与以下完整代码相同:

                              //+------------------------------------------------------------------+
                              //|                                   Alligator Trend Identifier.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"
                              //+------------------------------------------------------------------+
                              void OnTick()
                                {
                              //creating three arrays of Alligator components
                                 double jawsArray[];
                                 double teethArray[];
                                 double lipsArray[];
                              //Sorting data
                                 ArraySetAsSeries(jawsArray,true);
                                 ArraySetAsSeries(teethArray,true);
                                 ArraySetAsSeries(lipsArray,true);
                              //define Alligator
                                 int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                              //define data and store result
                                 CopyBuffer(alligatorDef,0,0,13,jawsArray);
                                 CopyBuffer(alligatorDef,1,0,13,teethArray);
                                 CopyBuffer(alligatorDef,2,0,13,lipsArray);
                              //get value of current data
                                 double jawsValue=NormalizeDouble(jawsArray[0],5);
                                 double teethValue=NormalizeDouble(teethArray[0],5);
                                 double lipsValue=NormalizeDouble(lipsArray[0],5);
                              //conditions of strategy
                                 if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue)
                                   {
                                    Comment("Bullish","\n",
                                            "jawsValue = ",jawsValue,"\n",
                                            "teethValue = ",teethValue,"\n",
                                            "lipsValue = ",lipsValue);
                                   }
                                 if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue)
                                   {
                                    Comment("Bearish","\n",
                                            "jawsValue = ",jawsValue,"\n",
                                            "teethValue = ",teethValue,"\n",
                                            "lipsValue = ",lipsValue);
                                   }
                                }
                              //+------------------------------------------------------------------+

                              代码中的差异。

                              策略的条件,看涨情况:

                                 if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue)
                                   {
                                    Comment("Bullish","\n",
                                            "jawsValue = ",jawsValue,"\n",
                                            "teethValue = ",teethValue,"\n",
                                            "lipsValue = ",lipsValue);
                                   }

                              看跌情况:

                                 if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue)
                                   {
                                    Comment("Bearish","\n",
                                            "jawsValue = ",jawsValue,"\n",
                                            "teethValue = ",teethValue,"\n",
                                            "lipsValue = ",lipsValue);
                                   }

                              编译此代码后,并按照我们学习的方式执行创建的智能系统,我们会发现此 EA 加载到图表上,如下所示:

                              鳄鱼趋势识别器加载

                              正如我们在上一个图表中所见,我们将 EA 附加到图表上的右上角,我们已准备好基于此策略获得看涨或看跌信号。以下是这些信号的示例: 下面是这些信号的一些示例。

                              看涨情况:

                              鳄鱼趋势识别器 - 看涨信号

                              正如我们在上一张图表中所见,我们在右上角有一个注释作为信号,含有以下值:

                              • 看涨
                              • 下颌值 = n
                              • 牙齿 = n
                              • 嘴唇值 = n 
                              我们有三条线低于价格。 如此,我们得到了一个看涨信号。

                              看跌情况:

                               鳄鱼趋势识别器 - 看跌信号

                              正如我们在上一张图表中所见,我们在右上角有一个注释作为看跌信号,具有以下值:

                              • 看跌
                              • 下颌值 = n
                              • 牙齿 = n
                              • 嘴唇值 = n

                              我们有三条线高于价格。如此,我们得到了看跌信号。

                                策略二: 鳄鱼信号系统

                                  以下代码创建基于此策略的交易系统:

                                  //+------------------------------------------------------------------+
                                  //|                                    Alligator Signals System .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"
                                  //+------------------------------------------------------------------+
                                  void OnTick()
                                    {
                                  //creating three arrays of Alligator components
                                     double jawsArray[];
                                     double teethArray[];
                                     double lipsArray[];
                                  //Sorting data
                                     ArraySetAsSeries(jawsArray,true);
                                     ArraySetAsSeries(teethArray,true);
                                     ArraySetAsSeries(lipsArray,true);
                                  //define Alligator
                                     int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                                  //define data and store result
                                     CopyBuffer(alligatorDef,0,0,13,jawsArray);
                                     CopyBuffer(alligatorDef,1,0,13,teethArray);
                                     CopyBuffer(alligatorDef,2,0,13,lipsArray);
                                  //get value of current data
                                     double jawsValue=NormalizeDouble(jawsArray[0],5);
                                     double teethValue=NormalizeDouble(teethArray[0],5);
                                     double lipsValue=NormalizeDouble(lipsArray[0],5);
                                  //conditions of strategy
                                     if(lipsValue>teethValue && lipsValue>jawsValue)
                                       {
                                        Comment("Buy","\n",
                                                "jawsValue = ",jawsValue,"\n",
                                                "teethValue = ",teethValue,"\n",
                                                "lipsValue = ",lipsValue);
                                       }
                                     if(lipsValue<teethValue && lipsValue<jawsValue)
                                       {
                                        Comment("Sell","\n",
                                                "jawsValue = ",jawsValue,"\n",
                                                "teethValue = ",teethValue,"\n",
                                                "lipsValue = ",lipsValue);
                                       }
                                    }
                                  //+------------------------------------------------------------------+

                                  代码中的差异。

                                  此策略的条件。

                                  买入信号情况:

                                     if(lipsValue>teethValue && lipsValue>jawsValue)
                                       {
                                        Comment("Buy","\n",
                                                "jawsValue = ",jawsValue,"\n",
                                                "teethValue = ",teethValue,"\n",
                                                "lipsValue = ",lipsValue);
                                       }

                                  卖出信号情况:

                                     if(lipsValue<teethValue && lipsValue<jawsValue)
                                       {
                                        Comment("Sell","\n",
                                                "jawsValue = ",jawsValue,"\n",
                                                "teethValue = ",teethValue,"\n",
                                                "lipsValue = ",lipsValue);
                                       }

                                  编译此代码,并在交易终端中执行后,我们可以发现它已加载到图表上,如下所示:

                                  鳄鱼信号系统加载

                                  我们在上一张图表的右上角看到 EA 已加载,我们已准备好接收基于此策略的买入或卖出信号,以下是测试示例。

                                  买入信号情况:

                                  鳄鱼信号系统 - 买入信号

                                   

                                  如我们所见,我们得到的所需信号含有以下值:

                                  • 买入
                                  • 下颌值 = n
                                  • 牙齿 = n
                                  • 嘴唇值 = n
                                  我们有三条线低于价格。如此,我们得到了买入信号。

                                  卖出信号情况:

                                   鳄鱼信号系统 - 卖出信号

                                  我们得到所需的信号含有以下值:

                                  • 卖出
                                  • 下颌值 = n
                                  • 牙齿 = n
                                  • 嘴唇值 = n

                                  我们有三条线高于价格。如此,我们得到了看涨信号。

                                    策略三: 鳄鱼信号系统增强

                                      以下是基于此策略创建交易系统的完整代码:

                                      //+------------------------------------------------------------------+
                                      //|                         Alligator Signals System Enhancement.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"
                                      //+------------------------------------------------------------------+
                                      void OnTick()
                                        {
                                      //creating three arrays of Alligator components
                                         double jawsArray[];
                                         double teethArray[];
                                         double lipsArray[];
                                         MqlRates pArray[];
                                      //Sorting data
                                         ArraySetAsSeries(jawsArray,true);
                                         ArraySetAsSeries(teethArray,true);
                                         ArraySetAsSeries(lipsArray,true);
                                         int Data=CopyRates(_Symbol,_Period,0,1,pArray);
                                      //define Alligator
                                         int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                                      //define data and store result
                                         CopyBuffer(alligatorDef,0,0,13,jawsArray);
                                         CopyBuffer(alligatorDef,1,0,13,teethArray);
                                         CopyBuffer(alligatorDef,2,0,13,lipsArray);
                                      //get value of current data
                                         double jawsValue=NormalizeDouble(jawsArray[0],5);
                                         double teethValue=NormalizeDouble(teethArray[0],5);
                                         double lipsValue=NormalizeDouble(lipsArray[0],5);
                                      //conditions of strategy
                                         if(lipsValue<teethValue && lipsValue<jawsValue && pArray[0].close>teethValue)
                                           {
                                            Comment("Buy","\n",
                                                    "jawsValue = ",jawsValue,"\n",
                                                    "teethValue = ",teethValue,"\n",
                                                    "closingPrice = ",pArray[0].close,"\n",
                                                    "lipsValue = ",lipsValue);
                                           }
                                         if(lipsValue>teethValue && lipsValue>jawsValue && pArray[0].close<teethValue)
                                           {
                                            Comment("Sell","\n",
                                                    "jawsValue = ",jawsValue,"\n",
                                                    "teethValue = ",teethValue,"\n",
                                                    "closingPrice = ",pArray[0].close,"\n",
                                                    "lipsValue = ",lipsValue);
                                           }
                                        }
                                      //+------------------------------------------------------------------+

                                      代码中的差异。

                                      创建更多 “MqlRates” 结构类型的数组,以便存储有关价格、交易量、和点差的信息。

                                      MqlRates pArray[];

                                      调用 “CopyRates” 获取 MqlRates 类型的历史数据。 其参数:

                                      • symbol_name: 确定品种名称,我们将采用(_Symbol)。
                                      • timeframe: 确定周期,我们将采用(_Period)。
                                      • start_pos: 确定起始位置,我们将采用(0)。
                                      • count: 确定要复制的数据数量,我们将采用(1)。
                                      • rates_array[]: 确定要复制的目标数组,我们将采用(pArray)。
                                      int Data=CopyRates(_Symbol,_Period,0,1,pArray);

                                      策略的条件。

                                      买入信号情况:

                                         if(lipsValue<teethValue && lipsValue<jawsValue && pArray[0].close>teethValue)
                                           {
                                            Comment("Buy","\n",
                                                    "jawsValue = ",jawsValue,"\n",
                                                    "teethValue = ",teethValue,"\n",
                                                    "closingPrice = ",pArray[0].close,"\n",
                                                    "lipsValue = ",lipsValue);
                                           }

                                      卖出信号情况:

                                         if(lipsValue>teethValue && lipsValue>jawsValue && pArray[0].close<teethValue)
                                           {
                                            Comment("Sell","\n",
                                                    "jawsValue = ",jawsValue,"\n",
                                                    "teethValue = ",teethValue,"\n",
                                                    "closingPrice = ",pArray[0].close,"\n",
                                                    "lipsValue = ",lipsValue);
                                           }

                                      编译此代码,并执行 EA 后,我们会发现它已被加载到图表上,如下所示,可以获取我们的买入和卖出信号。

                                       鳄鱼信号系统增强加载

                                      我们已把 EA 加载到右上角,我们可以接收所需的信号,以下是测试示例。

                                      买入信号情况:

                                       鳄鱼信号系统增强 - 买入信号

                                      我们在左上角得到一条注释,其中包含以下值:

                                      • 买入
                                      • 下颌值 = n
                                      • 牙齿 = n
                                      • 收盘价 = n
                                      • 嘴唇值 = n 
                                      由于三条线高于价格,然后我们还发现收盘价收盘价高于鳄鱼齿线。

                                      卖出信号情况:

                                       鳄鱼信号系统增强 - 卖出信号

                                      我们在左上角得到一条注释作为信号:

                                      • 卖出
                                      • 下颌值 = n
                                      • 牙齿 = n
                                      • 收盘价 = n
                                      • 嘴唇值 = n

                                      由于三条线低于价格,然后我们还发现收盘价收盘价低于鳄鱼齿线。

                                      结束语

                                      我们在本文中详细学习了鳄鱼技术指标,除了生成买入和卖出信号外,它还可用于确认趋势。 我们学习了如何手工计算它,以及如何据其在简单策略里运用:

                                      • 鳄鱼趋势识别器:根据鳄鱼三条线(嘴唇、牙齿和下颌)的位置生成看涨或看跌信号。
                                      • 鳄鱼信号系统: 根据指标三条线之间的交叉,遵照经典方法交叉生成买入或卖出信号。
                                      • 鳄鱼信号系统增强:通过另一种方法生成买入或卖出信号,根据指标三线的位置,以及收盘价和齿之间的交叉,更早地获得这些信号。 

                                      我们还为提到的每个策略设计了一个分步蓝图,来帮助我们组织我们的思路,从而顺利、轻松、和有效地创建一个交易系统。 我们还为每个提到的策略创建了可在 MetaTrader 5 交易终端中运行的交易系统,并根据我们的设计和编码自动生成信号。 我需要在此再次确保,您必须在真实账户上使用之前,测试所有策略,确保它们对您有用,且可盈利,因为此文的主要意图是分享知识,且本文的主要目的是教学,此外没有什么策略能够适合我们所有人。

                                      我希望您尝试应用自己学到的知识,我建议您提高编码技能,并从阅读本文中获得完全的好处,我希望您发现它对您的交易有用,并对本文的主题甚至任何相关主题都能引发出有用的见解。 如果您想阅读更多类似的文章,可以阅读我之前在本系列中的文章,因为我们已分享了最受欢迎的技术指标,如随机指标、RSI、布林带、移动平均线、轨道线、MACD、ADX、等 等,以及我们如何基于它们创建交易系统。

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

                                      最近评论 | 前往讨论 (1)
                                      xielp
                                      xielp | 28 2月 2023 在 15:33
                                      回测看效果并不好啊
                                      DoEasy. 控件 (第 21 部分): SplitContainer 控件 面板隔板 DoEasy. 控件 (第 21 部分): SplitContainer 控件 面板隔板
                                      在本文中,我将为 SplitContainer 控件创建辅助面板隔板对象类。
                                      数据科学与机器学习(第 07 部分):多项式回归 数据科学与机器学习(第 07 部分):多项式回归
                                      与线性回归不同,多项式回归是一种很灵活的模型,旨在更好地执行线性回归模型无法处理的任务,我们来找出如何在 MQL5 中制作多项式模型,并据其做出积极东西。
                                      群体优化算法:粒子群(PSO) 群体优化算法:粒子群(PSO)
                                      在本文中,我将研究流行的粒子群优化(PSO)算法。 之前,我们曾讨论过优化算法的重要特征,如收敛性、收敛率、稳定性、可伸缩性,并开发了一个测试台,并研究了最简单的 RNG 算法。
                                      利用智能系统进行风险和资本管理 利用智能系统进行风险和资本管理
                                      本文是有关您在回测报告中看不到的内容,使用自动交易软件时您应该期望什么;如果您正在使用智能系统,该如何管理您的资金;以及如果您正在使用自动化过程,如何弥补重大亏损从而坚持交易活动。