Notebook
In [1]:
from quantopian.pipeline import Pipeline
from quantopian.research import run_pipeline
from quantopian.pipeline.data import Fundamentals, USEquityPricing
from quantopian.pipeline.filters import Q500US, Q1500US, Q3000US, QTradableStocksUS
from quantopian.pipeline.factors import SimpleMovingAverage
from quantopian.pipeline.classifiers.fundamentals import Sector
from time import time
# Import Alphalens
import alphalens as al

# Specify a time range to evaluate
period_start = '2004-01-01'
period_end = '2008-06-06'


sec_codes = (
        (Fundamentals.morningstar_sector_code.latest != 103) &
        (Fundamentals.morningstar_sector_code.latest != 207)
    )
    

# Pipeline definition
def  make_pipeline():
    
    ####
    #Value
    #masks
    base_universe = QTradableStocksUS() 
    combo_mask = base_universe & sec_codes
    combo_mask &= (Fundamentals.market_cap.latest > 50000000)
    combo_mask &= (Fundamentals.pe_ratio.latest > 5)
    #combo_mask &= (Fundamentals.pe_ratio.latest < 60)
    
    #values
    roic = Fundamentals.roic.latest
    pb_ratio = Fundamentals.pb_ratio.latest
    earnings_yield = Fundamentals.ebit.latest/Fundamentals.enterprise_value.latest
    
       
    #ranking
    earnings_yield_rank =  earnings_yield.rank()
    roic_rank =  roic.rank()
    pb_ratio_rank = pb_ratio.rank(ascending=False)
    value_total = earnings_yield_rank + roic_rank + pb_ratio_rank
        
    return Pipeline(
        columns={
            'value_total': value_total
        },
        # Set screen as the inte.rsection between our filter
        # and trading universe
        screen=(
            combo_mask
        )
    )

# Execute pipeline over evaluation period
pipeline_output = run_pipeline(
    make_pipeline(),
    start_date=period_start,
    end_date=period_end
)
pricing_data = get_pricing(pipeline_output.index.levels[1], period_start, period_end, fields='open_price')

merged_data = al.utils.get_clean_factor_and_forward_returns(
  factor=pipeline_output["value_total"], 
  prices=pricing_data, periods = [22, 126, 252] ###what do i put for periods when i want to test out to a year?
)

al.tears.create_returns_tear_sheet(merged_data, long_short=False)
Dropped 31.4% entries from factor data: 31.4% in forward returns computation and 0.0% in binning phase (set max_loss=0 to see potentially suppressed Exceptions).
max_loss is 35.0%, not exceeded: OK!
Returns Analysis
22D 126D 252D
Ann. alpha 0.017 0.012 0.007
beta 0.979 0.979 0.995
Mean Period Wise Return Top Quantile (bps) 188.704 153.033 135.340
Mean Period Wise Return Bottom Quantile (bps) 75.123 79.387 86.942
Mean Period Wise Spread (bps) 113.582 75.797 48.729
<matplotlib.figure.Figure at 0x7f01f36a2d10>
In [ ]: