from quantopian.pipeline import Pipeline
from quantopian.research import run_pipeline
from quantopian.pipeline.factors import CustomFactor
from quantopian.pipeline.data import USEquityPricing
from quantopian.pipeline.filters import QTradableStocksUS
from quantopian.pipeline import CustomFilter
import numpy as np
class SidInList(CustomFilter):
"""
Filter returns True for any SID included in parameter tuple passed at creation.
Usage: my_filter = SidInList(sid_list=(23911, 46631))
"""
inputs = []
window_length = 1
params = ('sid_list',)
def compute(self, today, assets, out, sid_list):
out[:] = np.in1d(assets, sid_list)
def call_MyFactor(orda,cicle,zfrac, **kwargs):
step = int(round(((orda)*zfrac)))
kwargs['window_length'] += step
class MyFactor(CustomFactor):
def compute(self, today, asset_ids, out, high,low):
out[:] = ((np.nanmax(high[:self.window_length-step],axis=0))+(np.nanmin(low[:self.window_length-step],axis=0)))
return MyFactor(**kwargs)
def make_factors():
factors = {}
for o in range(1,7):
for c in range(11,21):
c=float(c)
o=float(o)
z = float(c/((2*o)+1))
window = (int(round((o+1)*z)) - int(round(o*z))) +1
factors['factor {}'.format(c*o)] = call_MyFactor(orda=o,cicle=c,zfrac=z ,window_length=window,inputs = [USEquityPricing.high,USEquityPricing.low])
return factors
def make_pipeline():
return Pipeline(columns=make_factors(),screen=QTradableStocksUS()) #screen = SidInList(sid_list=(2069)))#screen=QTradableStocksUS())
result = run_pipeline(make_pipeline(), '2018-11-10', '2018-11-10')
#print len(result)
result.head(10)
#result.groupby(level=0).sum()
#result.groupby(level=0).sum().plot()
#def before_trading_start(context, data):
# context.output= pipeline_output
# i = 1
# for col in pipeline_output:
# pipeline_output[col] = pipeline_output[col] * i
# i += 1
# pipeline_output