dollar_volume = AverageDollarVolume(window_length=30)
high_dollar_volume = dollar_volume.percentile_between(90, 100)

"""
Explanation: Combining Filters
Like factors, filters can be combined. Combining filters is done using the &amp; (and) and | (or) operators. For example, let's say we want to screen for securities that are in the top 10% of average dollar volume and have a latest close price above $20. To start, let's make a high dollar volume filter using an AverageDollarVolume factor and percentile_between:
End of explanation
"""


latest_close = USEquityPricing.close.latest
above_20 = latest_close > 20

"""
Explanation: Note: percentile_between is a Factor method returning a Filter.
Next, let's create a latest_close factor and define a filter for securities that closed above $20:
End of explanation
"""


tradeable_filter = high_dollar_volume & above_20

"""
Explanation: Now we can combine our high_dollar_volume filter with our above_20 filter using the &amp; operator:
End of explanation
"""


def make_pipeline():

    mean_close_10 = SimpleMovingAverage(inputs=[USEquityPricing.close], window_length=10)
    mean_close_30 = SimpleMovingAverage(inputs=[USEquityPricing.close], window_length=30)

    percent_difference = (mean_close_10 - mean_close_30) / mean_close_30

    dollar_volume = AverageDollarVolume(window_length=30)
    high_dollar_volume = dollar_volume.percentile_between(90, 100)

    latest_close = USEquityPricing.close.latest
    above_20 = latest_close > 20

    tradeable_filter = high_dollar_volume & above_20

    return Pipeline(
        columns={
            'percent_difference': percent_difference
        },
        screen=tradeable_filter
    )

"""
Explanation: This filter will evaluate to True for securities where both high_dollar_volume and above_20 are True. Otherwise, it will evaluate to False. A similar computation can be made with the | (or) operator.
If we want to use this filter as a screen in our pipeline, we can simply pass tradeable_filter as the screen argument.
End of explanation
"""


result = run_pipeline(make_pipeline(), '2015-05-05', '2015-05-05')
print 'Number of securities that passed the filter: %d' % len(result)
result

"""
Explanation: When we run this, our pipeline output now only includes ~700 securities.
End of explanation
"""


