Zipline, a Pythonic Algorithmic Trading Library
Find a file
2020-04-27 08:15:40 -04:00
.github MAINT: Put environment info in a <details> tag. 2018-07-02 09:57:49 -04:00
ci BLD: More logging around appveyor conda package upload 2020-04-01 11:42:35 -04:00
conda BLD: Added upper bound on setuptools for logbook 2020-04-01 11:41:52 -04:00
docs Merge branch 'master' into benchmark 2020-04-20 14:30:36 +02:00
etc MAINT: Bump pip-tools and bcolz in CI requirements lockfile 2020-04-14 10:50:07 -04:00
tests Merge branch 'benchmark' into benchmark2 2020-04-20 15:20:05 +02:00
zipline Merge branch 'benchmark' into benchmark2 2020-04-20 15:20:05 +02:00
.appveyor.yml debugging stuck appveyor builds 2020-04-27 08:15:40 -04:00
.coveragerc TST/BUG: Cover all reindex session public methods. 2016-09-01 11:51:00 -04:00
.dir-locals.el STY: Normalize styles across installations via .dir-locals.el 2014-06-04 00:06:58 -04:00
.dockerignore Added a Dockerfile for repeatable runtimes 2016-04-04 17:05:52 -04:00
.gitattributes MAINT: Mark .ipynb files as binary. 2017-05-09 13:52:57 -04:00
.gitignore Introducing pre-commit hooks 2020-01-23 20:41:14 +01:00
.pre-commit-config.yaml ENH: Update .pre-commit-config.yaml 2020-01-28 15:15:19 +01:00
.travis.yml MAINT: Renamed requirements.txt to requirements_locked.txt 2020-02-11 11:05:22 -05:00
AUTHORS DOC Add authors file as well as script to create it. 2015-02-13 14:13:22 +01:00
CONTRIBUTING.rst STY: Fix .rst formatting 2017-12-11 12:13:02 -05:00
Dockerfile MAINT: Add HDF5 library 2019-11-18 17:33:29 -05:00
Dockerfile-dev updated dockerfiles with instructions for dealing with common build failures and updated base image from python 2.7 to 3.5 2017-05-23 09:57:25 -07:00
LICENSE MAINT: add year/name to license 2018-06-15 11:48:18 -04:00
MANIFEST.in REL: Add .pxd files to MANIFEST.in 2018-04-04 11:30:47 -04:00
README.rst DOC: Adding the no-benchmark setting for the initial run in the readme so that the first run by end users doesn't fail 2020-04-20 14:29:28 +02:00
setup.cfg Introducing pre-commit hooks 2020-01-23 20:41:14 +01:00
setup.py DEV: Added pre-commit to dev reqs 2020-02-11 11:05:22 -05:00
vagrant_init.sh MAINT: Renamed requirements.txt to requirements_locked.txt 2020-02-11 11:05:22 -05:00
Vagrantfile DEV: Merged updated Vagrantfile with vagrant_init.sh 2016-07-07 15:56:45 -04:00
versioneer.py BLD: Adds versioneer 2015-11-11 18:47:51 -05:00

.. image:: https://media.quantopian.com/logos/open_source/zipline-logo-03_.png
    :target: https://www.zipline.io
    :width: 212px
    :align: center
    :alt: Zipline

=============

|Gitter|
|version status|
|travis status|
|appveyor status|
|Coverage Status|

Zipline is a Pythonic algorithmic trading library. It is an event-driven
system for backtesting. Zipline is currently used in production as the backtesting and live-trading
engine powering `Quantopian <https://www.quantopian.com>`_ -- a free,
community-centered, hosted platform for building and executing trading
strategies. Quantopian also offers a `fully managed service for professionals <https://factset.quantopian.com>`_
that includes Zipline, Alphalens, Pyfolio, FactSet data, and more.

- `Join our Community! <https://groups.google.com/forum/#!forum/zipline>`_
- `Documentation <https://www.zipline.io>`_
- Want to Contribute? See our `Development Guidelines <https://www.zipline.io/development-guidelines>`_

Features
========

- **Ease of Use:** Zipline tries to get out of your way so that you can
  focus on algorithm development. See below for a code example.
- **"Batteries Included":** many common statistics like
  moving average and linear regression can be readily accessed from
  within a user-written algorithm.
- **PyData Integration:** Input of historical data and output of performance statistics are
  based on Pandas DataFrames to integrate nicely into the existing
  PyData ecosystem.
- **Statistics and Machine Learning Libraries:** You can use libraries like matplotlib, scipy,
  statsmodels, and sklearn to support development, analysis, and
  visualization of state-of-the-art trading systems.

Installation
============

Zipline currently supports Python 2.7 and Python 3.5, and may be installed via
either pip or conda.

**Note:** Installing Zipline is slightly more involved than the average Python
package. See the full `Zipline Install Documentation`_ for detailed
instructions.

For a development installation (used to develop Zipline itself), create and
activate a virtualenv, then run the ``etc/dev-install`` script.

Quickstart
==========

See our `getting started tutorial <https://www.zipline.io/beginner-tutorial>`_.

The following code implements a simple dual moving average algorithm.

.. code:: python

    from zipline.api import order_target, record, symbol

    def initialize(context):
        context.i = 0
        context.asset = symbol('AAPL')


    def handle_data(context, data):
        # Skip first 300 days to get full windows
        context.i += 1
        if context.i < 300:
            return

        # Compute averages
        # data.history() has to be called with the same params
        # from above and returns a pandas dataframe.
        short_mavg = data.history(context.asset, 'price', bar_count=100, frequency="1d").mean()
        long_mavg = data.history(context.asset, 'price', bar_count=300, frequency="1d").mean()

        # Trading logic
        if short_mavg > long_mavg:
            # order_target orders as many shares as needed to
            # achieve the desired number of shares.
            order_target(context.asset, 100)
        elif short_mavg < long_mavg:
            order_target(context.asset, 0)

        # Save values for later inspection
        record(AAPL=data.current(context.asset, 'price'),
               short_mavg=short_mavg,
               long_mavg=long_mavg)


You can then run this algorithm using the Zipline CLI; you'll need a `Quandl <https://docs.quandl.com/docs#section-authentication>`__ API key to ingest the default data bundle.
Once you have your key, run the following from the command line:

.. code:: bash

    $ QUANDL_API_KEY=<yourkey> zipline ingest -b quandl
    $ zipline run -f dual_moving_average.py --start 2014-1-1 --end 2018-1-1 -o dma.pickle --no-benchmark

This will download asset pricing data data from `quandl`, and stream it through the algorithm
over the specified time range. Then, the resulting performance DataFrame is saved in `dma.pickle`, which you
can load and analyze from within Python.

You can find other examples in the ``zipline/examples`` directory.

Questions?
==========

If you find a bug, feel free to `open an issue <https://github.com/quantopian/zipline/issues/new>`_ and fill out the issue template.

Contributing
============

All contributions, bug reports, bug fixes, documentation improvements, enhancements, and ideas are welcome. Details on how to set up a development environment can be found in our `development guidelines <https://www.zipline.io/development-guidelines>`_.

If you are looking to start working with the Zipline codebase, navigate to the GitHub `issues` tab and start looking through interesting issues. Sometimes there are issues labeled as `Beginner Friendly <https://github.com/quantopian/zipline/issues?q=is%3Aissue+is%3Aopen+label%3A%22Beginner+Friendly%22>`_ or `Help Wanted <https://github.com/quantopian/zipline/issues?q=is%3Aissue+is%3Aopen+label%3A%22Help+Wanted%22>`_.

Feel free to ask questions on the `mailing list <https://groups.google.com/forum/#!forum/zipline>`_ or on `Gitter <https://gitter.im/quantopian/zipline>`_.



.. |Gitter| image:: https://badges.gitter.im/Join%20Chat.svg
   :target: https://gitter.im/quantopian/zipline?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
.. |version status| image:: https://img.shields.io/pypi/pyversions/zipline.svg
   :target: https://pypi.python.org/pypi/zipline
.. |travis status| image:: https://travis-ci.org/quantopian/zipline.png?branch=master
   :target: https://travis-ci.org/quantopian/zipline
.. |appveyor status| image:: https://ci.appveyor.com/api/projects/status/3dg18e6227dvstw6/branch/master?svg=true
   :target: https://ci.appveyor.com/project/quantopian/zipline/branch/master
.. |Coverage Status| image:: https://coveralls.io/repos/quantopian/zipline/badge.png
   :target: https://coveralls.io/r/quantopian/zipline

.. _`Zipline Install Documentation` : https://www.zipline.io/install