Сайт находится в процессе разработки
Войти
Главная / Data science в трейдинге / Как написать индикатор Bollinger Bands на Python: пошаговая инструкция

Как написать индикатор Bollinger Bands на Python: пошаговая инструкция

Сегодня Bollinger Bands — один из самых популярных индикаторов для технического анализа. Он помогает трейдерам определять потенциальные движения цены, вовремя входить и выходить из сделок. В этой статье мы рассмотрим, как создать индикатор Bollinger Bands на языке Python и использовать его для анализа финансовых данных. 


Что такое Bollinger Bands? 

Индикатор Bollinger Bands (полосы Боллинджера, BB) — это технический индикатор, созданный аналитиком Джоном Боллинджером в 1980-х годах. Он измеряет волатильность рынка и отклонение цен акций, валют или товаров. Полосы Боллинджера можно использовать для самых разных активов, от опционов до криптовалют. 


Как используют Bollinger Bands в торговле?

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


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

  • линия посередине — это простая скользящая средняя (SMA) с периодом 20, рассчитанная на дневной график; 

  • верхняя и нижняя линии — построены на основе SMА, но здесь добавлено стандартное отклонение.
    Индикатор Bollinger Bands

Как еще используют индикатор в торговле:  


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


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


Таким образом, если отсутствует явный тренд, мы можем: 

  • покупать, когда цена уходит ниже полосы индикатора; 

  • продавать, когда цена уходит выше линии. 

 

Определение тренда и отскока. Трейдеры могут отслеживать, как взаимодействует цена актива с полосами и на основе этого определять смену тренда или отскок цены от полос. 


Определение фигур. С помощью индикатора проще находить M- и W-образные фигуры. М-фигуры появляются на пике, W-фигуры — на дне. Эти фигуры помогают определять паттерны на рынке и вовремя открывать/закрывать сделки.


Bollinger Bands. Фото: medium.com

Создаем Bollinger Bands на Python

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


Шаг 1. Подготавливаем данные 

Вот какие библиотеки нам понадобятся: 


import numpy as np

import pandas as pd

#plotly

import plotly.graph_objects as go


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


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


#path to csv with data

path_6e = ‘path_to_your.csv’


#load data from Gdrive

data_6e = pd.read_csv(path_6e, sep = ‘;’)

data_6e[‘date_time’] = data_6e[‘OPEN_DATE’] + ‘ ‘ + data_6e[‘OPEN_TIME’]

data_6e[‘date_time’] = pd.to_datetime(data_6e[‘date_time’])


#remove all index duplicates

data_6e = data_6e[~data_6e.index.duplicated(keep=’last’)]


#remove not important features (optional)

data_6e.drop([‘OPEN_DATE’,  ‘OPEN_TIME’,  ‘CLOSE_DATE’, ‘CLOSE_TIME’], axis =1, inplace = True)

data_6e.columns = map(str.lower, data_6e.columns)

data = data_6e

data.head()


Шаг 2. Определяем параметры индикатора

Теперь устанавливаем параметры Bollinger Bands: 

  • определяем скользящую среднюю (moving average) — в нашем случае считаем ее за последние 21 периода; 

  • определяем число стандартных отклонений для построения верхней и нижней полос BB — в нашем случае это 2; 

  • вводим название столбца, в котором будет указана цена закрытия. 


# Define the parameters for the Bollinger Band calculation

ma_size = 21 #moving avarage

bol_size = 2

column_name = ‘close’


Шаг 3. Считаем скользящую среднюю (SMA)

Затем считаем скользящую среднюю( Simple Moving Average — SMA) для столбца данных column_name. Данные будут добавляться в новый столбец moving_average.


# Calculate the SMA

data.insert(0, ‘moving_average’, data[column_name].rolling(ma_size).mean())

Шаг 4. Считаем верхние и нижние полосы Bollinger Bands

Также рассчитываем верхние и нижние линии BB, добавляя два новых столбца в DataFrame: bol_upper и bol_lower. 


# Calculate the upper and lower Bollinger Bands

data.insert(0, ‘bol_upper’, data[‘moving_average’] + data[column_name].rolling(ma_size).std() * bol_size)

data.insert(0, ‘bol_lower’, data[‘moving_average’] — data[column_name].rolling(ma_size).std() * bol_size)


Шаг 5. Удаляем лишние значения

Часто при применении SMA могут возникать пропущенные значения NaN (Not a Number). Поэтому мы добавляем код, который удаляет все строки, содержащее NaN-значения. Этот шаг необязателен — его использование зависит от конкретной ситуации и данных. 


# Remove the NaNs -> consequence of using a non-centered moving average (Optional)

if inplace_status == True:

 data.dropna(inplace=True)


Шаг 6. Упаковываем код в функцию

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


Внутри функции выполняются следующие действия: 

  • расчет скользящей средней (moving_average); 

  • расчет верхней (bol_upper) и нижней (bol_lower) полос Боллинджера; 

  • вставка столбцов с результатами расчетов в DataFrame data;

  • удаление строк с пропущенными значениями NaN. 


#Create class with Bollinger bands method


class Indicators():

  def getBollingerBands(

                       data: pd.DataFrame,

                       ma_size : int,

                       bol_size : int,

                       column_name : str,

                       inplace_status : bool ):

    »’

    Add Bollinger Band values to dataframe

    »’

    # Define the parameters for the Bollinger Band calculation

    ma_size = 21

    bol_size = 2

    column_name = ‘close’


    # Calculate the SMA

    data.insert(0, ‘moving_average’, data[column_name].rolling(ma_size).mean())

    

    # Calculate the upper and lower Bollinger Bands

    data.insert(0, ‘bol_upper’, data[‘moving_average’] + data[column_name].rolling(ma_size).std() * bol_size)

    data.insert(0, ‘bol_lower’, data[‘moving_average’] — data[column_name].rolling(ma_size).std() * bol_size)


    if inplace_status == True:

    # Remove the NaNs -> consequence of using a non-centered moving average (Optional)

      data.dropna(inplace=True)

    return data


data = Indicators.getBollingerBands(data = data, 

                                   ma_size = 21,

                                   bol_size = 2,

                                   column_name = ‘close’, 

                                   inplace_status = False )


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


Шаг 6. Визуализируем график и индикатор

Используем библиотеку Plotly для визуализации Bollinger Bands: 

  • go.Candlestick — создает график свечей на базе данных о ценах; 

  • moving_average, bol_lower, bol_upper — строят полосы Боллинджера; 

  • fig.show — отображает созданный график с ценами свечей и полосами Боллинджера. 


#visualization

#plotly

fig = go.Figure(data=[go.Candlestick(x=data.index,

               open=data[‘open’],

               high=data[‘high’],

               low=data[‘low’],

               close=data[‘close’])])


# Plot the three lines of the Bollinger Bands indicator

for parameter in [‘moving_average’, ‘bol_lower’, ‘bol_upper’]:

   fig.add_trace(go.Scatter(

       x = data.index,

       y = data[parameter],

       showlegend = False,

       line_color = ‘gray’,

       mode=’lines’,

       line={‘dash’: ‘dash’},

       marker_line_width=2,

       marker_size=10,

       opacity = 0.8))

fig.show()


В результате мы визуализируем график свечей с ценами и добавленные полосы Боллинджера на одном графике. А значит — можем анализировать данные, выявлять тренды и потенциальные сигналы на покупку/продажу на основе полос Боллинджера.


График с ценами и полосами Боллинджера.
График с ценами и полосами Боллинджера — в более крупном масштабе

Самое главное: как создать Bollinger Bands на Python

Bollinger Bands на Python может дать трейдеру ценную информацию о состоянии рынка и возможных изменениях цен активов. Используйте BB, чтобы анализировать данные, выявлять тренды и потенциальные сигналы покупки или продажи. Учитывайте, что этот индикатор лучше всего использовать совместно с другими, чтобы получать более точные сигналы и глубже понимать рынок. 

Процесс создания Bollinger Bands на Python в короткой инструкции: 

  1. Подготавливаем данные. Загружаем и предварительно обрабатываем исторические данные о цене активов из CSV файла.

  2. Определяем параметры индикатора. Устанавливаем параметры для индикатора Bollinger Bands, такие как период скользящей средней и количество стандартных отклонений для верхней и нижней полос.

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

  4. Вычисляем верхние и нижние полосы Bollinger Bands, Рассчитываем верхние и нижние полосы Bollinger Bands на основе скользящей средней и стандартного отклонения.

  5. Удаляем лишние значения, Очищаем данные от строк, содержащих пропущенные значения NaN.

  6. Упаковываем код в функцию. Объединяем все шаги в функцию, которую можно повторно использовать или импортировать в другие программы.
  7. Визуализируем график и индикатор. Используем библиотеку Plotly для визуализации графика свечей с ценами активов и добавленных полос Bollinger Bands на одном графике.
Data Scientist: чем занимается и как им стать
Сегодня данные окружают нас повсюду и используются в любых сферах, от соцсетей до медицины. Дата-сайентист —специалист, который работает с этими...
Читать далее
Получение исторических данных по котировкам с помощью API: пример кода
Что такое API API (Application Programming Interface) — это набор правил и протоколов, которые позволяют разным приложениям взаимодействовать друг с...
Читать далее
Обзор инструментов для тестирования стратегий
  В наших материалах мы уже рассказывали, как составлять бизнес-план, тестировать уровни, оценивать свои силы и способности как трейдера. Теперь...
Читать далее