Skip to main content

A backtester for trading algorithms

Project description


Community Discourse License ML4T Twitter
Version __
Info__ Release Python
Test __
Status__ GitHub Workflow Status Coverage Status

Zipline is a Pythonic event-driven system for backtesting, used as the backtesting and live-trading engine by the [former crowd-sourced investment fund Quantopian] (https://www.bizjournals.com/boston/news/2020/11/10/quantopian-shuts-down-cofounders-head-elsewhere.html). Since it closed late 2020, the domain that originally hosted these docs has expired. The library is used extensively in the book Machine Larning for Algorithmic Trading by Stefan Jansen who is trying to keep the library up to date and available to his readers and the wider Python algotrading community.

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 supports Python 3.7, 3.8, and 3.9, 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.

Quickstart

See our getting started tutorial.

The following code implements a simple dual moving average algorithm.

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. First, you must download some sample pricing and asset data:

$ 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 sourced from Quandl, and stream it through the algorithm over the specified time range. Then, the resulting performance DataFrame is saved as dma.pickle, which you can load and analyze from Python.

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

Questions?

If you find a bug, feel free to open an issue and fill out the issue template.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zipline-reloaded-2.0.0rc3.tar.gz (693.2 kB view details)

Uploaded Source

Built Distributions

zipline_reloaded-2.0.0rc3-cp39-cp39-manylinux2010_x86_64.whl (6.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64

zipline_reloaded-2.0.0rc3-cp38-cp38-manylinux2010_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

zipline_reloaded-2.0.0rc3-cp38-cp38-macosx_10_9_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

zipline_reloaded-2.0.0rc3-cp37-cp37m-manylinux2010_x86_64.whl (6.0 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

zipline_reloaded-2.0.0rc3-cp37-cp37m-macosx_10_9_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

File details

Details for the file zipline-reloaded-2.0.0rc3.tar.gz.

File metadata

  • Download URL: zipline-reloaded-2.0.0rc3.tar.gz
  • Upload date:
  • Size: 693.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

File hashes

Hashes for zipline-reloaded-2.0.0rc3.tar.gz
Algorithm Hash digest
SHA256 de0ae6d93f1608f411d8b1e36812baebbaf19a1579b733924fcba381a1fa1ca5
MD5 c586530bf97c3cd3c4208bdf00e9c9ae
BLAKE2b-256 10dad737432eb8ac8456a7f0cfc1afc0a506c3d8c7bd2d2cc9920eb03216f6f0

See more details on using hashes here.

File details

Details for the file zipline_reloaded-2.0.0rc3-cp39-cp39-manylinux2010_x86_64.whl.

File metadata

  • Download URL: zipline_reloaded-2.0.0rc3-cp39-cp39-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 6.5 MB
  • Tags: CPython 3.9, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

File hashes

Hashes for zipline_reloaded-2.0.0rc3-cp39-cp39-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 cd5780c8abc75573d6264362bcda676e63d880b8b76bbcf149d5c1d6cd2d84f7
MD5 d51bad523cbc89fea3c40f98b719b143
BLAKE2b-256 37a7674a1b590d8d9692d9f26d4430f19e8e4af0cb3cb08c47d10c7a2fae5e10

See more details on using hashes here.

File details

Details for the file zipline_reloaded-2.0.0rc3-cp39-cp39-manylinux1_x86_64.whl.

File metadata

  • Download URL: zipline_reloaded-2.0.0rc3-cp39-cp39-manylinux1_x86_64.whl
  • Upload date:
  • Size: 6.5 MB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

File hashes

Hashes for zipline_reloaded-2.0.0rc3-cp39-cp39-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 e45f413518edb5ae3b1c2a97dff052244339219921b6f2b559c5edd74ef4cf60
MD5 13cd4172268e9d996ba130662ea073f5
BLAKE2b-256 a78a748a0e2bfedc10633b242c91c1280f56541c6d735b686b955fb62a31134b

See more details on using hashes here.

File details

Details for the file zipline_reloaded-2.0.0rc3-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: zipline_reloaded-2.0.0rc3-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 6.9 MB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

File hashes

Hashes for zipline_reloaded-2.0.0rc3-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 335ef15dd5c1b5f60743405c0ff47134cdc9b32d9151f67d7f75958213b33db1
MD5 ff06590154e52ae8beb0b322e1166e3a
BLAKE2b-256 6eff1251bd522d44b52ecadc52374b8509c5034ef793959a57a561da07c1344b

See more details on using hashes here.

File details

Details for the file zipline_reloaded-2.0.0rc3-cp38-cp38-manylinux1_x86_64.whl.

File metadata

  • Download URL: zipline_reloaded-2.0.0rc3-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 6.9 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

File hashes

Hashes for zipline_reloaded-2.0.0rc3-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 647cf4a121210f5d8a30cda73b6fc93433cfa998e4423c75f79f87f6aaf9cba5
MD5 2b3cb56a74ada527db9c2543291b8536
BLAKE2b-256 b6358f07e01081e2334c3178a2b5801da2c9fb342d41e9dafcba44c8efe846fc

See more details on using hashes here.

File details

Details for the file zipline_reloaded-2.0.0rc3-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: zipline_reloaded-2.0.0rc3-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

File hashes

Hashes for zipline_reloaded-2.0.0rc3-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 98cbc177e93f70d044cc4eed6ffb3419d07d1552c4d1072b876b81d82e8d040e
MD5 0476d4418c1981839a92729eaad4a274
BLAKE2b-256 762309cc3e23bbc84b6c8c9f52caef990ca64523cc4e1aff4d918604e371ead5

See more details on using hashes here.

File details

Details for the file zipline_reloaded-2.0.0rc3-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: zipline_reloaded-2.0.0rc3-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

File hashes

Hashes for zipline_reloaded-2.0.0rc3-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 d2f2fc867f4b8d63e28419e26adac552dc3ef872bd420771a46f3c266e19e058
MD5 6cb6473cee3f8170eff2a5b23a6ca9a8
BLAKE2b-256 66aee549e81479786ce80338a9eb4d7998040bff4cabbb9ecfb21b55b914c8bc

See more details on using hashes here.

File details

Details for the file zipline_reloaded-2.0.0rc3-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: zipline_reloaded-2.0.0rc3-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

File hashes

Hashes for zipline_reloaded-2.0.0rc3-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 73251e2267033624746451d4d8a07dff2c7c38f9a6ffccce696a98b55fcea411
MD5 f3a8b2f44823bd52e85ae8e832e085f3
BLAKE2b-256 5a20a719aa5d8a13ed76eb632561fbf81bfd93d9654c3ca7f64cf6f07694118d

See more details on using hashes here.

File details

Details for the file zipline_reloaded-2.0.0rc3-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: zipline_reloaded-2.0.0rc3-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

File hashes

Hashes for zipline_reloaded-2.0.0rc3-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 16e7c9c273a7506c46b0d49b11208a392bf1b7856ad21af1fca3547f19a9e9d9
MD5 2f34634f709717f1425f7b9a48d383ab
BLAKE2b-256 15932a6441709516692f6d90a643818ab996d9d67d9986a22752dd4048b66dec

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page