Notebook
In [67]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from quantopian.research import prices, symbols, returns
from quantopian.research import run_pipeline
from quantopian.pipeline import Pipeline
from quantopian.pipeline.factors import Returns
from quantopian.pipeline.data import EquityPricing
from quantopian.pipeline.filters import QTradableStocksUS
import alphalens as al
from quantopian.pipeline.filters.morningstar import Q500US
from quantopian.pipeline.factors import AverageDollarVolume
from alphalens.tears import create_full_tear_sheet
from alphalens.utils import get_clean_factor_and_forward_returns
from alphalens.tears import create_full_tear_sheet
from alphalens.tears import create_information_tear_sheet
from alphalens.tears import create_returns_tear_sheet
from alphalens.performance import mean_information_coefficient
In [68]:
def make_pipeline():
    
    base_universe = QTradableStocksUS()
    
    weekly_return = Returns(
    inputs=[EquityPricing.close],
    window_length=7
)
    weekly_returns_decile = Returns(window_length=10).deciles()
    top_decile = (weekly_returns_decile.isnull())
    
    return Pipeline(
    columns={
            'Weekly Returns': weekly_return,
#            'Weekly Returns Decile': weekly_returns_decile
        },
      screen=QTradableStocksUS()
    )
In [69]:
my_pipe = make_pipeline()
In [ ]:
result = run_pipeline(make_pipeline(), '2003-01-01', '2004-05-01')
result.head()
In [ ]:
print('Number of securities that passed the filter: %d' % len(result))
In [ ]:
pricing_data = get_pricing(
  symbols=result.index.levels[1], # Finds all assets that appear at least once in "factor_data"  
  start_date='2003-01-01',
  end_date='2004-05-01', # must be after run_pipeline()'s end date. Explained more in lesson 4
  fields='open_price' # Generally, you should use open pricing. Explained more in lesson 4
)

pricing_data
In [ ]:
merged_data = get_clean_factor_and_forward_returns(
  factor=result, 
  prices=pricing_data
)

merged_data
In [ ]:
create_full_tear_sheet(merged_data)
In [52]:
create_information_tear_sheet(merged_data)
Information Analysis
1D 5D 10D
IC Mean -0.006 -0.022 0.015
IC Std. 0.214 0.266 0.200
Risk-Adjusted IC -0.029 -0.083 0.073
t-stat(IC) -0.249 -0.714 0.627
p-value(IC) 0.804 0.478 0.532
IC Skew -0.426 -0.690 -0.369
IC Kurtosis 0.430 0.189 -0.047
<matplotlib.figure.Figure at 0x7fea3c2fb240>
In [54]:
create_returns_tear_sheet(merged_data)
Returns Analysis
1D 5D 10D
Ann. alpha -0.627 -0.533 -0.145
beta -0.405 -0.412 -0.243
Mean Period Wise Return Top Quantile (bps) -22.504 -16.178 -1.460
Mean Period Wise Return Bottom Quantile (bps) 21.991 15.751 -2.847
Mean Period Wise Spread (bps) -44.496 -31.209 1.782
<matplotlib.figure.Figure at 0x7fea415411d0>
In [61]:
mean_information_coefficient(merged_data).plot(title="IC Decay");
In [ ]: