English 中文 Español Deutsch 日本語 Português
preview
Разработка торговой системы на основе индекса силы медведей Bears Power

Разработка торговой системы на основе индекса силы медведей Bears Power

MetaTrader 5Трейдинг | 24 октября 2022, 10:30
1 365 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Введение

В этой статье мы познакомимся с еще одним техническим инструментом, который можно с выгодой использовать в торговле в отдельности или в комбинации с другими инструментами. Мы научимся создавать торговые системы с использованием индикатора Bears Power. Как и во всей серии, попытаемся понять суть вещей и научиться эффективно использовать полученные знания. Работу над индикатором снова разобьем на несколько подразделов:

  1. Определение индикатора Bears Power
  2. Стратегия по индикатору Bears Power
  3. Схема торговой стратегии по индикатору Bears Power
  4. Торговая система по индикатору Bears Power
  5. Заключение

В разделе "Определение индикатора Bears Power" узнаем в деталях, что оно означает, что делает и как его можно рассчитать вручную. Детали расчета помогут лучше понять суть индикатора, позволят затем эффективнее его использовать. Для лучшего понимания рассмотрим пример расчета. Далее изучим несколько простых стратегий, которые помогут лучше понять этот индикатор и познакомиться с вариантами использования его в торговле. Кроме того, мы разработаем пошаговые схемы для каждой рассмотренной стратегии, которые послужат отличной основой для создания торговой системы, которая будет автоматически генерировать сигналы по индексу силы медведей Bears Power. И наконец, подойдем к самой интересной части этой статьи — к созданию на языке MQL5 (MetaQuotes Language) торговых систем на основе рассмотренных стратегий по индикатору. Полученные системы будут автоматически генерировать сигналы в платформе MetaTrader 5.

Я рекомендую читателям самостоятельно проработать каждый представленный в статье фрагмент кода, ведь практика — важная часть обучения. В этой статье мы будем использовать торговую платформу MetaTrader 5 и языковой редактор MetaQuotes Language Editor. Если вы не знаете, как загрузить или использовать MetaEditor, почитайте "Как написать MQL5-код в редакторе MetaEditor" в моей более ранней статье.

Внимание! Все содержание настоящей статьи предоставляется "как есть", предназначено только для целей обучения и не является торговой рекомендацией. Статья не несет в себе каких-либо гарантий результатов. Все, что вы применяете на практике на основе этой статьи, вы делаете исключительно на свой страх и риск, автор не гарантирует никаких результатов.

Теперь приступим к изучению.


Определение индикатора Bears Power

В этом разделе познакомимся с самим индикатором, узнаем в деталях, что он означает, что делает и как его можно рассчитать вручную. Bears Power (Индекс силы медведей) — это индикатор-осциллятор, который колеблется вокруг нулевого уровня и измеряет медвежий настрой на рынке. Он также показывает, когда быки вступают в игру, а медведи ослабевают. Спрос и предложение очень важны на любом рынке, именно они являются той силой, которая двигает рынки вверх и вниз. Именно поэтому важно знать, быки или медведи контролируют рынки и какова сила такого контроля. Этот индикатор создал Александр Элдер в попытке измерить эту концепцию и увидеть, насколько медведи контролируют рынок.

Как индикатор это делает? Ответ на этот вопрос можно получить, разобравшись в особенностях расчета. Чтобы рассчитать индекс силы, выполним следующее.

  1. Найдем минимум за период.
  2. Найдем экспоненциальную скользящую среднюю (EMA). Об этом индикаторе, о его расчетах и использовании мы говорили в оной из предыдущих статей "Разработка торговых систем на основе скользящих средних".
  3. Вычисляем значение силы медведей — для этого вычитаем EMA из минимума периода.

Low — минимальная цена за период.

EMA — экспоненциальная скользящая средняя.

Bears Power = Low - EMA

Когда медведи контролируют рынок, большую часть времени они толкают рынок вниз. Поэтому в формуле расчета индикатора мы используем значение минимума. Затем находим разницу между минимумом и EMA и получаем осциллятор, который колеблется вокруг уровня нуля. Когда значение индикатора приближается к нулевому уровню и пересекает его вверх, это может служить признаком того, что медведи становятся слабее.

Хорошо использовать силу медведей с каким-нибудь индикатором тренда, так как он даст более эффективную информацию. Такую комбинацию мы рассмотрим позже при работе со стратегиями. Эта одна из замечательных особенностей технического анализа, поскольку она позволяет использовать комбинацию из разных концепций и получать больше информации об инструменте с разных точек зрения.

В терминале MetaTrader 5 есть готовый для использования индикатор. Чтобы запустить его на графике торгового символа, выберите меню "Вставка -> Индикаторы -> Осцилляторы --> Bears Power". Это показано на рисунке ниже:

 Запуск на графике индикатора Bears Power

После выбора в меню Bears Power откроется окно параметров индикатора. Выглядит оно так:

 Параметр силы медведей

1 - период расчета индикатора

2 - цвет баров для отображения силы медведей

3 - толщина баров для отображения силы медведей

Выбираем подходящие параметры индикатора, нажимаем кнопку OK, и индикатор запустится на графике, как показано ниже:

Индикатор Bears Power на графике

Как и на предыдущем графике, в нижней части у нас есть индикатор, прикрепленный к графику, и его бары колеблются вокруг нуля. Когда индикатор находится ниже нуля, это означает силу медведей, а приближение к нулю и значения выше означают, что сила медведей ослабевает.


Стратегия по индикатору Bears Power

В этой части на примере простых стратегий мы узнаем, как можно использовать индикатор Bears Power в соответствии с его концепцией. Рассмотрим каждую из стратегий и условия, при которых они работают. Хотел бы обратить ваше внимание на то, что все эти стратегии представлены здесь исключительно в образовательных целях, чтобы помочь читателям понять основную концепцию работы. Очень важно тщательно тестировать все новые знания, прежде чем применять из на реальном счете, чтобы убедиться, что это подходит вашему стилю и пониманию торговли.

    Стратегия первая: движение медвежьей силы

      Согласно этой стратегии, будем получать сигналы на основе положения текущего и предыдущего значения индекса силы. Если текущее значение больше предыдущего, это будет сигналом роста индикатора Bears Power. И наоборот, если текущее значение ниже предыдущего, это будет сигналом снижения силы медведей.

      Схематично:

      Текущее значение Bears Power > Предыдущее значение Bears Power --> Индикатор Bears Power растет

      Текущее значение Bears Power < Предыдущее значение Bears Power --> Индикатор Bears Power падает

        Стратегия вторая: Bears Power — сильный индекс или расхождение

          Эта стратегия будет генерировать сигналы о сильных движениях или расхождениях на основе оценки четырех значений: текущий минимум, предыдущий минимум, текущее значение силы и предыдущего. Когда текущий минимум ниже предыдущего минимума, а текущее значение Bears Power ниже предыдущего показателя, это говорит о сильном движении. Если же текущий минимум ниже предыдущего максимума, а текущее значение индикатора больше его предыдущего значения, это признак бычьего расхождения (дивергенции).

          Схематично:

          Текущий минимум < Предыдущий минимум и Текущее Bears Power < Предыдущее Bears Power --> Сильное движение

          Текущий минимум < Предыдущий минимум и Текущее Bears Power > Предыдущее Bears Power --> Бычье расхождение

            Стратегия третья

              В соответствии с этой стратегией мы получим триггер, который можно использовать для генерации сигналов на покупку и продажу. Для этого также будем оценивать четыре значения. Эти значения: текущая сила Bears Power, уровень нуля, текущая цена закрытия, текущая экспоненциальная скользящая средняя. Если текущая сила Bears Power больше нуля, а текущее закрытие выше экспоненциальной скользящей средней, это будет сигналом к покупке. Если текущая сила Bears Power ниже нуля, а текущее закрытие ниже экспоненциальной скользящей средней, это будет сигналом к продаже.

              Схематично:

              Текущая сила Bears Power > Уровень нуля и Текущая цена закрытия > EMA --> Покупка

              Текущая сила Bears Power < Уровень нуля и Текущая цена закрытия < EMA --> Продажа


              Схема торговой стратегии по индикатору Bears Power

              В этой части разработаем пошаговые схемы для каждой рассмотренной стратегии, которые помогут перейти к разработке торговых систем на их основе.

                Стратегия первая: движение медвежьей силы

                  Для начала нужно понять, что же должна делать программа для работы по этой стратегии. Как мы рассмотрели ранее, нужно проверять на каждом тике два значения: текущую силу Bears Power и предыдущее значение. Программа должна определить, какое из этих значений больше. Если текущее значение больше предыдущего, нужно вернуть сигнал в виде комментария на графике со следующим содержанием:

                  • Bears Power растет
                  • Значение Bears Power
                  • Предыдущее значение Bears Power

                  Каждое значение должно отображаться на отдельной строке. 

                  В противном случае, если текущее значение выше предыдущего, эксперт должен выводить на график другой комментарий:

                  • Bears Power падает
                  • Значение Bears Power
                  • Предыдущее значение Bears Power

                  Вот такая пошаговая схема поможет разработать торговую систему по этой стратегии:

                  Схема торговой стратегии по движению Bears Power

                    Стратегия вторая: Bears Power — сильный индекс или расхождение

                      Согласно с этой стратегией, торговая система должна проверять четыре значения: текущий минимум, предыдущий минимум, текущее значение Bears Power и предыдущее. После этого система должна определить, соблюдены ли условия: текущее значение минимума ниже предыдущего и в то же время текущее значение индикатора ниже предыдущего. Если да, торговая система должна вывести на график сигнал в виде комментария со следующими значениями:

                      • Сильное движение
                      • Текущий минимум
                      • Предыдущий минимум
                      • Текущее значение Bears Power
                      • Предыдущее значение Bears Power

                      В противном случае, если текущее значение минимума ниже предыдущего и при этом текущее значение силы больше предыдущего, комментарий должен указывать на образовавшееся расхождение:

                      • Бычье расхождение
                      • Текущий минимум
                      • Предыдущий минимум
                      • Текущее значение Bears Power
                      • Предыдущее значение Bears Power

                      Также мы создали пошаговый план, который помогает создавать торговую систему на основе рассмотренных стратегий.

                      Схема торговой стратегии Bears Power - Сила или расхождение

                       

                        Стратегия третья: сигналы Bears Power

                          На основе этой стратегии создадим торговую систему, которая будет проверять четыре значения на каждом тике: текущее Bears Power, нулевой уровень, текущее закрытие и текущую экспоненциальную скользящую среднюю. После этого система должна определить, соблюдены ли условия: текущее значение Bears Power выше нуля, и при этом текущая цена закрытия выше экспоненциальной MA. Если да, торговая система должна вывести на график сигнал в виде комментария со следующими значениями:

                          • Сигнал на покупку
                          • Текущая цена Close
                          • Текущее значение EMA
                          • Текущее значение Bears Power

                          В противном случае, если текущее значение Bears Power ниже нуля, и при этом текущая цена закрытия ниже экспоненциальной MA, торговая система должна вывести на график другой сигнал со следующими значениями:

                          • Сигнал на продажу
                          • Текущая цена Close
                          • Текущее значение EMA
                          • Текущее значение Bears Power

                          Также мы создали пошаговый план, который помогает создавать торговую систему на основе рассмотренных стратегий.

                          Схема стратегии сигналов по Bears Power

                          Торговая система по индикатору Bears Power

                          В этом разделе узнаем, как создать торговую систему по каждой из рассмотренных стратегий. Но сначала создадим простую торговую систему, которая будет выводить на график комментарий с текущим значением Bears Power. Он послужит нам базой при создании остальных стратегий.

                          Ниже приведен код для создания этой торговой системы.

                          Создаем массив bearspower, используя функцию double:

                          double bearpowerArray[];

                          Сортируем созданный массив с помощью функции ArraySetAsSeries, которая возвращает логическое значение.

                          ArraySetAsSeries(bearpowerArray,true);

                          Определяем индикатор Bears Power с помощью функции iBearsPower для возврата хэндла индикатора. Параметры:

                          • symbol — имя символа; у нас это "_Symbol", то есть рассчитываем индикатор по символу текущего графика.
                          • period — таймфрейм для расчета; значение "_Period" означает, что индикатор будет рассчитываться на текущем таймфрейме.
                          • ma_period — период скользящей средней, у нас это 13
                          int bearpowerDef = iBearsPower(_Symbol,_Period,13);

                          Заполняем массив с помощью функции CopyBuffer данными от индикатора Bears Power. Параметры этой функции:

                          • indicator_handle — хендл индикатора, bearpowerDef.     
                          • buffer_num — номер индикаторного буфера, установим 0.
                          • start_pos — установим позицию начала расчета, укажем 0.         
                          • count — количество данных для копирования, укажем 3.                
                          • buffer[] — определяем ценовой массив для копирования, у нас это bearspowerArray.
                          CopyBuffer(bearpowerDef,0,0,3,bearpowerArray);

                          Определяем bearpowerVal, для этого создаем переменную с помощью функции NormalizeDouble, которая возвращает значение типа double. Параметры этой функции:

                          • value — нормализованное значение bearpowerArray[0].
                          • digits — количество цифр после запятой, 6.
                          double bearpowerVal = NormalizeDouble(bearpowerArray[0],6);

                          Генерируем комментарий к графику с текущим значением Bears Power с помощью функции Comment:

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

                          The following is the full code to create this trading system:

                          //+------------------------------------------------------------------+
                          //|                                          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);
                          
                            }
                          //+------------------------------------------------------------------+
                          

                          После компиляции программа советника появится в окне Навигатора в MetaTrader 5:

                           Bears Power в навигаторе

                          Перетаскиваем нашу программу из Навигатора на график. При этом откроется вот такое окно:

                           Окно программы Simple Bears Power

                          Нажимаем OK, и программа (советник) запустится на графике, как показано на рисунке ниже:

                          Simple Bears Power на графике

                          В правом верхнем углу графика отображается индикация того, что советник запущен. Понять, что программа работает, можно будет по выведенным на график комментариям, как на примере ниже:

                           Сигнал стратегии Simple Bears Power

                          Как видно на предыдущем графике, в верхнем левом углу отображается значение силы медведей.

                            Стратегия первая: движение медвежьей силы

                              Ниже приведен полный код для создания такой стратегии:

                              //+------------------------------------------------------------------+
                              //|                                        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) силы Bears Power:

                                 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);
                                   }
                              

                              После компиляции программа советника появится в окне Навигатора в MetaTrader 5:

                               Bears Power в навигаторе 2

                              Запускаем двойным кликом на файле или перетаскиваем на график. После этого снова появится окно советника.

                               Окно Bears Power Movement

                              Нажимаем OK, и программа (советник) запустится на графике, как показано на рисунке ниже:

                              Bears Power Movement на графике

                              На скриншоте видно, что в правом верхнем углу графика отображается индикация того, что советник работает. Если советник запустился и работает, на график должна выводиться информация.

                              Если индикатор растет + текущие значения в окне данных:

                               Bears Power Movement - рост - текущие данные

                              Как видно на графике выше, в его верхней части мы сгенерировали сигнал о росте, текущее значение силы и предыдущее значение. В окне данных отображается текущее значение индикатора Bears Power.

                              Если индикатор растет + предыдущие значения в окне данных:

                              Bears Power Movement - рост - предыдущие данные

                              Этот вариант отличается от предыдущего тем, что в окне данных показывается предыдущее значение силы медведей.

                              Если индикатор падает + текущие значения в окне данных:

                               Bears Power Movement - снижение - текущие данные

                              Как видно на графике выше, в его верхней части мы сгенерировали сигнал о снижении, текущее значение силы и предыдущее значение. В окне данных отображается текущее значение индикатора Bears Power.

                              Если индикатор снижается + предыдущие значения в окне данных:

                               Bears Power Movement - снижение - предыдущие данные

                              Этот вариант отличается от предыдущего тем, что в окне данных показывается предыдущее значение силы медведей.

                                Стратегия вторая: Bears Power — сильный индекс или расхождение

                                  Ниже приведен полный код для создания такой стратегии:

                                  //+------------------------------------------------------------------+
                                  //|                          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);
                                  

                                  Defining current and previous values of bear's power and lows by using the "NormalizeDouble" function.

                                     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);
                                       }
                                  

                                  После компиляции программа советника появится в окне Навигатора в MetaTrader 5:

                                  Bears Power в навигаторе 3

                                  Запускаем двойным кликом на файле или перетаскиваем на график. После этого снова появится окно советника.

                                  Окно торговой стратегии Bears Power - Сила или расхождение

                                  Нажимаем OK, и программа (советник) запустится на графике, как показано на рисунке ниже:

                                   Торговая стратегия Bears Power - Сила или расхождение - на графике

                                  В правом верхнем углу графика отображается индикация того, что советник по торговой системе Bears Power - Strong or Divergence запущен и работает. Сигналы от советника выводятся в следующем виде.

                                  В случае сильного движения + текущие данные:

                                   Bears Power - Сила или расхождение - сила и текущие данные

                                  На графике отобразилась нужная нам информация. Комментария содержит следующие значения:

                                  • Сильное движение
                                  • Текущий минимум
                                  • Предыдущий минимум
                                  • Текущее значение Bears Power
                                  • Предыдущее значение Bears Power 

                                  Сильное движение вниз + предыдущие данные:

                                   Bears Power - Сила или расхождение - сила и предыдущие данные

                                  На графике отображается точно такой же комментарий, но в окне данных показаны предыдущие значения.

                                  Бычье расхождение и текущие данные:

                                  Bears Power - Сила или расхождение - бычье расхождение и текущие данные

                                  Комментарий на графике отображает следующий сигнал и дополнительные значения:

                                  • Бычье расхождение
                                  • Текущий минимум
                                  • Предыдущий минимум
                                  • Текущее значение Bears Power
                                  • Предыдущее значение Bears Power  

                                  Бычье расхождение и предыдущие данные:

                                   Bears Power - Сила или расхождение - бычье расхождение и предыдущие данные

                                  На графике снова отображается комментарий с сигналом о сформировавшейся дивергенции, но в окне данных показаны предыдущие значения.

                                    Стратегия третья: сигналы Bears Power

                                      Полный код торговой системы, работающей по этой стратегии, выглядит так:

                                      //+------------------------------------------------------------------+
                                      //|                                         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 данными от индикатора Bears Power и от скользящей средней.

                                         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);
                                           }
                                      

                                      После этого компилируем код советника, и он появляется в окне Навигатора в терминале:

                                      Bears Power в навигаторе 4

                                      Запускаем двойным кликом на файле или перетаскиваем на график. После этого снова появится окно советника.

                                      Окно сигналов от Bears Power

                                      Нажимаем OK, и советник запустится на графике, как показано на рисунке ниже:

                                       Bears Power Signals на графике

                                      Мы видим, что эксперт прикреплен к графику — в правом верхнем углу есть соответствующий значок. Торговая система генерирует сигналы, и выглядят они вот так:

                                      Условия для сигнала на покупку:

                                       Bears Power Signals - сигнал на покупку

                                      Комментарий на графике отображает следующий сигнал и дополнительные значения:

                                      • Сигнал на покупку
                                      • Текущее значение цены закрытия
                                      • Текущее значение EMA
                                      • Значение Bears Power

                                      В случае сигнала на продажу:

                                      Bears Power Signals - сигнал на продажу

                                      Комментарий на графике отображает следующий сигнал и дополнительные значения:

                                      • Сигнал на продажу
                                      • Текущее значение цены закрытия
                                      • Текущее значение EMA
                                      • Значение Bears Power


                                      Заключение

                                      Думаю, что мы рассмотрели все необходимые основы индикатора Bears Power. Мы узнали, что он из себя представляет, что он измеряет и как можно рассчитать его вручную. Также научились находить встроенные индикатор в терминале MetaTrader 5 и запускать его на графике. Далее мы рассмотрели, как можно использовать индекс силы медведей в соответствии с идеей, лежащей в основе индикатора. Для этого мы изучили несколько простых стратегий. Основная цель этих стратегий — показать способы использования индикаторов. Если вы захотите использовать какую-либо из стратегий на реальном счете, обязательно предварительно тщательно протестируйте их, чтобы убедиться, что они подходят вам. Итак, мы познакомились со следующими стратегиями:

                                      Движение индикатора Bears Power: эту стратегию можно использовать для определения направления индекса силы медведей.

                                      Bears Power - Сила или расхождение: позволяет подтвердить наличие сильного движения или выявляет расхождение.

                                      Сигналы от Bears Power: стратегия генерирует сигналы на покупку и продажу.

                                      После этого мы составили пошаговые планы для разработки каждой из рассмотренных стратегий. Такие планы помогают в разработке за счет организованности идей в виде понятных схем. Затем мы перешли к самой интересной теме — научились писать на MQL5 торговые системы по этим стратегиям, которые могут автоматически и точно генерировать сигналы. Предназначены они для использования в торговой платформе MetaTrader 5.

                                      Я надеюсь, что вы самостоятельно прорабатывали каждый код — именно так можно научиться писать коды торговых стратегий. Именно уделяя время практическим занятиям и самостоятельному решению различных задач, мы развиваемся и совершенствуем навыки программирования. Программирование — это важный навык, который, если применяется правильно, делает торговлю более легкой, дисциплинированной и эффективной. Программы экономят наше время, автоматически исполняя определенные шаги, а также позволяют избавиться от влияния эмоций, которые могут отрицательно повлиять на наши результаты. Ведь торговые роботы и прочие приложения работают, четко следуя заложенной в них стратегии.

                                      Надеюсь, статья будет для вас полезной и поможет вам в достижении торговых целей. Если вам понравилась эта статья, если вы считаете ее полезной, почитайте мои предыдущие статьи из этой же серии, чтобы узнать, как разработать торговую систему на основе популярных технических индикаторов. В предыдущих статья мы уже рассмотрели множество популярных инструментов, включая скользящую среднюю, MACD, Стохастик, RSI, ADX и многие другие.

                                      Перевод с английского произведен MetaQuotes Ltd.
                                      Оригинальная статья: https://www.mql5.com/en/articles/11297

                                      DoEasy. Элементы управления (Часть 24): Вспомогательный WinForms-объект "Подсказка" DoEasy. Элементы управления (Часть 24): Вспомогательный WinForms-объект "Подсказка"
                                      В статье переработаем логику указания базового и главного объекта для всех WinForms-объектов библиотеки, разработаем новый базовый объект "Подсказка" и несколько его производных классов для указания возможного направления перемещения разделительной линии.
                                      Нейросети — это просто (Часть 31): Эволюционные алгоритмы Нейросети — это просто (Часть 31): Эволюционные алгоритмы
                                      В предыдущей статье мы начали изучение безградиентных методов оптимизации. И познакомились с генетическим алгоритмом. Сегодня мы продолжаем начатую тему. И рассмотрим ещё один класс эволюционных алгоритмов.
                                      Разработка торговой системы на основе индекса силы быков Bulls Power Разработка торговой системы на основе индекса силы быков Bulls Power
                                      Представляю вашему вниманию новую статью из серии, в которой мы учимся строить торговые системы на основе самых популярных индикаторов. На этот раз мы поговорим об Индексе силы быков Bulls Power и создадим торговую систему по его показателям.
                                      DoEasy. Элементы управления (Часть 23): дорабатываем WinForms-объекты TabControl и SplitContainer DoEasy. Элементы управления (Часть 23): дорабатываем WinForms-объекты TabControl и SplitContainer
                                      В статье добавим новые события мышки относительно границ рабочих областей WinForms-объектов и доработаем некоторые недочёты в работе элементов управления TabControl и SplitContainer.