from quantopian.pipeline import CustomFactor, Pipeline
from quantopian.research import run_pipeline
from quantopian.pipeline.data.builtin import USEquityPricing
import numpy
class StdDev(CustomFactor):
def compute(self, today, asset_ids, out, values):
# Calculates the column-wise standard deviation, ignoring NaNs
out[:] = numpy.nanstd(values, axis=0)
def make_pipeline():
mean_close_10 = SimpleMovingAverage(inputs=[USEquityPricing.close], window_length=10)
volume_filter = (USEquityPricing.volume.latest > 1000000)
std_dev = StdDev(inputs=[USEquityPricing.close], window_length=5)
std_filter = (std_dev > 2)
price_filter = (USEquityPricing.close.latest > 5) and (USEquityPricing.close.latest < 50)
return Pipeline(
columns={
'10 MA of closing price' : mean_close_10,
'Volume': USEquityPricing.volume.latest,
'std_dev': std_dev
} , screen=(std_filter & price_filter & volume_filter)
)
result = run_pipeline(make_pipeline(), '2016-12-15', '2016-12-15')
print len(result)
result.sort_values([''], ascending=[1,0])
class TenDayMeanDifference(CustomFactor):
# Default inputs.
inputs = [USEquityPricing.close, USEquityPricing.open]
window_length = 10
def compute(self, today, asset_ids, out, close, open):
# Calculates the column-wise mean difference, ignoring NaNs
out[:] = numpy.nanmean(close - open, axis=0)
class Momentum(CustomFactor):
# Default inputs
inputs = [USEquityPricing.close]
# Compute momentum
def compute(self, today, assets, out, close):
out[:] = close[-1] / close[0]