Combining Factors

Factors can be combined, both with other Factors and with scalar values, via any of the builtin mathematical operators (+, -, *, etc). This makes it easy to write complex expressions that combine multiple Factors. For example, constructing a Factor that computes the average of two other Factors is simply:

>>> f1 = SomeFactor(...)
>>> f2 = SomeOtherFactor(...)
>>> average = (f1 + f2) / 2.0

In this lesson, we will create a pipeline that creates a relative_difference factor by combining a 10-day average factor and a 30-day average factor.

As usual, let's start with our imports:

In [1]:
from zipline.pipeline import Pipeline
from zipline.research import run_pipeline
from zipline.pipeline.data import EquityPricing
from zipline.pipeline.factors import SimpleMovingAverage

For this example, we need two factors: a 10-day mean close price factor, and a 30-day one:

In [2]:
mean_close_10 = SimpleMovingAverage(inputs=[EquityPricing.close], window_length=10)
mean_close_30 = SimpleMovingAverage(inputs=[EquityPricing.close], window_length=30)

Then, let's create a percent difference factor by combining our mean_close_30 factor with our mean_close_10 factor.

In [3]:
percent_difference = (mean_close_10 - mean_close_30) / mean_close_30

In this example, percent_difference is still a Factor even though it's composed as a combination of more primitive factors. We can add percent_difference as a column in our pipeline. Let's define make_pipeline to create a pipeline with percent_difference as a column (and not the mean close factors):

In [4]:
def make_pipeline():

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

    percent_difference = (mean_close_10 - mean_close_30) / mean_close_30

    return Pipeline(
        columns={
            'percent_difference': percent_difference
        }
    )

Let's see what the new output looks like:

In [5]:
result = run_pipeline(make_pipeline(), start_date='2015-05-05', end_date='2015-05-05')
result
Out[5]:
percent_difference
2015-05-05 00:00:00+00:00Equity(FIBBG000C2V3D6 [A])-0.000111
Equity(FIBBG00B3T3HD3 [AA])NaN
Equity(QI000000004076 [AABA])-0.017429
Equity(FIBBG006T1NZ18 [AAC])0.048123
Equity(FIBBG001B9VR83 [AAC])NaN
Equity(FIBBG000V2S3P6 [AACG])0.052646
Equity(FIBBG000BDYRW6 [AADR])0.021066
Equity(FIBBG002MYG6B3 [AAIT])0.007100
Equity(FIBBG005P7Q881 [AAL])0.007729
Equity(FIBBG003PNL136 [AAMC])0.008597
Equity(FIBBG000B9XB24 [AAME])-0.004582
Equity(FIBBG000D9V7T4 [AAN])0.095343
Equity(FIBBG000D6VW15 [AAOI])0.042447
Equity(FIBBG000C2LZP3 [AAON])0.016510
Equity(FIBBG000F7RCJ1 [AAP])-0.010067
Equity(FIBBG008651TF3 [AAPC])0.000000
Equity(FIBBG000B9XRY4 [AAPL])0.016827
Equity(FIBBG00161BCR0 [AAT])-0.025473
Equity(FIBBG000DGFSY4 [AAU])-0.039844
Equity(FIBBG000C5QZ62 [AAV])0.054398
Equity(FIBBG000Q57YP0 [AAWW])0.023100
Equity(FIBBG000G6GXC5 [AAXJ])0.030521
Equity(FIBBG000BHJWG1 [AAXN])0.102930
Equity(FIBBG000B9WM03 [AB])0.013725
Equity(FIBBG000CP4WX9 [ABAX])-0.019617
Equity(FIBBG000DK5Q25 [ABB])0.009474
Equity(FIBBG0025Y4RY4 [ABBV])0.056309
Equity(FIBBG000MDCQC2 [ABC])0.006168
Equity(FIBBG000CDY3H5 [ABCB])-0.031080
Equity(FIBBG000Q05Q43 [ABCD])-0.020143
......
Equity(FIBBG004HQMCJ4 [ZIONN])0.000579
Equity(FIBBG0043FW0J8 [ZIONO])0.015711
Equity(FIBBG000002FJ2 [ZIONP])0.001309
Equity(FIBBG000RMX9Z7 [ZIONW])0.028649
Equity(FIBBG000PQQH62 [ZIONZ])0.053310
Equity(FIBBG000FWCC57 [ZIOP])-0.059584
Equity(FIBBG0019HMFX6 [ZIV])0.025061
Equity(FIBBG000H04C72 [ZIXI])0.060999
Equity(FIBBG006MJFPW3 [ZJPN])0.011783
Equity(FIBBG007XHN059 [ZLRG])-0.001470
Equity(FIBBG001J2P4Y9 [ZLTQ])0.014219
Equity(FIBBG005WX1JJ7 [ZMLP])0.024929
Equity(FIBBG000RFZLM7 [ZN])0.076209
Equity(FIBBG000VD6768 [ZNGA])-0.044151
Equity(FIBBG000BXQ7R1 [ZNH])0.139522
Equity(FIBBG0064MY238 [ZOES])-0.006636
Equity(FIBBG006G0NHM1 [ZPIN])-0.008053
Equity(FIBBG000FTMSF7 [ZQK])-0.068626
Equity(FIBBG000PN8QP8 [ZROZ])-0.032259
Equity(FIBBG006TL19Y0 [ZSAN])-0.052960
Equity(FIBBG000F9CW36 [ZSL])0.031028
Equity(FIBBG007XHMYS1 [ZSML])0.002779
Equity(FIBBG003LFL2G1 [ZSPH])-0.032424
Equity(FIBBG000BXB8X8 [ZTR])-0.001181
Equity(FIBBG0039320N9 [ZTS])-0.006740
Equity(FIBBG001Z7M393 [ZU])-0.043705
Equity(FIBBG000PYX812 [ZUMZ])-0.082763
Equity(FIBBG000C3CQP1 [ZVO])-0.041755
Equity(FIBBG001NFC923 [ZX])0.040279
Equity(FIBBG00VT0KNC3 [MTCH])0.020778

8422 rows × 1 columns


Next Lesson: Filters