Roy,
Look to this example as a Pipeline usage example:
https://www.quantopian.com/posts/introducing-the-pipeline-api
You probably don't want to use the "__init" method for what you are doing, due to this thread:
https://www.quantopian.com/posts/python-noob-question-how-can-i-create-a-parameterized-customfactor-in-pipeline
So perhaps something like:
from quantopian.algorithm import attach_pipeline, pipeline_output
from quantopian.pipeline import Pipeline
from quantopian.pipeline import CustomFactor
from quantopian.pipeline.data.builtin import USEquityPricing
from quantopian.pipeline.data import morningstar
import numpy as np
from collections import defaultdict
class Momentum_Factor(CustomFactor):
window_length = 20 # instance variable unique to each instance
inputs = [USEquityPricing.close]
def compute(self, today, assets, out, close):
out[:] = close[-1]/close[0]
# Put any initialization logic here. The context object will be passed to
# the other methods in your algorithm.
def initialize(context):
pipe = Pipeline()
pipe = attach_pipeline(pipe, name='factors')
Mfact = Momentum_Factor(window_length=40)
pipe.add(Mfact, "Mfact")
def before_trading_start(context, data):
# Start of Day
results = pipeline_output('factors').dropna()
ranks = results.rank().mean(axis=1).order()
log.info("len(results)={}".format(len(results)))
ia more like what you need.
alan