from quantopian.research import run_pipeline
from quantopian.pipeline import Pipeline
from quantopian.pipeline import CustomFactor
from quantopian.pipeline.data.builtin import USEquityPricing
from quantopian.pipeline.data import morningstar
from quantopian.pipeline.factors import AverageDollarVolume
from quantopian.pipeline.factors import VWAP
from quantopian.pipeline.filters import Q1500US
import numpy as np
import pandas as pd
import scipy
import math
import alphalens
class ROE(CustomFactor):
inputs = [morningstar.operation_ratios.roe]
window_length = 1
def compute(self, today, assets, out, close):
out[:] = close[-1]
class Alpha41(CustomFactor):
inputs = [USEquityPricing.low, USEquityPricing.high]
window_length = 1
def compute(self, today, assets, out, low, high):
out[:] = high[0]*low[0]
def make_pipeline():
universe = Q1500US()
alpha41 = Alpha41(mask=universe)
vwap = VWAP(window_length=1, mask=universe)
alpha41 = alpha41**.5 - vwap
roe = ROE(mask=universe)
my_screen = roe > .005
return Pipeline(columns={"alpha41": alpha41}, screen=my_screen)
pipe = make_pipeline()
start = pd.Timestamp("2015-01-01") # Can't choose a too long time-period or we run out of RAM
end = pd.Timestamp("2016-03-01")
results = run_pipeline(pipe, start_date=start, end_date=end)
results['alpha41'].head()
assets = results.index.levels[1]
pricing = get_pricing(assets, start, end + pd.Timedelta(days=30), fields="open_price")
alphalens.tears.create_factor_tear_sheet(results['alpha41'], pricing)