Bollinger bands in python where how rm and rstd get defined in code below

When working with Bollinger bands in Python, it is important to understand how the variables rm and rstd are defined in the code. In this article, we will explore three different ways to define these variables and discuss which option is the best.

Option 1: Using numpy

import numpy as np

def calculate_bollinger_bands(data, window_size, num_std):
    rm = np.mean(data[-window_size:])
    rstd = np.std(data[-window_size:])
    
    upper_band = rm + num_std * rstd
    lower_band = rm - num_std * rstd
    
    return upper_band, lower_band

# Example usage
data = [23, 25, 27, 29, 31, 33, 35, 37, 39, 41]
window_size = 5
num_std = 2

upper_band, lower_band = calculate_bollinger_bands(data, window_size, num_std)
print("Upper band:", upper_band)
print("Lower band:", lower_band)

In this option, we use the numpy library to calculate the mean and standard deviation of the data. The numpy.mean() function calculates the mean of the last window_size elements in the data list, while the numpy.std() function calculates the standard deviation. We then use these values to calculate the upper and lower bands of the Bollinger bands.

Option 2: Using pandas

import pandas as pd

def calculate_bollinger_bands(data, window_size, num_std):
    df = pd.DataFrame(data)
    rm = df.rolling(window=window_size).mean().iloc[-1]
    rstd = df.rolling(window=window_size).std().iloc[-1]
    
    upper_band = rm + num_std * rstd
    lower_band = rm - num_std * rstd
    
    return upper_band, lower_band

# Example usage
data = [23, 25, 27, 29, 31, 33, 35, 37, 39, 41]
window_size = 5
num_std = 2

upper_band, lower_band = calculate_bollinger_bands(data, window_size, num_std)
print("Upper band:", upper_band)
print("Lower band:", lower_band)

In this option, we use the pandas library to create a DataFrame from the data list. We then use the rolling() function to calculate the rolling mean and standard deviation with a window size of window_size. Finally, we use the iloc[-1] indexing to get the last value of the rolling mean and standard deviation, and calculate the upper and lower bands.

Option 3: Manual calculation

def calculate_bollinger_bands(data, window_size, num_std):
    subset = data[-window_size:]
    rm = sum(subset) / len(subset)
    rstd = (sum((x - rm) ** 2 for x in subset) / len(subset)) ** 0.5
    
    upper_band = rm + num_std * rstd
    lower_band = rm - num_std * rstd
    
    return upper_band, lower_band

# Example usage
data = [23, 25, 27, 29, 31, 33, 35, 37, 39, 41]
window_size = 5
num_std = 2

upper_band, lower_band = calculate_bollinger_bands(data, window_size, num_std)
print("Upper band:", upper_band)
print("Lower band:", lower_band)

In this option, we manually calculate the mean and standard deviation of the last window_size elements in the data list. We first calculate the mean by summing all the elements and dividing by the length of the subset. Then, we calculate the standard deviation by summing the squared differences between each element and the mean, dividing by the length of the subset, and taking the square root. Finally, we use these values to calculate the upper and lower bands.

After comparing these three options, it is clear that using numpy (Option 1) is the best choice. Numpy provides efficient and optimized functions for calculating mean and standard deviation, resulting in faster execution times. Additionally, numpy offers a wide range of mathematical functions that can be useful in other aspects of Bollinger bands analysis. Therefore, Option 1 is recommended for calculating Bollinger bands in Python.

Rate this post

10 Responses

    1. Option 3 might be tedious for some, but for math geeks like me, its an exciting challenge! Who needs easy when you can dive into something complex and stimulating? Im ready to sharpen my math skills and have a blast while doing it. Lets go!

Leave a Reply

Your email address will not be published. Required fields are marked *

Table of Contents