Notebook
In [15]:
# Import statements
from quantopian.research import run_pipeline
from quantopian.pipeline import CustomFactor, Pipeline
from quantopian.pipeline.data.builtin import USEquityPricing
from quantopian.pipeline.data import morningstar
from quantopian.pipeline.filters.morningstar import IsPrimaryShare
from quantopian.pipeline.data import Fundamentals
import numpy

# Define class for a CustomFactor outputting signed gaps as %

class SignedGapPct(CustomFactor):
    # Default input
    inputs = [USEquityPricing.close, USEquityPricing.open]
    window_length = 2
    def compute(self, today, asset_ids, out, close, open):
        # Calculates the column-wise gaps, how to ignore NaNs?
        out[:] = (open[-1] - close[-2])/close[-2]

def make_pipeline():
    """
    Create our pipeline.
    """

    # Filter for primary share equities. IsPrimaryShare is a built-in filter.
    primary_share = IsPrimaryShare()

    # Equities listed as common stock (as opposed to, say, preferred stock).
    # 'ST00000001' indicates common stock.
    common_stock = Fundamentals.security_type.latest.eq('ST00000001')

    # Non-depositary receipts. Recall that the ~ operator inverts filters,
    # turning Trues into Falses and vice versa
    not_depositary = ~Fundamentals.is_depositary_receipt.latest

    # Equities not trading over-the-counter.
    not_otc = ~Fundamentals.exchange_id.latest.startswith('OTC')

    # Not when-issued equities.
    not_wi = ~Fundamentals.symbol.latest.endswith('.WI')

    # Equities without LP in their name, .matches does a match using a regular
    # expression
    not_lp_name = ~Fundamentals.standard_name.latest.matches('.* L[. ]?P.?$')

    # Equities with a null value in the limited_partnership Morningstar
    # fundamental field.
    not_lp_balance_sheet = Fundamentals.limited_partnership.latest.isnull()

    # Equities whose most recent Morningstar market cap is not null have
    # fundamental data and therefore are not ETFs.
    have_market_cap = Fundamentals.market_cap.latest.notnull()
    
    

    # Filter for stocks that pass all of our previous filters. 
    # tradeable stocks is our complex mask for filter

    my_stocks = (
    primary_share
    & common_stock
    & not_depositary
    & not_otc
    & not_wi
    & not_lp_name
    & not_lp_balance_sheet
    & have_market_cap
    )

    

   


    # Factor to calculate gap up/down (signed) in percent normalised to previous day close
    
    signed_gap_pct = SignedGapPct(mask=my_stocks)
    
    # filter out NaN
    
    filter_not_nan = signed_gap_pct.notnan()
    
    
    
    # aggregated filter for pipeline screen
    
    aggr_screen = (my_stocks & filter_not_nan)

  

    return Pipeline(
        columns={
            'signed_gap_pct': signed_gap_pct,
        },
        screen = aggr_screen,
        )

my_pipe = make_pipeline()

# I need a way to 
# (1) loop across days using pipeline and calculate len of results for each day (2) plot lens vs days 

result = run_pipeline(my_pipe, '2017-12-20', '2017-12-29')
In [14]:
result.head
Out[14]:
<bound method DataFrame.head of                                                 signed_gap_pct
2017-12-20 00:00:00+00:00 Equity(2 [ARNC])            0.002343
                          Equity(21 [AAME])          -0.081081
                          Equity(24 [AAPL])          -0.007935
                          Equity(31 [ABAX])           0.000408
                          Equity(41 [ARCB])           0.001359
                          Equity(52 [ABM])            0.000000
                          Equity(53 [ABMD])           0.004261
                          Equity(62 [ABT])            0.001418
                          Equity(67 [ADSK])          -0.002326
                          Equity(76 [TAP])            0.003586
                          Equity(84 [ACET])           0.004699
                          Equity(106 [ACU])           0.011872
                          Equity(110 [ACXM])         -0.000724
                          Equity(112 [ACY])          -0.043624
                          Equity(114 [ADBE])         -0.004243
                          Equity(117 [AEY])           0.020979
                          Equity(122 [ADI])          -0.003971
                          Equity(128 [ADM])           0.006463
                          Equity(153 [AE])            0.019108
                          Equity(161 [AEP])           0.002649
                          Equity(166 [AES])          -0.000913
                          Equity(168 [AET])           0.000789
                          Equity(185 [AFL])           0.000340
                          Equity(197 [AGCO])         -0.002134
                          Equity(216 [HES])           0.004588
                          Equity(225 [AHPI])         -0.014286
                          Equity(239 [AIG])           0.006711
                          Equity(247 [AIN])           0.000000
                          Equity(253 [AIR])           0.000926
                          Equity(266 [AJG])           0.007830
...                                                        ...
2017-12-29 00:00:00+00:00 Equity(51411 [MRBK])       -0.007633
                          Equity(51414 [MCB])         0.001843
                          Equity(51415 [IFRX])       -0.021063
                          Equity(51416 [CBTX])        0.002727
                          Equity(51423 [APLS])       -0.004094
                          Equity(51428 [BAND])        0.002917
                          Equity(51451 [CCT])        -0.001344
                          Equity(51455 [SEND])        0.003257
                          Equity(51457 [CEIX])        0.004751
                          Equity(51459 [ASNS])        0.021212
                          Equity(51467 [SFIX])        0.002091
                          Equity(51468 [SAIL])        0.004040
                          Equity(51469 [SCPH])       -0.015011
                          Equity(51470 [BXG])         0.000000
                          Equity(51471 [LEVB])        0.003059
                          Equity(51483 [AMRH])       -0.020270
                          Equity(51488 [SBT])        -0.014961
                          Equity(51494 [DLPH])        0.003773
                          Equity(51504 [RETO])        0.021429
                          Equity(51534 [CURO])        0.001423
                          Equity(51535 [ODT])        -0.008994
                          Equity(51537 [QTRX])        0.004312
                          Equity(51540 [LBC])         0.004102
                          Equity(51542 [DNLI])        0.005044
                          Equity(51576 [CASA])       -0.001893
                          Equity(51577 [FTNW])       -0.016585
                          Equity(51578 [LFIN])       -0.027341
                          Equity(51580 [NMRK])       -0.000645
                          Equity(51591 [DOGZ])        0.036395
                          Equity(51598 [ESTR])        0.009825

[28769 rows x 1 columns]>