English 中文 Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
Как разработать торговую систему на основе Bollinger Bands

Как разработать торговую систему на основе Bollinger Bands

MetaTrader 5Трейдинг | 6 апреля 2022, 15:17
4 353 3
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Введение

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

Один из методов — торговля по полосам. Основная концепция при торговле по полосам — совершать сделки внутри коридора, образованного двумя полосами. Одним из таких инструментов является индикатор Bollinger Bands. Это один из самых популярных и наиболее часто используемых индикаторов в мире технического анализа и торговли.

В этой статье мы поговорим об индикаторе Полос Боллинджера, познакомимся с тем, как он рассчитывается и как эффективно использовать его для торговли. По результатам вы научитесь использовать этот индикатор в соответствии со своей стратегией. Также мы разработаем собственную торговую систему на основе индикатора Bollinger Bands. В ходе этой статьи мы пройдем по следующим темам:

    1. Определение полос Боллинджера
    2. Стратегии торговли по полосам Боллинджера
    3. Разработка системы на основе стратегии по полосам Боллинджера
    4. Заключение
    5. Литература

      Мы узнаем, как индикатор измеряет разброс данных вокруг среднего значения и как с этим работать. Индикатор был создан Джоном Боллинджером. Индикатор состоит из двух линий, которые строятся вокруг 20-дневной скользящей средней — таким образом измеряется разброс данных (в данном случае цен) вокруг среднего значения (скользящей средней). 

      Может показаться, что полосы Боллинджера очень похожи на индикатор Envelopes (Огибающие линии, Конверты), который также состоит из двух полос выше и ниже цены. Но разница между этими двумя индикаторами состоит в том, что линии Конвертов строятся на фиксированном расстоянии (%) от скользящей средней, в то время как линии Боллинджера могут удаляться и приближаться к ней в зависимости от определенного числа стандартных отклонений. Об этих и других особенностях рассказывается в разделе «Определение полос Боллинджера».

      Также мы посмотрим, как лучше использовать индикатор полос Боллинджера в торговле — об этом поговорим в разделе «Стратегии торговли по полосам Боллинджера».

      Затем разберем, как использовать стратегии в автоматических системах алгоритмической торговли.


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

      Для установки платформы MetaTrader 5 на компьютер скачайте дистрибутив по ссылке: https://www.metatrader5.com/en/download. После установки вы увидите такое окно терминала MetaTrader 5:

      Платформа MetaTrader 5


      Чтобы открыть редактор кода MetaEditorб нажмите F4 при открытом терминале MetaTrader 5 или в меню Сервис выберите пункт MetaQuotes Language Editor. На картинках ниже показано, как открыть редактор кода MetaEditor:

      MetaEditor способ 1


      MetaEditor способ 2

      Открытое окно редактора исходного кода MetaEditor выглядит так: 

      Окно редактора MetaEditor


      Далее нужно создать новый файл, как это показано на изображении:

      MetaEditor - новый файл

      1. Создать новый файл для написания советника
      2. Создать новый файл для написания пользовательского индикатора
      3. Создать новый файл для написания скрипта

      Дополнительную информацию можете прочитать в моей предыдущей статье по ссылке: https://www.mql5.com/ru/articles/10293.

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

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

      Примечание

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

      Давайте перейдем к изучению.


      Определение полос Боллинджера

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

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

      Специфика расчета индикатора Bollinger Bands позволяет индикатору быть адаптивным. Далее мы рассмотрим, как же рассчитывается индикатор.

      На рисунке ниже показан другой индикатор, работающий по полосам - Конверты, или Огибающие линии:

      EURUSDH1 - Envelopes

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

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

      Индикатор Bollinger Bands создан в начале 1980-х годов Джоном Боллинджером, известным специалистом в области финансовых рынков и трейдинга. Он дипломированный финансовый аналитик и дипломированный специалист по рынкам.

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

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

      Индикатор Bollinger bands:

      • Измеряет разброс данных вокруг среднего значения (скользящее среднее).
      • Это индикатор волатильности.
      • Полосы Боллинджера отличаются от других подобных индикаторов тем, что линии строятся не на фиксированном расстоянии от скользящей средней, а являются гибкими, могут удаляться и приближаться к ней в зависимости от определенного числа стандартных отклонений.
      • Полосы автоматически расширяются, когда волатильность увеличивается, и сужаются, когда волатильность уменьшается. Такой динамичный характер позволяет использовать индикатор на различных инструментах со стандартными настройками.
      • В целом индикатор Bollinger Bands применяется для определения точек входа и выхода.
      • Полосы часто используются для определения условий перекупленности и перепроданности.
      • Также его можно использовать для нахождения M-вершин и W-впадин или для определения силы тренда.
      Ниже показана формула расчета индикатора Bollinger Bands:

      Расчет BB

      Посмотрим на пример расчета полос Боллинджера:
        Допустим, у нас есть цены закрытия за 20 торговых дней:
             Номер дня   
             Цена закрытия $  
          1 20
          2 30
          3 35
           4 30 
           5 40 
          6 45
          7 50
          8 55
          9 40
          10 45
          11 50
          12 35
          13 40
          14 50
          15 60
          16 65
          17 70
          18 60
          19 70
          20 75

          Расчет BB

          Для этих цен расчет индикатора будет таким:

             Пример расчета BB


            Пример расчета BB 1


            Настройка параметров:

            Можно ли использовать другие настройки индикатора Bollinger Bands, подогнать их под торговую стратегию и конкретные цели? Да, конечно, но надо всегда проверять и тестировать любые настройки, чтобы получить хороший результат. Кроме того, Боллинджер рекомендует сделать небольшую корректировку множителя стандартного отклонения. Также надо помнить, что изменение периода скользящей средней влияет на период, используемый для расчета стандартного отклонения. Боллинджер предлагает увеличить множитель стандартного отклонения до 2,1 в случае использования 50-периодной простой скользящей средней, и уменьшить его до 1,9, если используем 10-периодную простую скользящую среднюю. 

            Благо, это не нужно рассчитывать вручную, ведь есть готовый индикатор, который идет в стандартной поставке платформы MetaTrader 5. Далее на картинках показано, как прикрепить индикатор на график. В терминале MetaTrader 5 через меню "Вставка":

            1- запуск индикатора BB на графике

            Затем выбираем Индикаторы -> Трендовые -> Bollinger Bands:

            2- запуск индикатора BB на графике

            После выбора индикатора откроется окно с параметрами. В нем показаны параметры индикатора по умолчанию. Что здесь можно настроить:

            1. Период расчета скользящей средней.
            2. Параметр отклонения для настройки верхней и нижней полосы.
            3. Применить к: тип цены, которая будет использоваться для расчетов (закрытия, открытия, максимальная, минимальная, медианная, типичная, взвешенная).
            4. Стиль: стиль отображения индикатора на графике (цвет, вид и толщина линий).
            5. Сдвиг: смещение индикатора.

            Настройте эти параметры в соответствии с вашей стратегией.


            3- параметры индикатора BB

            После настройки и нажатия на ОК индикатор появится на графике. Выглядит он как показано на рисунке:


            Индикатор BB на графике EURUSDH1


            На рисунке видно, две линии (полосы Боллинджера) окружают цену — одна идет ниже среднего значения, а другая — выше. 

            Стратегии торговли по полосам Боллинджера

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

            Индикатор Bollinger Bands подходит для использования в различных рыночных условиях и при разных движениях рынка: при растущем тренде, падающем и во флэте. Для каждого типа рыночных условий есть множество разных стратегий. Здесь рассмотрим некоторые из них.

            • При растущем тренде

            Сначала мы используем скользящую среднюю, чтобы понять, как цены двигаются во время восходящего тренда. Итак, при растущем тренде цены большую часть времени двигаются выше своего среднего значения (скользящей средней).

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

            Восходящий тренд

            Восходящий тренд


            В данном случае индикатор Bollinger bands может помочь определить тренд вверх по положению цены относительно его и средней. На рисунке ниже показан пример такой ситуации: цены находятся в зеленой зоне, двигаются между скользящей средней и верхней полосой — тренд растущий:

            EURUSDWeekly - индикатор BB, тренд вверх

            Согласно этой стратегии, можно действовать так:
            • Покупаем, когда цена пересекла скользящую среднюю снизу вверх. Цель закрытия — на верхней полосе.
              • Цены > MA = покупка, верхняя полоса = закрытие

            EURUSDWeekly - индикатор BB, стратегия при росте

            • При нисходящем тренде

            Сначала мы используем скользящую среднюю, чтобы понять, как цены двигаются во время падающего тренда. Итак, при тренде вниз цены большую часть времени двигаются выше ниже среднего значения (скользящей средней).

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

            Нисходящий тренд

            Нисходящий тренд

            В данном случае индикатор Bollinger bands может помочь определить тренд вниз по положению цены относительно его нижней полосы и скользящей средней. На рисунке ниже показан пример такой ситуации: цены находятся в красной зоне, двигаются между скользящей средней и нижней полосой — тренд растущий:

            EURUSDDaily - индикатор BB, тренд вниз

            Согласно этой стратегии, можно действовать так:
            • Открываем короткую позицию, когда цена пересечет скользящую среднюю сверху вниз. Цель закрытия — на нижней полосе.
              • Цены < MA = Короткая продажа, нижняя полоса = закрытие

            EURUSDDaily - индикатор BB, стратегия при тренде вниз

            • При боковом движении

            Для начала нужно понять, как определить флэт/боковое движение. В целом, это любое другое движение, которое нельзя определить как растущий или падающий тренд.

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

            Боковое движение 1

            Боковое движение 2

            Боковое движение 3

            Боковое движение 4

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

             Боковое движение 


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


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

             MA и флэт

            А как цена будет вести себя относительно индикатора Bollinger Bands? Цена будет двигаться между нижней и верхней полосой:

            GBPUSD1H - BB при флэте

            Поскольку цена двигается между полосами, стратегия торговли будет такой: покупаем на нижней полосе, тейк-профит ставим на верхней или наоборот, открываем короткую на верхней и фиксируем тейк-профит ставим на нижней.
            • Цена на нижней полосе = покупка, верхняя = тейк-профит
            • Цена на верхней полосе = продажа, нижняя = тейк-профит

            GBPUSD1H - BB и стратегия при флэте


            На картинке выше:
            • Покупаем на нижней полосе индикатора, фиксируем прибыль на верхней.
            • Или входим в продажу на верхней и фиксируем прибыль на нижней.

            Разработка системы на основе стратегии по полосам Боллинджера

            В этой части научимся разрабатывать системы алгоритмической торговли на основе индикатора Bollinger Bands, напишем код. Будем программировать три торговые стратегии, о которых говорили ранее (тренд вверх, тренд вниз и флэт).

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

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

            Вот такой получается код:

            //+------------------------------------------------------------------+
            //|                                       Simple Bollinger Bands.mq5 |
            //|                                  Copyright 2022, MetaQuotes Ltd. |
            //|                                             https://www.mql5.com |
            //+------------------------------------------------------------------+
            
            //+------------------------------------------------------------------+
            //| Тиковая функция эксперта                                         |
            //+------------------------------------------------------------------+
            void OnTick()
              {
               //создаем массив цен
               double MiddleBandArray[];
               double UpperBandArray[];
               double LowerBandArray[];
               
               //сортируем массив цен от текущей свечи вниз
               ArraySetAsSeries(MiddleBandArray,true);
               ArraySetAsSeries(UpperBandArray,true);
               ArraySetAsSeries(LowerBandArray,true);
               
               //define Bollinger Bands
               int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE);
               
               //копируем данные о цене в массив
               CopyBuffer(BollingerBands,0,0,3,MiddleBandArray);
               CopyBuffer(BollingerBands,1,0,3,UpperBandArray);
               CopyBuffer(BollingerBands,2,0,3,LowerBandArray);
               
               //рассчитываем для текущей свечи
               double MiddleBandValue=MiddleBandArray[0];
               double UpperBandValue=UpperBandArray[0];
               double LowerBandValue=LowerBandArray[0];
               
               //комментарии на графике
               Comment("MiddleBandValue: ",MiddleBandValue,"\n",
               "UpperBandValue: ",UpperBandValue,"\n","LowerBandValue: ",LowerBandValue,"\n");
               
              }
            //+------------------------------------------------------------------+
            
            

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

            1- SBB - нет ошибок

            Далее находим файл в окне навигатора и перетаскиваем его на график или запускаем двойным кликом:

             2- SBB - файл


            3- SBB - исполнение в окне


            На рисунке ниже показан график с запущенной на нем программой:

            4- SBB на графике

            Теперь перейдем к простым стратегиям на основе индикатора Bollinger Bands.
              Стратегия 1:
                • Схема стратегии Bollinger Bands для растущего тренда: 
                • Цена > MA = покупка, верхняя полоса = тейк-профит или = нет сигнала

                Схема стратегии Bollinger Bands для растущего тренда

                Вот такой получается код:

                //+------------------------------------------------------------------+
                //|                                          Uptrend BB strategy.mq5 |
                //|                                  Copyright 2022, MetaQuotes Ltd. |
                //|                                             https://www.mql5.com |
                //+------------------------------------------------------------------+
                //+------------------------------------------------------------------+
                //| Тиковая функция эксперта                                         |
                //+------------------------------------------------------------------+
                void OnTick()
                  {
                   //определим Ask, Bid
                   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
                   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
                   
                   //создаем массив цен
                   double MiddleBandArray[];
                   double UpperBandArray[];
                   double LowerBandArray[];
                   
                   //сортируем массив цен от текущей свечи вниз
                   ArraySetAsSeries(MiddleBandArray,true);
                   ArraySetAsSeries(UpperBandArray,true);
                   ArraySetAsSeries(LowerBandArray,true);
                   
                   //define Bollinger Bands
                   int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE);
                   
                   
                   //копируем данные о цене в массив
                   CopyBuffer(BollingerBands,0,0,3,MiddleBandArray);
                   CopyBuffer(BollingerBands,1,0,3,UpperBandArray);
                   CopyBuffer(BollingerBands,2,0,3,LowerBandArray);
                   
                   //рассчитываем для текущей свечи
                   double MiddleBandValue=MiddleBandArray[0];
                   double UpperBandValue=UpperBandArray[0];
                   double LowerBandValue=LowerBandArray[0];
                   
                   //генерируем сигнал на покупку если цены > MA
                   if (
                      (Ask>=MiddleBandArray[0])
                   && (Ask<UpperBandArray[0])
                      )
                         {
                         Comment("BUY");
                         }
                    
                   //проверка наличия сигнала тейк-профита      
                   if (
                      (Bid>=UpperBandArray[0])
                      )
                         {
                         Comment("TAKE PROFIT");
                         }  
                   
                      //проверка отсутствия сигнала      
                   if (
                      (Ask<MiddleBandArray[0])
                      )
                         {
                         Comment("NO SIGNAL");
                         }  
                  }
                //+------------------------------------------------------------------+
                

                По этой стратегии получаются такие сигналы:

                Восходящий тренд BB - покупка


                Восходящий тренд BB - тейк профит

                Восходящий тренд BB - нет сигнала

                Шаги получаются такие:
                • Убедиться, что в коде нет ошибок и предупреждений
                • Найти файл
                • Исполнить код перетащив файл на график или кликнув на нем дважды

                5- UBB - нет ошибок

                 6- UBB файл


                7- UBB окно исполнения


                На рисунке ниже показано окно после запуска нашего кода. Программа работает на графике:

                8- UBB программа запущена на графике

                  Стратегия 2:
                    • Схема стратегии Bollinger Bands для падающего тренда:
                    • Цены < MA = Короткая продажа, нижняя полоса = закрытие

                    Схема стратегии Bollinger Bands для падающего тренда

                    Вот такой получается код:

                    //+------------------------------------------------------------------+
                    //|                                        Downtrend BB strategy.mq5 |
                    //|                                  Copyright 2022, MetaQuotes Ltd. |
                    //|                                             https://www.mql5.com |
                    //+------------------------------------------------------------------+
                    //+------------------------------------------------------------------+
                    //| Тиковая функция эксперта                                         |
                    //+------------------------------------------------------------------+
                    void OnTick()
                      {
                       //определим Ask, Bid
                       double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
                       double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
                       
                       //создаем массив цен
                       double MiddleBandArray[];
                       double UpperBandArray[];
                       double LowerBandArray[];
                       
                       //сортируем массив цен от текущей свечи вниз
                       ArraySetAsSeries(MiddleBandArray,true);
                       ArraySetAsSeries(UpperBandArray,true);
                       ArraySetAsSeries(LowerBandArray,true);
                       
                       //define Bollinger Bands
                       int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE);
                       
                       
                       //копируем данные о цене в массив
                       CopyBuffer(BollingerBands,0,0,3,MiddleBandArray);
                       CopyBuffer(BollingerBands,1,0,3,UpperBandArray);
                       CopyBuffer(BollingerBands,2,0,3,LowerBandArray);
                       
                       //рассчитываем для текущей свечи
                       double MiddleBandValue=MiddleBandArray[0];
                       double UpperBandValue=UpperBandArray[0];
                       double LowerBandValue=LowerBandArray[0];
                       
                       //генерируем сигнал на продажу если цена < MA
                       if (
                          (Bid<=MiddleBandArray[0])
                       && (Bid>LowerBandArray[0])
                          )
                             {
                             Comment("SELL");
                             }
                        
                       //проверка наличия сигнала тейк-профита      
                       if (
                          (Ask<=LowerBandArray[0])
                          )
                             {
                             Comment("TAKE PROFIT");
                             }  
                       
                          //проверка отсутствия сигнала      
                       if (
                          (Bid>MiddleBandArray[0])
                          )
                             {
                             Comment("NO SIGNAL");
                             }  
                      }
                    //+------------------------------------------------------------------+
                    

                    По этой стратегии получаются такие сигналы:

                    Downtrend BB - продажа

                    Downtrend BB - тейк-профит

                    Downtrend BB - нет сигнала


                    Снова выполняем те же шаги:
                    • Убедиться, что в коде нет ошибок и предупреждений
                    • Найти файл
                    • Исполнить код перетащив файл на график или кликнув на нем дважды

                     9- DBB - нет ошибок

                     10- DBB файл


                     11- DBB окно исполнения


                    Вот как программа выглядит на графике после запуска:

                     12- DBB программа запущена на графике



                      Стратегия 3:
                        • Схема стратегии Bollinger Bands для бокового тренда:
                        • Цена на нижней полосе = покупка, верхняя = тейк-профит
                        • Цена на верхней полосе = продажа, нижняя = тейк-профит

                        Схема стратегии Bollinger Bands для бокового тренда


                        Вот такой получается код:

                        A - сигнал на покупку генерируется при касании нижней полосы

                        //+------------------------------------------------------------------+
                        //|                                     Buy sideways BB strategy.mq5 |
                        //|                                  Copyright 2022, MetaQuotes Ltd. |
                        //|                                             https://www.mql5.com |
                        //+------------------------------------------------------------------+
                        //+------------------------------------------------------------------+
                        //| Тиковая функция эксперта                                         |
                        //+------------------------------------------------------------------+
                        void OnTick()
                          {
                           //определим Ask, Bid
                           double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
                           double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
                           
                           //создаем массив цен
                           double MiddleBandArray[];
                           double UpperBandArray[];
                           double LowerBandArray[];
                           
                           //сортируем массив цен от текущей свечи вниз
                           ArraySetAsSeries(MiddleBandArray,true);
                           ArraySetAsSeries(UpperBandArray,true);
                           ArraySetAsSeries(LowerBandArray,true);
                           
                           //define Bollinger Bands
                           int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE);
                           
                           
                           //копируем данные о цене в массив
                           CopyBuffer(BollingerBands,0,0,3,MiddleBandArray);
                           CopyBuffer(BollingerBands,1,0,3,UpperBandArray);
                           CopyBuffer(BollingerBands,2,0,3,LowerBandArray);
                           
                           //рассчитываем для текущей свечи
                           double MiddleBandValue=MiddleBandArray[0];
                           double UpperBandValue=UpperBandArray[0];
                           double LowerBandValue=LowerBandArray[0];
                           
                           //генерируем сигнал на покупку если цены > MA
                           if (
                              (Ask<=LowerBandArray[0])
                              )
                                 {
                                 Comment("BUY");
                                 }
                            
                           //проверка наличия сигнала тейк-профита      
                           if (
                              (Bid>=UpperBandArray[0])
                              )
                                 {
                                 Comment("TAKE PROFIT");
                                 }  
                           
                          }
                        //+------------------------------------------------------------------+
                        
                        

                        Сигналы, генерируемые этой стратегией:

                        Сигнал на покупку по BB боковой тренд

                        Тейк-профит для сигнала на покупку по BB боковой тренд


                        Далее те же шаги (показаны на скриншотах ниже):
                        • Убедиться, что в коде нет ошибок и предупреждений
                        • Найти файл
                        • Исполнить код перетащив файл на график или кликнув на нем дважды

                        13- BSBB - ошибок нет

                         14- BSBB файл


                        15- BSBB окно исполнения


                        Вот как программа выглядит на графике после запуска:


                         16- BSBB программа запущена на графике

                        A - сигнал на продажу генерируется при касании верхней полосы

                        Вот такой получается код:
                        //+------------------------------------------------------------------+
                        //|                                    Sell sideways BB strategy.mq5 |
                        //|                                  Copyright 2022, MetaQuotes Ltd. |
                        //|                                             https://www.mql5.com |
                        //+------------------------------------------------------------------+
                        //+------------------------------------------------------------------+
                        //| Тиковая функция эксперта                                         |
                        //+------------------------------------------------------------------+
                        void OnTick()
                          {
                           //определим Ask, Bid
                           double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
                           double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
                           
                           //создаем массив цен
                           double MiddleBandArray[];
                           double UpperBandArray[];
                           double LowerBandArray[];
                           
                           //сортируем массив цен от текущей свечи вниз
                           ArraySetAsSeries(MiddleBandArray,true);
                           ArraySetAsSeries(UpperBandArray,true);
                           ArraySetAsSeries(LowerBandArray,true);
                           
                           //define Bollinger Bands
                           int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE);
                           
                           
                           //копируем данные о цене в массив
                           CopyBuffer(BollingerBands,0,0,3,MiddleBandArray);
                           CopyBuffer(BollingerBands,1,0,3,UpperBandArray);
                           CopyBuffer(BollingerBands,2,0,3,LowerBandArray);
                           
                           //рассчитываем для текущей свечи
                           double MiddleBandValue=MiddleBandArray[0];
                           double UpperBandValue=UpperBandArray[0];
                           double LowerBandValue=LowerBandArray[0];
                           
                           //генерируем сигнал на продажу если цена < MA
                           if (
                              (Bid>=UpperBandArray[0])
                              )
                                 {
                                 Comment("SELL");
                                 }
                            
                           //проверка наличия сигнала тейк-профита      
                           if (
                              (Ask<=LowerBandArray[0])
                              )
                                 {
                                 Comment("TAKE PROFIT");
                                 }  
                          }
                        //+------------------------------------------------------------------+
                        
                        

                        На рисунках ниже показаны сигналы, генерируемые по этой стратегии:

                        Сигнал на продажу по BB боковой тренд

                        Тейк-профит для сигнала на продажу по BB боковой тренд


                        Далее те же шаги (показаны на скриншотах ниже):
                        • Убедиться, что в коде нет ошибок и предупреждений
                        • Найти файл
                        • Исполнить код перетащив файл на график или кликнув на нем дважды

                         17- SSBB - ошибок нет


                         18- SSBB файл


                         19- SSBB окно исполнения


                        Вот как программа выглядит на графике после запуска:

                        20- SSBB программа запущена на графике


                        Заключение

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

                        В этой статье мы рассмотрели концепцию индикатора Bollinger Bands (полосы Боллинджера), их расчет, простые торговые стратегии с использованием индикатора, а также разработали простую торговую систему на основе этих простых стратегий.

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


                        Литература

                        • Bollinger on Bollinger Bands by John Bollinger
                        • https://www.bollingerbands.com/about-us
                        • https://www.investopedia.com/trading/using-bollinger-bands-to-gauge-trends
                        • https://school.stockcharts.com/doku.php?id=technical_indicators:bollinger_bands



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

                        Последние комментарии | Перейти к обсуждению на форуме трейдеров (3)
                        Vadzim Bandarevich
                        Vadzim Bandarevich | 7 апр. 2022 в 09:54

                        Hi^ everyone! I just found a mistake in picture. See the correct pic in my attachment!


                        Mohamed Abdelmaaboud
                        Mohamed Abdelmaaboud | 7 апр. 2022 в 12:16
                        Vadzim Bandarevich _

                        Hi^ everyone! I just found a mistake in picture. See the correct pic in my attachment!


                        Hello Vadzim,

                        Thanks for your comment. You are correct as it is a mistake, it has to be Price <= Lower Band as this is the signal that we are waiting to close opened short position.

                        It will be considered and I will send a correction for it.


                        Thanks,

                        Mohamed

                        Aleksandr Masterskikh
                        Aleksandr Masterskikh | 11 апр. 2022 в 15:17

                        На практике очень удобен вариант настроек индикатора Bollinger Bands, где величина отклонения устанавливается равной не двум (как по умолчанию), а равной единице.

                        При такой настройке все трендовые участки оказываются вне линий индикатора, что гораздо удобнее для выявления трендов.

                        Анализируем причины неудач торговых советников Анализируем причины неудач торговых советников
                        В этой статье мы проанализируем данные по валютам, чтобы понять, почему советники могут показывать хорошие результаты на одних интервалах и при этом плохо работают на других.
                        WebSocket для MetaTrader 5 — Использование Windows API WebSocket для MetaTrader 5 — Использование Windows API
                        В этой статье мы используем WinHttp.dll, чтобы создать клиент WebSocket для MetaTrader 5-программ. В конечном итоге клиент должен быть выполнен в виде класса и протестирован во взаимодействии с WebSocket API от Binary.com.
                        Несколько индикаторов на графике (Часть 01): Понимание концепций Несколько индикаторов на графике (Часть 01): Понимание концепций
                        Сегодня разберем, как можно добавить несколько индикаторов в график одновременно, не занимая при этом отдельную его область. При торговле много трейдеров чувствуют себя более уверенно, если одновременно смотрят на несколько индикаторов (например, RSI, STOCASTIC, MACD, ADX и другие), а в некоторых случаях даже на разные активы, составляющие тот или иной индекс.
                        Графика в библиотеке DoEasy (Часть 100): Устраняем недочёты при работе с расширенными стандартными графическими объектами Графика в библиотеке DoEasy (Часть 100): Устраняем недочёты при работе с расширенными стандартными графическими объектами
                        Сегодня мы немного "подчистим хвосты" — устраним явные недоработки при одновременной работе с расширенными (и стандартными) графическими объектами и объектами-формами на канвасе и исправим ошибки, замеченные при тестировании в прошлой статье. И на этом завершим этот раздел описания библиотеки.