Package: zipline
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 poweringQuantopian– a free,
community-centered, hosted platform for building and executing trading
strategies. Quantopian also offers afully managed service for professionalsthat includes Zipline, Alphalens, Pyfolio, FactSet data, and more.Join our Community!DocumentationWant to Contribute? See ourDevelopment GuidelinesFeaturesEase 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.InstallationZipline currently supports Python 2.7, 3.5, and 3.6, and may be installed via
either pip or conda.Note:Installing Zipline is slightly more involved than the average Python
package. See the fullZipline Install Documentationfor detailed
instructions.For a development installation (used to develop Zipline itself), create and
activate a virtualenv, then run theetc/dev-installscript.QuickstartSee ourgetting started tutorial.The following code implements a simple dual moving average algorithm.fromzipline.apiimportorder_target,record,symboldefinitialize(context):context.i=0context.asset=symbol('AAPL')defhandle_data(context,data):# Skip first 300 days to get full windowscontext.i+=1ifcontext.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 logicifshort_mavg>long_mavg:# order_target orders as many shares as needed to# achieve the desired number of shares.order_target(context.asset,100)elifshort_mavg<long_mavg:order_target(context.asset,0)# Save values for later inspectionrecord(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:$ziplineingest$ziplinerun-fdual_moving_average.py--start2014-1-1--end2018-1-1-odma.pickle--no-benchmarkThis will download asset pricing data data sourced from Quandl, and stream it through the algorithm over the specified time range.
Then, the resulting performance DataFrame is saved indma.pickle, which you can load and analyze from within Python.You can find other examples in thezipline/examplesdirectory.Questions?If you find a bug, feel free toopen an issueand fill out the issue template.ContributingAll 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 ourdevelopment guidelines.If you are looking to start working with the Zipline codebase, navigate to the GitHubissuestab and start looking through interesting issues. Sometimes there are issues labeled asBeginner FriendlyorHelp Wanted.Feel free to ask questions on themailing listor onGitter.NotePlease note that Zipline is not a community-led project. Zipline is
maintained by the Quantopian engineering team, and we are quite small and
often busy.Because of this, we want to warn you that we may not attend to your pull
request, issue, or direct mention in months, or even years. We hope you
understand, and we hope that this note might help reduce any frustration or
wasted time.