Как написать индикатор 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 на 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 в короткой инструкции:
-
Подготавливаем данные. Загружаем и предварительно обрабатываем исторические данные о цене активов из CSV файла.
-
Определяем параметры индикатора. Устанавливаем параметры для индикатора Bollinger Bands, такие как период скользящей средней и количество стандартных отклонений для верхней и нижней полос.
-
Вычисляем скользящую среднюю (SMA). Рассчитываем простую скользящую среднюю для столбца данных, содержащего цены активов.
-
Вычисляем верхние и нижние полосы Bollinger Bands, Рассчитываем верхние и нижние полосы Bollinger Bands на основе скользящей средней и стандартного отклонения.
-
Удаляем лишние значения, Очищаем данные от строк, содержащих пропущенные значения NaN.
- Упаковываем код в функцию. Объединяем все шаги в функцию, которую можно повторно использовать или импортировать в другие программы.
- Визуализируем график и индикатор. Используем библиотеку Plotly для визуализации графика свечей с ценами активов и добавленных полос Bollinger Bands на одном графике.