Hey guys,
Having Trouble with Pipeline output.
Error says
TypeError: zipline.pipeline.pipeline.validate_column() expected a value of type zipline.pipeline.term.Term for argument 'term', but got list instead.
And the line of code it says is incorrect is:
pipe = Pipeline(columns = pipe_columns,screen = pipe_screen)
Here's the code I'm getting an error on:
import talib
import numpy as np
import math
import pandas as pd
from quantopian.algorithm import attach_pipeline, pipeline_output
from quantopian.pipeline import Pipeline
from quantopian.pipeline.data.builtin import USEquityPricing
from quantopian.pipeline.factors import AverageDollarVolume
from quantopian.pipeline.filters import Q1500US
from quantopian.pipeline.filters import Q500US
from quantopian.pipeline.data import morningstar
from quantopian.pipeline.data import Fundamentals
class ADX_Dir_Ind():
inputs=[USEquityPricing.high,USEquityPricing.low,USEquityPricing.close]
true_length=14
window_length=true_length+true_length
def compute(self, today, assets, out, high, low, close):
anynan =np.isnan(close).any(axis=0)
for col_ix, have_nans in enumerate(anynan):
if have_nans:
out[col_ix] = np.nan
continue
results = talib.ADX(
high[:, col_ix],
low[:, col_ix],
close[:, col_ix],
timeperiod=self.true_length)
out[col_ix] = results[-1]
class MarketCap():
# Pre-declare inputs and window_length
inputs = [USEquityPricing.close, Fundamentals.shares_outstanding]
window_length = 1
# Compute market cap value
def compute(self, today, assets, out, close, shares):
out[:] = close[-1] * shares[-1]
def initialize(context):
ADX = ADX_Dir_Ind()
MktCap = Fundamentals.market_cap.latest
context.b = sid(8554)
set_benchmark(context.b)
# Create a screen to remove penny stocks
remove_penny_stocks = [USEquityPricing.close] > 15
# Rank a factor using a mask to ignore the values we're
# filtering out by passing mask=remove_penny_stocks to rank.
pipe_columns = {
'Price':[USEquityPricing.close],
'ADX':ADX,
'Mkt Cap':MktCap
}
Screen = ((ADX<20) & (remove_penny_stocks) & (MktCap>500000000))
# Use multiple screens to narrow the universe
pipe_screen = (Screen)
pipe = Pipeline(columns = pipe_columns,screen = pipe_screen)
attach_pipeline(pipe, 'example')
"""schedule_function(trade, date_rules.every_day(), time_rules.market_open())"""
def before_trading_start(context, data):
output = pipeline_output('example')
context.my_securities = output.sort('ADX', ascending=True).iloc[:20]
print len(context.my_securities)
context.security_list = context.my_securities.index
log.info("\n" + str(context.my_securities.head(5)))
Any Ideas why it's not working? shouldn't it be returning a list?