ml-finance-python
python scripts for finance machine learning
git clone https://9o.is/git/ml-finance-python.git
notebook.ipynb
(102288B)
1 {
2 "cells": [
3 {
4 "cell_type": "markdown",
5 "metadata": {
6 "collapsed": true
7 },
8 "source": [
9 "# EventVestor: Earnings Calendar\n",
10 "\n",
11 "In this notebook, we'll take a look at EventVestor's *Earnings Calendar* dataset, available on the [Quantopian Store](https://www.quantopian.com/store). This dataset spans January 01, 2007 through the current day, and documents the quarterly earnings releases calendar indicating date and time of reporting.\n",
12 "\n",
13 "## Notebook Contents\n",
14 "\n",
15 "There are two ways to access the data and you'll find both of them listed below. Just click on the section you'd like to read through.\n",
16 "\n",
17 "- <a href='#interactive'><strong>Interactive overview</strong></a>: This is only available on Research and uses blaze to give you access to large amounts of data. Recommended for exploration and plotting.\n",
18 "- <a href='#pipeline'><strong>Pipeline overview</strong></a>: Data is made available through pipeline which is available on both the Research & Backtesting environment. Recommended for custom factor development and moving back & forth between research/backtesting.\n",
19 "\n",
20 "### Free samples and limits\n",
21 "One key caveat: we limit the number of results returned from any given expression to 10,000 to protect against runaway memory usage. To be clear, you have access to all the data server side. We are limiting the size of the responses back from Blaze.\n",
22 "\n",
23 "There is a *free* version of this dataset as well as a paid one. The free sample includes data until 2 months prior to the current date.\n",
24 "\n",
25 "To access the most up-to-date values for this data set for trading a live algorithm (as with other partner sets), you need to purchase acess to the full set.\n",
26 "\n",
27 "With preamble in place, let's get started:\n",
28 "\n",
29 "<a id='interactive'></a>\n",
30 "#Interactive Overview\n",
31 "### Accessing the data with Blaze and Interactive on Research\n",
32 "Partner datasets are available on Quantopian Research through an API service known as [Blaze](http://blaze.pydata.org). Blaze provides the Quantopian user with a convenient interface to access very large datasets, in an interactive, generic manner.\n",
33 "\n",
34 "Blaze provides an important function for accessing these datasets. Some of these sets are many millions of records. Bringing that data directly into Quantopian Research directly just is not viable. So Blaze allows us to provide a simple querying interface and shift the burden over to the server side.\n",
35 "\n",
36 "It is common to use Blaze to reduce your dataset in size, convert it over to Pandas and then to use Pandas for further computation, manipulation and visualization.\n",
37 "\n",
38 "Helpful links:\n",
39 "* [Query building for Blaze](http://blaze.readthedocs.io/en/latest/queries.html)\n",
40 "* [Pandas-to-Blaze dictionary](http://blaze.readthedocs.io/en/latest/rosetta-pandas.html)\n",
41 "* [SQL-to-Blaze dictionary](http://blaze.readthedocs.io/en/latest/rosetta-sql.html).\n",
42 "\n",
43 "Once you've limited the size of your Blaze object, you can convert it to a Pandas DataFrames using:\n",
44 "> `from odo import odo` \n",
45 "> `odo(expr, pandas.DataFrame)`\n",
46 "\n",
47 "\n",
48 "###To see how this data can be used in your algorithm, search for the `Pipeline Overview` section of this notebook or head straight to <a href='#pipeline'>Pipeline Overview</a>"
49 ]
50 },
51 {
52 "cell_type": "code",
53 "execution_count": 2,
54 "metadata": {
55 "collapsed": false
56 },
57 "outputs": [],
58 "source": [
59 "# import the dataset\n",
60 "from quantopian.interactive.data.eventvestor import earnings_calendar as dataset\n",
61 "\n",
62 "# or if you want to import the free dataset, use:\n",
63 "# from quantopian.data.eventvestor import earnings_calendar_free\n",
64 "\n",
65 "# import data operations\n",
66 "from odo import odo\n",
67 "# import other libraries we will use\n",
68 "import pandas as pd\n",
69 "import matplotlib.pyplot as plt"
70 ]
71 },
72 {
73 "cell_type": "code",
74 "execution_count": 3,
75 "metadata": {
76 "collapsed": false
77 },
78 "outputs": [
79 {
80 "data": {
81 "text/plain": [
82 "dshape(\"\"\"var * {\n",
83 " event_id: float64,\n",
84 " trade_date: ?datetime,\n",
85 " symbol: string,\n",
86 " event_type: ?string,\n",
87 " event_headline: ?string,\n",
88 " event_phase: float64,\n",
89 " calendar_date: ?datetime,\n",
90 " calendar_time: ?string,\n",
91 " event_rating: float64,\n",
92 " sid: int64,\n",
93 " asof_date: datetime,\n",
94 " timestamp: datetime\n",
95 " }\"\"\")"
96 ]
97 },
98 "execution_count": 3,
99 "metadata": {},
100 "output_type": "execute_result"
101 }
102 ],
103 "source": [
104 "# Let's use blaze to understand the data a bit using Blaze dshape()\n",
105 "dataset.dshape"
106 ]
107 },
108 {
109 "cell_type": "code",
110 "execution_count": 4,
111 "metadata": {
112 "collapsed": false
113 },
114 "outputs": [
115 {
116 "data": {
117 "text/html": [
118 "136400"
119 ],
120 "text/plain": [
121 "136400"
122 ]
123 },
124 "execution_count": 4,
125 "metadata": {},
126 "output_type": "execute_result"
127 }
128 ],
129 "source": [
130 "# And how many rows are there?\n",
131 "# N.B. we're using a Blaze function to do this, not len()\n",
132 "dataset.count()"
133 ]
134 },
135 {
136 "cell_type": "code",
137 "execution_count": 5,
138 "metadata": {
139 "collapsed": false
140 },
141 "outputs": [
142 {
143 "data": {
144 "text/html": [
145 "<table border=\"1\" class=\"dataframe\">\n",
146 " <thead>\n",
147 " <tr style=\"text-align: right;\">\n",
148 " <th></th>\n",
149 " <th>event_id</th>\n",
150 " <th>trade_date</th>\n",
151 " <th>symbol</th>\n",
152 " <th>event_type</th>\n",
153 " <th>event_headline</th>\n",
154 " <th>event_phase</th>\n",
155 " <th>calendar_date</th>\n",
156 " <th>calendar_time</th>\n",
157 " <th>event_rating</th>\n",
158 " <th>sid</th>\n",
159 " <th>asof_date</th>\n",
160 " <th>timestamp</th>\n",
161 " </tr>\n",
162 " </thead>\n",
163 " <tbody>\n",
164 " <tr>\n",
165 " <th>0</th>\n",
166 " <td>1969337</td>\n",
167 " <td>2007-01-03</td>\n",
168 " <td>AA</td>\n",
169 " <td>Earnings Calendar</td>\n",
170 " <td>Alcoa to Report Quarterly Financial Results on...</td>\n",
171 " <td>NaN</td>\n",
172 " <td>2007-01-10</td>\n",
173 " <td>Before Market Open</td>\n",
174 " <td>1</td>\n",
175 " <td>2</td>\n",
176 " <td>2007-01-03</td>\n",
177 " <td>2007-01-04</td>\n",
178 " </tr>\n",
179 " <tr>\n",
180 " <th>1</th>\n",
181 " <td>1969338</td>\n",
182 " <td>2007-01-03</td>\n",
183 " <td>ABT</td>\n",
184 " <td>Earnings Calendar</td>\n",
185 " <td>Abbott Laboratories to Report Quarterly Financ...</td>\n",
186 " <td>NaN</td>\n",
187 " <td>2007-01-24</td>\n",
188 " <td>Before Market Open</td>\n",
189 " <td>1</td>\n",
190 " <td>62</td>\n",
191 " <td>2007-01-03</td>\n",
192 " <td>2007-01-04</td>\n",
193 " </tr>\n",
194 " <tr>\n",
195 " <th>2</th>\n",
196 " <td>1969341</td>\n",
197 " <td>2007-01-03</td>\n",
198 " <td>AEPI</td>\n",
199 " <td>Earnings Calendar</td>\n",
200 " <td>AEP Industries to Report Quarterly Financial R...</td>\n",
201 " <td>NaN</td>\n",
202 " <td>2007-01-10</td>\n",
203 " <td>After Market Close</td>\n",
204 " <td>1</td>\n",
205 " <td>162</td>\n",
206 " <td>2007-01-03</td>\n",
207 " <td>2007-01-04</td>\n",
208 " </tr>\n",
209 " </tbody>\n",
210 "</table>"
211 ],
212 "text/plain": [
213 " event_id trade_date symbol event_type \\\n",
214 "0 1969337 2007-01-03 AA Earnings Calendar \n",
215 "1 1969338 2007-01-03 ABT Earnings Calendar \n",
216 "2 1969341 2007-01-03 AEPI Earnings Calendar \n",
217 "\n",
218 " event_headline event_phase \\\n",
219 "0 Alcoa to Report Quarterly Financial Results on... NaN \n",
220 "1 Abbott Laboratories to Report Quarterly Financ... NaN \n",
221 "2 AEP Industries to Report Quarterly Financial R... NaN \n",
222 "\n",
223 " calendar_date calendar_time event_rating sid asof_date timestamp \n",
224 "0 2007-01-10 Before Market Open 1 2 2007-01-03 2007-01-04 \n",
225 "1 2007-01-24 Before Market Open 1 62 2007-01-03 2007-01-04 \n",
226 "2 2007-01-10 After Market Close 1 162 2007-01-03 2007-01-04 "
227 ]
228 },
229 "execution_count": 5,
230 "metadata": {},
231 "output_type": "execute_result"
232 }
233 ],
234 "source": [
235 "# Let's see what the data looks like. We'll grab the first three rows.\n",
236 "dataset[:3]"
237 ]
238 },
239 {
240 "cell_type": "markdown",
241 "metadata": {},
242 "source": [
243 "Let's go over the columns:\n",
244 "- **event_id**: the unique identifier for this event.\n",
245 "- **asof_date**: EventVestor's timestamp of event capture.\n",
246 "- **trade_date**: for event announcements made before trading ends, trade_date is the same as event_date. For announcements issued after market close, trade_date is next market open day.\n",
247 "- **symbol**: stock ticker symbol of the affected company.\n",
248 "- **event_type**: this should always be *Earnings Calendar*.\n",
249 "- **event_headline**: a brief description of the event\n",
250 "- **event_phase**: the inclusion of this field is likely an error on the part of the data vendor. We're currently attempting to resolve this.\n",
251 "- **calendar_date**: proposed earnings reporting date\n",
252 "- **calendar_time**: earnings release time: *before/after market hours*, or *other*.\n",
253 "- **event_rating**: this is always 1. The meaning of this is uncertain.\n",
254 "- **timestamp**: this is our timestamp on when we registered the data.\n",
255 "- **sid**: the equity's unique identifier. Use this instead of the symbol.\n",
256 "\n",
257 "We've done much of the data processing for you. Fields like `timestamp` and `sid` are standardized across all our Store Datasets, so the datasets are easy to combine. We have standardized the `sid` across all our equity databases.\n",
258 "\n",
259 "We can select columns and rows with ease. Below, we'll fetch all of Apple's entries from 2012."
260 ]
261 },
262 {
263 "cell_type": "code",
264 "execution_count": 6,
265 "metadata": {
266 "collapsed": false
267 },
268 "outputs": [
269 {
270 "data": {
271 "text/html": [
272 "<table border=\"1\" class=\"dataframe\">\n",
273 " <thead>\n",
274 " <tr style=\"text-align: right;\">\n",
275 " <th></th>\n",
276 " <th>event_id</th>\n",
277 " <th>trade_date</th>\n",
278 " <th>symbol</th>\n",
279 " <th>event_type</th>\n",
280 " <th>event_headline</th>\n",
281 " <th>event_phase</th>\n",
282 " <th>calendar_date</th>\n",
283 " <th>calendar_time</th>\n",
284 " <th>event_rating</th>\n",
285 " <th>sid</th>\n",
286 " <th>asof_date</th>\n",
287 " <th>timestamp</th>\n",
288 " </tr>\n",
289 " </thead>\n",
290 " <tbody>\n",
291 " <tr>\n",
292 " <th>0</th>\n",
293 " <td>1963040</td>\n",
294 " <td>2012-01-20</td>\n",
295 " <td>AAPL</td>\n",
296 " <td>Earnings Calendar</td>\n",
297 " <td>Apple Inc. FY 12 First Quarter Results Confere...</td>\n",
298 " <td>NaN</td>\n",
299 " <td>2012-01-24</td>\n",
300 " <td>After Market Close</td>\n",
301 " <td>1</td>\n",
302 " <td>24</td>\n",
303 " <td>2012-01-20</td>\n",
304 " <td>2012-01-21</td>\n",
305 " </tr>\n",
306 " <tr>\n",
307 " <th>1</th>\n",
308 " <td>1963035</td>\n",
309 " <td>2012-04-20</td>\n",
310 " <td>AAPL</td>\n",
311 " <td>Earnings Calendar</td>\n",
312 " <td>Apple Inc. FY 12 Second Quarter Results Confer...</td>\n",
313 " <td>NaN</td>\n",
314 " <td>2012-04-24</td>\n",
315 " <td>After Market Close</td>\n",
316 " <td>1</td>\n",
317 " <td>24</td>\n",
318 " <td>2012-04-20</td>\n",
319 " <td>2012-04-21</td>\n",
320 " </tr>\n",
321 " <tr>\n",
322 " <th>2</th>\n",
323 " <td>1963033</td>\n",
324 " <td>2012-07-20</td>\n",
325 " <td>AAPL</td>\n",
326 " <td>Earnings Calendar</td>\n",
327 " <td>Apple Inc. FY 12 Third Quarter Results Confere...</td>\n",
328 " <td>NaN</td>\n",
329 " <td>2012-07-24</td>\n",
330 " <td>After Market Close</td>\n",
331 " <td>1</td>\n",
332 " <td>24</td>\n",
333 " <td>2012-07-20</td>\n",
334 " <td>2012-07-21</td>\n",
335 " </tr>\n",
336 " <tr>\n",
337 " <th>3</th>\n",
338 " <td>1963031</td>\n",
339 " <td>2012-10-24</td>\n",
340 " <td>AAPL</td>\n",
341 " <td>Earnings Calendar</td>\n",
342 " <td>Apple Inc. FY 12 Fourth Quarter Results Confer...</td>\n",
343 " <td>NaN</td>\n",
344 " <td>2012-10-25</td>\n",
345 " <td>After Market Close</td>\n",
346 " <td>1</td>\n",
347 " <td>24</td>\n",
348 " <td>2012-10-24</td>\n",
349 " <td>2012-10-25</td>\n",
350 " </tr>\n",
351 " </tbody>\n",
352 "</table>"
353 ],
354 "text/plain": [
355 " event_id trade_date symbol event_type \\\n",
356 "0 1963040 2012-01-20 AAPL Earnings Calendar \n",
357 "1 1963035 2012-04-20 AAPL Earnings Calendar \n",
358 "2 1963033 2012-07-20 AAPL Earnings Calendar \n",
359 "3 1963031 2012-10-24 AAPL Earnings Calendar \n",
360 "\n",
361 " event_headline event_phase \\\n",
362 "0 Apple Inc. FY 12 First Quarter Results Confere... NaN \n",
363 "1 Apple Inc. FY 12 Second Quarter Results Confer... NaN \n",
364 "2 Apple Inc. FY 12 Third Quarter Results Confere... NaN \n",
365 "3 Apple Inc. FY 12 Fourth Quarter Results Confer... NaN \n",
366 "\n",
367 " calendar_date calendar_time event_rating sid asof_date timestamp \n",
368 "0 2012-01-24 After Market Close 1 24 2012-01-20 2012-01-21 \n",
369 "1 2012-04-24 After Market Close 1 24 2012-04-20 2012-04-21 \n",
370 "2 2012-07-24 After Market Close 1 24 2012-07-20 2012-07-21 \n",
371 "3 2012-10-25 After Market Close 1 24 2012-10-24 2012-10-25 "
372 ]
373 },
374 "execution_count": 6,
375 "metadata": {},
376 "output_type": "execute_result"
377 }
378 ],
379 "source": [
380 "# get apple's sid first\n",
381 "aapl_sid = symbols('AAPL').sid\n",
382 "aapl_earnings = earnings_calendar[('2011-12-31' < earnings_calendar['asof_date']) & (earnings_calendar['asof_date'] <'2013-01-01') & (earnings_calendar.sid==aapl_sid)]\n",
383 "# When displaying a Blaze Data Object, the printout is automatically truncated to ten rows.\n",
384 "aapl_earnings.sort('asof_date')"
385 ]
386 },
387 {
388 "cell_type": "markdown",
389 "metadata": {},
390 "source": [
391 "Finally, suppose we want a DataFrame of all earnings calendar releases in February 2012, but we only want the event_headline and the calendar_time."
392 ]
393 },
394 {
395 "cell_type": "code",
396 "execution_count": 7,
397 "metadata": {
398 "collapsed": false
399 },
400 "outputs": [
401 {
402 "data": {
403 "text/html": [
404 "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
405 "<table border=\"1\" class=\"dataframe\">\n",
406 " <thead>\n",
407 " <tr style=\"text-align: right;\">\n",
408 " <th></th>\n",
409 " <th>event_headline</th>\n",
410 " <th>calendar_time</th>\n",
411 " </tr>\n",
412 " </thead>\n",
413 " <tbody>\n",
414 " <tr>\n",
415 " <th>0</th>\n",
416 " <td>BMC Software to Report Quarterly Financial Res...</td>\n",
417 " <td>After Market Close</td>\n",
418 " </tr>\n",
419 " <tr>\n",
420 " <th>1</th>\n",
421 " <td>Devon Energy Corp. to Report Quarterly Financi...</td>\n",
422 " <td>Before Market Open</td>\n",
423 " </tr>\n",
424 " <tr>\n",
425 " <th>2</th>\n",
426 " <td>Ecolab to Report Quarterly Financial Results o...</td>\n",
427 " <td>Before Market Open</td>\n",
428 " </tr>\n",
429 " <tr>\n",
430 " <th>3</th>\n",
431 " <td>Farmer Bros to Report Quarterly Financial Resu...</td>\n",
432 " <td>After Market Close</td>\n",
433 " </tr>\n",
434 " <tr>\n",
435 " <th>4</th>\n",
436 " <td>CGI Group, Inc. to Report Quarterly Financial ...</td>\n",
437 " <td>Before Market Open</td>\n",
438 " </tr>\n",
439 " <tr>\n",
440 " <th>5</th>\n",
441 " <td>Genuine Parts Co to Report Quarterly Financial...</td>\n",
442 " <td>Before Market Open</td>\n",
443 " </tr>\n",
444 " <tr>\n",
445 " <th>6</th>\n",
446 " <td>US Global Inv to Report Quarterly Financial Re...</td>\n",
447 " <td>After Market Close</td>\n",
448 " </tr>\n",
449 " <tr>\n",
450 " <th>7</th>\n",
451 " <td>Hawkins to Report Quarterly Financial Results ...</td>\n",
452 " <td>After Market Close</td>\n",
453 " </tr>\n",
454 " <tr>\n",
455 " <th>8</th>\n",
456 " <td>Multi-Color to Report Quarterly Financial Resu...</td>\n",
457 " <td>Before Market Open</td>\n",
458 " </tr>\n",
459 " <tr>\n",
460 " <th>9</th>\n",
461 " <td>Medical Action Inds to Report Quarterly Financ...</td>\n",
462 " <td>Before Market Open</td>\n",
463 " </tr>\n",
464 " <tr>\n",
465 " <th>10</th>\n",
466 " <td>Mission West to Report Quarterly Financial Res...</td>\n",
467 " <td>After Market Close</td>\n",
468 " </tr>\n",
469 " <tr>\n",
470 " <th>11</th>\n",
471 " <td>Nordson Cp to Report Quarterly Financial Resul...</td>\n",
472 " <td>After Market Close</td>\n",
473 " </tr>\n",
474 " <tr>\n",
475 " <th>12</th>\n",
476 " <td>Network Equipment Tech, Inc. to Report Quarter...</td>\n",
477 " <td>After Market Close</td>\n",
478 " </tr>\n",
479 " <tr>\n",
480 " <th>13</th>\n",
481 " <td>PMFG to Report Quarterly Financial Results on ...</td>\n",
482 " <td>Before Market Open</td>\n",
483 " </tr>\n",
484 " <tr>\n",
485 " <th>14</th>\n",
486 " <td>PS Business Parks to Report Quarterly Financia...</td>\n",
487 " <td>After Market Close</td>\n",
488 " </tr>\n",
489 " <tr>\n",
490 " <th>15</th>\n",
491 " <td>Penn Virginia to Report Quarterly Financial Re...</td>\n",
492 " <td>After Market Close</td>\n",
493 " </tr>\n",
494 " <tr>\n",
495 " <th>16</th>\n",
496 " <td>Savannah Bancorp to Report Quarterly Financial...</td>\n",
497 " <td>After Market Close</td>\n",
498 " </tr>\n",
499 " <tr>\n",
500 " <th>17</th>\n",
501 " <td>Transatlantic Hldgs to Report Quarterly Financ...</td>\n",
502 " <td>After Market Close</td>\n",
503 " </tr>\n",
504 " <tr>\n",
505 " <th>18</th>\n",
506 " <td>UIL Holdings to Report Quarterly Financial Res...</td>\n",
507 " <td>After Market Close</td>\n",
508 " </tr>\n",
509 " <tr>\n",
510 " <th>19</th>\n",
511 " <td>VF to Report Quarterly Financial Results on Fe...</td>\n",
512 " <td>Before Market Open</td>\n",
513 " </tr>\n",
514 " <tr>\n",
515 " <th>20</th>\n",
516 " <td>Watsco to Report Quarterly Financial Results o...</td>\n",
517 " <td>Before Market Open</td>\n",
518 " </tr>\n",
519 " <tr>\n",
520 " <th>21</th>\n",
521 " <td>Microchip Technlgy to Report Quarterly Financi...</td>\n",
522 " <td>After Market Close</td>\n",
523 " </tr>\n",
524 " <tr>\n",
525 " <th>22</th>\n",
526 " <td>Vical to Report Quarterly Financial Results on...</td>\n",
527 " <td>Before Market Open</td>\n",
528 " </tr>\n",
529 " <tr>\n",
530 " <th>23</th>\n",
531 " <td>Measurement Specialties to Report Quarterly Fi...</td>\n",
532 " <td>After Market Close</td>\n",
533 " </tr>\n",
534 " <tr>\n",
535 " <th>24</th>\n",
536 " <td>Innodata Isogen to Report Quarterly Financial ...</td>\n",
537 " <td>Before Market Open</td>\n",
538 " </tr>\n",
539 " <tr>\n",
540 " <th>25</th>\n",
541 " <td>Ameristar Casino to Report Quarterly Financial...</td>\n",
542 " <td>Before Market Open</td>\n",
543 " </tr>\n",
544 " <tr>\n",
545 " <th>26</th>\n",
546 " <td>U.S. Lime & Minerals, Inc. to Report Quarterly...</td>\n",
547 " <td>After Market Close</td>\n",
548 " </tr>\n",
549 " <tr>\n",
550 " <th>27</th>\n",
551 " <td>Biocryst Pharmaceuticals to Report Quarterly F...</td>\n",
552 " <td>Before Market Open</td>\n",
553 " </tr>\n",
554 " <tr>\n",
555 " <th>28</th>\n",
556 " <td>ACI Worldwide to Report Quarterly Financial Re...</td>\n",
557 " <td>Before Market Open</td>\n",
558 " </tr>\n",
559 " <tr>\n",
560 " <th>29</th>\n",
561 " <td>Henry Schein to Report Quarterly Financial Res...</td>\n",
562 " <td>Before Market Open</td>\n",
563 " </tr>\n",
564 " <tr>\n",
565 " <th>...</th>\n",
566 " <td>...</td>\n",
567 " <td>...</td>\n",
568 " </tr>\n",
569 " <tr>\n",
570 " <th>1373</th>\n",
571 " <td>Global Sources to Report Quarterly Financial R...</td>\n",
572 " <td>Before Market Open</td>\n",
573 " </tr>\n",
574 " <tr>\n",
575 " <th>1374</th>\n",
576 " <td>MIND C T I Ltd to Report Quarterly Financial R...</td>\n",
577 " <td>Before Market Open</td>\n",
578 " </tr>\n",
579 " <tr>\n",
580 " <th>1375</th>\n",
581 " <td>SureWest Communications to Report Quarterly Fi...</td>\n",
582 " <td>Before Market Open</td>\n",
583 " </tr>\n",
584 " <tr>\n",
585 " <th>1376</th>\n",
586 " <td>Guess to Report Quarterly Financial Results on...</td>\n",
587 " <td>After Market Close</td>\n",
588 " </tr>\n",
589 " <tr>\n",
590 " <th>1377</th>\n",
591 " <td>Hilltop Holdings to Report Quarterly Financial...</td>\n",
592 " <td>Before Market Open</td>\n",
593 " </tr>\n",
594 " <tr>\n",
595 " <th>1378</th>\n",
596 " <td>First Acceptance to Report Quarterly Financial...</td>\n",
597 " <td>After Market Close</td>\n",
598 " </tr>\n",
599 " <tr>\n",
600 " <th>1379</th>\n",
601 " <td>Endeavor International to Report Quarterly Fin...</td>\n",
602 " <td>Before Market Open</td>\n",
603 " </tr>\n",
604 " <tr>\n",
605 " <th>1380</th>\n",
606 " <td>Dresser-Rand Group to Report Quarterly Financi...</td>\n",
607 " <td>After Market Close</td>\n",
608 " </tr>\n",
609 " <tr>\n",
610 " <th>1381</th>\n",
611 " <td>The Babcock & Wilcox to Report Quarterly Finan...</td>\n",
612 " <td>After Market Close</td>\n",
613 " </tr>\n",
614 " <tr>\n",
615 " <th>1382</th>\n",
616 " <td>VirnetX Holding to Report Quarterly Financial ...</td>\n",
617 " <td>After Market Close</td>\n",
618 " </tr>\n",
619 " <tr>\n",
620 " <th>1383</th>\n",
621 " <td>ZIOPHARM Oncology to Report Quarterly Financia...</td>\n",
622 " <td>After Market Close</td>\n",
623 " </tr>\n",
624 " <tr>\n",
625 " <th>1384</th>\n",
626 " <td>Cal Dive International to Report Quarterly Fin...</td>\n",
627 " <td>After Market Close</td>\n",
628 " </tr>\n",
629 " <tr>\n",
630 " <th>1385</th>\n",
631 " <td>Yingli Green Energy Hldg ADS to Report Quarter...</td>\n",
632 " <td>Before Market Open</td>\n",
633 " </tr>\n",
634 " <tr>\n",
635 " <th>1386</th>\n",
636 " <td>Resolute Energy to Report Quarterly Financial ...</td>\n",
637 " <td>Before Market Open</td>\n",
638 " </tr>\n",
639 " <tr>\n",
640 " <th>1387</th>\n",
641 " <td>Stream Global Services to Report Quarterly Fin...</td>\n",
642 " <td>After Market Close</td>\n",
643 " </tr>\n",
644 " <tr>\n",
645 " <th>1388</th>\n",
646 " <td>Memsic, Inc. to Report Quarterly Financial Res...</td>\n",
647 " <td>After Market Close</td>\n",
648 " </tr>\n",
649 " <tr>\n",
650 " <th>1389</th>\n",
651 " <td>MYR Group, Inc. to Report Quarterly Financial ...</td>\n",
652 " <td>After Market Close</td>\n",
653 " </tr>\n",
654 " <tr>\n",
655 " <th>1390</th>\n",
656 " <td>Global Ship Lease to Report Quarterly Financia...</td>\n",
657 " <td>Before Market Open</td>\n",
658 " </tr>\n",
659 " <tr>\n",
660 " <th>1391</th>\n",
661 " <td>Westport Innovations to Report Quarterly Finan...</td>\n",
662 " <td>Before Market Open</td>\n",
663 " </tr>\n",
664 " <tr>\n",
665 " <th>1392</th>\n",
666 " <td>Dollar General to Report Quarterly Financial R...</td>\n",
667 " <td>Before Market Open</td>\n",
668 " </tr>\n",
669 " <tr>\n",
670 " <th>1393</th>\n",
671 " <td>Douglas Dynamics to Report Quarterly Financial...</td>\n",
672 " <td>Before Market Open</td>\n",
673 " </tr>\n",
674 " <tr>\n",
675 " <th>1394</th>\n",
676 " <td>Accretive Health to Report Quarterly Financial...</td>\n",
677 " <td>Before Market Open</td>\n",
678 " </tr>\n",
679 " <tr>\n",
680 " <th>1395</th>\n",
681 " <td>Fresh Market to Report Quarterly Financial Res...</td>\n",
682 " <td>Before Market Open</td>\n",
683 " </tr>\n",
684 " <tr>\n",
685 " <th>1396</th>\n",
686 " <td>RigNet to Report Quarterly Financial Results o...</td>\n",
687 " <td>Before Market Open</td>\n",
688 " </tr>\n",
689 " <tr>\n",
690 " <th>1397</th>\n",
691 " <td>FairPoint Communications Inc to Report Quarter...</td>\n",
692 " <td>After Market Close</td>\n",
693 " </tr>\n",
694 " <tr>\n",
695 " <th>1398</th>\n",
696 " <td>InterXion Holding to Report Quarterly Financia...</td>\n",
697 " <td>Before Market Open</td>\n",
698 " </tr>\n",
699 " <tr>\n",
700 " <th>1399</th>\n",
701 " <td>Huntington Ingalls Industries to Report Quart...</td>\n",
702 " <td>Before Market Open</td>\n",
703 " </tr>\n",
704 " <tr>\n",
705 " <th>1400</th>\n",
706 " <td>Tudou Holdings Limited to Report Quarterly Fi...</td>\n",
707 " <td>Before Market Open</td>\n",
708 " </tr>\n",
709 " <tr>\n",
710 " <th>1401</th>\n",
711 " <td>Acadia Healthcare Company Inc. to Report Quart...</td>\n",
712 " <td>After Market Close</td>\n",
713 " </tr>\n",
714 " <tr>\n",
715 " <th>1402</th>\n",
716 " <td>Guidewire Software Inc. to Report Quarterly Fi...</td>\n",
717 " <td>Before Market Open</td>\n",
718 " </tr>\n",
719 " </tbody>\n",
720 "</table>\n",
721 "<p>1403 rows × 2 columns</p>\n",
722 "</div>"
723 ],
724 "text/plain": [
725 " event_headline calendar_time\n",
726 "0 BMC Software to Report Quarterly Financial Res... After Market Close\n",
727 "1 Devon Energy Corp. to Report Quarterly Financi... Before Market Open\n",
728 "2 Ecolab to Report Quarterly Financial Results o... Before Market Open\n",
729 "3 Farmer Bros to Report Quarterly Financial Resu... After Market Close\n",
730 "4 CGI Group, Inc. to Report Quarterly Financial ... Before Market Open\n",
731 "5 Genuine Parts Co to Report Quarterly Financial... Before Market Open\n",
732 "6 US Global Inv to Report Quarterly Financial Re... After Market Close\n",
733 "7 Hawkins to Report Quarterly Financial Results ... After Market Close\n",
734 "8 Multi-Color to Report Quarterly Financial Resu... Before Market Open\n",
735 "9 Medical Action Inds to Report Quarterly Financ... Before Market Open\n",
736 "10 Mission West to Report Quarterly Financial Res... After Market Close\n",
737 "11 Nordson Cp to Report Quarterly Financial Resul... After Market Close\n",
738 "12 Network Equipment Tech, Inc. to Report Quarter... After Market Close\n",
739 "13 PMFG to Report Quarterly Financial Results on ... Before Market Open\n",
740 "14 PS Business Parks to Report Quarterly Financia... After Market Close\n",
741 "15 Penn Virginia to Report Quarterly Financial Re... After Market Close\n",
742 "16 Savannah Bancorp to Report Quarterly Financial... After Market Close\n",
743 "17 Transatlantic Hldgs to Report Quarterly Financ... After Market Close\n",
744 "18 UIL Holdings to Report Quarterly Financial Res... After Market Close\n",
745 "19 VF to Report Quarterly Financial Results on Fe... Before Market Open\n",
746 "20 Watsco to Report Quarterly Financial Results o... Before Market Open\n",
747 "21 Microchip Technlgy to Report Quarterly Financi... After Market Close\n",
748 "22 Vical to Report Quarterly Financial Results on... Before Market Open\n",
749 "23 Measurement Specialties to Report Quarterly Fi... After Market Close\n",
750 "24 Innodata Isogen to Report Quarterly Financial ... Before Market Open\n",
751 "25 Ameristar Casino to Report Quarterly Financial... Before Market Open\n",
752 "26 U.S. Lime & Minerals, Inc. to Report Quarterly... After Market Close\n",
753 "27 Biocryst Pharmaceuticals to Report Quarterly F... Before Market Open\n",
754 "28 ACI Worldwide to Report Quarterly Financial Re... Before Market Open\n",
755 "29 Henry Schein to Report Quarterly Financial Res... Before Market Open\n",
756 "... ... ...\n",
757 "1373 Global Sources to Report Quarterly Financial R... Before Market Open\n",
758 "1374 MIND C T I Ltd to Report Quarterly Financial R... Before Market Open\n",
759 "1375 SureWest Communications to Report Quarterly Fi... Before Market Open\n",
760 "1376 Guess to Report Quarterly Financial Results on... After Market Close\n",
761 "1377 Hilltop Holdings to Report Quarterly Financial... Before Market Open\n",
762 "1378 First Acceptance to Report Quarterly Financial... After Market Close\n",
763 "1379 Endeavor International to Report Quarterly Fin... Before Market Open\n",
764 "1380 Dresser-Rand Group to Report Quarterly Financi... After Market Close\n",
765 "1381 The Babcock & Wilcox to Report Quarterly Finan... After Market Close\n",
766 "1382 VirnetX Holding to Report Quarterly Financial ... After Market Close\n",
767 "1383 ZIOPHARM Oncology to Report Quarterly Financia... After Market Close\n",
768 "1384 Cal Dive International to Report Quarterly Fin... After Market Close\n",
769 "1385 Yingli Green Energy Hldg ADS to Report Quarter... Before Market Open\n",
770 "1386 Resolute Energy to Report Quarterly Financial ... Before Market Open\n",
771 "1387 Stream Global Services to Report Quarterly Fin... After Market Close\n",
772 "1388 Memsic, Inc. to Report Quarterly Financial Res... After Market Close\n",
773 "1389 MYR Group, Inc. to Report Quarterly Financial ... After Market Close\n",
774 "1390 Global Ship Lease to Report Quarterly Financia... Before Market Open\n",
775 "1391 Westport Innovations to Report Quarterly Finan... Before Market Open\n",
776 "1392 Dollar General to Report Quarterly Financial R... Before Market Open\n",
777 "1393 Douglas Dynamics to Report Quarterly Financial... Before Market Open\n",
778 "1394 Accretive Health to Report Quarterly Financial... Before Market Open\n",
779 "1395 Fresh Market to Report Quarterly Financial Res... Before Market Open\n",
780 "1396 RigNet to Report Quarterly Financial Results o... Before Market Open\n",
781 "1397 FairPoint Communications Inc to Report Quarter... After Market Close\n",
782 "1398 InterXion Holding to Report Quarterly Financia... Before Market Open\n",
783 "1399 Huntington Ingalls Industries to Report Quart... Before Market Open\n",
784 "1400 Tudou Holdings Limited to Report Quarterly Fi... Before Market Open\n",
785 "1401 Acadia Healthcare Company Inc. to Report Quart... After Market Close\n",
786 "1402 Guidewire Software Inc. to Report Quarterly Fi... Before Market Open\n",
787 "\n",
788 "[1403 rows x 2 columns]"
789 ]
790 },
791 "execution_count": 7,
792 "metadata": {},
793 "output_type": "execute_result"
794 }
795 ],
796 "source": [
797 "# manipulate with Blaze first:\n",
798 "feb_2012 = earnings_calendar[(earnings_calendar['asof_date'] < '2012-03-01')&('2012-02-01' <= earnings_calendar['asof_date'])]\n",
799 "# now that we've got a much smaller object, we can convert it to a pandas DataFrame\n",
800 "feb_df = odo(feb_2012, pd.DataFrame)\n",
801 "reduced = feb_df[['event_headline','calendar_time']]\n",
802 "# When printed: pandas DataFrames display the head(30) and tail(30) rows, and truncate the middle.\n",
803 "reduced"
804 ]
805 },
806 {
807 "cell_type": "markdown",
808 "metadata": {},
809 "source": [
810 "<a id='pipeline'></a>\n",
811 "\n",
812 "#Pipeline Overview\n",
813 "\n",
814 "### Accessing the data in your algorithms & research\n",
815 "The only method for accessing partner data within algorithms running on Quantopian is via the pipeline API. Different data sets work differently but in the case of this data, you can add this data to your pipeline as follows:\n",
816 "\n",
817 "Import the data set here\n",
818 "> `from quantopian.pipeline.data.eventvestor import EarningsCalendar`\n",
819 "\n",
820 "Then in intialize() you could do something simple like adding the raw value of one of the fields to your pipeline:\n",
821 "> `pipe.add(EarningsCalendar.previous_announcement.latest, 'previous_announcement')`"
822 ]
823 },
824 {
825 "cell_type": "code",
826 "execution_count": 3,
827 "metadata": {
828 "collapsed": true
829 },
830 "outputs": [],
831 "source": [
832 "# Import necessary Pipeline modules\n",
833 "from quantopian.pipeline import Pipeline\n",
834 "from quantopian.research import run_pipeline\n",
835 "from quantopian.pipeline.factors import AverageDollarVolume"
836 ]
837 },
838 {
839 "cell_type": "code",
840 "execution_count": 1,
841 "metadata": {
842 "collapsed": false
843 },
844 "outputs": [],
845 "source": [
846 "# For use in your algorithms\n",
847 "# Using the full dataset in your pipeline algo\n",
848 "from quantopian.pipeline.data.eventvestor import EarningsCalendar\n",
849 "\n",
850 "# To use built-in Pipeline factors for this dataset\n",
851 "from quantopian.pipeline.factors.eventvestor import (\n",
852 "BusinessDaysUntilNextEarnings,\n",
853 "BusinessDaysSincePreviousEarnings\n",
854 ")"
855 ]
856 },
857 {
858 "cell_type": "markdown",
859 "metadata": {},
860 "source": [
861 "Now that we've imported the data, let's take a look at which fields are available for each dataset.\n",
862 "\n",
863 "You'll find the dataset, the available fields, and the datatypes for each of those fields."
864 ]
865 },
866 {
867 "cell_type": "code",
868 "execution_count": 9,
869 "metadata": {
870 "collapsed": false
871 },
872 "outputs": [
873 {
874 "name": "stdout",
875 "output_type": "stream",
876 "text": [
877 "Here are the list of available fields per dataset:\n",
878 "---------------------------------------------------\n",
879 "\n",
880 "Dataset: EarningsCalendar\n",
881 "\n",
882 "Fields:\n",
883 "previous_announcement - datetime64[ns]\n",
884 "next_announcement - datetime64[ns]\n",
885 "\n",
886 "\n",
887 "---------------------------------------------------\n",
888 "\n"
889 ]
890 }
891 ],
892 "source": [
893 "print \"Here are the list of available fields per dataset:\"\n",
894 "print \"---------------------------------------------------\\n\"\n",
895 "\n",
896 "def _print_fields(dataset):\n",
897 " print \"Dataset: %s\\n\" % dataset.__name__\n",
898 " print \"Fields:\"\n",
899 " for field in list(dataset.columns):\n",
900 " print \"%s - %s\" % (field.name, field.dtype)\n",
901 " print \"\\n\"\n",
902 "\n",
903 "for data in (EarningsCalendar,):\n",
904 " _print_fields(data)\n",
905 "\n",
906 "\n",
907 "print \"---------------------------------------------------\\n\""
908 ]
909 },
910 {
911 "cell_type": "markdown",
912 "metadata": {},
913 "source": [
914 "Now that we know what fields we have access to, let's see what this data looks like when we run it through Pipeline.\n",
915 "\n",
916 "\n",
917 "This is constructed the same way as you would in the backtester. For more information on using Pipeline in Research view this thread:\n",
918 "https://www.quantopian.com/posts/pipeline-in-research-build-test-and-visualize-your-factors-and-filters"
919 ]
920 },
921 {
922 "cell_type": "code",
923 "execution_count": 4,
924 "metadata": {
925 "collapsed": false
926 },
927 "outputs": [],
928 "source": [
929 "# Let's see what this data looks like when we run it through Pipeline\n",
930 "# This is constructed the same way as you would in the backtester. For more information\n",
931 "# on using Pipeline in Research view this thread:\n",
932 "# https://www.quantopian.com/posts/pipeline-in-research-build-test-and-visualize-your-factors-and-filters\n",
933 "pipe = Pipeline()\n",
934 " \n",
935 "pipe.add(EarningsCalendar.previous_announcement.latest, 'previous_announcement')\n",
936 "pipe.add(EarningsCalendar.next_announcement.latest, 'next_announcement')\n",
937 "pipe.add(BusinessDaysSincePreviousEarnings(), \"business_days_since\")"
938 ]
939 },
940 {
941 "cell_type": "code",
942 "execution_count": 4,
943 "metadata": {
944 "collapsed": false
945 },
946 "outputs": [],
947 "source": [
948 "# Setting some basic liquidity strings (just for good habit)\n",
949 "dollar_volume = AverageDollarVolume(window_length=20)\n",
950 "top_1000_most_liquid = dollar_volume.rank(ascending=False) < 1000\n",
951 "\n",
952 "pipe.set_screen(top_1000_most_liquid & EarningsCalendar.previous_announcement.latest.notnull())"
953 ]
954 },
955 {
956 "cell_type": "code",
957 "execution_count": 5,
958 "metadata": {
959 "collapsed": false
960 },
961 "outputs": [
962 {
963 "data": {
964 "image/png": "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\nZKTVOo8jI0314qpQpLAm9e2l0zO+1G/fTNPbXTspo6+v9v32u0Z+O9/iPPaw9xqWkt5oF50M+mLl\nGlPZ9uMnFRkZqWeqVLI6X+yH7lvfL9Sq997WUyWKW61v77XCnnPVFkbca1hjz/UmpfpHa5zRX7kj\n+piko4/5j6P2kyNit6fvsfUe1Zl9wp279zVn0QHNWrDPrv8uXknZeyWey3kuj80Vnsttid/etvls\nQD/VL19Of9++o2qDh+iF+nXV65nGdsdmD557ee51d249ZrSlG4/A0FB98sNKrdy7T38H3FbIw4em\nabeDg60uK33atImuL1O6dKa/fbyimy6xrxsmdTkB96LfGsnh52dWHnfMmRjfvPGqnqtZXUt37NL2\n4yc1d9MWzd20RYVy5tCKMaNMY1E1KF9Of12/odOXLts0LmNsSW3b2G4GBUmSCvWyPF7UhWvXLZYn\np83ifo5h5LESV9z9luPfr2NZezvI2jrsbb9hL7TX9uMnNXXVGg1u21peadLo059WacHQ/9kUd0x8\n8ds0k1k8SWHrMWurpO5Pe89rW+ob2W72xhJzocod62JpjSPOz9iJCUvlceMzsk94kmVKn05BofcV\nFHpf2TJltFjnbkiI/NKnT3RZxfPm1dge3VSnbBm1fu9DbTx81K5YLF2L7b2GpaSujRronfmLdPzC\nX9p+/KQaV66oL1ev1eC2rR26HnuvFfacq7Yw4l4jIbZeb1Kqf7TGGf2VO6KPSTr6mP84aj85InZ7\n+h5b71Gd2Sd8/e0ejZm4MfGKcfh4p1HhWom/kGIvnsv/w3O5az+X2xK/vW3j7ZVGS0cNVckXX9aj\n8HD1aNLI7rjswXMvz71PwnOvWyejLek26RNtOXpcY/y76LU2z5luoN3tF35z+PnpRmCgAu7dU75s\n2UzlMR17XB4eHmpft7ba162tyKgo7TlzVhO//0GbjhxTv8+/0qGpUyRJA55toQVbt2vV3gNqUtny\n2xkHz/2hukNGqE7ZMto5eYKp3BFtmztLZv19+45uLl2grBktP9wklbU2szZeW0oeK7eDg80GmA+4\nF32RyJnZ8gXZGnvbr1nVKqpSvKiO/fmXFm7drkzp0yt/9uyqXca2N1JyZc6sf+7csXAcBpumx+bh\n4aGoqCiFRzyWt1caSdE/4mGJrcesrVzp3Dey3eyVO0sWXQ24rRt375r967nlusadn660zidBqfz5\n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\nyS+LqtRqoLenzFav10Zo88qlmjZ+pLNDS7Jmz3eWJG37+UdFRj62WOfhg/vas229mrR+ISVDcwmH\nd2/XV+NG6NXRk1T76Ram8uETv1aVWg2UIWMmZciYSbWebq7B736i8LAwzfnsQ7Nl3Am4qRmT3lGZ\nStXUf+j78suSTX5Zsqn/0PdVqkJVTZ/4tgLvBJjq12ncUi+PHK9p40fq8G6+vQAAAPAkIBkNAABS\nnRMHdyuTX1a99NZ7kqRfN63Vwwf3nRyV++rU9zVVqFZbW9cu16nD+5wdTpKUrVxD+QoV1Z1bN3R0\n3y6LdXZv/VnlqtRUthy5Ujg654oID9dX40eqTKXqatC8jal8zeErKly8dLz65SpXlyT9femCWfnm\nlUv18MF9NWvbRR4eHqZyDw8PNWvbRQ/uh2jzqqVm8zz9bHuVqlBV0yaMUkREhCM3CwAAAE5AMhoA\nAKQ6m1d9r6bPd1b+wsVUtnINPbgfot1bfnZ2WG7t2Y49JUUP5eCunmnTSZK0dc0yi9O3/HvcpDZ7\ntq5TwI1/9PSz7WyqH3T3jiSpaKlyZuXHDkQn+UtZGF88Zszxo3t3xpvWqGU73br+t/ZsXWdX3AAA\nAHA9/IAhAABIVUJDgnVo9zYNHBE9hECztl109vhBbV611JSMlOL/qF3Ljj306uiJkqSAG9fUt1VN\n07SYMYGD7gRo8cxPdWDnZgXdCZBf1uyqUf8ZdX9lqLJmz2lx2bNW/aq5n4/TiUN7FBp8z2x5x/bv\n0pqlc3X66H6FPXqogkVLqWPvV9SwxfPxtuvyn+f07RfjdPrIfnl4eKpMpafU/62xGtSpSbw47YnV\nVmUqPSVJ8cbfvnv7lpbMmKKDv25V0J0AZc6WQzUaNFX3l99Slmw57F5PbLa2j63t3eS5F7Ro+ifa\n/8smhQbfU4ZMfqb5rl29pCsX/1TNhs0ctm32/mhj7PL5Gw5p5sdjdGTfTnl7eatGw6YaMOwDhd4L\n0szJ7+rkob1K6+uranUbq//QsWbbItm3//fv3CRJKlGuUqLbJEnb1/0oSeo24E2z8it/nZck5cyd\nL948OfPklyRdvXg+3rRS//6A4f6dmywe+wAAAHAfvBkNAABSlZ0bVqpqrYbK5JdFktSgWWv5pkuv\n00cP6NqVi6Z6aw5fUd1nWkmSXujzqikRLUk5cudVj1eG6ZnWnUzJwsA7ARrSq432bluvN96bou+2\nn9LwiV/r6L6dGta3rSnxGbPsGF9PGKX2PQdqwcbDGjt1gVmsYwb5y9PTU7NW7tLMn3bKL0tWTR79\nqo7s3WFW79rVSxrer73+OndGYz77Vgs2HlK3Af/Tl+NGWFynPbHaKmv26KEr7gTcNJXdvX1LQ3q2\n1oFdWzTkg8+1ZPtJvfn+Z9r/y0a91auN2fjASWFr+9ja3jly51WVmvUVFvZIOzauMpu2dc0yPd2y\nnby8vBy2bfb+aGPs8nlTJ6jHoOGat/6gGrZsq21rf9CUt1/X7E/fV5/BozV3/QHVbfKstq5drrlf\njDdbjr37/8/fTkuScuUtkOg2Xfj9tJbPnabOL76uanWfNpsWGhwkSfJNnz7efDFlIf/WiS3nv+u9\n8G8cAAAAcF8kowEAQKqyebX5UAu+6TOoXtPnJElbVpsPz/BC70GSpPU/LND90BBTedijh1r7/Vx1\n7P2KqWzxjCm6ee2qer02UlVrN5Rv+gwqX7WmXnrrPd34+4pWLJhhMZ7O/V5X2crV5ZPWV9XqNY6X\niOz/1lj5ZcmmnHnya+DwDyRJy+ZMNavz3cxPFRp8T30Gj1alGvXkmz6DylauoS79Xre4zqTGmpCo\nqEhJMhsLePH0TxRw4x9TXOnSZ1TlmvXVe/Ao3bx2VYtnTLF7PXHZ0j6xJdbeTZ/vIknaGutYiIqM\n1NY1P6hp2y4pum0Jad6umwoWLaEMGTOp84vR+/ngr1v1fLd+pvJO/5Yf2r3NbF579//tW9clSRky\nmr9dHddf587o3dd66LlOvdTz1eGO2lRl9MscHcfN6w5bJgAAAJyDZDQAAEg1Lv95TrdvXlfVOg3N\nypu17SpJ2vbzD4qKjDSVlyxfWZVq1FNoSLDWLf/vLdotq5epdMWqKlispKnswM7NkqRq9RqbLbvC\nU7XMpsdVqnwVq/GuOXxFufL99zZqvkJFo7fjwh9m9Y7uix5nt3KNemblZSpVs7jcpMaakLsBtyTJ\n7Mf9Du7aYjGuKjUbmE1PKlvbJ7aE2luSajduoQyZ/HTu9DHTsBLHDvyqLNmyq0iJMqZ6Rm9bYoqX\nrWD6O/awGrHLs+fMLUm6c+uG2bz27v9HDx9Ikry8va3Gc+XCHxo9sLNad+mjF98cY7FOhkzRSeWH\n9+P/WGhMWcZ/68Tm7eVtFgcAAADcF2NGAwCAVGPTqqW6c+uG2tYoYnF6wI1rOrJ3h1mS7oU+g3Ti\n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\n",
965 "text/plain": [
966 "<IPython.core.display.Image object>"
967 ]
968 },
969 "execution_count": 5,
970 "metadata": {},
971 "output_type": "execute_result"
972 }
973 ],
974 "source": [
975 "# The show_graph() method of pipeline objects produces a graph to show how it is being calculated.\n",
976 "pipe.show_graph(format='png')"
977 ]
978 },
979 {
980 "cell_type": "code",
981 "execution_count": 6,
982 "metadata": {
983 "collapsed": false,
984 "scrolled": true
985 },
986 "outputs": [
987 {
988 "data": {
989 "text/html": [
990 "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
991 "<table border=\"1\" class=\"dataframe\">\n",
992 " <thead>\n",
993 " <tr style=\"text-align: right;\">\n",
994 " <th></th>\n",
995 " <th></th>\n",
996 " <th>next_announcement</th>\n",
997 " <th>previous_announcement</th>\n",
998 " </tr>\n",
999 " </thead>\n",
1000 " <tbody>\n",
1001 " <tr>\n",
1002 " <th rowspan=\"30\" valign=\"top\">2013-11-01 00:00:00+00:00</th>\n",
1003 " <th>Equity(2 [AA])</th>\n",
1004 " <td>NaT</td>\n",
1005 " <td>2013-10-08</td>\n",
1006 " </tr>\n",
1007 " <tr>\n",
1008 " <th>Equity(24 [AAPL])</th>\n",
1009 " <td>NaT</td>\n",
1010 " <td>2013-10-28</td>\n",
1011 " </tr>\n",
1012 " <tr>\n",
1013 " <th>Equity(62 [ABT])</th>\n",
1014 " <td>NaT</td>\n",
1015 " <td>2013-10-16</td>\n",
1016 " </tr>\n",
1017 " <tr>\n",
1018 " <th>Equity(64 [ABX])</th>\n",
1019 " <td>NaT</td>\n",
1020 " <td>2013-10-31</td>\n",
1021 " </tr>\n",
1022 " <tr>\n",
1023 " <th>Equity(67 [ADSK])</th>\n",
1024 " <td>NaT</td>\n",
1025 " <td>2013-08-22</td>\n",
1026 " </tr>\n",
1027 " <tr>\n",
1028 " <th>Equity(76 [TAP])</th>\n",
1029 " <td>2013-11-06</td>\n",
1030 " <td>2013-08-06</td>\n",
1031 " </tr>\n",
1032 " <tr>\n",
1033 " <th>Equity(88 [ACI])</th>\n",
1034 " <td>NaT</td>\n",
1035 " <td>2013-10-29</td>\n",
1036 " </tr>\n",
1037 " <tr>\n",
1038 " <th>Equity(114 [ADBE])</th>\n",
1039 " <td>NaT</td>\n",
1040 " <td>2013-09-17</td>\n",
1041 " </tr>\n",
1042 " <tr>\n",
1043 " <th>Equity(122 [ADI])</th>\n",
1044 " <td>2013-11-26</td>\n",
1045 " <td>2013-08-20</td>\n",
1046 " </tr>\n",
1047 " <tr>\n",
1048 " <th>Equity(128 [ADM])</th>\n",
1049 " <td>NaT</td>\n",
1050 " <td>2013-10-29</td>\n",
1051 " </tr>\n",
1052 " <tr>\n",
1053 " <th>Equity(154 [AEM])</th>\n",
1054 " <td>NaT</td>\n",
1055 " <td>2012-10-24</td>\n",
1056 " </tr>\n",
1057 " <tr>\n",
1058 " <th>Equity(161 [AEP])</th>\n",
1059 " <td>NaT</td>\n",
1060 " <td>2013-10-23</td>\n",
1061 " </tr>\n",
1062 " <tr>\n",
1063 " <th>Equity(166 [AES])</th>\n",
1064 " <td>2013-11-07</td>\n",
1065 " <td>2013-08-08</td>\n",
1066 " </tr>\n",
1067 " <tr>\n",
1068 " <th>Equity(168 [AET])</th>\n",
1069 " <td>NaT</td>\n",
1070 " <td>2013-10-29</td>\n",
1071 " </tr>\n",
1072 " <tr>\n",
1073 " <th>Equity(185 [AFL])</th>\n",
1074 " <td>NaT</td>\n",
1075 " <td>2013-10-29</td>\n",
1076 " </tr>\n",
1077 " <tr>\n",
1078 " <th>Equity(197 [AGCO])</th>\n",
1079 " <td>NaT</td>\n",
1080 " <td>2013-10-29</td>\n",
1081 " </tr>\n",
1082 " <tr>\n",
1083 " <th>Equity(216 [HES])</th>\n",
1084 " <td>NaT</td>\n",
1085 " <td>2013-10-30</td>\n",
1086 " </tr>\n",
1087 " <tr>\n",
1088 " <th>Equity(239 [AIG])</th>\n",
1089 " <td>NaT</td>\n",
1090 " <td>2013-10-31</td>\n",
1091 " </tr>\n",
1092 " <tr>\n",
1093 " <th>Equity(273 [ALU])</th>\n",
1094 " <td>NaT</td>\n",
1095 " <td>2013-10-31</td>\n",
1096 " </tr>\n",
1097 " <tr>\n",
1098 " <th>Equity(300 [ALK])</th>\n",
1099 " <td>NaT</td>\n",
1100 " <td>2013-10-24</td>\n",
1101 " </tr>\n",
1102 " <tr>\n",
1103 " <th>Equity(328 [ALTR])</th>\n",
1104 " <td>NaT</td>\n",
1105 " <td>2013-10-22</td>\n",
1106 " </tr>\n",
1107 " <tr>\n",
1108 " <th>Equity(337 [AMAT])</th>\n",
1109 " <td>NaT</td>\n",
1110 " <td>2013-08-15</td>\n",
1111 " </tr>\n",
1112 " <tr>\n",
1113 " <th>Equity(338 [BEAM])</th>\n",
1114 " <td>NaT</td>\n",
1115 " <td>2013-10-31</td>\n",
1116 " </tr>\n",
1117 " <tr>\n",
1118 " <th>Equity(351 [AMD])</th>\n",
1119 " <td>NaT</td>\n",
1120 " <td>2013-10-17</td>\n",
1121 " </tr>\n",
1122 " <tr>\n",
1123 " <th>Equity(353 [AME])</th>\n",
1124 " <td>NaT</td>\n",
1125 " <td>2013-10-29</td>\n",
1126 " </tr>\n",
1127 " <tr>\n",
1128 " <th>Equity(357 [TWX])</th>\n",
1129 " <td>2013-11-06</td>\n",
1130 " <td>2013-08-07</td>\n",
1131 " </tr>\n",
1132 " <tr>\n",
1133 " <th>Equity(368 [AMGN])</th>\n",
1134 " <td>NaT</td>\n",
1135 " <td>2013-10-22</td>\n",
1136 " </tr>\n",
1137 " <tr>\n",
1138 " <th>Equity(410 [AN])</th>\n",
1139 " <td>NaT</td>\n",
1140 " <td>2013-10-24</td>\n",
1141 " </tr>\n",
1142 " <tr>\n",
1143 " <th>Equity(438 [AON])</th>\n",
1144 " <td>NaT</td>\n",
1145 " <td>2013-10-25</td>\n",
1146 " </tr>\n",
1147 " <tr>\n",
1148 " <th>Equity(448 [APA])</th>\n",
1149 " <td>2013-11-07</td>\n",
1150 " <td>2013-08-01</td>\n",
1151 " </tr>\n",
1152 " <tr>\n",
1153 " <th>...</th>\n",
1154 " <th>...</th>\n",
1155 " <td>...</td>\n",
1156 " <td>...</td>\n",
1157 " </tr>\n",
1158 " <tr>\n",
1159 " <th rowspan=\"30\" valign=\"top\">2013-11-25 00:00:00+00:00</th>\n",
1160 " <th>Equity(42027 [UBNT])</th>\n",
1161 " <td>NaT</td>\n",
1162 " <td>2013-11-07</td>\n",
1163 " </tr>\n",
1164 " <tr>\n",
1165 " <th>Equity(42118 [GRPN])</th>\n",
1166 " <td>NaT</td>\n",
1167 " <td>2013-11-07</td>\n",
1168 " </tr>\n",
1169 " <tr>\n",
1170 " <th>Equity(42165 [INVN])</th>\n",
1171 " <td>NaT</td>\n",
1172 " <td>2013-10-29</td>\n",
1173 " </tr>\n",
1174 " <tr>\n",
1175 " <th>Equity(42173 [DLPH])</th>\n",
1176 " <td>NaT</td>\n",
1177 " <td>2013-11-05</td>\n",
1178 " </tr>\n",
1179 " <tr>\n",
1180 " <th>Equity(42230 [TRIP])</th>\n",
1181 " <td>NaT</td>\n",
1182 " <td>2013-10-23</td>\n",
1183 " </tr>\n",
1184 " <tr>\n",
1185 " <th>Equity(42251 [WPX])</th>\n",
1186 " <td>NaT</td>\n",
1187 " <td>2013-11-07</td>\n",
1188 " </tr>\n",
1189 " <tr>\n",
1190 " <th>Equity(42263 [LPI])</th>\n",
1191 " <td>NaT</td>\n",
1192 " <td>2013-11-07</td>\n",
1193 " </tr>\n",
1194 " <tr>\n",
1195 " <th>Equity(42270 [KORS])</th>\n",
1196 " <td>NaT</td>\n",
1197 " <td>2013-11-05</td>\n",
1198 " </tr>\n",
1199 " <tr>\n",
1200 " <th>Equity(42277 [ZNGA])</th>\n",
1201 " <td>NaT</td>\n",
1202 " <td>2013-10-24</td>\n",
1203 " </tr>\n",
1204 " <tr>\n",
1205 " <th>Equity(42436 [SLCA])</th>\n",
1206 " <td>NaT</td>\n",
1207 " <td>2013-11-06</td>\n",
1208 " </tr>\n",
1209 " <tr>\n",
1210 " <th>Equity(42546 [PRLB])</th>\n",
1211 " <td>NaT</td>\n",
1212 " <td>2013-10-31</td>\n",
1213 " </tr>\n",
1214 " <tr>\n",
1215 " <th>Equity(42596 [YELP])</th>\n",
1216 " <td>NaT</td>\n",
1217 " <td>2013-10-29</td>\n",
1218 " </tr>\n",
1219 " <tr>\n",
1220 " <th>Equity(42611 [NSM])</th>\n",
1221 " <td>NaT</td>\n",
1222 " <td>2013-11-07</td>\n",
1223 " </tr>\n",
1224 " <tr>\n",
1225 " <th>Equity(42699 [VNTV])</th>\n",
1226 " <td>NaT</td>\n",
1227 " <td>2013-11-24</td>\n",
1228 " </tr>\n",
1229 " <tr>\n",
1230 " <th>Equity(42707 [VIPS])</th>\n",
1231 " <td>NaT</td>\n",
1232 " <td>2013-11-11</td>\n",
1233 " </tr>\n",
1234 " <tr>\n",
1235 " <th>Equity(42786 [MRC])</th>\n",
1236 " <td>NaT</td>\n",
1237 " <td>2013-10-31</td>\n",
1238 " </tr>\n",
1239 " <tr>\n",
1240 " <th>Equity(42788 [PSX])</th>\n",
1241 " <td>NaT</td>\n",
1242 " <td>2013-10-30</td>\n",
1243 " </tr>\n",
1244 " <tr>\n",
1245 " <th>Equity(42815 [SPLK])</th>\n",
1246 " <td>NaT</td>\n",
1247 " <td>2013-11-21</td>\n",
1248 " </tr>\n",
1249 " <tr>\n",
1250 " <th>Equity(42950 [FB])</th>\n",
1251 " <td>NaT</td>\n",
1252 " <td>2013-10-30</td>\n",
1253 " </tr>\n",
1254 " <tr>\n",
1255 " <th>Equity(43127 [NOW])</th>\n",
1256 " <td>NaT</td>\n",
1257 " <td>2013-10-23</td>\n",
1258 " </tr>\n",
1259 " <tr>\n",
1260 " <th>Equity(43399 [ADT])</th>\n",
1261 " <td>NaT</td>\n",
1262 " <td>2013-11-20</td>\n",
1263 " </tr>\n",
1264 " <tr>\n",
1265 " <th>Equity(43405 [KRFT])</th>\n",
1266 " <td>NaT</td>\n",
1267 " <td>2013-10-30</td>\n",
1268 " </tr>\n",
1269 " <tr>\n",
1270 " <th>Equity(43413 [TRLA])</th>\n",
1271 " <td>NaT</td>\n",
1272 " <td>2013-10-29</td>\n",
1273 " </tr>\n",
1274 " <tr>\n",
1275 " <th>Equity(43512 [FANG])</th>\n",
1276 " <td>NaT</td>\n",
1277 " <td>2013-05-09</td>\n",
1278 " </tr>\n",
1279 " <tr>\n",
1280 " <th>Equity(43694 [ABBV])</th>\n",
1281 " <td>NaT</td>\n",
1282 " <td>2013-10-25</td>\n",
1283 " </tr>\n",
1284 " <tr>\n",
1285 " <th>Equity(43919 [LMCA])</th>\n",
1286 " <td>NaT</td>\n",
1287 " <td>2013-11-05</td>\n",
1288 " </tr>\n",
1289 " <tr>\n",
1290 " <th>Equity(44060 [ZTS])</th>\n",
1291 " <td>NaT</td>\n",
1292 " <td>2013-11-05</td>\n",
1293 " </tr>\n",
1294 " <tr>\n",
1295 " <th>Equity(44645 [VOYA])</th>\n",
1296 " <td>NaT</td>\n",
1297 " <td>2013-11-08</td>\n",
1298 " </tr>\n",
1299 " <tr>\n",
1300 " <th>Equity(44747 [DATA])</th>\n",
1301 " <td>NaT</td>\n",
1302 " <td>2013-10-28</td>\n",
1303 " </tr>\n",
1304 " <tr>\n",
1305 " <th>Equity(44931 [NWSA])</th>\n",
1306 " <td>NaT</td>\n",
1307 " <td>2013-11-11</td>\n",
1308 " </tr>\n",
1309 " </tbody>\n",
1310 "</table>\n",
1311 "<p>13823 rows × 2 columns</p>\n",
1312 "</div>"
1313 ],
1314 "text/plain": [
1315 " next_announcement \\\n",
1316 "2013-11-01 00:00:00+00:00 Equity(2 [AA]) NaT \n",
1317 " Equity(24 [AAPL]) NaT \n",
1318 " Equity(62 [ABT]) NaT \n",
1319 " Equity(64 [ABX]) NaT \n",
1320 " Equity(67 [ADSK]) NaT \n",
1321 " Equity(76 [TAP]) 2013-11-06 \n",
1322 " Equity(88 [ACI]) NaT \n",
1323 " Equity(114 [ADBE]) NaT \n",
1324 " Equity(122 [ADI]) 2013-11-26 \n",
1325 " Equity(128 [ADM]) NaT \n",
1326 " Equity(154 [AEM]) NaT \n",
1327 " Equity(161 [AEP]) NaT \n",
1328 " Equity(166 [AES]) 2013-11-07 \n",
1329 " Equity(168 [AET]) NaT \n",
1330 " Equity(185 [AFL]) NaT \n",
1331 " Equity(197 [AGCO]) NaT \n",
1332 " Equity(216 [HES]) NaT \n",
1333 " Equity(239 [AIG]) NaT \n",
1334 " Equity(273 [ALU]) NaT \n",
1335 " Equity(300 [ALK]) NaT \n",
1336 " Equity(328 [ALTR]) NaT \n",
1337 " Equity(337 [AMAT]) NaT \n",
1338 " Equity(338 [BEAM]) NaT \n",
1339 " Equity(351 [AMD]) NaT \n",
1340 " Equity(353 [AME]) NaT \n",
1341 " Equity(357 [TWX]) 2013-11-06 \n",
1342 " Equity(368 [AMGN]) NaT \n",
1343 " Equity(410 [AN]) NaT \n",
1344 " Equity(438 [AON]) NaT \n",
1345 " Equity(448 [APA]) 2013-11-07 \n",
1346 "... ... \n",
1347 "2013-11-25 00:00:00+00:00 Equity(42027 [UBNT]) NaT \n",
1348 " Equity(42118 [GRPN]) NaT \n",
1349 " Equity(42165 [INVN]) NaT \n",
1350 " Equity(42173 [DLPH]) NaT \n",
1351 " Equity(42230 [TRIP]) NaT \n",
1352 " Equity(42251 [WPX]) NaT \n",
1353 " Equity(42263 [LPI]) NaT \n",
1354 " Equity(42270 [KORS]) NaT \n",
1355 " Equity(42277 [ZNGA]) NaT \n",
1356 " Equity(42436 [SLCA]) NaT \n",
1357 " Equity(42546 [PRLB]) NaT \n",
1358 " Equity(42596 [YELP]) NaT \n",
1359 " Equity(42611 [NSM]) NaT \n",
1360 " Equity(42699 [VNTV]) NaT \n",
1361 " Equity(42707 [VIPS]) NaT \n",
1362 " Equity(42786 [MRC]) NaT \n",
1363 " Equity(42788 [PSX]) NaT \n",
1364 " Equity(42815 [SPLK]) NaT \n",
1365 " Equity(42950 [FB]) NaT \n",
1366 " Equity(43127 [NOW]) NaT \n",
1367 " Equity(43399 [ADT]) NaT \n",
1368 " Equity(43405 [KRFT]) NaT \n",
1369 " Equity(43413 [TRLA]) NaT \n",
1370 " Equity(43512 [FANG]) NaT \n",
1371 " Equity(43694 [ABBV]) NaT \n",
1372 " Equity(43919 [LMCA]) NaT \n",
1373 " Equity(44060 [ZTS]) NaT \n",
1374 " Equity(44645 [VOYA]) NaT \n",
1375 " Equity(44747 [DATA]) NaT \n",
1376 " Equity(44931 [NWSA]) NaT \n",
1377 "\n",
1378 " previous_announcement \n",
1379 "2013-11-01 00:00:00+00:00 Equity(2 [AA]) 2013-10-08 \n",
1380 " Equity(24 [AAPL]) 2013-10-28 \n",
1381 " Equity(62 [ABT]) 2013-10-16 \n",
1382 " Equity(64 [ABX]) 2013-10-31 \n",
1383 " Equity(67 [ADSK]) 2013-08-22 \n",
1384 " Equity(76 [TAP]) 2013-08-06 \n",
1385 " Equity(88 [ACI]) 2013-10-29 \n",
1386 " Equity(114 [ADBE]) 2013-09-17 \n",
1387 " Equity(122 [ADI]) 2013-08-20 \n",
1388 " Equity(128 [ADM]) 2013-10-29 \n",
1389 " Equity(154 [AEM]) 2012-10-24 \n",
1390 " Equity(161 [AEP]) 2013-10-23 \n",
1391 " Equity(166 [AES]) 2013-08-08 \n",
1392 " Equity(168 [AET]) 2013-10-29 \n",
1393 " Equity(185 [AFL]) 2013-10-29 \n",
1394 " Equity(197 [AGCO]) 2013-10-29 \n",
1395 " Equity(216 [HES]) 2013-10-30 \n",
1396 " Equity(239 [AIG]) 2013-10-31 \n",
1397 " Equity(273 [ALU]) 2013-10-31 \n",
1398 " Equity(300 [ALK]) 2013-10-24 \n",
1399 " Equity(328 [ALTR]) 2013-10-22 \n",
1400 " Equity(337 [AMAT]) 2013-08-15 \n",
1401 " Equity(338 [BEAM]) 2013-10-31 \n",
1402 " Equity(351 [AMD]) 2013-10-17 \n",
1403 " Equity(353 [AME]) 2013-10-29 \n",
1404 " Equity(357 [TWX]) 2013-08-07 \n",
1405 " Equity(368 [AMGN]) 2013-10-22 \n",
1406 " Equity(410 [AN]) 2013-10-24 \n",
1407 " Equity(438 [AON]) 2013-10-25 \n",
1408 " Equity(448 [APA]) 2013-08-01 \n",
1409 "... ... \n",
1410 "2013-11-25 00:00:00+00:00 Equity(42027 [UBNT]) 2013-11-07 \n",
1411 " Equity(42118 [GRPN]) 2013-11-07 \n",
1412 " Equity(42165 [INVN]) 2013-10-29 \n",
1413 " Equity(42173 [DLPH]) 2013-11-05 \n",
1414 " Equity(42230 [TRIP]) 2013-10-23 \n",
1415 " Equity(42251 [WPX]) 2013-11-07 \n",
1416 " Equity(42263 [LPI]) 2013-11-07 \n",
1417 " Equity(42270 [KORS]) 2013-11-05 \n",
1418 " Equity(42277 [ZNGA]) 2013-10-24 \n",
1419 " Equity(42436 [SLCA]) 2013-11-06 \n",
1420 " Equity(42546 [PRLB]) 2013-10-31 \n",
1421 " Equity(42596 [YELP]) 2013-10-29 \n",
1422 " Equity(42611 [NSM]) 2013-11-07 \n",
1423 " Equity(42699 [VNTV]) 2013-11-24 \n",
1424 " Equity(42707 [VIPS]) 2013-11-11 \n",
1425 " Equity(42786 [MRC]) 2013-10-31 \n",
1426 " Equity(42788 [PSX]) 2013-10-30 \n",
1427 " Equity(42815 [SPLK]) 2013-11-21 \n",
1428 " Equity(42950 [FB]) 2013-10-30 \n",
1429 " Equity(43127 [NOW]) 2013-10-23 \n",
1430 " Equity(43399 [ADT]) 2013-11-20 \n",
1431 " Equity(43405 [KRFT]) 2013-10-30 \n",
1432 " Equity(43413 [TRLA]) 2013-10-29 \n",
1433 " Equity(43512 [FANG]) 2013-05-09 \n",
1434 " Equity(43694 [ABBV]) 2013-10-25 \n",
1435 " Equity(43919 [LMCA]) 2013-11-05 \n",
1436 " Equity(44060 [ZTS]) 2013-11-05 \n",
1437 " Equity(44645 [VOYA]) 2013-11-08 \n",
1438 " Equity(44747 [DATA]) 2013-10-28 \n",
1439 " Equity(44931 [NWSA]) 2013-11-11 \n",
1440 "\n",
1441 "[13823 rows x 2 columns]"
1442 ]
1443 },
1444 "execution_count": 6,
1445 "metadata": {},
1446 "output_type": "execute_result"
1447 }
1448 ],
1449 "source": [
1450 "# run_pipeline will show the output of your pipeline\n",
1451 "pipe_output = run_pipeline(pipe, start_date='2013-11-01', end_date='2013-11-25')\n",
1452 "pipe_output"
1453 ]
1454 },
1455 {
1456 "cell_type": "markdown",
1457 "metadata": {},
1458 "source": [
1459 "Taking what we've seen from above, let's see how we'd move that into the backtester."
1460 ]
1461 },
1462 {
1463 "cell_type": "code",
1464 "execution_count": 11,
1465 "metadata": {
1466 "collapsed": false
1467 },
1468 "outputs": [],
1469 "source": [
1470 "# This section is only importable in the backtester\n",
1471 "from quantopian.algorithm import attach_pipeline, pipeline_output\n",
1472 "\n",
1473 "# General pipeline imports\n",
1474 "from quantopian.pipeline import Pipeline\n",
1475 "from quantopian.pipeline.factors import AverageDollarVolume\n",
1476 "\n",
1477 "# Import the datasets available\n",
1478 "# For use in your algorithms\n",
1479 "# Using the full dataset in your pipeline algo\n",
1480 "from quantopian.pipeline.data.eventvestor import EarningsCalendar\n",
1481 "\n",
1482 "# To use built-in Pipeline factors for this dataset\n",
1483 "from quantopian.pipeline.factors.eventvestor import (\n",
1484 "BusinessDaysUntilNextEarnings,\n",
1485 "BusinessDaysSincePreviousEarnings\n",
1486 ")\n",
1487 "\n",
1488 "def make_pipeline():\n",
1489 " # Create our pipeline\n",
1490 " pipe = Pipeline()\n",
1491 " \n",
1492 " # Screen out penny stocks and low liquidity securities.\n",
1493 " dollar_volume = AverageDollarVolume(window_length=20)\n",
1494 " is_liquid = dollar_volume.rank(ascending=False) < 1000\n",
1495 " \n",
1496 " # Create the mask that we will use for our percentile methods.\n",
1497 " base_universe = (is_liquid)\n",
1498 "\n",
1499 " # Add pipeline factors\n",
1500 " pipe.add(EarningsCalendar.previous_announcement.latest, 'previous_announcement')\n",
1501 " pipe.add(EarningsCalendar.next_announcement.latest, 'next_announcement')\n",
1502 " pipe.add(BusinessDaysSincePreviousEarnings(), \"business_days_since\")\n",
1503 "\n",
1504 " # Set our pipeline screens\n",
1505 " pipe.set_screen(is_liquid)\n",
1506 " return pipe\n",
1507 "\n",
1508 "def initialize(context):\n",
1509 " attach_pipeline(make_pipeline(), \"pipeline\")\n",
1510 " \n",
1511 "def before_trading_start(context, data):\n",
1512 " results = pipeline_output('pipeline')"
1513 ]
1514 },
1515 {
1516 "cell_type": "markdown",
1517 "metadata": {},
1518 "source": [
1519 "Now you can take that and begin to use it as a building block for your algorithms, for more examples on how to do that you can visit our <a href='https://www.quantopian.com/posts/pipeline-factor-library-for-data'>data pipeline factor library</a>"
1520 ]
1521 }
1522 ],
1523 "metadata": {
1524 "kernelspec": {
1525 "display_name": "Python 2",
1526 "language": "python",
1527 "name": "python2"
1528 },
1529 "language_info": {
1530 "codemirror_mode": {
1531 "name": "ipython",
1532 "version": 2
1533 },
1534 "file_extension": ".py",
1535 "mimetype": "text/x-python",
1536 "name": "python",
1537 "nbconvert_exporter": "python",
1538 "pygments_lexer": "ipython2",
1539 "version": "2.7.11"
1540 }
1541 },
1542 "nbformat": 4,
1543 "nbformat_minor": 0
1544 }