Как разработать торговую систему на основе Bollinger Bands
Введение
В трейдинге есть множество разных инструментов и методов, которые можно использовать для достижения торговых целей. Использовать такие инструменты стоит в зависимости от рыночных условий.
Один из методов — торговля по полосам. Основная концепция при торговле по полосам — совершать сделки внутри коридора, образованного двумя полосами. Одним из таких инструментов является индикатор Bollinger Bands. Это один из самых популярных и наиболее часто используемых индикаторов в мире технического анализа и торговли.
В этой статье мы поговорим об индикаторе Полос Боллинджера, познакомимся с тем, как он рассчитывается и как эффективно использовать его для торговли. По результатам вы научитесь использовать этот индикатор в соответствии со своей стратегией. Также мы разработаем собственную торговую систему на основе индикатора Bollinger Bands. В ходе этой статьи мы пройдем по следующим темам:
- Определение полос Боллинджера
- Стратегии торговли по полосам Боллинджера
- Разработка системы на основе стратегии по полосам Боллинджера
- Заключение
- Литература
Мы узнаем, как индикатор измеряет разброс данных вокруг среднего значения и как с этим работать. Индикатор был создан Джоном Боллинджером. Индикатор состоит из двух линий, которые строятся вокруг 20-дневной скользящей средней — таким образом измеряется разброс данных (в данном случае цен) вокруг среднего значения (скользящей средней).
Может показаться, что полосы Боллинджера очень похожи на индикатор Envelopes (Огибающие линии, Конверты), который также состоит из двух полос выше и ниже цены. Но разница между этими двумя индикаторами состоит в том, что линии Конвертов строятся на фиксированном расстоянии (%) от скользящей средней, в то время как линии Боллинджера могут удаляться и приближаться к ней в зависимости от определенного числа стандартных отклонений. Об этих и других особенностях рассказывается в разделе «Определение полос Боллинджера».
Также мы посмотрим, как лучше использовать индикатор полос Боллинджера в торговле — об этом поговорим в разделе «Стратегии торговли по полосам Боллинджера».
Затем разберем, как использовать стратегии в автоматических системах алгоритмической торговли.
- Все коды в рамках этой статьи мы будем писать на MQL5. Исполняется такой код в платформе MetaTrader 5.
- Я рекомендую самостоятельно писать и запускать код, обсуждаемый в статье, чтобы лучше понять тему.
- Таким образом, вам понадобится торговый терминал для исполнения и редактор MetaEditor для написания кода на MQL5.
Для установки платформы MetaTrader 5 на компьютер скачайте дистрибутив по ссылке: https://www.metatrader5.com/en/download. После установки вы увидите такое окно терминала MetaTrader 5:
- Создать новый файл для написания советника
- Создать новый файл для написания пользовательского индикатора
- Создать новый файл для написания скрипта
Дополнительную информацию можете прочитать в моей предыдущей статье по ссылке: https://www.mql5.com/ru/articles/10293.
Я часто люблю говорить, что программирование — замечательный инструмент, который делает нашу жизнь проще и четче, позволяя точно автоматизировать необходимые действия. Вот почему важно инвестировать в эту область, развиваться в ней, учиться правильно использовать все возможности для достижения желаемых целей в различных сферах жизни.
Что касается торговли, то представьте, какой легкой и приятной может быть жизнь, если передать инструкции компьютеру, указать что и когда делать. Компьютер будет делать в точности то, что вы велели, без каких-либо возражений, а вы сможете заняться чем-то более приятным. Поэтому уделим немного времени на изучение программирования и написания автоматических программ.
Примечание
Все содержание настоящей статьи предназначено только для целей обучения и не предназначено для других целей. Все, что вы применяете на практике на основе этой статьи, вы делаете исключительно на свой страх и риск, автор не гарантирует никаких результатов.
Давайте перейдем к изучению.
Определение полос Боллинджера
Идея торговли по лентам довольно распространена, появилась она давно и используется в разных инструментах. В основном смысл таких методов заключается в построении линий выше и ниже некоторой меры тренда.
Например, можно построить линии, удаленные от скользящей средней на определенное значение в процентах, как в Конвертах. Также существуют каналы, образованные двумя параллельными линиями выше или ниже цены, позволяющие определять точки разворота. Но недостатком таких методов является то, что все они фиксированы и не реагируют на движение цен. Другими словами, они не расширяются, не сужаются и не изменяются ни при каком движении цены.
Специфика расчета индикатора Bollinger Bands позволяет индикатору быть адаптивным. Далее мы рассмотрим, как же рассчитывается индикатор.
Как видите, у нас есть две полосы, которые окружают цену: нижняя проходит под ценой, а верхняя — над ней. Я хочу показать, что есть множество различных торговых стратегий, основанных на подобных полосах.
Есть также много готовых решений и вариантов. Один из вариантов — полосы Боллинджера. Он отличается от ранее упомянутых методов тем особенностью расчета, позволяющей полосам сближаться и расходиться.
Индикатор Bollinger Bands создан в начале 1980-х годов Джоном Боллинджером, известным специалистом в области финансовых рынков и трейдинга. Он дипломированный финансовый аналитик и дипломированный специалист по рынкам.
Bollinger Bands — популярный технический индикатор, измеряющий волатильность. Он может расширяться и сжиматься в зависимости от состояния рынка. Можно использовать на любых финансовых рынках — форекс, акции и т.д. Как этот индикатор строится:Как уже сказано выше, построение любых полос надо начинать с некоторой меры центрального тренда. А выше и ниже ее строятся полосы. В индикаторе Bollinger Bands такой центральной мерой является простая скользящая средняя, а интервал определяется мерой волатильности скользящего стандартного отклонения.
Индикатор Bollinger bands:
- Измеряет разброс данных вокруг среднего значения (скользящее среднее).
- Это индикатор волатильности.
- Полосы Боллинджера отличаются от других подобных индикаторов тем, что линии строятся не на фиксированном расстоянии от скользящей средней, а являются гибкими, могут удаляться и приближаться к ней в зависимости от определенного числа стандартных отклонений.
- Полосы автоматически расширяются, когда волатильность увеличивается, и сужаются, когда волатильность уменьшается. Такой динамичный характер позволяет использовать индикатор на различных инструментах со стандартными настройками.
- В целом индикатор Bollinger Bands применяется для определения точек входа и выхода.
- Полосы часто используются для определения условий перекупленности и перепроданности.
- Также его можно использовать для нахождения M-вершин и W-впадин или для определения силы тренда.
Номер дня | Цена закрытия $ |
---|---|
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 |
Для этих цен расчет индикатора будет таким:
Настройка параметров:
Можно ли использовать другие настройки индикатора Bollinger Bands, подогнать их под торговую стратегию и конкретные цели? Да, конечно, но надо всегда проверять и тестировать любые настройки, чтобы получить хороший результат. Кроме того, Боллинджер рекомендует сделать небольшую корректировку множителя стандартного отклонения. Также надо помнить, что изменение периода скользящей средней влияет на период, используемый для расчета стандартного отклонения. Боллинджер предлагает увеличить множитель стандартного отклонения до 2,1 в случае использования 50-периодной простой скользящей средней, и уменьшить его до 1,9, если используем 10-периодную простую скользящую среднюю.
- Период расчета скользящей средней.
- Параметр отклонения для настройки верхней и нижней полосы.
- Применить к: тип цены, которая будет использоваться для расчетов (закрытия, открытия, максимальная, минимальная, медианная, типичная, взвешенная).
- Стиль: стиль отображения индикатора на графике (цвет, вид и толщина линий).
- Сдвиг: смещение индикатора.
Настройте эти параметры в соответствии с вашей стратегией.
После настройки и нажатия на ОК индикатор появится на графике. Выглядит он как показано на рисунке:
Стратегии торговли по полосам Боллинджера
В этой части поговорим о стратегиях на основе полос Боллинджера, о том, как использовать индикатор в торговле.
Индикатор Bollinger Bands подходит для использования в различных рыночных условиях и при разных движениях рынка: при растущем тренде, падающем и во флэте. Для каждого типа рыночных условий есть множество разных стратегий. Здесь рассмотрим некоторые из них.
- При растущем тренде
Сначала мы используем скользящую среднюю, чтобы понять, как цены двигаются во время восходящего тренда. Итак, при растущем тренде цены большую часть времени двигаются выше своего среднего значения (скользящей средней).
В нашем случае при растущей тенденции большую часть времени цены будут двигаться между скользящей средней и верхней полосой. Цены будут образовывать более высокие минимумы и более высокие максимумы, а на рынок оказывают влияние покупатели.
- Покупаем, когда цена пересекла скользящую среднюю снизу вверх. Цель закрытия — на верхней полосе.
- Цены > MA = покупка, верхняя полоса = закрытие
- При нисходящем тренде
Сначала мы используем скользящую среднюю, чтобы понять, как цены двигаются во время падающего тренда. Итак, при тренде вниз цены большую часть времени двигаются выше ниже среднего значения (скользящей средней).
В нашем случае при падающей тенденции большую часть времени цены будут двигаться между скользящей средней и нижней полосой. Цены будут образовывать более низкие минимумы и более низкие максимумы, а на рынок оказывают влияние продавцы, которые двигают его вниз.
- Открываем короткую позицию, когда цена пересечет скользящую среднюю сверху вниз. Цель закрытия — на нижней полосе.
- Цены < MA = Короткая продажа, нижняя полоса = закрытие
- При боковом движении
Для начала нужно понять, как определить флэт/боковое движение. В целом, это любое другое движение, которое нельзя определить как растущий или падающий тренд.
Боковое движение обозначает баланс между покупателями и продавцами, никто из них явно не превалирует. Вот примеры таких боковых движений:
Есть и другие варианты бокового тренда, но достаточно запомнить, что это любой другое движение, кроме тренда вверх и вниз.
Теперь посмотрим, что бывает со скользящей средней при боковом флэте. Цена будет колебаться вокруг нее и постоянно пересекать вверх и вниз. На рисунке ниже показан пример:
А как цена будет вести себя относительно индикатора Bollinger Bands? Цена будет двигаться между нижней и верхней полосой:
Поскольку цена двигается между полосами, стратегия торговли будет такой: покупаем на нижней полосе, тейк-профит ставим на верхней или наоборот, открываем короткую на верхней и фиксируем тейк-профит ставим на нижней.
- Цена на нижней полосе = покупка, верхняя = тейк-профит
- Цена на верхней полосе = продажа, нижняя = тейк-профит
- Покупаем на нижней полосе индикатора, фиксируем прибыль на верхней.
- Или входим в продажу на верхней и фиксируем прибыль на нижней.
Разработка системы на основе стратегии по полосам Боллинджера
В этой части научимся разрабатывать системы алгоритмической торговли на основе индикатора 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"); } //+------------------------------------------------------------------+После того, как мы написали код и скомпилировали его, надо убедиться, что в коде нет ошибок или предупреждений:
- Схема стратегии Bollinger Bands для растущего тренда:
- Цена > MA = покупка, верхняя полоса = тейк-профит или = нет сигнала
//+------------------------------------------------------------------+ //| 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"); } } //+------------------------------------------------------------------+По этой стратегии получаются такие сигналы:
Шаги получаются такие:
- Убедиться, что в коде нет ошибок и предупреждений
- Найти файл
- Исполнить код перетащив файл на график или кликнув на нем дважды
- Схема стратегии Bollinger Bands для падающего тренда:
- Цены < MA = Короткая продажа, нижняя полоса = закрытие
Вот такой получается код:
//+------------------------------------------------------------------+ //| 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"); } } //+------------------------------------------------------------------+По этой стратегии получаются такие сигналы:
- Убедиться, что в коде нет ошибок и предупреждений
- Найти файл
- Исполнить код перетащив файл на график или кликнув на нем дважды
- Схема стратегии 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"); } } //+------------------------------------------------------------------+Сигналы, генерируемые этой стратегией:
- Убедиться, что в коде нет ошибок и предупреждений
- Найти файл
- Исполнить код перетащив файл на график или кликнув на нем дважды
Вот такой получается код: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"); } } //+------------------------------------------------------------------+На рисунках ниже показаны сигналы, генерируемые по этой стратегии:
- Убедиться, что в коде нет ошибок и предупреждений
- Найти файл
- Исполнить код перетащив файл на график или кликнув на нем дважды
Заключение
Концепция торговли по полосам очень интересная, поскольку дает четкое ожидание того, каким будет предстоящее движение. Из этого, несомненно, можно извлечь выгоду. Существует множество методов торговли по полосам, таким как полосы Боллинджера, однако преимущество последнего в том, что здесь полосы могут расширяться и сужаться в зависимости от движения цены, благодаря чему его можнои мы использовать при любых рыночных условиях.
В этой статье мы рассмотрели концепцию индикатора 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
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Разработка торговой системы на основе Bollinger Bands:
Автор: Mohamed Abdelmaaboud
Hi^ everyone! I just found a mistake in picture. See the correct pic in my attachment!
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
На практике очень удобен вариант настроек индикатора Bollinger Bands, где величина отклонения устанавливается равной не двум (как по умолчанию), а равной единице.
При такой настройке все трендовые участки оказываются вне линий индикатора, что гораздо удобнее для выявления трендов.