# Imports the pipeline which will let us filter down our universe of potential stocks.
from quantopian.pipeline import Pipeline
from quantopian.research import run_pipeline
# The potential universe of stocks. This is updated by Quantopian every night, info in docs.
from quantopian.pipeline.filters import QTradableStocksUS
# Alphalens, to analyze alphafactors
import alphalens
# Import Sectors
from quantopian.pipeline.classifiers.fundamentals import Sector
# Others
from quantopian.pipeline.data.morningstar import operation_ratios, valuation_ratios, income_statement, asset_classification, valuation
from quantopian.pipeline.data import factset
from quantopian.pipeline.data.sentdex import sentiment
from quantopian.pipeline.data.zacks import EarningsSurprises
from quantopian.pipeline.data.factset import Fundamentals
# Inputs for user
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pipe_starting_date = "2016-06-01"
pipe_ending_date = "2018-01-01"
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def make_pipeline():
factor_to_test = factset.Fundamentals.div_yld_af.latest
mkt_val = Fundamentals.mkt_val.latest
universe = ((QTradableStocksUS()) & (factor_to_test.notnull()) & (mkt_val.top(100)))
factor_to_test = factor_to_test.rank(mask=universe, method ='average', ascending=False)
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# analyze by sector performance
sector = Sector()
# Filter to a specific sector
#sector_filter = asset_classification.morningstar_sector_code.latest.element_of([103])
# Create the pipeline
pipe = Pipeline(columns={"Factor_to_test":factor_to_test,
"Sector":sector
},
screen = (universe))
return pipe
# Return resulting information, based on our pipeline of filters, and our test factor.
result = run_pipeline(make_pipeline(),start_date = pipe_starting_date, end_date = pipe_ending_date)
result.head()
assets = result.index.levels[1].unique()
pricing = get_pricing(assets, start_date='2015-12-01', end_date='2018-06-01', fields='close_price')
sector_labels, sector_labels[-1] = dict(Sector.SECTOR_NAMES), "Unknown"
len(assets)
quantiles = 5
periods = (1,5,10)
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~GENERATION OF THE TEAR SHEET ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Combines pipeline and pricing data so alphalens can read it.
factor_alpha_data = alphalens.utils.get_clean_factor_and_forward_returns(factor = result["Factor_to_test"],
prices=pricing,
quantiles=quantiles,
periods=periods,
groupby=result['Sector'],
groupby_labels=sector_labels)
info_tear_sheet = alphalens.tears.create_information_tear_sheet(factor_alpha_data,by_group=True)
factor_alpha_data = alphalens.utils.get_clean_factor_and_forward_returns(factor = result["Factor_to_test"],
prices=pricing,
quantiles=quantiles,
periods=periods,
groupby=result['Sector'],
groupby_labels=sector_labels)
returns_tear_sheet = alphalens.tears.create_returns_tear_sheet(factor_alpha_data, by_group=True)