{ "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# EventVestor: Buyback Authorizations\n", "\n", "In this notebook, we'll take a look at EventVestor's *Buyback Authorizations* dataset, available on the [Quantopian Store](https://www.quantopian.com/store). This dataset spans January 01, 2007 through the current day.\n", "\n", "## Notebook Contents\n", "\n", "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", "\n", "- Interactive overview: This is only available on Research and uses blaze to give you access to large amounts of data. Recommended for exploration and plotting.\n", "- Pipeline overview: 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", "\n", "### Free samples and limits\n", "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", "\n", "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", "\n", "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", "\n", "With preamble in place, let's get started:\n", "\n", "\n", "#Interactive Overview\n", "### Accessing the data with Blaze and Interactive on Research\n", "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", "\n", "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", "\n", "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", "\n", "Helpful links:\n", "* [Query building for Blaze](http://blaze.readthedocs.io/en/latest/queries.html)\n", "* [Pandas-to-Blaze dictionary](http://blaze.readthedocs.io/en/latest/rosetta-pandas.html)\n", "* [SQL-to-Blaze dictionary](http://blaze.readthedocs.io/en/latest/rosetta-sql.html).\n", "\n", "Once you've limited the size of your Blaze object, you can convert it to a Pandas DataFrames using:\n", "> `from odo import odo` \n", "> `odo(expr, pandas.DataFrame)`\n", "\n", "\n", "###To see how this data can be used in your algorithm, search for the `Pipeline Overview` section of this notebook or head straight to Pipeline Overview" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# import the dataset\n", "from quantopian.interactive.data.eventvestor import buyback_auth as dataset\n", "\n", "# or if you want to import the free dataset, use:\n", "#from quantopian.data.eventvestor import buyback_auth_free\n", "\n", "# import data operations\n", "from odo import odo\n", "# import other libraries we will use\n", "import pandas as pd\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "dshape(\"\"\"var * {\n", " event_id: float64,\n", " trade_date: ?datetime,\n", " symbol: string,\n", " event_type: ?string,\n", " event_headline: ?string,\n", " buyback_type: ?string,\n", " buyback_purpose: ?string,\n", " offer_type: ?string,\n", " buyback_amount: float64,\n", " buyback_units: ?string,\n", " event_rating: float64,\n", " sid: int64,\n", " asof_date: datetime,\n", " timestamp: datetime\n", " }\"\"\")" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Let's use blaze to understand the data a bit using Blaze dshape()\n", "dataset.dshape" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "8894" ], "text/plain": [ "8894" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# And how many rows are there?\n", "# N.B. we're using a Blaze function to do this, not len()\n", "dataset.count()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
event_idtrade_datesymbolevent_typeevent_headlinebuyback_typebuyback_purposeoffer_typebuyback_amountbuyback_unitsevent_ratingsidasof_datetimestamp
01992822007-01-05IIINBuybackInsteel Industries Announces $25M Share BuybackNewGeneral CorporateOpen Market25.0$M138492007-01-052007-01-06
11311322007-01-12COPBuybackConocoPhillips Announces $1B Share Repurchase ...NewGeneral CorporateOpen Market1000.0$M1239982007-01-122007-01-13
21505792007-01-17VLYBuybackValley National Bancorp Announces 3.5M Share R...NewGeneral CorporateOpen Market3.5Mshares180112007-01-172007-01-18
" ], "text/plain": [ " event_id trade_date symbol event_type \\\n", "0 199282 2007-01-05 IIIN Buyback \n", "1 131132 2007-01-12 COP Buyback \n", "2 150579 2007-01-17 VLY Buyback \n", "\n", " event_headline buyback_type \\\n", "0 Insteel Industries Announces $25M Share Buyback New \n", "1 ConocoPhillips Announces $1B Share Repurchase ... New \n", "2 Valley National Bancorp Announces 3.5M Share R... New \n", "\n", " buyback_purpose offer_type buyback_amount buyback_units event_rating \\\n", "0 General Corporate Open Market 25.0 $M 1 \n", "1 General Corporate Open Market 1000.0 $M 1 \n", "2 General Corporate Open Market 3.5 Mshares 1 \n", "\n", " sid asof_date timestamp \n", "0 3849 2007-01-05 2007-01-06 \n", "1 23998 2007-01-12 2007-01-13 \n", "2 8011 2007-01-17 2007-01-18 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Let's see what the data looks like. We'll grab the first three rows.\n", "dataset[:3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's go over the columns:\n", "- **event_id**: the unique identifier for this buyback authorization.\n", "- **asof_date**: EventVestor's timestamp of event capture.\n", "- **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", "- **symbol**: stock ticker symbol of the affected company.\n", "- **event_type**: this should always be *Buyback*.\n", "- **event_headline**: a short description of the event.\n", "- **buyback_type**: types include *new*, *additional*, *reinstates*, *suspends*, *reduction*\n", "- **buyback_purpose**: types include *general corporate*, *undervalued*, *stock options*, *acquisition*\n", "- **offer_type**: types include *open market, private placement, mixed offer, dutch auction, tender offers.*\n", "- **buyback_amount**: the amount of buyback_units being bought back\n", "- **buyback_units**: the units of buyback_amount: values include millions of dollars (or other local currency), shares in millions, or percent of shares outstanding.\n", "- **event_rating**: this is always 1. The meaning of this is uncertain.\n", "- **timestamp**: this is our timestamp on when we registered the data.\n", "- **sid**: the equity's unique identifier. Use this instead of the symbol.\n", "\n", "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", "\n", "We can select columns and rows with ease. Below, we'll fetch all entries for Microsoft. We're really only interested in the buyback amount, the units, and the date, so we'll display only those columns." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Equity(5061, symbol=u'MSFT', asset_name=u'MICROSOFT CORP', exchange=u'NASDAQ GLOBAL SELECT MARKET', start_date=Timestamp('1993-01-04 00:00:00+0000', tz='UTC'), end_date=Timestamp('2016-05-24 00:00:00+0000', tz='UTC'), first_traded=None, auto_close_date=Timestamp('2016-05-27 00:00:00+0000', tz='UTC'))" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get the sid for MSFT\n", "symbols('MSFT')" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
timestampbuyback_amountbuyback_units
02008-09-2340000$M
12013-09-1840000$M
" ], "text/plain": [ " timestamp buyback_amount buyback_units\n", "0 2008-09-23 40000 $M\n", "1 2013-09-18 40000 $M" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# knowing that the MSFT sid is 5061:\n", "msft = dataset[dataset.sid==5061][['timestamp','buyback_amount', 'buyback_units']].sort('timestamp')\n", "msft" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, suppose we want a DataFrame of Apple Buybacks, sorted in descending order by the buyback amount:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "aapl_sid = symbols('AAPL').sid" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
event_idtrade_datesymbolevent_typeevent_headlinebuyback_typebuyback_purposeoffer_typebuyback_amountbuyback_unitsevent_ratingsidasof_datetimestamp
015701512013-04-24AAPLBuybackApple Raises Share Repurchase Program to $60BAdditionalGeneral CorporateOpen Market50000$M1242013-04-232013-04-24 00:00:00
119181132015-04-28AAPLBuybackApple Announces Additional $50B Share Repurcha...AdditionalGeneral CorporateOpen Market50000$M1242015-04-272015-04-28 00:00:00
221627222016-04-27AAPLBuybackApple Increases Share Repurchase Authorization...AdditionalGeneral CorporateOpen Market35000$M1242016-04-262016-04-27 11:02:42.070375
317081792014-04-24AAPLBuybackApple Announces Additional $30B Share Repurcha...AdditionalGeneral CorporateOpen Market30000$M1242014-04-232014-04-24 00:00:00
414105702012-03-19AAPLBuybackApple to Repurchase $10B SharesNewGeneral CorporateOpen Market10000$M1242012-03-192012-03-20 00:00:00
\n", "
" ], "text/plain": [ " event_id trade_date symbol event_type \\\n", "0 1570151 2013-04-24 AAPL Buyback \n", "1 1918113 2015-04-28 AAPL Buyback \n", "2 2162722 2016-04-27 AAPL Buyback \n", "3 1708179 2014-04-24 AAPL Buyback \n", "4 1410570 2012-03-19 AAPL Buyback \n", "\n", " event_headline buyback_type \\\n", "0 Apple Raises Share Repurchase Program to $60B Additional \n", "1 Apple Announces Additional $50B Share Repurcha... Additional \n", "2 Apple Increases Share Repurchase Authorization... Additional \n", "3 Apple Announces Additional $30B Share Repurcha... Additional \n", "4 Apple to Repurchase $10B Shares New \n", "\n", " buyback_purpose offer_type buyback_amount buyback_units event_rating \\\n", "0 General Corporate Open Market 50000 $M 1 \n", "1 General Corporate Open Market 50000 $M 1 \n", "2 General Corporate Open Market 35000 $M 1 \n", "3 General Corporate Open Market 30000 $M 1 \n", "4 General Corporate Open Market 10000 $M 1 \n", "\n", " sid asof_date timestamp \n", "0 24 2013-04-23 2013-04-24 00:00:00 \n", "1 24 2015-04-27 2015-04-28 00:00:00 \n", "2 24 2016-04-26 2016-04-27 11:02:42.070375 \n", "3 24 2014-04-23 2014-04-24 00:00:00 \n", "4 24 2012-03-19 2012-03-20 00:00:00 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "aapl = dataset[dataset.sid==aapl_sid].sort('buyback_amount',ascending=False)\n", "aapl_df = odo(aapl, pd.DataFrame)\n", "aapl_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "#Pipeline Overview\n", "\n", "### Accessing the data in your algorithms & research\n", "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", "\n", "Import the data set here\n", "> `from quantopian.pipeline.data.eventvestor import BuybackAuthorizations`\n", "\n", "Then in intialize() you could do something simple like adding the raw value of one of the fields to your pipeline:\n", "> `pipe.add(BuybackAuthorizations.total_scanned_messages.latest, 'total_scanned_messages')`" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import necessary Pipeline modules\n", "from quantopian.pipeline import Pipeline\n", "from quantopian.research import run_pipeline\n", "from quantopian.pipeline.factors import AverageDollarVolume" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# For use in your algorithms\n", "# Using the full dataset in your pipeline algo\n", "from quantopian.pipeline.data.eventvestor import BuybackAuthorizations\n", "\n", "from quantopian.pipeline.factors.eventvestor import BusinessDaysSinceBuybackAuth" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we've imported the data, let's take a look at which fields are available for each dataset.\n", "\n", "You'll find the dataset, the available fields, and the datatypes for each of those fields." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Here are the list of available fields per dataset:\n", "---------------------------------------------------\n", "\n", "Dataset: BuybackAuthorizations\n", "\n", "Fields:\n", "previous_date - datetime64[ns]\n", "previous_type - object\n", "previous_amount - float64\n", "previous_unit - object\n", "\n", "\n", "---------------------------------------------------\n", "\n" ] } ], "source": [ "print \"Here are the list of available fields per dataset:\"\n", "print \"---------------------------------------------------\\n\"\n", "\n", "def _print_fields(dataset):\n", " print \"Dataset: %s\\n\" % dataset.__name__\n", " print \"Fields:\"\n", " for field in list(dataset.columns):\n", " print \"%s - %s\" % (field.name, field.dtype)\n", " print \"\\n\"\n", "\n", "for data in (BuybackAuthorizations,):\n", " _print_fields(data)\n", "\n", "\n", "print \"---------------------------------------------------\\n\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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", "\n", "\n", "This is constructed the same way as you would in the backtester. For more information on using Pipeline in Research view this thread:\n", "https://www.quantopian.com/posts/pipeline-in-research-build-test-and-visualize-your-factors-and-filters" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Let's see what this data looks like when we run it through Pipeline\n", "# This is constructed the same way as you would in the backtester. For more information\n", "# on using Pipeline in Research view this thread:\n", "# https://www.quantopian.com/posts/pipeline-in-research-build-test-and-visualize-your-factors-and-filters\n", "pipe = Pipeline()\n", " \n", "pipe.add(BuybackAuthorizations.previous_date.latest, 'previous_date')\n", "pipe.add(BuybackAuthorizations.previous_amount.latest, 'previous_amount')\n", "pipe.add(BusinessDaysSinceBuybackAuth(), \"business_days\")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Setting some basic liquidity strings (just for good habit)\n", "dollar_volume = AverageDollarVolume(window_length=20)\n", "top_1000_most_liquid = dollar_volume.rank(ascending=False) < 1000\n", "\n", "pipe.set_screen(top_1000_most_liquid & BuybackAuthorizations.previous_amount.latest.notnan())" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nzapVNWtnz3HJzPX43Odf6qUO7XRq9tda8uZI7fnrpJoMG6XTly6btXv0jdHy9vLSka8n6fDUScof\nEqKe//tYq3bvNWuX2fFs6duvq3KJ4hrWuaPiVyxJ8yZekhZs3KQWNasrb3BOSVLnxg0V5O+v3w8d\n1l8XLti0z2xdnjr3pZYyN3Ru1NBibrDnOs1M3ksZb/J/H/TrLUkyGAya8cpgUztbj+fd9oW1WDK6\nzbbkWltfw6S3j5IN/HyyXu/eVWfmTrd6/ttyTGzNZ/bmeEfvX2v7IaXM7t/UUo+Np2Z/rZc6tNNz\nn39p9TmOOj+z4zjDGMMYwxjDGCNlnzFGytj5lpn3MM7cP/aer/bkE09yTxaLA3Pk0Jyhr2jPF5/o\n1Sc7qFzRIoqMidGCjb+rw7tj1WTYKF2Jum71+akTrLWT5N15CxQZE6Ox/XqpWfWqyunvrwaVKui1\nrp2dtWk2aV69mqqVKqkLEdc0f+Mms8c+X/6TBrdvZ/W5yS9ecj0Zqu7jxqtyieLaOH6s6pa3/Onv\nyK5P6qGKFRTg56dHaz941yLLu98u0K4//9I7vUL1VOsWKpQ7t3L6++vhqlU0d+grdm/r04+2VIVi\nRZUrKFDDnuwgSVqTKuE46jg5IvbR33yns+HhpliCAwLUvHo1vd+3l05fvqJ3vp1varth/0FJ0v35\n8inI319+Pj4qV7SIPnuuv9k63/l2vk5fvqIxfcLUsmYN5fT3V6PKlfRR/6d06tIlTfj+R7u2815D\nPiAfmPXpoOM0rHNHSdJXP/+i67GxpuU34+L05YqVGvpv/5J9170zPNW6hWm/jOz6pCTp5x279GL7\ntmmW/7Jzl9lzs2t+Sb7Wby//XqdmT9NbYd00bNrMu+aLu8no9TigTWs1rlLJ7Ny5duOG3p23IE3b\nCf37KX9IiIoXyK9PBz4jSRq3YLFZm8xce6cvX1HT4a8rtGljje3by2q7mavWqk+Ku7ty+vvryUYN\nJEmzHPwjRHeTMjcM75L0gV/q3JDR69TevJfaLzt3a9SsuUkxhHVXl8YNzR635XhmVEa32ZZca+tr\nGFuM6tZZDSpVUE5//7ue/5L1Y2JPPrMnx1vjzNzvyP0rpR0bgwMC1LhKJQ1o0zrd5zni/MyO4wxj\njHWMMeYYYxhjrMlKY0wye8+3zLyHcdX7L1vO16zKo4vFXgaDJOlOYqLVNncSE03tUqtSsoQ+6Ndb\nh6Z8rqNfT9Lr3bsop7+/th49ppEzZlt8jj3W7NknSWpW3fxT4PoVy2d63Zn1UoekFwOf/bjctGz9\nvgNKTEzUIzWqWX1eyoLYlQVztfTt1/VgmQestrf3KwhLNifNI/VEvbppHqvxQCm7B8CaD5Q2/btw\nvrySpAvXrpm1cdRxckTsP+/YaTGWR2pUT3p8+07Tso4N6kuSuo8br9J9B2jAxC+1aNNm5Q8JMevr\np21Jz2ld60GzdTauUkmStCLFOrMy8kHGkQ/+46jjVLtsGTWrXlVRMbH66udfTctnr16nuuXLqmLx\nYqZl9lz3zpByv9yXJ4/F5ff/u7/+iTDfX9klv1jjZTCoSL686tW8qSY+N0Bbjx7T0K9nZGqdGbke\nG1WuZPZ38rmzek/auzFKFCpo+jt5/ssjZ86atcvotXf83Hk1G/66CubOpRFdnrTYRkr6Ovs/VyPU\n8sEaZsv7tUx6Y//Nug0u/VVvs9yQN+kaSJ0bMnqd2pv3Uu7b4+fOq+f4j5VoNKpn84c1qnuXNG1t\nOZ4ZldFttiXX2voaxhap87O18z+ZtWNiTz6zJ8db48zc78j9K1kfGxtWqmj1OY46P7PzOMMYY44x\nJi3GGMYYa7LSGCNl7HzLzHsYV73/suV8zao8es7i4MAARcXEKiom1vQVk9Su3bihkMDAu67rgcKF\nNbpnqB6qWEFt335Pv+7aY1csli6K8OtJn/zmDwkxW556rhR36P5wY70x+xvtO/m31u87oGbVq+rz\nZSs0uH1bh/YTmCOHXe2TL5xCKS72zAgOCDD9288n6XROPa2Ao46TI2JPvlsgdSz5Q5LmtLkcFWVa\n9vVLz+vxurU1/7dNWr/vgGauWqOZq9aoeIH8WvLma6peupTZc4r3tjyv3MkLFzMcrychH2Qc+eA/\njjxOwzp31Pp9BzRx6XINbt9WPt7e+viHpZoz9GWzdvZc986Qcr+k/DDF0vLU+yu75BdbNK1WRZK0\nZu++TK0nI9dj6nkPk8+dlHegRcbE6KPFP+rHLVt1Pvyqbty6ZXrsanS02fMzeu21GPWWrsfe1Nnw\ncH23YZNCmza22G7GqjX6JyJC/k9YvmP/XPhVrdq1R4/WftDi445my7me0evU3ryXLComVh3HfKCo\nmFg1rFRRXw1+3uxxe45nRmV0m23Jtba+hrFF6vxs6fxPydoxsTef2ZrjrXFm7nfk/pWsj42p/07m\nyPOTcSYJYwxjjCWMMYwx1mSlMSaj51tm3sO46v2XLedrVuXRxeJyRYpox/E/dej0GdMnMqkdOn1G\nZYvcb7bMr92TOjt3usUfDWpUOekT8pS3+2dU/pAQXYqMVPj167o/b17T8uQXXJYYDAYZjUbFJ9yR\nr4+3pKRk7mh+Pj4a1LaN3pzzrT79cZlKFiqorUePWZzzyZUK5c6tc+FXdenaNbNPlpwpI8fJEkfE\nXjBXLv0TEWEhlmjT48kMBoM6Nqivjg3qK9Fo1B+Hj2jcgsVatXuvnv70C+2cOOHfuHLp/NUIXZ4/\nR3lyWi6i3gvIBxlHPviPo/KBJLWsWUM1HiilvX/9rblr1ys4MFBF8uVT/QrmdyjYc92nx1XnS0rZ\nJb/YIvmFX8yt22bL7T0uGbkeo2JilSvovw/Cks+dArn+ewEc+sFHWrNnn97s0U0vtHvc9KGapXnW\nM3rtTXxugK7HxOjpT7/Q4MlT1bhKJRXNn8+sTXzCHX23YaP+nD5ZJQsVSrOOcQsW66258zRr9do0\nb+TdcY4nc9R1aotEo1Fh/5ug4+fOq9R9hbT4jRGmNxjJ7DmeGeXMbbb1NYwtrkZHmxWzLJ3/trA3\nn9ma462xd//ac/47cv9K1sdGa/MFO/L8ZJxJwhjDGOMojDGMMcmPp+TOMcYV51tqztw/2YVHT0PR\ntm5tSdKsNdbnHZq5aq3a1KlltsxoNGr51u0W2+/695dVa5YpbfHxu0l5Qrd8MOkW9nV7D5i1+ePw\nUavPT/4VzJS3pu89edLuOJI/0YpPuKPY27dVKLR3mjYDHmutwBw5tHLnbr381TQ91aqlAvz87O7L\nkTo2SJrMfamF47P16DE99Mpwh/eZkeNkiSNif7xebYuxrP33LoLH69YxLfNt20nnwq9KSvrErFHl\nSpo3Yqgk6ejZc6Z2TzxUT5L024FDafr7/dBhNXz17j+8lxWQD6wjH9jOUfkg2bDOSefAR98v1fjF\nP5jmqkvJnus+PY46X+yRXfKLLZLnb6tdtozZ8owcF3uvx61Hj5n9nXzutKz531dwk8/hVzo+YXoR\nfjs+3uL6MnrtdXionnq3aK729espMiZGz3z6eZq7J1Zs36EKRYtafBMvSb1bNJe3l5eWb9uR5m4S\ne/elLbnPVo66Tm3x2sw5+nXXHuUOCtLy0W+Y3fWSPK7YczyljO0LZ26zra9hbJE6P1s6/22RkXxm\n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\nBwAAAAB4Pu4sBmCX5K+YHzlyRKNGjVKJEiVUvnx5jR49Wn///bfD+tn4y4+qWa+JgkNyS5Iat2wr\n/4BAHdqzXRfOnjK1W77rrBo80kaS1Lnv86ZCsSTlL1RYPZ8bpkfadjEV8yIjwjWkdzttWbdSL709\nQd+tP6jh477Unq0bNaxfe1NhMnndyb4c+5o69hqoOb/u0uiJc8xifXNQD3l5eWnqj5v01Q8bFZI7\nj8aPel67t/xm1u7CudMa/nRH/X38sN78ZIbm/LpToQNe1udjRljs055YbZUnX9LUDBHhl03Lrl29\noiG92mr7pjUa8u6nmrf+gF555xNt2/CrXu3dzmx+2oywdf/Yur/zFyqsGnUbKS7utn77danZY2uX\nL1TTRzvIx8fHYdtm74/6pVw+a+JY9Rw0XLNW7lCTR9tr3YrFmvD6i5r28TvqO3iUZq7crgbNH9Pa\nFYs087P3zdZj7/H/6+ghSVLBwkXvuk0njx3SopmT1PWpF1WrQVOzx2KioyRJ/oGBaZ6XvOzGv21S\nKvBvvyf/jQMAAAAAkPVQLAaQYcmF4z///FNjxozRAw88oHr16umzzz7TlStXMrXu1cvMpxLwDwxS\nwxaPS5LWLDOffqBzn0GSpJWL5yg25oZpedztW1qxYKae7POcadm3Uybo8oVz6v3CSNWs30T+gUGq\nXLOunnn1bV06f1ZL5kyxGE/Xp19Uxeq15ZfDX7UaNktTKOz/6miF5M6rAvcV0cDh70qSFk6faNbm\nu68+Vkz0dfUdPErV6jSUf2CQKlavo25Pv2ixz4zGmh6jMVGSzOai/XbyRwq/9I8proDAnKpet5H6\nDH5Nly+c07dTJtjdT2q27J+U7ra/WzzRTZK0NsW5YExM1Nrli9WifTeXblt6WnUIVbFSZRSUM1hd\nn0o6zjt+X6snQp82Le/y7/Kdm9eZPdfe43/1ykVJUlBO87uTU/v7+GG99UJPPd6lt3o9P9xRm6qc\nIbmS4rh80WHrBAAAAAC4FtNQIFNOnjypqVOnujsMuMCZM2esPmY0GnXnzh1J0o4dO7Rjxw4NHz5c\nNWumnfPUpr7+Oq6rly+q5kNNzJa3bN9da5cv0rqfFqvnc0Nl8Er6vKts5eqqVqeh9u/YrJ8XzVHn\nvknF4zXLFqp81ZoqVrqsaR3bN66WJNVq2Mxs3VUerGd63FIBrVzlGlbjTV3IvL94qaTtOPmn2fI9\n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\n", "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The show_graph() method of pipeline objects produces a graph to show how it is being calculated.\n", "pipe.show_graph(format='png')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
business_daysprevious_amountprevious_date
2013-11-01 00:00:00+00:00Equity(2 [AA])13230.02008-10-07
Equity(24 [AAPL])13850000.02013-04-23
Equity(62 [ABT])1003000.02013-06-14
Equity(67 [ADSK])35830.02012-06-19
Equity(76 [TAP])5881200.02011-08-02
Equity(114 [ADBE])4062000.02012-04-12
Equity(122 [ADI])7691000.02010-11-22
Equity(128 [ADM])1750370.02007-02-16
Equity(166 [AES])177300.02013-02-27
Equity(168 [AET])25750.02013-09-27
Equity(185 [AFL])8433.02010-08-10
Equity(197 [AGCO])33150.02012-07-26
Equity(239 [AIG])661000.02013-08-01
Equity(300 [ALK])287250.02012-09-26
Equity(328 [ALTR])4730.02013-08-28
Equity(337 [AMAT])4343000.02012-03-05
Equity(338 [BEAM])613.02013-08-08
Equity(353 [AME])521100.02011-11-03
Equity(357 [TWX])1924000.02013-02-06
Equity(368 [AMGN])2312000.02012-12-13
Equity(410 [AN])336250.02012-07-19
Equity(438 [AON])4015000.02012-04-19
Equity(448 [APA])12630.02013-05-09
Equity(455 [APC])13545000.02008-08-25
Equity(460 [APD])5541000.02011-09-19
Equity(465 [APH])20610.02013-01-17
Equity(510 [ARG])268600.02012-10-23
Equity(559 [ASH])122600.02013-05-15
Equity(607 [ATML])392200.02012-05-02
Equity(630 [ADP])62535.02011-06-10
...............
2013-11-25 00:00:00+00:00Equity(38691 [CFN])77750.02013-08-08
Equity(38817 [VRSK])112300.02013-06-20
Equity(38921 [LEA])170750.02013-04-01
Equity(38936 [DG])175500.02013-03-25
Equity(38989 [AOL])100150.02013-07-08
Equity(39053 [CIT])127200.02013-05-30
Equity(39095 [CHTR])497321.02011-12-29
Equity(39546 [LYB])13310.02013-05-22
Equity(40430 [GM])2435500.02012-12-19
Equity(40597 [FLT])259200.02012-11-27
Equity(40755 [NLSN])84500.02013-07-30
Equity(40852 [KMI])28250.02013-10-16
Equity(41047 [HCA])57280.82011-09-15
Equity(41149 [QIHU])49050.02012-01-09
Equity(41182 [GNC])202250.02013-02-14
Equity(41462 [MOS])5271200.02011-11-17
Equity(41636 [MPC])422000.02013-09-26
Equity(41759 [DNKN])33715.02012-08-09
Equity(42023 [XYL])68250.02013-08-21
Equity(42027 [UBNT])337100.02012-08-09
Equity(42118 [GRPN])78300.02013-08-07
Equity(42173 [DLPH])312750.02012-09-13
Equity(42230 [TRIP])203250.02013-02-13
Equity(42277 [ZNGA])283200.02012-10-24
Equity(42436 [SLCA])37825.02012-06-13
Equity(42699 [VNTV])0137.02013-11-24
Equity(42788 [PSX])831000.02013-07-31
Equity(43399 [ADT])31000.02013-11-20
Equity(43694 [ABBV])2011500.02013-02-15
Equity(44931 [NWSA])46500.02013-09-20
\n", "

9750 rows × 3 columns

\n", "
" ], "text/plain": [ " business_days \\\n", "2013-11-01 00:00:00+00:00 Equity(2 [AA]) 1323 \n", " Equity(24 [AAPL]) 138 \n", " Equity(62 [ABT]) 100 \n", " Equity(67 [ADSK]) 358 \n", " Equity(76 [TAP]) 588 \n", " Equity(114 [ADBE]) 406 \n", " Equity(122 [ADI]) 769 \n", " Equity(128 [ADM]) 1750 \n", " Equity(166 [AES]) 177 \n", " Equity(168 [AET]) 25 \n", " Equity(185 [AFL]) 843 \n", " Equity(197 [AGCO]) 331 \n", " Equity(239 [AIG]) 66 \n", " Equity(300 [ALK]) 287 \n", " Equity(328 [ALTR]) 47 \n", " Equity(337 [AMAT]) 434 \n", " Equity(338 [BEAM]) 61 \n", " Equity(353 [AME]) 521 \n", " Equity(357 [TWX]) 192 \n", " Equity(368 [AMGN]) 231 \n", " Equity(410 [AN]) 336 \n", " Equity(438 [AON]) 401 \n", " Equity(448 [APA]) 126 \n", " Equity(455 [APC]) 1354 \n", " Equity(460 [APD]) 554 \n", " Equity(465 [APH]) 206 \n", " Equity(510 [ARG]) 268 \n", " Equity(559 [ASH]) 122 \n", " Equity(607 [ATML]) 392 \n", " Equity(630 [ADP]) 625 \n", "... ... \n", "2013-11-25 00:00:00+00:00 Equity(38691 [CFN]) 77 \n", " Equity(38817 [VRSK]) 112 \n", " Equity(38921 [LEA]) 170 \n", " Equity(38936 [DG]) 175 \n", " Equity(38989 [AOL]) 100 \n", " Equity(39053 [CIT]) 127 \n", " Equity(39095 [CHTR]) 497 \n", " Equity(39546 [LYB]) 133 \n", " Equity(40430 [GM]) 243 \n", " Equity(40597 [FLT]) 259 \n", " Equity(40755 [NLSN]) 84 \n", " Equity(40852 [KMI]) 28 \n", " Equity(41047 [HCA]) 572 \n", " Equity(41149 [QIHU]) 490 \n", " Equity(41182 [GNC]) 202 \n", " Equity(41462 [MOS]) 527 \n", " Equity(41636 [MPC]) 42 \n", " Equity(41759 [DNKN]) 337 \n", " Equity(42023 [XYL]) 68 \n", " Equity(42027 [UBNT]) 337 \n", " Equity(42118 [GRPN]) 78 \n", " Equity(42173 [DLPH]) 312 \n", " Equity(42230 [TRIP]) 203 \n", " Equity(42277 [ZNGA]) 283 \n", " Equity(42436 [SLCA]) 378 \n", " Equity(42699 [VNTV]) 0 \n", " Equity(42788 [PSX]) 83 \n", " Equity(43399 [ADT]) 3 \n", " Equity(43694 [ABBV]) 201 \n", " Equity(44931 [NWSA]) 46 \n", "\n", " previous_amount previous_date \n", "2013-11-01 00:00:00+00:00 Equity(2 [AA]) 0.0 2008-10-07 \n", " Equity(24 [AAPL]) 50000.0 2013-04-23 \n", " Equity(62 [ABT]) 3000.0 2013-06-14 \n", " Equity(67 [ADSK]) 30.0 2012-06-19 \n", " Equity(76 [TAP]) 1200.0 2011-08-02 \n", " Equity(114 [ADBE]) 2000.0 2012-04-12 \n", " Equity(122 [ADI]) 1000.0 2010-11-22 \n", " Equity(128 [ADM]) 370.0 2007-02-16 \n", " Equity(166 [AES]) 300.0 2013-02-27 \n", " Equity(168 [AET]) 750.0 2013-09-27 \n", " Equity(185 [AFL]) 3.0 2010-08-10 \n", " Equity(197 [AGCO]) 50.0 2012-07-26 \n", " Equity(239 [AIG]) 1000.0 2013-08-01 \n", " Equity(300 [ALK]) 250.0 2012-09-26 \n", " Equity(328 [ALTR]) 30.0 2013-08-28 \n", " Equity(337 [AMAT]) 3000.0 2012-03-05 \n", " Equity(338 [BEAM]) 3.0 2013-08-08 \n", " Equity(353 [AME]) 100.0 2011-11-03 \n", " Equity(357 [TWX]) 4000.0 2013-02-06 \n", " Equity(368 [AMGN]) 2000.0 2012-12-13 \n", " Equity(410 [AN]) 250.0 2012-07-19 \n", " Equity(438 [AON]) 5000.0 2012-04-19 \n", " Equity(448 [APA]) 30.0 2013-05-09 \n", " Equity(455 [APC]) 5000.0 2008-08-25 \n", " Equity(460 [APD]) 1000.0 2011-09-19 \n", " Equity(465 [APH]) 10.0 2013-01-17 \n", " Equity(510 [ARG]) 600.0 2012-10-23 \n", " Equity(559 [ASH]) 600.0 2013-05-15 \n", " Equity(607 [ATML]) 200.0 2012-05-02 \n", " Equity(630 [ADP]) 35.0 2011-06-10 \n", "... ... ... \n", "2013-11-25 00:00:00+00:00 Equity(38691 [CFN]) 750.0 2013-08-08 \n", " Equity(38817 [VRSK]) 300.0 2013-06-20 \n", " Equity(38921 [LEA]) 750.0 2013-04-01 \n", " Equity(38936 [DG]) 500.0 2013-03-25 \n", " Equity(38989 [AOL]) 150.0 2013-07-08 \n", " Equity(39053 [CIT]) 200.0 2013-05-30 \n", " Equity(39095 [CHTR]) 321.0 2011-12-29 \n", " Equity(39546 [LYB]) 10.0 2013-05-22 \n", " Equity(40430 [GM]) 5500.0 2012-12-19 \n", " Equity(40597 [FLT]) 200.0 2012-11-27 \n", " Equity(40755 [NLSN]) 500.0 2013-07-30 \n", " Equity(40852 [KMI]) 250.0 2013-10-16 \n", " Equity(41047 [HCA]) 80.8 2011-09-15 \n", " Equity(41149 [QIHU]) 50.0 2012-01-09 \n", " Equity(41182 [GNC]) 250.0 2013-02-14 \n", " Equity(41462 [MOS]) 1200.0 2011-11-17 \n", " Equity(41636 [MPC]) 2000.0 2013-09-26 \n", " Equity(41759 [DNKN]) 15.0 2012-08-09 \n", " Equity(42023 [XYL]) 250.0 2013-08-21 \n", " Equity(42027 [UBNT]) 100.0 2012-08-09 \n", " Equity(42118 [GRPN]) 300.0 2013-08-07 \n", " Equity(42173 [DLPH]) 750.0 2012-09-13 \n", " Equity(42230 [TRIP]) 250.0 2013-02-13 \n", " Equity(42277 [ZNGA]) 200.0 2012-10-24 \n", " Equity(42436 [SLCA]) 25.0 2012-06-13 \n", " Equity(42699 [VNTV]) 137.0 2013-11-24 \n", " Equity(42788 [PSX]) 1000.0 2013-07-31 \n", " Equity(43399 [ADT]) 1000.0 2013-11-20 \n", " Equity(43694 [ABBV]) 1500.0 2013-02-15 \n", " Equity(44931 [NWSA]) 500.0 2013-09-20 \n", "\n", "[9750 rows x 3 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# run_pipeline will show the output of your pipeline\n", "pipe_output = run_pipeline(pipe, start_date='2013-11-01', end_date='2013-11-25')\n", "pipe_output" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Taking what we've seen from above, let's see how we'd move that into the backtester." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# This section is only importable in the backtester\n", "from quantopian.algorithm import attach_pipeline, pipeline_output\n", "\n", "# General pipeline imports\n", "from quantopian.pipeline import Pipeline\n", "from quantopian.pipeline.factors import AverageDollarVolume\n", "\n", "# Import the datasets available\n", "# For use in your algorithms\n", "# Using the full dataset in your pipeline algo\n", "from quantopian.pipeline.data.eventvestor import BuybackAuthorizations\n", "from quantopian.pipeline.factors.eventvestor import BusinessDaysSinceBuybackAuth\n", "\n", "\n", "def make_pipeline():\n", " # Create our pipeline\n", " pipe = Pipeline()\n", " \n", " # Screen out penny stocks and low liquidity securities.\n", " dollar_volume = AverageDollarVolume(window_length=20)\n", " is_liquid = dollar_volume.rank(ascending=False) < 1000\n", " \n", " # Create the mask that we will use for our percentile methods.\n", " base_universe = (is_liquid)\n", "\n", " # Add pipeline factors\n", " pipe.add(BuybackAuthorizations.previous_date.latest, 'previous_date')\n", " pipe.add(BuybackAuthorizations.previous_amount.latest, 'previous_amount')\n", " pipe.add(BusinessDaysSinceBuybackAuth(), \"business_days\")\n", "\n", " # Set our pipeline screens\n", " pipe.set_screen(is_liquid)\n", " return pipe\n", "\n", "def initialize(context):\n", " attach_pipeline(make_pipeline(), \"pipeline\")\n", " \n", "def before_trading_start(context, data):\n", " results = pipeline_output('pipeline')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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 data pipeline factor library" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.11" } }, "nbformat": 4, "nbformat_minor": 0 }