English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
preview
如何利用 MQL5 处理指示线

如何利用 MQL5 处理指示线

MetaTrader 5交易 | 28 二月 2023, 11:30
1 779 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

概述

作为交易者,我们都会在交易时画很多线,从而帮助我们观察一些重要的价位,以便据其制定合适的交易决策。 因此,这些指示线对于作为交易者的我们非常重要,我们也许会琢磨是否有一种方法可以绘制这些指示线,或根据它们自动做出合适的决策,因为我认为这对我们的帮助很大。 答案是肯定的,我们有一种方法,可利用 MQL5(MetaQuotes 语言 5)来做到这一点。

本文是学习如何利用 MQL5 处理这些指示线的示例,因为有许多方法可以执行此类操作,而这些方法取决于您需要的作为。 指示线有很多类型,但我们仅在本文中提到其中广受欢迎的三种,它们是趋势线、支撑线和阻力线。

我们将在以下主题中涵盖它们:

  1. 趋势线和 MQL5
  2. 支撑线和 MQL5
  3. 阻力线和 MQL5
  4. 结束语

一般来说,MQL5 有很多方法可用于处理指示线,我们将在这里分享简单的一种,也许您发现需要开发它,以便匹配您的策略,我们将在这里分享一种方法,可检测价位,然后绘制更新的指示线类型。

我们将通过识别其类型来详细了解指示线的一切,我们如何手工绘制它们,以及如何在交易中运用它们。 我们学习如何利用 MQL5 来处理趋势线、支撑位和阻力位,从而帮助我们通过自动化来简化交易过程,并增强交易结果。 我们将利用内置于 MetaTrader 5 交易终端中的 MQL5(MetaQuotes 语言 5)来编写程序,如果您还不知道如何使用它们,您可以阅读以前的文章在 MetaEditor 中编写 MQL5 代码中的主题,从而了解更多信息。

我的建议是尝试编写和应用您自己阅读的内容,因为此步骤对于提高您的编码技能非常重要,除了获得有关本文主题和/或任何相关主题的更多见解外,它还将加深您的理解,且这些主题可用于开发和增强您的交易结果。

免责声明:所有信息仅按“原样”提供,仅用于教学目的,不准备用于交易目的或建议。 该信息不保证任何类型的结果。 如果您选择在自己的任何交易账户上运用这些素材,您应自承风险,且您将是唯一的责任人。


趋势线和 MQL5

指示线是可用于交易,并据其获得更有效结果的技术工具。 这些指示线可以围绕重要的价格或级别绘制,这些价格或级别可当作制定有效决策的触发器,并且这些指示线有很多类型。 我们将在本文中提到其中三条重要的指示线,它们是趋势线、支撑位和阻力位。

现在,我们就开始识别并处理趋势线。 趋势线是可视化价位的指示线,可当作向上或向下的反弹价位。 它可根据行情方向,绘制在价格上方或下方。 故此,我们可以说趋势线可以帮助我们探测行情趋势的方向。 如果价格在同一条上升线上的三个点处反弹向上,那么所绘制的指示线是一条上升趋势线。 反之亦然,如果价格在同一条下降线上的三个点反弹向下,那么所绘制的指示线是一条下降趋势线。 这里需要提到的是,趋势线只是一种工具,您可以正确识别和绘制它。

我们可以在交易中应用趋势线,并依据趋势线类型下单。 如果是上升趋势线,我们可能会期望价格向下移动,来从上方测试该趋势线,若反弹到向上,然后我们就可在此趋势线附近放置买入订单。 反之亦然,如果是一条下降趋势线,我们可能期望价格从下方向上移动,来测试该趋势线,若反弹向下,然后我们就可以在此下降趋势线附近放置卖出订单。

以下是上升趋势线:

 向上趋势线

我们可以看到,上图中很明显,我们有一个向上的走势,如果我们尝试在最后三个低点之间连接,我们可以发现它们在同一条上升线上。

以下是行情上升趋势线的示例:

向上趋势线

正如我们在上一张图表中所见,我们有一条上升趋势线,被多次触及,并在找到上涨的购买力动后反弹,这证实了上升趋势的存在。

以下是下降趋势线:

下降趋势线

我们可以看到,上图中很明显,我们有一个向下的走势,如果我们尝试在最后三个高点之间连接,我们可以发现它们在同一条下降线上。

以下是行情下降趋势线的示例:

下降趋势线

正如我们在上一张图表中所见,我们有一条下降趋势线,被多次触及,并在找到下跌的卖出动力后反弹,这证实了下降趋势的存在。


    1. 上升趋势线系统

      我们需要创建一个程序,通过 MetaTrader 5 自动创建一条上升趋势线,可看到其下方价格潜在的上涨走势。 我们需要程序来检查价格低点,以及每次跳价是否有任何上升趋势线迹象。 然后删除之前的上升趋势线,并在价格低点下方创建一条更新的蓝色趋势线。 

      为此,我们可以按照以下步骤作为可用方法之一。

      为第一根检测蜡烛创建一个整数型变量,令其等于当前图表调用 “ChartGetInteger” 函数返回相应的长整数型属性值,其参数为:

      • chart_id: 确定图表,我们将采用(0)来表示当前图表。
      • prop_id: 确定图表属性 ID,我们可以在此处取用其中一个(ENUM_CHART_PROPERTY_INTEGER)值。 我们将采用(CHART_FIRST_VISIBLE_BAR)。
      • sub_window=0: 确定图表子窗口的编号。 我们将采用(0) 来表示主图表窗口。
      int candles=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);

      为蜡烛最低价创建数组 pLow,数据类型为双精度。

      double pLow[];

      调用 “ArraySetAsSeries” 函数为所创建的数组设置排序,并返回一个布尔值,该值在成功时为真,在另一种情况下为假。

      ArraySetAsSeries(pLow,true);

      调用 “CopyLow” 函数填充所创建 pLow 数组,以此获得当前品种当前时间帧的最低价格。 其参数为:

      • symbol_name: 确定交易品种,我们将采用(_Symbol) 对应于当前品种。
      • timeframe: 确定时间帧,我们将采用(_Period) 对应于当前时间帧。
      • start_pos: 确定要复制的元素的起始位置,我们将采用(0)。
      • count: 确定要复制的数据计数,我们将采用预先创建的变量(candles)。
      • low_array[]: 确定要复制的目标数组,我们将采用(pLow)数组。
      CopyLow(_Symbol,_Period,0,candles,pLow);

      创建并计算蜡烛最低价变量 “candleLow”,其为一个整数型变量,等于数组的最小值,我们将调用 “ArrayMinimum” 函数返回数组中的最低元素。 其参数为:

      • array[]: 确定数组,我们将采用(pLow)数组。
      • start=0: 确定开始检查的索引,我们将采用(0)值。
      • count=WHOLE_ARRAY: 确定选中元素的数量,我们将采用(candles)。
      int candleLow = ArrayMinimum(pLow,0,candles);

      创建价格 “pArray” 数组,并调用 “MqlRates” 函数存储有关价格、交易量和点差信息。

      MqlRates pArray[];

      调用 “ArraySetAsSeries” 函数对 “pArray” 的价格数组设置排序。

      ArraySetAsSeries(pArray,true);

      在创建整数型变量“Data” 后,将价格数据复制到价格数组,然后调用“CopyRates” 获取 MqlRates 结构的历史数据。 其参数为:

      • symbol_name: 确定品种,我们将采用(_Symbol)对应于当前图表。
      • timeframe: 确定时间帧,我们将采用(_Period)对应于当前时间帧。
      • start_pos: 确定起始位置,我们将采用(0)值。
      • count: 确定要复制的数据计数,我们将采用创建的(candles)变量。
      • rates_array[]: 确定要复制的目标数组,我们将采用( pArray)。
      int Data = CopyRates(_Symbol,_Period,0,candles,pArray);

      删除所有前创建的、需更新的趋势线,调用 “ObjectDelete” 函数从所有指定图表中删除任何指定对象。 其参数为:

      • chart_id: 确定图表标识符,我们将采用(_Symbol)对应于当前品种。
      • name: 指定我们要删除的对象的名称,我们将采用(“UpwardTrendline”)作为名称。
      ObjectDelete(_Symbol,"UpwardTrendline");

      调用 “ObjectCreate” 创建新的趋势线对象,其会创建一条趋势线。 其参数为:

      • chart_id: 确定品种,我们将采用(_Symbol)对应于当前品种。
      • name: 指定对象名称,我们将指定(“UpwardTrendline”)作为名称。
      • type: 确定对象类型,我们将采用(OBJ_TREND)创建趋势线。
      • nwin: 确定窗口索引,我们将采用(0)值来指定主图表窗口。
      • time1: 确定第一个锚点的时间,我们将采用(pArray[candleLow].time)。
      • price1: 确定第一个锚点的价格,我们将采用(pArray[candleLow].low)。
      • timeN: 确定锚点 N 的时间,我们将采用(pArray[0].time)。
      • priceN: 确定锚点 N 的价格,我们将采用(pArray[0].low)。
      ObjectCreate(_Symbol,"UpwardTrendline",OBJ_TREND,0,pArray[candleLow].time,pArray[candleLow].low,pArray[0].time,pArray[0].low);

      调用 “ObjectSetInteger” 函数为对象设置颜色值,确定趋势线颜色。 其参数为:

      • chart_id: 图表标识符,我们将采用(0)值,表示当前图表。
      • name: 对象名称,我们将采用(“UpwardTrendline”),这是对象的预定义名称。
      • prop_id: 对象属性的 ID,我们将采用其中一个 ENUM_OBJECT_PROPERTY_INTEGER,即(OBJPROP_COLOR)。
      • prop_value: 属性的值,我们将采用(Blue)作为所创建趋势线的颜色。
      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_COLOR,Blue);

      也可以调用 ObjectSetInteger 函数设定趋势线样式,但我们采用另一个 ENUM_OBJECT_PROPERTY_INTEGER,即 (OBJPROP_STYLE),prop_value 将取(STYLE_SOLID)作为所创建趋势线的样式。

      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_STYLE,STYLE_SOLID);

      调用 “ObjectSetInteger” 函数设定趋势线宽度,但我们将采用另一个 ENUM_OBJECT_PROPERTY_INTEGER,即(OBJPROP_WIDTH),prop_value 将取(3)作为所创建趋势线的宽度。

      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_WIDTH,3);

      调用 “ObjectSetInteger” 函数设置趋势线射线,但我们将采用 ENUM_OBJECT_PROPERTY_INTEGER 的另一个,即(OBJPROP_RAY_RIGHT),并且属性值将为 true。

      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_RAY_RIGHT,true);

      以下是自动创建上升趋势线的完整代码:

      //+------------------------------------------------------------------+
      //|                                       UpwardTrendline System.mq5 |
      //+------------------------------------------------------------------+
      void OnTick()
        {
         int candles=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
         double pLow[];
         ArraySetAsSeries(pLow,true);
         CopyLow(_Symbol,_Period,0,candles,pLow);
         int candleLow = ArrayMinimum(pLow,0,candles);
         MqlRates pArray[];
         ArraySetAsSeries(pArray,true);
         int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
         ObjectDelete(_Symbol,"UpwardTrendline");
         ObjectCreate(_Symbol,"UpwardTrendline",OBJ_TREND,0,pArray[candleLow].time,pArray[candleLow].low,pArray[0].time,pArray[0].low);
         ObjectSetInteger(0,"UpwardTrendline",OBJPROP_COLOR,Blue);
         ObjectSetInteger(0,"UpwardTrendline",OBJPROP_STYLE,STYLE_SOLID);
         ObjectSetInteger(0,"UpwardTrendline",OBJPROP_WIDTH,3);
         ObjectSetInteger(0,"UpwardTrendline",OBJPROP_RAY_RIGHT,true);
        }
      //+------------------------------------------------------------------+

      此代码编写完毕后,我们将对其进行编译,它必须不能导致任何错误。

       指示线导航

      将 EA 拖放到图表上,我们将找会到与以下内容相同的智能系统窗口:

       指示线窗口

      在“允许算法交易”旁边打勾,并按“确定”后,我们的 EA 加载到图表上,我们将准备好查看基于此 EA 的所需操作,与以下示例相同:

       上行趋势线示例

      正如我们在上一个图表中所见,我们将 EA 加载到图表上,其在右上角很明显,我们在价格下方绘制了蓝色上升趋势线。


        2. 下降趋势线系统

          我们需要创建一个程序,可通过 MetaTrader 5 自动创建一条下降趋势线,可观察上方价格潜在的下降走势。 我们需要程序来检查价格高点,以及在每次跳价时,是否有任何下降趋势线。 然后删除之前的下降趋势线,并在价格高点上方创建一条更新的蓝色趋势线。 

          为此,我们可以参照以下完整代码作为可用方法之一。

          //+------------------------------------------------------------------+
          //|                                     DownwardTrendline System.mq5 |
          //+------------------------------------------------------------------+
          void OnTick()
            {
             int candles=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
             double pHigh[];
             ArraySetAsSeries(pHigh,true);
             CopyHigh(_Symbol,_Period,0,candles,pHigh);
             int candleHigh = ArrayMaximum(pHigh,0,candles);
             MqlRates pArray[];
             ArraySetAsSeries(pArray,true);
             int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
             ObjectDelete(_Symbol,"DnwardTrendline");
             ObjectCreate(_Symbol,"DnwardTrendline",OBJ_TREND,0,pArray[candleHigh].time,pArray[candleHigh].high,pArray[0].time,pArray[0].high);
             ObjectSetInteger(0,"DnwardTrendline",OBJPROP_COLOR,Blue);
             ObjectSetInteger(0,"DnwardTrendline",OBJPROP_STYLE,STYLE_SOLID);
             ObjectSetInteger(0,"DnwardTrendline",OBJPROP_WIDTH,3);
             ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);
            }
          //+------------------------------------------------------------------+

          此代码的不同之处:

          创建蜡烛最高价序列数组。

          double pHigh[];

          所创建数组排序时从当前数据开始。

          ArraySetAsSeries(pHigh,true);

          用数据填充数组。

          CopyHigh(_Symbol,_Period,0,candles,pHigh);

          创建并计算(candle)变量的最高值

          int candleHigh = ArrayMaximum(pHigh,0,candles);

          删除先前的所有下降趋势线

          ObjectDelete(_Symbol,"DnwardTrendline");

          创建新的下降趋势线

          ObjectCreate(_Symbol,"DnwardTrendline",OBJ_TREND,0,pArray[candleHigh].time,pArray[candleHigh].high,pArray[0].time,pArray[0].high);

          由 “OBJPROP_COLOR” 确定下降趋势线颜色为蓝色

          ObjectSetInteger(0,"DnwardTrendline",OBJPROP_COLOR,Blue);

          由 “OBJPROP_STYLE” 和 STYLE_SOLID 确定下降趋势线样式为实心

          ObjectSetInteger(0,"DnwardTrendline",OBJPROP_STYLE,STYLE_SOLID);

          由 “OBJPROP_WIDTH” 确定下降趋势线宽度为 3

          ObjectSetInteger(0,"DnwardTrendline",OBJPROP_WIDTH,3);

          由 “OBJPROP_RAY_RIGHT” 确定下降趋势线射线

          ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);

          确认编译没有任何错误后,我们会在导航器窗口中找到智能系统,与我们之前提到的相同。 加载 EA 之后,我们就准备好基于此 EA 获得所需的动作,我们可以发现下降趋势线的绘制方式与以下内容相同:

          下降趋势线示例

          正如我们在右上角的图表上所见,我们加载 EA,然后在价格上方绘制了下降趋势线,如此在这个级别附近就具有买入动力。


          支撑位和 MQL5

          支撑位是可在当前价格下方找到的价格水平或区域,我们可发现价格在它附近反弹向上,因为这些水平附近有买入动力。 故此,它们非常重要,因为我们可将它们作为买入触发点。 支撑位有多种形式,其中之一就是水平支撑位。 以下是此形式的样子:

           支撑位 lvl

          以下是来自行情的支撑位示例:

          支撑 lvl 1

          正如我们在上一张图表中所见,我们在价格下方有一条绿色支撑线,可当作反弹向上的级别。

          我们需要该程序检查价格低点,以及每次跳价是否有任何支撑线。 然后删除之前的支撑线,并在价格低点下方创建一条更新的绿色支撑线。我们可利用 MQL5 绘制和处理这条支撑线,就像下面的完整代码一样:

          //+------------------------------------------------------------------+
          //|                                          Support Line System.mq5 |
          //+------------------------------------------------------------------+
          void OnTick()
            {
             int candles=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
             double pLow[];
             ArraySetAsSeries(pLow,true);
             CopyLow(_Symbol,_Period,0,candles,pLow);
             int candleLow = ArrayMinimum(pLow,0,candles);
             MqlRates pArray[];
             ArraySetAsSeries(pArray,true);
             int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
             ObjectDelete(_Symbol,"supportLine");
             ObjectCreate(_Symbol,"supportLine",OBJ_HLINE,0,pArray[candleLow].time,pArray[candleLow].low,pArray[0].time,pArray[0].low);
             ObjectSetInteger(0,"supportLine",OBJPROP_COLOR,Green);
             ObjectSetInteger(0,"supportLine",OBJPROP_STYLE,STYLE_SOLID);
             ObjectSetInteger(0,"supportLine",OBJPROP_WIDTH,3);
             ObjectSetInteger(0,"supportLine",OBJPROP_RAY,true);
            }
          //+------------------------------------------------------------------+

          此代码的不同之处:

          删除任何以前名为 “supportLine” 的支撑线

          ObjectDelete(_Symbol,"supportLine");

          创建新的支撑线,由 “OBJ_HLINE” 作为所需对象类型

          ObjectCreate(_Symbol,"supportLine",OBJ_HLINE,0,pArray[candleLow].time,pArray[candleLow].low, pArray[0].time,pArray[0].low);

          由 “OBJPROP_COLOR” 确定支撑线颜色

          ObjectSetInteger(0,"supportLine",OBJPROP_COLOR,Green);

          由 OBJPROP_STYLE 和 STYLE_SOLID 确定支撑线样式

          ObjectSetInteger(0,"supportLine",OBJPROP_STYLE,STYLE_SOLID);

          由 “OBJPROP_WIDTH” 确定支撑线宽度

          ObjectSetInteger(0,"supportLine",OBJPROP_WIDTH,3);

          由 “OBJPROP_RAY” 确定支撑线射线

          ObjectSetInteger(0,"supportLine",OBJPROP_RAY,true);

          编译此代码,且没有任何错误之后,我们可像之前提到的一样将其加载至图表中。 之后,我们会发现它被加载到图表上,我们可以发现它的动作,还可以找到支撑线的绘制方式与以下示例相同:

          支撑线

          正如我们在上一张图表中所见,我们的支撑系统 EA 与右上角的相同,我们在价格下方有一条支撑线。


          阻力位和 MQL5

          阻力位是可在当前价格上方找到的价格水平或区域,我们可发现价格在它附近反弹向下,因为这些水平附近有卖出动力。 故此,它们非常重要,因为我们可将它们作为卖出触发点。 阻力位有多种形式,其中之一就是水平阻力位。

           阻力位 lvl

          以下是来自行情的阻力位示例:

           阻力位 lvl 1

          正如我们在上一张图表中所见,我们在价格上方有一条红色阻力线,可当作反弹向下的级别,围绕此级别有卖出动力。 

          我们需要程序来检查价格高点,以及在每次跳价时,是否有任何阻力线。 然后删除之前的阻力线,并在价格高点下方创建一条更新的红色阻力线。我们可利用 MQL5 绘制和处理这条阻力线,就像下面的完整代码一样:

          //+------------------------------------------------------------------+
          //|                                       Resistance Line System.mq5 |
          //+------------------------------------------------------------------+
          void OnTick()
            {
             int candles=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
             double pHigh[];
             ArraySetAsSeries(pHigh,true);
             CopyHigh(_Symbol,_Period,0,candles,pHigh);
             int candleHigh = ArrayMaximum(pHigh,0,candles);
             MqlRates pArray[];
             ArraySetAsSeries(pArray,true);
             int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
             ObjectDelete(_Symbol,"resistanceLine");
             ObjectCreate(_Symbol,"resistanceLine",OBJ_HLINE,0,pArray[candleHigh].time,pArray[candleHigh].high,pArray[0].time,pArray[0].high);
             ObjectSetInteger(0,"resistanceLine",OBJPROP_COLOR,Red);
             ObjectSetInteger(0,"resistanceLine",OBJPROP_STYLE,STYLE_SOLID);
             ObjectSetInteger(0,"resistanceLine",OBJPROP_WIDTH,3);
             ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);
            }
          //+------------------------------------------------------------------+

          此代码的不同之处:

          删除任何以前名为 “resistanceLine” 的阻力线

          ObjectDelete(_Symbol,"resistanceLine");

          创建新的阻力线,由 “OBJ_HLINE” 作为所需对象类型

          ObjectCreate(_Symbol,"resistanceLine",OBJ_HLINE,0,pArray[candleHigh].time,pArray[candleHigh].high,pArray[0].time,pArray[0].high);

          由 “OBJPROP_COLOR” 确定阻力线颜色

          ObjectSetInteger(0,"resistanceLine",OBJPROP_COLOR,Red);

          由 OBJPROP_STYLE 和 STYLE_SOLID 确定阻力线样式

          ObjectSetInteger(0,"resistanceLine",OBJPROP_STYLE,STYLE_SOLID);

          由 “OBJPROP_WIDTH” 确定阻力线宽度

          ObjectSetInteger(0,"resistanceLine",OBJPROP_WIDTH,3);

          由 “OBJPROP_RAY_RIGHT” 确定阻力线射线

          ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);

          编译此代码,且没有任何错误之后,我们可像之前提到的一样将其加载至图表中。 之后,我们将发现阻力系统 EA 加载至图表上,我们可以发现其动作与以下内容相同:

          阻力线

          正如我们在上一张图表中所见,我们的阻力系统 EA 与右上角的相同,我们在价格上方有一条阻力线。


          结束语

          现在,假设您已详细理解了可在我们的交易中用到的三条重要指示线。 趋势线(向上和向下趋势线)、支撑线和阻力线,我们已了解到它们是什么,以及如何运用它们。 我们还学习了如何利用 MQL5 处理它们,创建我们自己的系统来自动绘制它们的每一个。 您还可以深入开发此代码,添加发送订单,并据其执行交易;您必须在真实账户上使用它们之前对其进行测试,从而确保它们可盈利,因为本文主要目的是教学。

          我希望您发现本文对您有用,并且您学会了如何使用这些提到的工具,将它们用作另一个高级系统的一部分,或单独使用它们。 如此,我希望您能从本文的主题、或任何相关主题获得有用的见解,从而得到更好的交易结果,或增强工具的实用性和可盈利性,此外还希望您尝试自己测试和编写提到的代码,从中获得实惠,并提高您的编码技能。

          如果您觉得这篇文章很有用,并且您想阅读更多关于 MQL5,以及如何使用最流行的技术指标设计交易系统的文章,您可以阅读我之前的文章,从中了解更多信息,因为您可以找到诸如如何基于最流行的技术指标(如移动平均线)设计交易系统的文章, RSI、MACD、随机指标、抛物线 SAR、等等。

          如果您还想了解更多有关 MQL5 的一些基础知识,以及为什么、以及如何设计您的算法交易系统,您也可以阅读我之前的文章。

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

          DoEasy. 控件 (第 26 部分): 完成 ToolTip(工具提示)WinForms 对象,并转移至 ProgressBar(进度条)开发 DoEasy. 控件 (第 26 部分): 完成 ToolTip(工具提示)WinForms 对象,并转移至 ProgressBar(进度条)开发
          在本文中,我将完成 ToolTip(工具提示)控件的开发,并启动 ProgressBar(进度条) WinForms 对象开发。 在处理对象时,我将针对控件及其组件开发动画处理的通用功能。
          神经网络变得轻松(第三十二部分):分布式 Q-学习 神经网络变得轻松(第三十二部分):分布式 Q-学习
          我们在本系列的早期文章中领略了 Q-学习方法。 此方法均化每次操作的奖励。 2017 年出现了两篇论文,在研究奖励分配函数时展现出了极大的成功。 我们来研究运用这种技术解决我们问题的可能性。
          构建自动运行的 EA(第 01 部分):概念和结构 构建自动运行的 EA(第 01 部分):概念和结构
          今天,我们将看到如何创建一个在自动模式下简单安全地工作的智能系统。
          您应该知道的 MQL5 向导技术(第 04 部分):线性判别分析 您应该知道的 MQL5 向导技术(第 04 部分):线性判别分析
          今天的交易者都是哲学家,几乎总是在寻找新的想法,尝试提炼它们,选择修改或丢弃它们:一个探索性的过程,肯定会花费相当的勤奋程度。 这些系列文章将提出 MQL5 向导应该是交易者在此领域努力的中流砥柱。