Release 0.8.4
-------------

:Release: 0.8.4
:Date: February 24, 2016

Highlights
~~~~~~~~~~

* Added a new :class:`~zipline.pipeline.data.EarningsCalendar` dataset
  for use in the Pipeline API. (:issue:`905`).

* :class:`~zipline.assets.assets.AssetFinder` speedups (:issue:`830` and
  :issue:`817`).

* Improved support for non-float dtypes in Pipeline.  Most notably, we now
  support ``datetime64`` and ``int64`` dtypes for ``Factor``, and
  ``BoundColumn.latest`` now returns a proper ``Filter`` object when the column
  is of dtype ``bool``.

* Zipline now supports ``numpy`` 1.10, ``pandas`` 0.17, and ``scipy`` 0.16
  (:issue:`969`).

* Batch transforms have been deprecated and will be removed in a future release.
  Using ``history`` is recommended as an alternative.

Enhancements
~~~~~~~~~~~~

* Adds a way for users to provide a context manager to use when executing the
  scheduled functions (including ``handle_data``). This context manager will be
  passed the :class:`~zipline.protocol.BarData` object for the bar and will
  be used for the duration of all of the functions scheduled to run. This can be
  passed to :class:`~zipline.algorithm.TradingAlgorithm` by the keyword argument
  ``create_event_context`` (:issue:`828`).

* Added support for :class:`zipline.pipeline.factors.Factor` instances with
  ``datetime64[ns]`` dtypes. (:issue:`905`)

* Added a new :class:`~zipline.pipeline.data.earnings.EarningsCalendar` dataset
  for use in the Pipeline API.  This dataset provides an abstract interface for
  adding earnings announcement data to a new algorithm. A pandas-based
  reference implementation for this dataset can be found in
  :mod:`zipline.pipeline.loaders.earnings`, and an experimental blaze-based
  implementation can be found in
  :mod:`zipline.pipeline.loaders.blaze.earnings`. (:issue:`905`).

* Added new built-in factors,
  :class:`zipline.pipeline.factors.BusinessDaysUntilNextEarnings` and
  :class:`zipline.pipeline.factors.BusinessDaysSincePreviousEarnings`.  These
  factors use the new ``EarningsCalendar`` dataset. (:issue:`905`).

* Added :meth:`~zipline.pipeline.factors.Factor.isnan`,
  :meth:`~zipline.pipeline.factors.Factor.notnan` and
  :meth:`~zipline.pipeline.factors.Factor.isfinite` methods to
  :class:`zipline.pipeline.factors.Factor` (:issue:`861`).

* Added :class:`zipline.pipeline.factors.Returns`, a built-in factor which
  calculates the percent change in close price over the given
  window_length. (:issue:`884`).

* Added a new built-in factor:
  :class:`~zipline.pipeline.factors.AverageDollarVolume`. (:issue:`927`).

* Added :class:`~zipline.pipeline.factors.ExponentialWeightedMovingAverage` and
  :class:`~zipline.pipeline.factors.ExponentialWeightedMovingStdDev`
  factors. (:issue:`910`).

* Allow :class:`~zipline.pipeline.data.DataSet` classes to be subclassed where
  subclasses inherit all of the columns from the parent. These columns will be
  new sentinels so you can register them a custom loader (:issue:`924`).

* Added :func:`~zipline.utils.input_validation.coerce` to coerce inputs from one
  type into another before passing them to the function (:issue:`948`).

* Added :func:`~zipline.utils.input_validation.optionally` to wrap other
  preprocessor functions to explicitly allow ``None`` (:issue:`947`).

* Added :func:`~zipline.utils.input_validation.ensure_timezone` to allow string
  arguments to get converted into :class:`datetime.tzinfo` objects. This also
  allows ``tzinfo`` objects to be passed directly (:issue:`947`).

* Added two optional arguments, ``data_query_time`` and ``data_query_tz`` to
  :class:`~zipline.pipeline.loaders.blaze.core.BlazeLoader` and
  :class:`~zipline.pipeline.loaders.blaze.earnings.BlazeEarningsCalendarLoader`.
  These arguments allow the user to specify some cutoff time for data when
  loading from the resource. For example, if I want to simulate executing my
  ``before_trading_start`` function at ``8:45 US/Eastern`` then I could pass
  ``datetime.time(8, 45)`` and ``'US/Eastern'`` to the loader. This means that
  data that is timestamped on or after ``8:45`` will not seen on that day in the
  simulation. The data will be made available on the next day (:issue:`947`).

* ``BoundColumn.latest`` now returns a
  :class:`~zipline.pipeline.filters.Filter` for columns of dtype
  ``bool`` (:issue:`962`).

* Added support for :class:`~zipline.pipeline.factors.Factor` instances with
  ``int64`` dtype.  :class:`~zipline.pipeline.data.dataset.Column` now requires
  a ``missing_value`` when dtype is integral. (:issue:`962`)

* It is also now possible to specify custom ``missing_value`` values for
  ``float``, ``datetime``, and ``bool`` Pipeline terms. (:issue:`962`)

* Added auto-close support for equities. Any positions held in an equity that
  reaches its ``auto_close_date`` will be liquidated for cash according to the
  equity's last sale price. Furthermore, any open orders for that equity will
  be canceled. Both futures and equities are now auto-closed on the morning of
  their ``auto_close_date``, immediately prior to ``before_trading_start``.
  (:issue:`982`)

Experimental Features
~~~~~~~~~~~~~~~~~~~~~

.. warning::

   Experimental features are subject to change.

* Added support for parameterized ``Factor`` subclasses.  Factors may specify
  ``params`` as a class-level attribute containing a tuple of parameter names.
  These values are then accepted by the constructor and forwarded by name to
  the factor's ``compute`` function.  This API is experimental, and may change
  in future releases.

Bug Fixes
~~~~~~~~~

* Fixes an issue that would cause the daily/minutely method caching to change
  the ``len`` of a :class:`~zipline.protocol.SIDData` object. This would cause
  us to think that the object was not empty even when it was (:issue:`826`).

* Fixes an error raised in calculating beta when benchmark data were sparse.
  Instead :data:`numpy.nan` is returned (:issue:`859`).

* Fixed an issue pickling :func:`~zipline.utils.sentinel.sentinel` objects
  (:issue:`872`).

* Fixed spurious warnings on first download of treasury data (:issue `922`).

* Corrected the error messages for :func:`~zipline.api.set_commission` and
  :func:`~zipline.api.set_slippage` when used outside of the ``initialize``
  function. These errors called the functions ``override_*`` instead of
  ``set_*``. This also renamed the exception types raised from
  ``OverrideSlippagePostInit`` and ``OverrideCommissionPostInit`` to
  :class:`~zipline.errors.SetSlippagePostInit` and
  :class:`~zipline.errors.SetCommissionPostInit` (:issue:`923`).

* Fixed an issue in the CLI that would cause assets to be added twice.
  This would map the same symbol to two different sids (:issue:`942`).

* Fixed an issue where the
  :class:`~zipline.finance.performance.period.PerformancePeriod` incorrectly
  reported the total_positions_value when creating a
  :class:`~zipline.protocol.Account` (:issue:`950`).

* Fixed issues around KeyErrors coming from history and BarData on 32-bit
  python, where Assets did not compare properly with int64s (:issue:`959`).

* Fixed a bug where boolean operators were not properly implemented on
  :class:`~zipline.pipeline.Filter` (:issue:`991`).

* Installation of zipline no longer downgrades numpy to 1.9.2 silently and
  unconditionally (:issue:`969`).

Performance
~~~~~~~~~~~

* Speeds up :meth:`~zipline.assets.assets.AssetFinder.lookup_symbol` by adding
  an extension, :class:`~zipline.assets.assets.AssetFinderCachedEquities`, that
  loads equities into dictionaries and then directs
  :meth:`~zipline.assets.assets.AssetFinder.lookup_symbol` to these dictionaries
  to find matching equities (:issue:`830`).

* Improved performance of
  :meth:`~zipline.assets.assets.AssetFinder.lookup_symbol` by performing
  batched queries. (:issue:`817`).

Maintenance and Refactorings
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* Asset databases now contain version information to ensure compatibility
  with current Zipline version (:issue:`815`).

* Upgrade ``requests`` version to 2.9.1 (:commit:`2ee40db`)

* Upgrade ``logbook`` version to 0.12.5 (:commit:`11465d9`).

* Upgrade ``Cython`` version to 0.23.4 (:commit:`5f49fa2`).

Build
~~~~~

* Makes zipline install requirements more flexible (:issue:`825`).
* Use ``versioneer`` to manage the project ``__version__`` and setup.py version
  (:issue:`829`).
* Fixed coveralls integration on travis build (:issue:`840`).
* Fixed conda build, which now uses git source as its source and reads
  requirements using setup.py, instead of copying them and letting them get out
  of sync (:issue:`937`).
* Require ``setuptools`` > 18.0 (:issue:`951`).

Documentation
~~~~~~~~~~~~~

* Document the release process for developers (:issue:`835`).
* Added reference docs for the Pipeline API. (:issue:`864`).
* Added reference docs for Asset Metadata APIs. (:issue:`864`).
* Generated documentation now includes links to source code for many classes
  and functions. (:issue:`864`).
* Added platform-specific documentation describing how to find binary
  dependencies. (:issue:`883`).

Miscellaneous
~~~~~~~~~~~~~

* Added a :meth:`~zipline.pipeline.pipeline.Pipeline.show_graph` method to render
  a Pipeline as an image (:issue:`836`).
* Adds :func:`~zipline.utils.test_utils.subtest` decorator for creating subtests
  without :func:`nose_parameterized.expand` which bloats the test output
  (:issue:`833`).
* Limits timer report in test output to 15 longest tests (:issue:`838`).
* Treasury and benchmark downloads will now wait up to an hour to download
  again if data returned from a remote source does not extend to the date
  expected. (:issue:`841`).
* Added a tool to downgrade the assets db to previous versions (:issue:`941`).
