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)