Quantopian's community platform is shutting down. Please read this post for more information and download your code.
Back to Community
Bollinger Bands on multiple securities

Could anybody take a second to help me troubleshoot? The issue is that the comparisons are referencing the entire array of stocks rather than just the current stock. I'm not sure how to force it to only check the current security. Below is the code I am using:

import talib  
import numpy as np  
import pandas as pd


# Setup our variables  
def initialize(context):  
    context.stocks = [sid(24),sid(3766),sid(3149),sid(45451),sid(12107)]  

def handle_data(context, data):  
    #calculate price history  
    prices = history(20, '1d', 'price')  
    #loop through investable universe  
    for stock in context.stocks:  
        current_position = context.portfolio.positions[stock].amount  
        price = data[stock].price  
        #calculate bollinger bands  
        upper, middle, lower = talib.BBANDS(prices[stock], timeperiod=20, nbdevup=2, nbdevdn=2, matype=0)  
        #Evaluate current shorts  
        if (current_position < 0) and (price <= (upper+middle)/2):  
             order_target_percent(stock, 0)  
        elif (current_position > 0) and (price >= (lower+middle)/2):  
             order_target_percent(stock, 0)  
        #if no position and above upper band, initiate short  
        elif current_position == 0:  
            if price > upper:  
                order_target_percent(stock, -1 * min(context.portfolio.cash,context.portfolio.portfolio_value*.1))  
            #if no posiiton and below lower band, initiate long  
            elif price < lower:  
                order_target_percent(stock, min(context.portfolio.cash,context.portfolio.portfolio_value*.1))  
1 response

Ben, the 'upper, middle, lower' variables are arrays, you will have to select the most recent element from each one, see the backtest. I also changed the order_target_percent to order_target_value, it was throwing overflow errors the other way. Hope this helps.

David