.. code:: ipython2 from quantopian.pipeline import Pipeline from quantopian.research import run_pipeline from quantopian.pipeline.data.builtin import USEquityPricing from quantopian.pipeline.factors import SimpleMovingAverage, AverageDollarVolume フィルタの結合 ------------------ ファクタと同じく、フィルタも結合できます。 フィルタの結合には ``&`` (and)や ``|`` (or)演算子を使います。 例えば直近の終値が20ドルよりも高く、かつ、平均売買代金が全銘柄の上位10パーセントという条件でスクリーニングを実施したいとしましょう。 まず売買代金フィルタを ``AverageDollarVolume`` ファクター と ``percentile_between`` を使って作成します: .. code:: ipython2 dollar_volume = AverageDollarVolume(window_length=30) high_dollar_volume = dollar_volume.percentile_between(90, 100) (備考) ``percentile_between`` は、 ``フィルタ`` を返す ``ファクター`` メソッドです。 次に ``latest_close`` ファクターを作成し、終値が20ドルよりも高い証券に絞り込むフィルタを定義します: .. code:: ipython2 latest_close = USEquityPricing.close.latest above_20 = latest_close > 20 そして ``high_dollar_volume`` フィルタと ``above_20`` フィルタを ``&`` 演算子を使って結合します: .. code:: ipython2 tradeable_filter = high_dollar_volume & above_20 このフィルタは ``high_dollar_volume`` と ``above_20`` の双方が ``True`` となる証券に対して ``True`` と判定します。 それら以外は ``False`` となります。 類似の演算が ``|`` (or) 演算子を使って実行可能です。 このフィルタをパイプライン内でスクリーニングに利用したい場合、 ``screen`` 引数として ``tradeable_filter`` を指定するだけです。 .. code:: ipython2 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 ) 実行すると、パイプラインは約700銘柄を出力します。 .. code:: ipython2 result = run_pipeline(make_pipeline(), '2015-05-05', '2015-05-05') print 'Number of securities that passed the filter: %d' % len(result) result .. todo:: print文を python3用に書き換えるか検討 .. parsed-literal:: Number of securities that passed the filter: 737 .. raw:: html
percent_difference
2015-05-05 00:00:00+00:00 Equity(24 [AAPL]) 0.016905
Equity(62 [ABT]) 0.014385
Equity(67 [ADSK]) -0.003921
Equity(76 [TAP]) -0.008759
Equity(114 [ADBE]) 0.009499
Equity(122 [ADI]) 0.009271
Equity(128 [ADM]) 0.015760
Equity(154 [AEM]) 0.026035
Equity(161 [AEP]) 0.010405
Equity(168 [AET]) 0.005853
Equity(185 [AFL]) -0.002239
Equity(216 [HES]) 0.036528
Equity(239 [AIG]) 0.012322
Equity(270 [AKRX]) -0.024963
Equity(300 [ALK]) 0.015147
Equity(301 [ALKS]) -0.033228
Equity(328 [ALTR]) 0.012284
Equity(357 [TWX]) 0.000365
Equity(368 [AMGN]) 0.008860
Equity(438 [AON]) 0.002327
Equity(448 [APA]) 0.035926
Equity(455 [APC]) 0.049153
Equity(460 [APD]) -0.006999
Equity(624 [ATW]) 0.014957
Equity(630 [ADP]) -0.002134
Equity(679 [AXP]) -0.011809
Equity(693 [AZO]) 0.002395
Equity(698 [BA]) -0.016685
Equity(734 [BAX]) 0.009414
Equity(739 [BBBY]) -0.027796
... ...
Equity(45269 [EVHC]) -0.004877
Equity(45451 [FEYE]) 0.042108
Equity(45558 [BURL]) -0.053654
Equity(45570 [JNUG]) 0.053977
Equity(45618 [AR]) 0.091085
Equity(45769 [WUBA]) 0.234141
Equity(45804 [ASHR]) 0.082573
Equity(45815 [TWTR]) -0.077268
Equity(45971 [AAL]) 0.008087
Equity(45978 [ATHM]) 0.063568
Equity(45993 [HLT]) -0.000895
Equity(46015 [ALLY]) 0.009605
Equity(46308 [ASPX]) 0.054145
Equity(46631 [GOOG]) 0.004730
Equity(46693 [GRUB]) -0.016904
Equity(46979 [JD]) 0.058362
Equity(47169 [KITE]) -0.049366
Equity(47208 [GPRO]) 0.061078
Equity(47230 [NSAM]) -0.037879
Equity(47430 [MBLY]) 0.050288
Equity(47740 [BABA]) -0.008354
Equity(47777 [CFG]) 0.025703
Equity(47779 [CYBR]) 0.101844
Equity(48065 [AXTA]) 0.034600
Equity(48317 [JUNO]) -0.103370
Equity(48384 [QRVO]) -0.050578
Equity(48892 [IGT]) 0.005591
Equity(48934 [ETSY]) -0.030142
Equity(48962 [CSAL]) 0.000000
Equity(48972 [EVA]) 0.000000

737 rows × 1 columns

次のレッスンでは、ファクターとフィルタのマスキングについて見ていきます。