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

学习如何基于熊市力量设计交易系统

MetaTrader 5交易 | 28 十一月 2022, 09:58
926 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

概述

这是来自我们系列讲义的新篇章,我们将学习一个新的可能对我们有利的技术工具,特别是若我们将其与其它技术工具结合使用。 我们将学习如何基于熊市力量技术指标创建交易系统。 正如我们在本系列文章中所做的那样,我们试图了解事物的根源,从而去有效地利用它们。 我们通览以下主题详细学习熊市力量指标:

  1. 熊市力量定义
  2. 熊市力量策略
  3. 熊市力量策略蓝图
  4. 熊市力量交易系统
  5. 结束语

通览熊市力量定义主题,我们将详尽学习熊市力量指标,了解它是什么、衡量什么、如何手工计算它、并学习该指标背后的基本概念,以及如何在 MetaTrader 5 交易平台中插入和运用它。 学习该指标的基础知识,并了解该指标背后的主要概念之后,我们还要学习如何在一些简单的策略里运用它,以加深我们的理解,并获得有关本文主题的更多见解,从而改善我们的交易,这些则需通览熊市力量策略的主题。 然后,我们将设计一个分步蓝图,为的是基于上述策略创建交易系统,这一步非常重要,因为它能帮助我们顺利创建交易,就像我们将在熊市力量策略蓝图主题中看到的那样。 再之后,我们会迈入本文中最有趣的主题,即熊市力量交易系统,因为我们要学习如何以 MQL5(MetaQuotes 语言)基于上述策略创建交易,从而在 MetaTrader 5 交易终端中执行。

我建议您亲自尝试应用和编码自己学到的东西,因为实践是任何学习过程中的重要因素,这将帮助您更好地理解该主题。 我们将利用 MetaTrader 5 交易平台,及其内置 IDE 来编写如本文所述的 MQL5 代码。 如果您想知道如何下载和使用它们,您可阅读上一篇文章中的在 MetaEditor 中编写 MQL5 代码的主题。

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

现在,我们开始我们的主题。


熊市力量定义

在本主题中,我们将学习熊市力量指标是什么、测量什么、以及如何在 MetaTrader 5 中计算和使用它,从而更详细地了解熊市力量指标。 熊市力量指标是一个振荡器指标,在零轴附近振荡,它衡量市场的看跌程度;而当我们看到熊市变得疲软时,它也可以给我们指示多头参与了游戏。 我们都已认识到,供给和需求在任何市场中都非常重要,犹如车辆和动力正在推动市场的上涨或下跌。 因此,重要的是知晓多头和空头在多大程度上控制市场。 该指标由亚历山大·埃尔德(Alexander Elder)博士创建,用于衡量这一概念,并查看空头在多大程度上控制了市场。

这个指标是如何做到这些的,如果我们学会了如何计算它,我们就可以得到答案。 为了计算熊市力量指标,我们将遵循以下内容。

  1. 获取周期的低点。
  2. 获取指数移动平均线(EMA),若要了解有关它的更多信息,以及我们如何计算它,您可以通过阅读我之前关于移动平均线的文章,学习如何设计不同的移动平均线系统
  3. 由低点值减去 EMA 来得到熊市力量值。

低点 = 周期持续间的最低值。

EMA = 指数移动平均线 EMA。

熊市力量 = 低点值 - EMA

我们知道若空头控制着市场,他们大部分时间都在压低市场。 故此,我们在熊市力量计算公式中采用低点值,因为我们需要测量的是熊市,然后我们将得到这个低点值和 EMA 之间的差值,获得一个围绕在零轴附近的振荡器指标,当我们发现它的值接近零轴,并变得高过它时,我们可以得到熊市疲软的迹象。

此指标与另外的趋势指标一同配合使用更佳,因为它将提供更有效的洞察力,就像我们将在本文中提到的策略之所为一样。 这个概念非常宏伟,也是技术分析的优美特征之一,因为我们可用许多概念来获得更多视界,并从不同角度审视该金融产品。

如果我们想知道如何将此指标插入 MetaTrader 5,我们在打开交易终端后,按下插入 --> 指标 --> 振荡器 --> 熊市力量。 我们也可浏览下图看到这一点:

 熊市力量插入

按下“熊市力量”将其插入图表后,我们会发现其参数窗口与以下内容相同:

 熊市力量参数

1 - 确定将在计算中采用的周期。

2 - 确定熊市力量柱线的颜色。

3 - 确定熊市力量柱线的宽度。

确定这些参数,并按“确定”后,我们会见到指标插入到图表中,如下所示:

熊市力量加载

正如我们在上一张图表中下部一样,我们将指标附加到图表上,其柱线围绕零轴振荡,就像我们提到的一样,若数值低于零轴时,这意味着空头控场,且当它接近并变得高于零轴时,这意味着它们变得疲软。


熊市力量策略

在这一部分中,我们将学习如何在简单的策略里运用熊市力量,这些策略可基于该指标的基本概念来运作。 以下是这些策略及其条件。 我需要在此确认,这些以教育为主要目标的策略是了解指标背后的主要概念,以及我们如何运用它,因此您必须在实盘账户上使用它们之前全面测试,从而确保您的交易能因其受益。

    策略一: 熊市力量走势

      根据该策略,我们需要根据当期和前期熊市力量值的位置来得到信号。 如果当期值大于前期值,这将是熊市力量指标上升的信号。 反之亦然,如果当期值低于前期值,这将是熊市力量下降的信号。

      简而言之,

      当期熊市力量 > 前期熊市力量 --> 熊市力量正在上升

      当期熊市力量 < 前期熊市力量 --> 熊市力量正在下降

        策略二:熊市力量 - 强劲或背离

          根据该策略,我们需要评估四个值来获得一个信号,通知我们是否有强劲走势或背离,它们是当期低点、前期低点、当期熊市力量、和前期熊市力量。 如果当期低点低于前期低点,当期熊市力量值低于前期,这将是强劲走势的信号。 在另一种情况下,如果当期低点低于前期低点,而当期熊市力量值大于前期,则这是看涨背离的信号。

          简而言之,

          当期低点 < 前期低点, 且当期熊市力量 < 前期熊市力量 --> 强劲走势。

          当期低点 < 前期低点, 且当期熊市力量 > 前期熊市力量 --> 看涨背离

            策略三

              根据该策略,我们需要一个可用于获取买入和卖出信号的触发器,我们将根据该策略评估四个值来做到这一点。 这四个值是当期熊市力量、零轴、当期收盘价、和当期指数移动平均线。 如果当期熊市力量大于零轴,当期收盘价大于指数移动平均线,则这是买入信号。 如果当期熊市力量低于零轴,当期收盘价低于指数移动平均线,则这是卖出的信号。

              简而言之,

              当期熊市力量 > 零轴,且当期收盘价 > EMA --> 买入

              当期熊市力量 < 零轴,且当期收盘价 < EMA --> 卖出


              熊市力量策略蓝图

              在本主题中,我们将学习如何为拟议的每个策略设计分步蓝图,来帮助我们据此以清晰的步骤规划我们的想法,顺利轻松地创建交易系统。

                策略一: 熊市力量走势

                  首先,我们需要了解我们要求程序做什么,并来规划我们的步骤,故此,我们要求计算机在每次跳价时检查两个数值,并在创建这些数值之后确定,这些值是当期和前期熊市力量。 我们要求程序检查这些数值,来判定哪个值更大。 如果当期值大于前期,我们要求程序或智能系统在图表上的注释里返回信号,如下所示:

                  • 熊市力量正上升
                  • 熊市力量值
                  • 熊市力量前期值

                  我们需要把每个数值显示在单独的行中。 

                  另一种场景是,如果当期熊市力量值大于前期,我们要求智能系统返回一条注释,其中包含以下数值,并且每个值都在单独的行中:

                  • 熊市力量正下降
                  • 熊市力量值
                  • 熊市力量前期值。

                  那么,以下就是此策略创建交易系统的分步蓝图。

                  熊市力量走势蓝图

                    策略二:熊市力量 - 强劲或背离

                      基于该策略,我们要求交易系统检查四个数值,它们是当期低点、前期低点、当期和前期熊市力量值。 之后,我们要求判定当期低值是否低于前期,同时当期熊市力量值低于前期,我们要求交易系统在图表上返回一条注释信号,包含以下数值,每个数值都在单独的行中:

                      • 强劲走势
                      • 当期低点值
                      • 前期低点值
                      • 当期熊市力量值
                      • 前期熊市力量值

                      在另一种场景下,如果当期低值低于前期,同时当期熊市力量值大于前期,我们要求交易系统在图表上返回含有以下数值的注释信号:

                      • 看涨背离
                      • 当期低点值
                      • 前期低点值
                      • 当期熊市力量值
                      • 前期熊市力量值

                      以下是帮助我们创建基于此策略交易系统的分步蓝图。

                      熊市力量 - 强势或背离蓝图

                       

                        策略三: 熊市力量信号

                          基于该策略,我们需要创建一个交易系统,在每次跳价时检查四个数值,它们是当期熊市力量、零轴、当期收盘价、和当期指数移动平均线。 我们需要判定当期熊市力量是否大于零轴,同时如果当期收盘价大于指数移动平均线,我们要求智能系统在图表上返回含有以下数值的注释信号,且每个数值都在单独的行中:

                          • 买入信号
                          • 当期收盘价
                          • 当期 EMA 值
                          • 当期熊市力量值

                          在另一种情况下,如果当期熊市力量低于零轴,同时当期收盘价低于指数移动平均线,我们要求交易系统返回含有以下数值的注释信号:

                          • 卖出信号
                          • 当期收盘价
                          • 当期 EMA 值
                          • 当期熊市力量值

                          以下是规划我们的想法来创建基于此策略的交易系统的分步蓝图。

                          熊市力量信号蓝图

                          熊市力量交易系统

                          在本主题中,我们将学习如何为每个拟议的策略创建交易系统,但我们将基于熊市力量创建一个简单的交易系统,以便在图表上返回注释信号,其中包含熊市力量的当期值,并以其作为所有策略的基础。

                          以下是创建该交易系统的代码。

                          我们创建一个 “double” 类型的数组 “bearpower”:

                          double bearpowerArray[];

                          调用 “ArraySetAsSeries” 函数为所创建的数组设置排序方向,布尔值取 “true”。

                          ArraySetAsSeries(bearpowerArray,true);

                          调用 “iBearsPower” 函数定义熊市力量指标,并返回指标的句柄。 参数为:

                          • symbol: 我们要 (_Symbol) 应用的是当前品种。
                          • period: 我们要 (_Period) 应用的是当前时间帧周期。
                          • ma_period: 我们要采用 13 作为移动均线周期。
                          int bearpowerDef = iBearsPower(_Symbol,_Period,13);

                          调用 CopyBuffer 函数填充数组,从熊市力量指标中获取数据。此函数的参数: 该函数参数:

                          • indicator_handle: 指标句柄,我们将取用 (bearpowerDef) 里保存的数值。     
                          • buffer_num: 指标缓冲区编号,我们将采用(0)。
                          • start_pos: 数据起始位置,我们将采用(0)。         
                          • count: 要复制的数量,我们将采用(3)。                
                          • buffer[]: 要复制的目标数组,我们将采用(bearpowerArray)。
                          CopyBuffer(bearpowerDef,0,0,3,bearpowerArray);

                          创建并定义 “bearpowerVal” 变量之后,调用 “NormalizeDouble” 函数,返回双精度类型数值。 该函数参数:

                          • value: 我们要应用 (bearpowerArray[0]) 作为常规化数值。
                          • digits: 我们将采用 (6) 作为小数点之后的数字长度。
                          double bearpowerVal = NormalizeDouble(bearpowerArray[0],6);

                          我们需要调用 “Comment” 函数在图表上生成含有当期熊市力量值的注释:

                          Comment("Bear's Power Value is ",bearpowerVal);

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

                          //+------------------------------------------------------------------+
                          //|                                          Simple Bear's Power.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()
                            {
                             double bearpowerArray[];
                          
                             ArraySetAsSeries(bearpowerArray,true);
                          
                             int bearpowerDef = iBearsPower(_Symbol,_Period,13);
                          
                             CopyBuffer(bearpowerDef,0,0,3,bearpowerArray);
                          
                             double bearpowerVal = NormalizeDouble(bearpowerArray[0],6);
                          
                             Comment("Bear's Power Value is ",bearpowerVal);
                          
                            }
                          //+------------------------------------------------------------------+

                          编译此代码后,我们将在导航器窗口中找到该交易系统的智能系统,如下所示:

                           熊市力量导航

                          将其拖放到图表上,我们会见到该 EA 的窗口如下所示:

                           简单熊市力量窗口

                          按“确定”后,我们会发现智能系统已加载到图表上,如下所示:

                          简单熊市力量加载

                          正如我们在右上角的上一张图表中看到的那样,智能系统已加载。 然后,我们可在图表上找到生成的信号,如下所示作为测试示例:

                           简单熊市力量信号

                          正如我们在左上角的图表中看到的那样,我们有当期熊市力量值。

                            策略一: 熊市力量走势

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

                              //+------------------------------------------------------------------+
                              //|                                        Bear's Power Movement.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()
                                {
                                 double bearpowerArray[];
                              
                                 ArraySetAsSeries(bearpowerArray,true);
                              
                                 int bearpowerDef = iBearsPower(_Symbol,_Period,13);
                              
                                 CopyBuffer(bearpowerDef,0,0,3,bearpowerArray);
                              
                                 double bearpowerVal = NormalizeDouble(bearpowerArray[0],6);
                                 double bearpowerPrevVal = NormalizeDouble(bearpowerArray[1],6);
                              
                                 if(bearpowerVal>bearpowerPrevVal)
                                   {
                                    Comment("Bear's Power is rising","\n",
                                            "Bear's Power Value is ",bearpowerVal,"\n",
                                            "Bear's Power Previous Value is ",bearpowerPrevVal);
                                   }
                              
                                 if(bearpowerVal<bearpowerPrevVal)
                                   {
                                    Comment("Bear's Power is declining","\n",
                                            "Bear's Power Value is ",bearpowerVal,"\n",
                                            "Bear's Power Previous Value is ",bearpowerPrevVal);
                                   }
                                }
                              //+------------------------------------------------------------------+

                              此代码中的区别:

                              定义当期熊市力量值 “bearpowerVal”,和前期熊市力量值 “bearpowerPrevVal”:

                                 double bearpowerVal = NormalizeDouble(bearpowerArray[0],6);
                                 double bearpowerPrevVal = NormalizeDouble(bearpowerArray[1],6);

                              策略条件:

                              正在上升的情况:

                                 if(bearpowerVal>bearpowerPrevVal)
                                   {
                                    Comment("Bear's Power is rising","\n",
                                            "Bear's Power Value is ",bearpowerVal,"\n",
                                            "Bear's Power Previous Value is ",bearpowerPrevVal);
                                   }

                              正在下降的情况:

                                 if(bearpowerVal<bearpowerPrevVal)
                                   {
                                    Comment("Bear's Power is declining","\n",
                                            "Bear's Power Value is ",bearpowerVal,"\n",
                                            "Bear's Power Previous Value is ",bearpowerPrevVal);
                                   }

                              编译此代码后,我们可在导航器窗口中找到该交易系统的智能系统,如下所示:

                               熊市力量导航 2

                              把智能交易拖放到图表上,我们就能见到该智能交易的窗口,如下所示:

                               熊市力量走势窗口

                              按“确定”后,我们会见到它将加载到图表上,如下所示:

                              熊市力量走势加载

                              正如我们在右上角的上一张图表中看到的那样,智能系统被加载到图表上。 然后,我们能够发现生成的信号,与以下内容相同。

                              当期数据上升的情况:

                               熊市力量走势 - 上升 - 当期数据

                              正如我们在之前图表上半部分中看到的,我们得到生成的上升信号,当期熊市力量值,以及前期熊市力量值。 在数据窗口中,我们可以发现熊市力量的当期值。

                              与前期数据一起上升:

                              熊市力量走势 - 上升 - 前期数据

                              正如我们在上一张图表中所见,我们可在数据窗口中发现差别,因为我们能找到熊市力量的前期值。

                              当期数据下降:

                               熊市力量走势 - 下降 - 当期数据

                              正如我们在图表上半部分中看到的那样,我们产生了一个下降信号,当期熊市力量值,以及前期熊市力量值。 在数据窗口中,我们可以发现熊市力量的当期值。

                              前期数据下降的情况:

                               熊市力量走势 - 下降 - 前期数据

                              正如我们在上一张图表中所见,我们能在数据窗口中发现差别,正是由于我们能找到最后的熊市力量值。

                                策略二:熊市力量 - 强劲或背离

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

                                  //+------------------------------------------------------------------+
                                  //|                          Bear's Power - Strong or Divergence.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()
                                    {
                                     double bearpowerArray[];
                                     MqlRates priceArray[];
                                  
                                     ArraySetAsSeries(bearpowerArray,true);
                                     int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                  
                                     int bearpowerDef = iBearsPower(_Symbol,_Period,13);
                                  
                                     CopyBuffer(bearpowerDef,0,0,3,bearpowerArray);
                                  
                                     double bearpowerVal = NormalizeDouble(bearpowerArray[0],6);
                                     double bearpowerPrevVal = NormalizeDouble(bearpowerArray[1],6);
                                  
                                     double currentLowVal=NormalizeDouble(priceArray[2].low,6);
                                     double prevLowVal=NormalizeDouble(priceArray[1].low,6);
                                  
                                     if(currentLowVal<prevLowVal && bearpowerVal<bearpowerPrevVal)
                                       {
                                        Comment("Strong Move","\n",
                                                "Current Low Value is ",currentLowVal,"\n",
                                                "Previous Low Value is ",prevLowVal,"\n",
                                                "Bear's Power Value is ",bearpowerVal,"\n",
                                                "Bear's Power Previous Value is ",bearpowerPrevVal);
                                       }
                                  
                                     if(currentLowVal<prevLowVal && bearpowerVal>bearpowerPrevVal)
                                       {
                                        Comment("Bullish divergence","\n",
                                                "Current Low Value is ",currentLowVal,"\n",
                                                "Previous Low Value is ",prevLowVal,"\n",
                                                "Bear's Power Value is ",bearpowerVal,"\n",
                                                "Bear's Power Previous Value is ",bearpowerPrevVal);
                                       }
                                    }
                                  //+------------------------------------------------------------------+

                                  此代码中的区别:

                                  创建两个数组,bearpowerArray 和 priceArray:

                                     double bearpowerArray[];
                                     MqlRates priceArray[];

                                  为这些所创建数组设置排序,对于 bearpowerArray,我们调用 “ArraySetAsSeries” 函数,就像我们之前学到的那样。 对于 priceArray,我们则调用 “CopyRates” 函数来获取 “MqlRates” 型历史数据,其参数为:

                                  • symbol name: 我们采用 (_Symbol)。
                                  • timeframe: 我们采用 (_Period)。
                                  • start time: 我们采用 (0)。
                                  • stop time: 我们采用 (3)。
                                  • rates array: 我们采用 (pArray)。
                                     ArraySetAsSeries(bearpowerArray,true);
                                     int Data=CopyRates(_Symbol,_Period,0,3,priceArray);

                                  调用 “NormalizeDouble” 函数定义熊市力量和低点的当期和前期数值。

                                     double bearpowerVal = NormalizeDouble(bearpowerArray[0],6);
                                     double bearpowerPrevVal = NormalizeDouble(bearpowerArray[1],6);
                                  
                                     double currentLowVal=NormalizeDouble(priceArray[2].low,6);
                                     double prevLowVal=NormalizeDouble(priceArray[1].low,6);

                                  策略的条件

                                  强势走势的情况:

                                     if(currentLowVal<prevLowVal && bearpowerVal<bearpowerPrevVal)
                                       {
                                        Comment("Strong Move","\n",
                                                "Current Low Value is ",currentLowVal,"\n",
                                                "Previous Low Value is ",prevLowVal,"\n",
                                                "Bear's Power Value is ",bearpowerVal,"\n",
                                                "Bear's Power Previous Value is ",bearpowerPrevVal);
                                       }

                                  在看跌背离的情况下:

                                     if(currentLowVal<prevLowVal && bearpowerVal>bearpowerPrevVal)
                                       {
                                        Comment("Bullish divergence","\n",
                                                "Current Low Value is ",currentLowVal,"\n",
                                                "Previous Low Value is ",prevLowVal,"\n",
                                                "Bear's Power Value is ",bearpowerVal,"\n",
                                                "Bear's Power Previous Value is ",bearpowerPrevVal);
                                       }

                                  编译此代码后,我们可在导航器窗口中找到此交易系统的智能系统:

                                  熊市力量导航3

                                  将这个智能系统拖放到所需的图表上,我们就会发现它的窗口,如下所示:

                                  熊市力量 - 强势或背离窗口

                                  按“确定”后,我们会发现智能系统已加载,如下所示:

                                   熊市力量 - 强势或背离加载

                                  正如我们在右上角的上一张图表中看到的那样,熊市力量智能系统 — 强劲或背离被加载到图表上。 然后,我们能够发现基于此策略生成的信号,如下所示。

                                  当期数据导致强劲走势情况:

                                   熊市力量 - 强势或背离窗口 - 强劲 - 当期数据

                                  正如我们在图表上看到的,我们得到与期望相同的所需信号,并带有以下数值的注释:

                                  • 强劲走势
                                  • 当期低点值
                                  • 前期低点值
                                  • 当期熊市力量值
                                  • 前期熊市力量值 

                                  前期数据导致强劲走势情况:

                                   熊市力量 - 强势或背离 - 强劲 - 前期数据

                                  正如我们在上一个图表上看到的,我们在图表上有同样的注释信号,所含数值是前期数据窗口。

                                  当期数据导致看涨背离的情况:

                                  熊市力量 - 强势或背离 - 看涨背离 - 当期数据

                                  正如我们在上一张图表中看到的,我们在图表上有一个注释,含有以下数值:

                                  • 看涨背离
                                  • 当期低点值
                                  • 前期低点值
                                  • 当期熊市力量值
                                  • 前期熊市力量值  

                                  前期数据看涨背离:

                                   熊市力量 - 强势或背离 - 看涨背离 - 前期数据

                                  正如我们在上一个图表上看到的,我们在图表上有一个与前期数据窗口含有相同数值的注释。

                                    策略三: 熊市力量信号

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

                                      //+------------------------------------------------------------------+
                                      //|                                         Bear's Power signals.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()
                                        {
                                         double bearpowerArray[];
                                         double maArray[];
                                         MqlRates priceArray[];
                                      
                                         ArraySetAsSeries(bearpowerArray,true);
                                         ArraySetAsSeries(maArray,true);
                                         int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                      
                                         int bearpowerDef = iBearsPower(_Symbol,_Period,13);
                                         int maDef = iMA(_Symbol,_Period,13,0,MODE_EMA,PRICE_CLOSE);
                                      
                                         CopyBuffer(bearpowerDef,0,0,3,bearpowerArray);
                                         CopyBuffer(maDef,0,0,3,maArray);
                                      
                                         double bearpowerVal = NormalizeDouble(bearpowerArray[0],6);
                                      
                                         double emaVal = NormalizeDouble(maArray[0],6);
                                      
                                         double currentClose=NormalizeDouble(priceArray[2].close,6);
                                      
                                         if(bearpowerVal>0 && currentClose>emaVal)
                                           {
                                            Comment("Buy Signal","\n",
                                                    "Current Close Value is ",currentClose,"\n",
                                                    "Current EMA Value is ",emaVal,"\n",
                                                    "Bear's Power Value is ",bearpowerVal);
                                           }
                                      
                                         if(bearpowerVal<0 && currentClose<emaVal)
                                           {
                                            Comment("Sell Signal","\n",
                                                    "Current Close Value is ",currentClose,"\n",
                                                    "Current EMA Value is ",emaVal,"\n",
                                                    "Bear's Power Value is ",bearpowerVal);
                                           }
                                        }
                                      //+------------------------------------------------------------------+
                                      

                                      此代码中的区别:

                                      创建三个数组,bearpowerArray、naArray 和 PriceArray。

                                         double bearpowerArray[];
                                         double maArray[];
                                         MqlRates priceArray[];

                                      针对这些创建的数组设置排序方向。

                                         ArraySetAsSeries(bearpowerArray,true);
                                         ArraySetAsSeries(maArray,true);
                                         int Data=CopyRates(_Symbol,_Period,0,3,priceArray);

                                      调用 “iBearsPower” 定义熊市力量指标,与我们之前提到的相同,返回由 “iMA” 函数定义的移动平均线指标句柄。

                                         int bearpowerDef = iBearsPower(_Symbol,_Period,13);
                                         int maDef = iMA(_Symbol,_Period,13,0,MODE_EMA,PRICE_CLOSE);

                                      调用 “CopyBuffer” 函数填充数组,数据则是从熊市力量和移动平均线指标中获取。

                                         CopyBuffer(bearpowerDef,0,0,3,bearpowerArray);
                                         CopyBuffer(maDef,0,0,3,maArray);

                                      定义当前熊市力量、指数移动平均线、和当期收盘价。

                                         double bearpowerVal = NormalizeDouble(bearpowerArray[0],6);
                                         double emaVal = NormalizeDouble(maArray[0],6);
                                         double currentClose=NormalizeDouble(priceArray[2].close,6);

                                      此策略的条件:

                                      买入信号的情况:

                                         if(bearpowerVal>0 && currentClose>emaVal)
                                           {
                                            Comment("Buy Signal","\n",
                                                    "Current Close Value is ",currentClose,"\n",
                                                    "Current EMA Value is ",emaVal,"\n",
                                                    "Bear's Power Value is ",bearpowerVal);
                                           }

                                      卖出信号的情况:

                                         if(bearpowerVal<0 && currentClose<emaVal)
                                           {
                                            Comment("Sell Signal","\n",
                                                    "Current Close Value is ",currentClose,"\n",
                                                    "Current EMA Value is ",emaVal,"\n",
                                                    "Bear's Power Value is ",bearpowerVal);
                                           }

                                      编译此代码后,我们将在导航器窗口中找到该智能系统,如下所示:

                                      熊市力量导航 4

                                      拖放此智能系统,我们将发现该智能系统的窗口与以下内容相同:

                                      熊市力量信号窗口

                                      按“确定”后,我们会发现智能系统已加载到图表上,如下所示:

                                       熊市力量信号加载

                                      我们能看到智能系统已加载到图表的右上角上。 然后,我们能找到基于此交易系统生成的信号,如下所示:

                                      买入信号的情况:

                                       熊市力量信号 - 买入

                                      正如我们在图表上看到的,我们有一个含有以下数值的注释:

                                      • 买入信号
                                      • 当期收盘价
                                      • 当期 EMA 值
                                      • 熊市力量值

                                      卖出信号情况:

                                      熊市力量信号 - 卖出

                                      正如我们在图表上看到的,图表上有我们期望的信号注释,含有以下数值:

                                      • 卖出信号
                                      • 当期收盘价
                                      • 当期 EMA 值
                                      • 熊市力量值


                                      结束语

                                      现在,我认为我们通过前面的主题涵盖了该指标的基础知识。 通览熊市力量定义主题,我们更详尽地学习了什么是熊市力量指标,它测量什么,我们如何计算它,以及如何插入和利用 MetaTrader 5 内置的熊市力量指标。 在深刻理解指标后,我们通过一些提到的简单策略,基于指标背后的基本思想学习如何运用该指标,这些策略的基本宗旨是学习如何运用该指标,故您必须在实盘账户里使用它们之前对其进行测试,并确保它们适合您,如此您才有可能依靠它们产生盈利。 这些策略与以下内容相同:

                                      熊市力量走势:此策略可判定熊市力量指标的方向是上升还是下降。

                                      熊市力量强劲或背离:此策略可判定我们是否有强劲的走势或背离。

                                      熊市力量信号:此策略可获取买入或卖出信号。

                                      在此之后,我们学会了如何为每个拟议的策略设计一个分步蓝图,来帮助我们依据这些蓝图规划我们的思路,并顺利、轻松地创建一个交易系统。 然后,我们学习本文中最有趣的主题,即为每个拟议的策略创建一个交易系统,从而以 MQL5 编码后能在 MetaTrader 5 交易终端上执行,并自动获取信号。

                                      我希望您自行应用并尝试编写提及的代码,因为只有这样才能帮助您改进编码和学习过程,还能强化您作为程序员的学习曲线。 因为我们需要尽可能多地关注代码,并且如果我们想要自我提升编程技能,就需尽可能多地解决问题。 编程是一项重要的技能,我们需要不断改进,从而帮助我们顺利、轻松、有效、和准确地进行交易。 这也能节省我们按照特定和确定的步骤执行常规事务的时间,计算机或程序可以自动按我们的偏好执行,并且这种方法可以帮助我们避免情绪干扰,当它对我们的交易产生负面影响时,这种情绪可能非常有害,而程序将在没有任何情绪干扰的情况下完成我们要做的事情。

                                      我还希望您发现这篇文章对您增强交易和改善交易结果有益。 如果您想阅读更多关于学习如何基于最流行的技术指标设计交易系统的类似文章,您可以阅读我在本系列中的其它篇章,因为我们已在这些文章中分享了许多技术指标,并基于它们设计了交易系统,通过简单的策略揭示它们背后的基本概念。 您能从这些文章中找到许多最受追捧的技术指标,例如移动平均线、MACD、随机指标、RSI 和 ADX。

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

                                      神经网络变得轻松(第二十四部分):改进迁移学习工具 神经网络变得轻松(第二十四部分):改进迁移学习工具
                                      在上一篇文章中,我们创建了一款用于创建和编辑神经网络架构的工具。 今天我们将继续打造这款工具。 我们将努力令其对用户更加友好。 也许可以看到,我们的主题往上更进一步。 但是,您不认为规划良好的工作空间在实现结果方面起着重要作用吗?
                                      从头开始开发智能交易系统(第 27 部分):面向未来((II) 从头开始开发智能交易系统(第 27 部分):面向未来((II)
                                      我们迈进更完整的图表上的直接订单系统。 在本文中,我将展示一种修复订单系统的方法,或者更确切地说,令其更直观。
                                      DoEasy. 控件(第 15 部分):TabControl WinForms 对象 — 多行选项卡标题、选项卡处理方法 DoEasy. 控件(第 15 部分):TabControl WinForms 对象 — 多行选项卡标题、选项卡处理方法
                                      在本文中,我将继续工作于 TabControl WinForm 对象 — 我将创建一个选项卡字段对象类,令选项卡标题排列几行成为可能,并添加处理对象相应选项卡的方法。
                                      群体优化算法 群体优化算法
                                      这是一篇关于优化算法(OA)分类的介绍性文章。 本文尝试创建一个测试基台(一组函数),用于比较 OA,并可识别所有广为人知的算法中最通用的算法。