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

Mohamed Abdelmaaboud | 27 октября, 2022

Введение

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

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

Мы узнаем, что из себя представляет индикатор Bulls Power, что он измеряет и как можно рассчитать его вручную. Особенности расчета помогут лучше понять саму концепцию, лежащую в основе индикатора. Разобравшись с основной концепцией индикатора, поговорим о том, как его можно использовать. Для этого рассмотрим несколько простых стратегий, работающих с показателями индикатора. После этого создадим пошаговый план разработки для каждой стратегии, который поможет разработать торговую систему по рассмотренным простым стратегии — в разделе "Схема стратегии по индикатору Bulls Power". Далее разработаем на MQL5 торговые системы по каждой рассмотренной стратегии, которые будут автоматически работать в платформе MetaTrader 5.

В этой статье мы будем использовать торговую платформу MetaTrader 5, встроенный редактор кода MetaEditor и язык программирования MQL5 (MetaQuotes Language) для написания советников. Если вы не знаете, как загрузить или использовать MetaEditor, почитайте об этом в моих предыдущих статьях — там все подробно описано. Я рекомендую самостоятельно повторять все, о чем говорится в этой статье. Так вы быстрее разовьете ваши навыки и лучше поймете тему.

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

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

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

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

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

Для расчета индикатора вручную нужно выполнить несколько шагов:

Bulls Power = High - EMA

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

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

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

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

После этого откроется окно с параметрами индикатора.

 Параметры индикатора Bulls Power

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

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

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

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

 Индикатор Bulls power на графике

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

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

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

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

Таким образом, получается:

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

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

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

Таким образом, получается:

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

Текущий максимум < предыдущий максимум и Текущее Bulls Power > Предыдущее Bulls Power --> Медвежье расхождение

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

Таким образом, получается:

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

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

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

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

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

Есть еще один сценарий, который нам нужно рассмотреть. Если текущее значение Bulls Power ниже предыдущего, эксперт должен выводить на график другой комментарий:

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

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

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

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

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

   Bulls Power — сильный индекс или расхождение

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

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

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

 Схема торговой стратегии Bulls Power Signals

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

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

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

Шаг первый: создаем массив bullpower, используя функцию double:

double bullpowerArray[];

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

ArraySetAsSeries(bullpowerArray,true);

Шаг третий: создаем целочисленную переменную bullpowerDef, определяем индикатор Bulls Power с помощью функции iBullsPower для возврата хэндла индикатора. Параметры:

symbol — имя символа; у нас это "_Symbol", то есть рассчитываем индикатор по символу текущего графика.

period — таймфрейм для расчета; значение "_Period" означает, что индикатор будет рассчитываться на текущем таймфрейме.

ma_period — период скользящей средней, у нас это 13

int bullpowerDef = iBullsPower(_Symbol,_Period,13);

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

indicator_handle — хендл индикатора, bullpowerDef.     

buffer_num — номер индикаторного буфера, установим 0.

start_pos — установим позицию начала расчета, укажем 0.         

count — количество данных для копирования, укажем 3.                

buffer[] — определяем ценовой массив для копирования, у нас это bullpowerArray.

CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);

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

value — нормализованное значение bullpowerArray[0].

digits — количество цифр после запятой, 6.

double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);

Шаг шестой: используем функцию Comment для создания комментария к графику с текущим значением индикатора Bulls Power:

Comment("Bull's Power Value is ",bullpowerVal);

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

//+------------------------------------------------------------------+
//|                                          Simple Bull'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 bullpowerArray[];

   ArraySetAsSeries(bullpowerArray,true);

   int bullpowerDef = iBullsPower(_Symbol,_Period,13);

   CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);

   double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);

   Comment("Bull's Power Value is ",bullpowerVal);

  }
//+------------------------------------------------------------------+

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

 Bulls power в навигаторе

Запускаем двойным кликом на файле Simple Bull's Power — программа запустится на графике в MetaTrader 5. После этого появится окно советника:

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

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

 Программа Simple Bulls Power на графике

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

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

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

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

//+------------------------------------------------------------------+
//|                                         Bulls 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 bullpowerArray[];

   ArraySetAsSeries(bullpowerArray,true);

   int bullpowerDef = iBullsPower(_Symbol,_Period,13);

   CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);

   double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
   double bullpowerPrevVal = NormalizeDouble(bullpowerArray[1],6);

   if(bullpowerVal>bullpowerPrevVal)
     {
      Comment("Bull's Power is rising","\n",
              "Bull's Power Value is ",bullpowerVal,"\n",
              "Bull's Power Previous Value is ",bullpowerPrevVal);
     }

   if(bullpowerVal<bullpowerPrevVal)
     {
      Comment("Bull's Power is declining","\n",
              "Bull's Power Value is ",bullpowerVal,"\n",
              "Bull's Power Previous Value is ",bullpowerPrevVal);
     }
  }
//+------------------------------------------------------------------+

Какие отличия появились в этом коде:

Определяем текущее значение индикатора (bullpowerVal) и предыдущее значение (bullpowerPrevVal) силы BullsPower:

   double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
   double bullpowerPrevVal = NormalizeDouble(bullpowerArray[1],6);

Условия стратегии.

В случае роста:

   if(bullpowerVal>bullpowerPrevVal)
     {
      Comment("Bull's Power is rising","\n",
              "Bull's Power Value is ",bullpowerVal,"\n",
              "Bull's Power Previous Value is ",bullpowerPrevVal);
     }

В случае движения вниз:

   if(bullpowerVal<bullpowerPrevVal)
     {
      Comment("Bull's Power is declining","\n",
              "Bull's Power Value is ",bullpowerVal,"\n",
              "Bull's Power Previous Value is ",bullpowerPrevVal);
     }

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

 Bulls power в навигаторе

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

 Окно стратегии Bulls Power Movement

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

//+------------------------------------------------------------------+
//|                          Bull'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 bullpowerArray[];
   MqlRates priceArray[];

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

   int bullpowerDef = iBullsPower(_Symbol,_Period,13);

   CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);

   double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
   double bullpowerPrevVal = NormalizeDouble(bullpowerArray[1],6);

   double currentHighVal=NormalizeDouble(priceArray[2].high,6);
   double prevHighVal=NormalizeDouble(priceArray[1].high,6);

   if(currentHighVal>prevHighVal && bullpowerVal>bullpowerPrevVal)
     {
      Comment("Strong Move","\n",
              "Current High Value is ",currentHighVal,"\n",
              "Previous High Value is ",prevHighVal,"\n",
              "Bull's Power Value is ",bullpowerVal,"\n",
              "Bull's Power Previous Value is ",bullpowerPrevVal);
     }

   if(currentHighVal>prevHighVal && bullpowerVal<bullpowerPrevVal)
     {
      Comment("Bearish divergence","\n",
              "Current High Value is ",currentHighVal,"\n",
              "Previous High Value is ",prevHighVal,"\n",
              "Bull's Power Value is ",bullpowerVal,"\n",
              "Bull's Power Previous Value is ",bullpowerPrevVal);
     }
  }
//+------------------------------------------------------------------+

Какие отличия появились в этом коде:

Создаем два массива: bullpowerArray и priceArray:

   double bullpowerArray[];
   MqlRates priceArray[];

Сортируем массивы. Для сортировки bullpowerArray используем функцию "ArraySetAsSeries". Для массива цен priceArray используем функцию CopyRates, чтобы получить исторические данные MqlRates. Параметры функции:

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

Определяем текущее и предыдущее значение индикатора Bulls Power и максимумов с помощью функции NormalizeDouble.

   double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
   double bullpowerPrevVal = NormalizeDouble(bullpowerArray[1],6);

   double currentHighVal=NormalizeDouble(priceArray[2].high,6);
   double prevHighVal=NormalizeDouble(priceArray[1].high,6);

Условия стратегии:

В случае сильного движения:

   if(currentHighVal>prevHighVal && bullpowerVal>bullpowerPrevVal)
     {
      Comment("Strong Move","\n",
              "Current High Value is ",currentHighVal,"\n",
              "Previous High Value is ",prevHighVal,"\n",
              "Bull's Power Value is ",bullpowerVal,"\n",
              "Bull's Power Previous Value is ",bullpowerPrevVal);
     }

В случае медвежьей дивергенции:

   if(currentHighVal>prevHighVal && bullpowerVal<bullpowerPrevVal)
     {
      Comment("Bearish divergence","\n",
              "Current High Value is ",currentHighVal,"\n",
              "Previous High Value is ",prevHighVal,"\n",
              "Bull's Power Value is ",bullpowerVal,"\n",
              "Bull's Power Previous Value is ",bullpowerPrevVal);
     }

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

Bulls Power в Навигаторе 2

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

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

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

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

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

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

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

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

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

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

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

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

Bulls Power - Сила или расхождение - медвежье расхождение и текущие данные

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

Медвежья дивергенция и предыдущие данные:

 Bulls Power - Сила или расхождение - медвежье расхождение и предыдущие данные

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

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

//+------------------------------------------------------------------+
//|                                         Bulls' 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 bullpowerArray[];
   double maArray[];
   MqlRates priceArray[];

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

   int bullpowerDef = iBullsPower(_Symbol,_Period,13);
   int maDef = iMA(_Symbol,_Period,13,0,MODE_EMA,PRICE_CLOSE);

   CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
   CopyBuffer(maDef,0,0,3,maArray);

   double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);

   double emaVal = NormalizeDouble(maArray[0],6);

   double currentClose=NormalizeDouble(priceArray[2].close,6);

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

   if(bullpowerVal>0 && currentClose>emaVal)
     {
      Comment("Buy Signal","\n",
              "Current Close Value is ",currentClose,"\n",
              "Current EMA Value is ",emaVal,"\n",
              "Bull's Power Value is ",bullpowerVal);
     }
  }
//+------------------------------------------------------------------+

Отличия в этом коде:

Создаем три массива: bullpowerArray, maArray и priceArray.

   double bullpowerArray[];
   double maArray[];
   MqlRates priceArray[];

Сортируем созданные массивы.

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

Для индикатора силы быков используем функцию iBullsPower и целочисленную переменную bullpowerDef, а для индикатора скользящей средней — iMA. Функции возвращают хендл индикатора.

   int bullpowerDef = iBullsPower(_Symbol,_Period,13);
   int maDef = iMA(_Symbol,_Period,13,0,MODE_EMA,PRICE_CLOSE);

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

   CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
   CopyBuffer(maDef,0,0,3,maArray);

Определяем текущее значение индикатора Bulls Power, экспоненциальной скользящей средней и текущей цены закрытия.

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

Условия данной стратегии:

Условия для сигнала на продажу

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

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

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

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

 Bulls Power в Навигаторе 3

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

 Окно Bulls Power Signals

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

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

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

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

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

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

В случае сигнала на покупку:

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

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

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

Заключение

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

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

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