When there are two limits/comparisons in the pipeline, they need to be separated like in this example in order to work right, cannot be combined on one line.
'''
#& (c.prc_lo <= price <= c.prc_hi) # prc_lo is ignored
#& (c.prc_hi >= price >= c.prc_lo) # prc_hi is ignored
& (c.prc_lo <= price) # These work ...
& (price <= c.prc_hi) # ... together ok.
'''
from quantopian.pipeline import Pipeline
from quantopian.algorithm import attach_pipeline, pipeline_output
from quantopian.pipeline.data import morningstar as mstar
from quantopian.pipeline.factors import AverageDollarVolume
from quantopian.pipeline.data.builtin import USEquityPricing
from quantopian.pipeline.filters.morningstar import IsPrimaryShare
def initialize(context):
c = context
c.prc_lo = 30.00
c.prc_hi = 40.00
pipe = attach_pipeline(Pipeline(), 'zoo')
price = USEquityPricing.close.latest
tradable = (
IsPrimaryShare()
& mstar.valuation.market_cap.latest.notnull()
& mstar.balance_sheet.limited_partnership.latest.isnull()
& mstar.share_class_reference.security_type.latest.eq('ST00000001')
& ~mstar.share_class_reference.is_depositary_receipt.latest
& ~mstar.share_class_reference.symbol.latest.endswith('.WI')
& ~mstar.share_class_reference.exchange_id.latest.startswith('OTC')
& ~mstar.company_reference.standard_name.latest.matches('.* L[. ]?P.?$')
& AverageDollarVolume(window_length=20).percentile_between(90, 100)
#& (c.prc_lo <= price <= c.prc_hi) # prc_lo is ignored
#& (c.prc_hi >= price >= c.prc_lo) # prc_hi is ignored
& (c.prc_lo <= price) # These work ...
& (price <= c.prc_hi) # ... together ok.
)
pipe.add(price, 'prc')
pipe.set_screen(tradable)
def before_trading_start(context, data):
c = context
c.output = pipeline_output('zoo')
log.info('{} stocks min {} max {}'.format(len(c.output), min(c.output['prc'].values), max(c.output['prc'].values)))
'''
& (c.prc_lo <= price <= c.prc_hi) # prc_lo is ignored
2017-02-01 05:45 before_trading_start:42 INFO 164 stocks min 3.49 max 39.85
2017-02-02 05:45 before_trading_start:42 INFO 169 stocks min 3.4 max 39.99
2017-02-03 05:45 before_trading_start:42 INFO 169 stocks min 3.37 max 39.99
2017-02-06 05:45 before_trading_start:42 INFO 164 stocks min 3.425 max 39.865
2017-02-07 05:45 before_trading_start:42 INFO 169 stocks min 3.33 max 40.0
& (c.prc_hi >= price >= c.prc_lo) # prc_hi is ignored
2017-02-01 05:45 before_trading_start:42 INFO 485 stocks min 30.22 max 1575.92
2017-02-02 05:45 before_trading_start:42 INFO 480 stocks min 30.03 max 1575.32
2017-02-03 05:45 before_trading_start:42 INFO 481 stocks min 30.12 max 1573.11
2017-02-06 05:45 before_trading_start:42 INFO 486 stocks min 30.27 max 1583.37
2017-02-07 05:45 before_trading_start:42 INFO 488 stocks min 30.13 max 1587.37
& (c.prc_lo <= price) # These work ...
& (price <= c.prc_hi) # ... together ok.
2017-02-01 05:45 before_trading_start:42 INFO 56 stocks min 30.22 max 39.85
2017-02-02 05:45 before_trading_start:42 INFO 55 stocks min 30.03 max 39.99
2017-02-03 05:45 before_trading_start:42 INFO 57 stocks min 30.12 max 39.99
2017-02-06 05:45 before_trading_start:42 INFO 55 stocks min 30.27 max 39.865
2017-02-07 05:45 before_trading_start:42 INFO 59 stocks min 30.13 max 40.0
'''