Quantopian's community platform is shutting down. Please read this post for more information and download your code.
Back to Community
code error help
API
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):  
    def __init__(self, windowLength):  
        self.windowLength = windowLength    # instance variable unique to each instance  
        self.inputs = [USEquityPricing.close]  
    def compute(self, today, assets, out, close):  
        out[:] = close[-1]/close[0]     

factor1 = Momentum_Factor(20)    

This last line would not pass. Can somebody help a little bit?

Thanks.  
2 responses

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

thanks. I think I understand it now.