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
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
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']
start = '2016-01-03'
end = '2016-04-03'
walk_forward_returns = get_pricing(stocks.index, 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'
import scipy.stats as stats
import matplotlib.pyplot as plt
plt.scatter(pe, returns)
plt.xlabel('PE')
plt.ylabel('Returns')
r_s = stats.spearmanr(pe, returns)
print 'Correlation Coefficient: ' + str(r_s[0])
print 'p-value: ' + str(r_s[1])