Categories

# How to compute and plot Bollinger Bands® in Python

The aim is to produce a plot like this. The orange line is your data, the green line is the upper "bollinger" band, the blue line is the lower "bollinger" band. The red dots indicate where your data is either above or below the bands.

Copy-paste this code:

``````import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

N = 100
XMAX = 5
WINMA = 10
ALPHA = 2

def get_bollinger(data, winma=10, alpha=2):
ser = pd.Series(data)
ma = ser.rolling(winma).mean()
std = ser.rolling(winma).std()
lower = pd.Series(ma - alpha*std).fillna(method='bfill').values
upper = pd.Series(ma + alpha*std).fillna(method='bfill').values
return lower, upper

low = np.argwhere(data < lower)
high = np.argwhere(data > upper)
return low, high

if __name__=='__main__':

X = np.linspace(0.0, XMAX, num=N)
data = np.sin(X) + np.random.random(N)
lower, upper = get_bollinger(data, winma=WINMA, alpha=ALPHA)
low, high = get_alerts(data, lower, upper)
for i in low:
plt.plot(X[i], data[i], 'ro')
for i in high:
plt.plot(X[i], data[i], 'ro')
plt.plot(X, lower)
plt.plot(X, data)
plt.plot(X, upper)
plt.show()``````

This site uses Akismet to reduce spam. Learn how your comment data is processed.