Notebook
In [1]:
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.factors import SimpleMovingAverage, Returns
from quantopian.pipeline.filters.morningstar import Q1500US
from quantopian.pipeline.filters.morningstar import Q500US
from quantopian.pipeline.classifiers.morningstar import Sector
from quantopian.pipeline.data import morningstar
import numpy as np
import talib
import math
In [ ]:
 
In [2]:
def make_pipeline():
    sma_20 = SimpleMovingAverage(inputs=[USEquityPricing.close], window_length=20)
    sma_50 = SimpleMovingAverage(inputs=[USEquityPricing.close], window_length=50)
    sma_10 = SimpleMovingAverage(inputs=[USEquityPricing.close], window_length=10)
    sma_200 = SimpleMovingAverage(inputs=[USEquityPricing.close], window_length=200)
    pipe =  Pipeline(
        columns={'Close': USEquityPricing.close.latest,
                 'M_Cap': morningstar.valuation.market_cap.latest,
                 'Sector': Sector(),
                 'Style': morningstar.asset_classification.style_box.latest,
                 'Div': morningstar.valuation_ratios.dividend_yield.latest,
                 'PE': morningstar.valuation_ratios.pe_ratio.latest,
                 'PB': morningstar.valuation_ratios.pb_ratio.latest,
                 'Cash': morningstar.valuation_ratios.cash_return.latest,
                 'ROIC': morningstar.operation_ratios.roic.latest,
                 'Margin': morningstar.operation_ratios.operation_margin.latest,
                 'Current': morningstar.operation_ratios.current_ratio.latest,
                 'sma_10': sma_10,
                 'sma_20': sma_20,
                 'sma_50': sma_50,
                 'sma_200': sma_200
                },
    screen = Q1500US()
    )
    return pipe
In [3]:
start = '2016-01-03'
stocks = run_pipeline(make_pipeline(), start, start)

stocks = stocks[np.isfinite(stocks['M_Cap'])] #remove stocks with unknown market cap
nulls = stocks.isnull()
stocks.loc[nulls.Div,['Div']] = 0 #set NaN dividend yields to 0
stocks = stocks[np.isfinite(stocks['Div'])] #remove stocks that still have unknown dividend yield
stocks = stocks[np.isfinite(stocks['PE'])] #remove stocks that still have unknown P/E ratios
stocks = stocks[np.isfinite(stocks['ROIC'])]

pe = stocks['PE']
In [13]:
start = '2016-01-03'
end = '2016-04-03'
walk_forward_returns = get_pricing(stocks.index.get_level_values(1), fields='price', start_date=start, end_date=end).pct_change()[1:]
walk_forward_returns = np.mean(walk_forward_returns)
print 'The Walk Forward Returns\n'
print walk_forward_returns
print '\n'
The Walk Forward Returns

Equity(2 [ARNC])        0.000797
Equity(24 [AAPL])       0.000977
Equity(53 [ABMD])       0.002657
Equity(62 [ABT])       -0.000010
Equity(67 [ADSK])      -0.000280
Equity(76 [TAP])        0.000982
Equity(114 [ADBE])      0.000801
Equity(122 [ADI])       0.001592
Equity(128 [ADM])       0.000721
Equity(161 [AEP])       0.002488
Equity(166 [AES])       0.003832
Equity(168 [AET])       0.000901
Equity(185 [AFL])       0.001506
Equity(197 [AGCO])      0.002011
Equity(216 [HES])       0.002231
Equity(239 [AIG])      -0.001348
Equity(266 [AJG])       0.001943
Equity(270 [AKRX])     -0.005977
Equity(300 [ALK])       0.001091
Equity(301 [ALKS])     -0.009063
Equity(337 [AMAT])      0.002800
Equity(351 [AMD])       0.001691
Equity(353 [AME])      -0.000694
Equity(357 [TWX])       0.002216
Equity(368 [AMGN])     -0.000145
Equity(410 [AN])       -0.003658
Equity(438 [AON])       0.002490
Equity(448 [APA])       0.002162
Equity(455 [APC])      -0.000019
Equity(460 [APD])       0.002161
                          ...   
Equity(47752 [CDK])     0.000070
Equity(47777 [CFG])    -0.002731
Equity(47779 [CYBR])    0.000314
Equity(47831 [VWR])    -0.000714
Equity(47883 [DPLO])   -0.001412
Equity(47884 [PLAY])   -0.000743
Equity(47888 [FCAU])   -0.001925
Equity(47898 [GWB])     0.000230
Equity(47921 [KEYS])    0.000188
Equity(47929 [HYH])    -0.001847
Equity(48027 [INCR])   -0.001192
Equity(48065 [AXTA])    0.002264
Equity(48091 [VA])      0.002341
Equity(48103 [STOR])    0.002153
Equity(48104 [PGRE])   -0.001590
Equity(48126 [HABT])   -0.003755
Equity(48169 [KLXI])    0.001363
Equity(48220 [LC])     -0.004239
Equity(48384 [QRVO])    0.000755
Equity(48531 [VSTO])    0.002600
Equity(48543 [SHAK])    0.000023
Equity(48575 [XHR])     0.000941
Equity(48629 [INOV])    0.002238
Equity(48746 [SUM])     0.001066
Equity(48821 [CJES])   -0.011814
Equity(48823 [SEDG])   -0.001365
Equity(48892 [IGT])     0.002623
Equity(49003 [TLN])     0.009759
Equity(49051 [APLE])    0.000294
Equity(49141 [CPGX])    0.004211
dtype: float64


In [ ]:
 
In [16]:
import scipy.stats as stats
import matplotlib.pyplot as plt

plt.scatter(pe, walk_forward_returns)
plt.xlabel('PE')
plt.ylabel('Returns')

r_s = stats.spearmanr(pe, walk_forward_returns)
print 'Correlation Coefficient: ' + str(r_s[0])
print 'p-value: ' + str(r_s[1])
Correlation Coefficient: -0.01351773122
p-value: 0.613561118376
In [ ]: