2.12. ファクターの結合

ファクターは組込み数学演算子(+、-、*など)のいずれかを使い、別のファクターやスカラ値と結合できます。 これにより、複数のファクターを結合させた複雑な式を簡単にかけます。 例えば2つの異なるファクターの平均を取るファクターの作成はシンプルに:

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

と書けます。 このレッスンでは、10日間平均ファクターと30日間平均ファクターを組み合わせた relative_difference ファクターを計算するパイプラインを作成します。 いつもと同じく、import文から始めます:

from quantopian.pipeline import Pipeline
from quantopian.research import run_pipeline
from quantopian.pipeline.data.builtin import USEquityPricing
from quantopian.pipeline.factors import SimpleMovingAverage

今回は、10日間移動平均と30日間移動平均の2つのファクターが必要です:

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

では、mean_close_30 ファクターと mean_close_10 ファクターを使って相対変化( percent_difference )を計算するファクターを作成します。

percent_difference = (mean_close_10 - mean_close_30) / mean_close_30

この例を見ると、 percent_difference はより単純なファクターの組み合わせによって構成されていますが、依然として Factor です。 percent_difference をパイプラインの列として追加できます。

それでは percent_difference を列に持つ(終値平均を計算するファクターは列に加えません)パイプラインを作成する make_pipeline を定義しましょう:

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

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

新しい出力がどのようになっているか確認します:

result = run_pipeline(make_pipeline(), '2015-05-05', '2015-05-05')
result
percent_difference
2015-05-05 00:00:00+00:00 Equity(2 [AA]) 0.017975
Equity(21 [AAME]) -0.002325
Equity(24 [AAPL]) 0.016905
Equity(25 [AA_PR]) 0.021544
Equity(31 [ABAX]) -0.019639
Equity(39 [DDC]) 0.074730
Equity(41 [ARCB]) 0.007067
Equity(52 [ABM]) 0.003340
Equity(53 [ABMD]) -0.024682
Equity(62 [ABT]) 0.014385
Equity(64 [ABX]) 0.046963
Equity(66 [AB]) 0.013488
Equity(67 [ADSK]) -0.003921
Equity(69 [ACAT]) -0.007079
Equity(70 [VBF]) 0.005507
Equity(76 [TAP]) -0.008759
Equity(84 [ACET]) -0.056139
Equity(86 [ACG]) 0.010096
Equity(88 [ACI]) -0.022089
Equity(100 [IEP]) 0.011293
Equity(106 [ACU]) 0.003306
Equity(110 [ACXM]) -0.029551
Equity(112 [ACY]) -0.057763
Equity(114 [ADBE]) 0.009499
Equity(117 [AEY]) 0.012543
Equity(122 [ADI]) 0.009271
Equity(128 [ADM]) 0.015760
Equity(134 [SXCL]) NaN
Equity(149 [ADX]) 0.007232
Equity(153 [AE]) -0.112999
... ...
Equity(48961 [NYMT_O]) NaN
Equity(48962 [CSAL]) 0.000000
Equity(48963 [PAK]) 0.000000
Equity(48969 [NSA]) 0.000000
Equity(48971 [BSM]) 0.000000
Equity(48972 [EVA]) 0.000000
Equity(48981 [APIC]) 0.000000
Equity(48989 [UK]) 0.000000
Equity(48990 [ACWF]) 0.000000
Equity(48991 [ISCF]) 0.000000
Equity(48992 [INTF]) 0.000000
Equity(48993 [JETS]) 0.000000
Equity(48994 [ACTX]) 0.000000
Equity(48995 [LRGF]) 0.000000
Equity(48996 [SMLF]) 0.000000
Equity(48997 [VKTX]) 0.000000
Equity(48998 [OPGN]) NaN
Equity(48999 [AAPC]) 0.000000
Equity(49000 [BPMC]) 0.000000
Equity(49001 [CLCD]) NaN
Equity(49004 [TNP_PRD]) 0.000000
Equity(49005 [ARWA_U]) NaN
Equity(49006 [BVXV]) NaN
Equity(49007 [BVXV_W]) NaN
Equity(49008 [OPGN_W]) NaN
Equity(49009 [PRKU]) NaN
Equity(49010 [TBRA]) NaN
Equity(49131 [OESX]) NaN
Equity(49259 [ITUS]) NaN
Equity(49523 [TLGT]) NaN

8235 rows × 1 columns

次のレッスンでは、フィルタについて学習します。