diff --git a/docs/contributing.rst b/docs/contributing.rst new file mode 100644 index 00000000..d60d5af0 --- /dev/null +++ b/docs/contributing.rst @@ -0,0 +1,40 @@ +*************************** +Contributing to the project +*************************** + +Style Guide +=========== + +To ensure that changes and patches are focused on behavior changes, +the zipline codebase adheres to PEP-8, +``_. + +The maintainers check the code using the flake8 script, +``_, which is included in the +requirements_dev.txt. + +Before submitting patches or pull requests, please ensure that your +changes pass + +:: + + flake8 --ignore=E124,E125,E126 zipline tests + +Discussion and Help +=================== + +Discussion of the project is held at the Google Group, +``_, +``_. + +Source +====== + +The source for Zipline is hosted at +``_. + +Contact +======= + +For other questions, please contact ``_. + diff --git a/docs/extensions.rst b/docs/extensions.rst index 50185706..639a58c1 100644 --- a/docs/extensions.rst +++ b/docs/extensions.rst @@ -1,3 +1,7 @@ +********** +Extensions +********** + .. highlight:: cython Philosophy diff --git a/docs/index.rst b/docs/index.rst index 44172299..9151c79c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -3,56 +3,60 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -Contents: +.. module:: zipline + +**************************************************** +Zipline: Financial Backtester for Trading Algorithms +**************************************************** + +Python is quickly becoming the glue language which holds together data science +and related fields like quantitative finance. Zipline is a new, BSD-licensed +quantitative trading system which allows easy backtesting of investment +algorithms on historical data. The system is fundamentally event-driven and a +close approximation of how live-trading systems operate. Moreover, Zipline +comes "batteries included" as many common statistics like +moving average and linear regression can be readily accessed from within a +user-written algorithm. Input of historical data and output of performance +statistics is based on Pandas DataFrames to integrate nicely into the existing +Python eco-system. Furthermore, statistic and machine learning libraries like +matplotlib, scipy, statsmodels, and sklearn support development, analysis and +visualization of state-of-the-art trading systems. + +Zipline is currently used in production as the backtesting engine +powering `quantopian.com `_ -- a free, community-centered +platform that allows development and real-time backtesting of trading +algorithms in the web browser. + +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. + +* Zipline comes "batteries included" as many common statistics like moving + average and linear regression can be readily accessed from within a + user-written algorithm. + +* Input of historical data and output of performance statistics is based on + Pandas DataFrames to integrate nicely into the existing Python eco-system. + +* Statistic and machine learning libraries like matplotlib, scipy, statsmodels, + and sklearn support development, analysis and visualization of + state-of-the-art trading systems. + +Contents +======== .. toctree:: :maxdepth: 4 - notes.rst + manifesto.rst + installation.rst + quickstart.rst + contributing.rst + overview.rst modules.rst - messaging.rst - -Zipline -======= - -Zipline runs backtests using asynchronous components and zeromq messaging for communication and coordination. - -Simulator is the heart of Zipline, and the primary access point for creating, launching, and tracking simulations. You can find it in :py:class:`~zipline.core.Simulator` - -Simulator Sub-Components -======================== - -Each simulation contains numerous subcomponents, each operating asynchronously from all others, and communicating -via zeromq. - -DataSources --------------------- - -A DataSource represents a historical event record, which will be played back during simulation. A simulation may have one or more DataSources, which will be combined in DataFeed. Generally, datasources read records from a persistent store (db, csv file, remote service), format the messages for downstream simulation components, and send them to a PUSH socket. See the base class for all datasources :py:class:`~zipline.messaging.DataSource` and the module holding all datasources :py:mod:`zipline.sources` - -DataFeed --------------------- - -All simulations start with a collection of :py:class:`~zipline.messaging.DataSource`, which need to be fed to an algorithm. Each :py:class:`~zipline.sources.DataSource`can contain events of differing content (trades, quotes, corporate event) and frequency (quarterly, intraday). To simplify the process of managing the data sources, :py:class:`~zipline.core.DataFeed` can receive events from multiple :py:class:`DataSources ` and combine them into a serial chronological stream. - -Transforms --------------------- - -Often, an algorithm will require a running calculation on top of a :py:class:`~zipline.messaging.DataSource`, or on the consolidated feed. A simple example is a technical indicator or a moving average. Transforms can be described in :py:class:`~zipline.core.Simulator`'s configuration. Subclass :py:class:`~zipline.transforms.core.Transform` to add your own Transform. Transforms must hold their own state between events, and serialize their current values into messages. - - -Data Alignment --------------------- - -Like Datasources, Transforms have differing frequencies and results. Simulator manages the results of parallel transforms and **aligns** transform results with the raw DataFeed. Client algorithms simply receive a map of data, which includes the current event and all the transformed values. - -Time Compression --------------------- - - -Review the unit test coverage_. - - + extensions.rst Indices and tables ================== @@ -60,5 +64,3 @@ Indices and tables * :ref:`genindex` * :ref:`modindex` * :ref:`search` - -.. _coverage: cover/index.html diff --git a/docs/notes.rst b/docs/installation.rst similarity index 64% rename from docs/notes.rst rename to docs/installation.rst index bf2d2237..0ece920c 100644 --- a/docs/notes.rst +++ b/docs/installation.rst @@ -1,20 +1,32 @@ -System Setup -============== - -You need to have zeromq installed - http://www.zeromq.org/intro:get-the-software. +************ +Installation +************ -Running -------- +Since zipline is pure-python code it should be very easy to install +and set up with pip: -Initial `virtualenv` setup:: +:: - $ mkvirtualenv zipline - $ workon zipline - #go get coffee, this will compile a heap of C/C++ code - $ ./etc/ordered_pip.sh requirements_sci.txt - $ ./etc/ordered_pip.sh requirements.txt - #optionally - $ ./etc/ordered_pip.sh requirements_dev.txt + pip install zipline + +If there are problems installing the dependencies or zipline we +recommend installing these packages via some other means. For Windows, +the `Enthought Python Distribution +`_ +includes most of the necessary dependencies. On OSX, the `Scipy Superpack +`_ works very well. + +Dependencies +------------ + +* Python (>= 2.7.2) +* numpy (>= 1.6.0) +* pandas (>= 0.9.0) +* pytz +* msgpack-python +* iso8601 +* Logbook +* blist Develop @@ -51,7 +63,7 @@ For building distributable egg:: Tooling hints ================ -QBT relies heavily on scientific python components (numpy, scikit, pandas, matplotlib, ipython, etc). Tooling up can be a pain, and it often involves managing a configuration including your OS, c/c++/fortran compilers, python version, and versions of numerous modules. I've found the following tools absolutely indispensable: +:mod:`zipline` relies heavily on scientific python components (numpy, scikit, pandas, matplotlib, ipython, etc). Tooling up can be a pain, and it often involves managing a configuration including your OS, c/c++/fortran compilers, python version, and versions of numerous modules. I've found the following tools absolutely indispensable: - some kind of package manager for your platform. package managers generally give you a way to search, install, uninstall, and check currently installed packages. They also do a great job of managing dependencies. - linux: yum/apt-get @@ -78,11 +90,22 @@ Scientific python on the Mac can be a bit confusing because of the many independ Data Sources ============= -The Backtest can handle multiple concurrent data sources. QBT will start a subprocess to run each datasource, and merge all events from all sources into a single serial feed, ordered by date. -Data sources have events with very different frequencies. For example, liquid stocks will trade many times per minute, while illiquid stocks may trade just once a day. In order to serialize events from all sources into a single feed, qbt loads events from all sources into memory, then sorts. The communication happens like this: -1. QBT requests the next event from each data source, ignoring date (i.e. just next in sequence for all) -2. Using the earliest date from all the events from all sources, QBT then asks for "next after " from all sources. -3. All datasources send all events in their history from before , moving their internal pointer forward to the next unsent event. -4. QBT merges all events in memory -5. goto 1! +The Backtest can handle multiple concurrent data sources. QBT will start a +subprocess to run each datasource, and merge all events from all sources into a +single serial feed, ordered by date. + +Data sources have events with very different frequencies. For example, liquid +stocks will trade many times per minute, while illiquid stocks may trade just +once a day. In order to serialize events from all sources into a single feed, +qbt loads events from all sources into memory, then sorts. The communication +happens like this: + +1. QBT requests the next event from each data source, ignoring date (i.e. + just next in sequence for all) +2. Using the earliest date from all the events from all sources, QBT then + asks for "next after " from all sources. +3. All datasources send all events in their history from before , + moving their internal pointer forward to the next unsent event. +4. QBT merges all events in memory +5. goto 1! diff --git a/docs/manifesto.rst b/docs/manifesto.rst new file mode 100644 index 00000000..dbcf190b --- /dev/null +++ b/docs/manifesto.rst @@ -0,0 +1,140 @@ +******************** +Quantopian Manifesto +******************** + +Wall Street's culture was born in an age of information scarcity. +Hoarding information and keeping secrets were the norm. The world has changed. +Today's world is defined by information that wants to be free. The new +scarcity is people: people with the talent and drive to wring insight from all +of that data. + +Quantopian's mission is to attract the world's algorithmic and +financial talent. We want to attract today's quants, and we want to +attract talent that hasn't yet had the opportunity to be a quant. We +want to bring this talent together, provide them with the tools that they +require, and help them build a community. First and foremost, our community is +rooted in openness and sharing. Members share code, know-how, and data. +Quantopian sets the tone by providing open-sourced code, discussing our +techniques, and supplying the historical data needed for algorithmic investing. + +By educating more people about statistical arbitrage and data mining for +finance, we aim to dispense with the secrecy and raise the state of the art. +Rather than hoard data, we relentlessly push data to our community. We want to +diversify the data that can be mined, and permit our members to explore as much +as they like. Our members' success in analyzing and investing will help +us draw more data and more members to our community. Every individual's +success will also help other Quantopians. + +The Evolution of Algorithmic Finance +==================================== + +Charting +-------- + +Algorithmic finance originated as chart reading. Chartists would look for +certain patterns in price history charts. The patterns were always graced with +artfully chosen names like 'head and shoulders,' 'spinning top', or 'morning +star'. Chart reading looks a lot like palm reading, and for the skeptics among +us the similarities don't end with appearances. Still, chart reading is an +attempt to infer the balance of buying and selling appetites in the markets +from a stock's history. Viewed that way, chart reading pursues the noble goal +of prediction. Charting is so common that certain events can trigger market +responses, possibly because so many participants infer the same meaning from a +stock's price chart. + +Technical Analysis +------------------ + +Analysis grew more sophisticated as chartists gave way to +computer scientists writing algorithms. These algorithms have more scientific +sounding names like Moving Averages, Volume Weighted Moving Averages, Bollinger +Bands, Relative Strength Indicators, and Pearson's Correlation +Coefficient. Building technical analysis algorithms looks a lot like modern +statistics, and the optimists among us would say the similarities run deep. +Technical analysts take algorithmic approaches to the same concept: inferring +future behavior from trailing data. In addition to greater sophistication, +technical analysts can also test their algorithms over historic data. Imperfect +to be sure, but a giant leap from staring at a chart. + +Reasonable people can disagree about the 'correctness' of +inferring future events from past behavior. Rather than dwell on that question, +we choose to point out a different limitation of both charting and modern +technical analysis: **both interpret the movement of a single stock in +isolation**. This limitation is both a blessing and a curse. + +On the one hand, there is little room for sophisticated statistics or machine +learning when you have just a single time series for both your signal and your +prediction target. + +On the other, technical analysis can still be intuitive, which makes it easier +to get acquainted with the idea of automated trading. Often there is a mental +leap for people to make from understanding the interpretation of a price series +to issuing orders. Because the signals are easy to understand, technical +analysis makes for a good initial learning experience to explore risk and +performance evaluation as well as order management: the price going above its +30 day moving average is something you can visualize. So, you can focus your +attention on the financial and trading aspects of the problem. + +Statistical Arbitrage +--------------------- + +Statistical Arbitrage is the grandchild of chart reading. +Like technical analysis it relies on algorithms and statistics, but it departs +in one very significant way: 'stat arb' looks for relationships +among many stocks. The challenge with stat arb is twofold: + +* visualizing the relationships can be quite difficult, since the relationships + can have high dimensionality +* the data processing load is quite high - a simple linear regression for all + stocks results in 32 million individual regressions. Assuming a 10-day + window, that can be 320 million individual calculations. To prepare, + backtest, and trade a stat arb strategy required both familiarity with the + mechanics of trading, knowledge of statistics, and a strong computer science + background. + +As stat arb matured, the competition to find stat arb strategies that work +became a two part race: + +1. execute the trades faster +2. find new ways to identify relationships within + market data + +We think the pursuit of faster trades reached diminishing returns when the +market hit sub-millisecond trade execution. We think that the resulting high +level of liquidity is a good thing, but we agree with Thomas Petterffy that +`pursuing even faster trades +`_ +"has absolutely no social value". + +Finding new relationships in the market data is possible and more important now +than ever. In the summer of 2007, there was a sudden meltdown in quantitative +trading firms. Subsequent analysis points to quants crowding into the same +arbitrage bets, and an unforeseen fund liquidation driving all the quants to +unwind those bets concurrently. We believe finding new relationships should +permit investments with lower correlation and lower risks. + +Algorithmic Investing and the Future +==================================== + +A revolution in market understanding happens next. We want Quantopian to enable +more quants than all of Wall Street combined. We want quants, new and old, to +explore and share new ways to view the market. We want to clear away the +obstacles that have so far kept all but a few from doing algorithmic investing +by: + +* simulating with clean, high-quality market data for free +* easy access to markets through trusted brokers +* providing a robust, flexible open-source backtester to permit evaluation and + iteration of algorithms +* supporting a community that fosters the exchange of knowledge, ideas, code + solutions, and data sources + +The community will find new ways to identify market opportunities. It may take +the form of new, non-market data sources, like news feeds or Twitter. It may be +new algorithmic techniques. Most likely, it will be something we +haven't heard of yet: your idea. The one you keep coming back to. The +idea you couldn't test without data. The idea that needs backtesting, +and iteration, and encouragement from other quants. + +Do you want to unleash your idea? This is your chance. `Come hack Wall Street +`_. diff --git a/docs/messaging.rst b/docs/messaging.rst deleted file mode 100644 index 5ade0428..00000000 --- a/docs/messaging.rst +++ /dev/null @@ -1,26 +0,0 @@ -qbt runs backtests using multiple processes and zeromq messaging for communication and coordination. - -Backtest is the primary process. It maintains both server and client sockets: -zmq sockets for internal processing:: - - - data sink, ZMQ.REQ. Port = port_start + 1 - - backtest will connect to socket, and then spawn one process per datasource, passing the data sink url as a startup arg. Each - datasource process will bind to the socket, and start processing - - backtest is responsible for merging the data events from all sources into a serialized stream and relaying it to the - aggregators, merging agg results, and transmitting consolidated stream to event feed. - - agg source, ZMQ.PUSH. Port = port_start + 2 - - agg sink, ZMQ.PULL. Port = port_start + 3 - - control source, ZMQ.PUB. Port = port_start + 4 - - all child processes must subscribe to this socket. Control commands: - - START -- begin processing - - TIME -- current simulated time in backtest - - KILL -- exit immediately - -zmq sockets for backtest clients: -================================= - - orders sink, ZMQ.RESP. Port = port_start + 5 - - backtest will connect (can you bind?) to this socket and await orders from the client. Order data will be processed against the streaming datafeed. - - event feed, ZMQ.RESP. Port = port_start + 6 - - backtest will bind to this socket and respond to requests from client for more data. Response data will be the queue of events that - transpired since the last request. - \ No newline at end of file diff --git a/docs/modules.rst b/docs/modules.rst index 199e3784..1e0777eb 100644 --- a/docs/modules.rst +++ b/docs/modules.rst @@ -1,5 +1,6 @@ -zipline -==== +*********************** +Packages and Modules +*********************** .. toctree:: :maxdepth: 4 diff --git a/docs/overview.rst b/docs/overview.rst new file mode 100644 index 00000000..9d7d3ad5 --- /dev/null +++ b/docs/overview.rst @@ -0,0 +1,77 @@ +******************************************* +Overview +******************************************* + +Simulations +=========== + +:mod:`zipline` runs backtests using asynchronous components and zeromq messaging for +communication and coordination. + +:class:`.algorithm.TradingAlgorithm` is the heart of :mod:`zipline`, and the primary access point for creating, +launching, and tracking simulations. You can find it in +:py:class:`~zipline.algorithm.TradingAlgorithm` + +Simulator Sub-Components +======================== + +Each simulation contains numerous subcomponents, each operating asynchronously +from all others, and communicating via zeromq. + +DataSources +-------------------- + +A DataSource represents a historical event record, which will be played back +during simulation. A simulation may have one or more DataSources, which will be +combined in DataFeed. Generally, datasources read records from a persistent +store (db, csv file, remote service), format the messages for downstream +simulation components, and send them to a PUSH socket. See the base class for +all datasources :py:class:`~zipline.messaging.DataSource` and the module +holding all datasources :py:mod:`zipline.sources` + +DataFeed +-------------------- + +All simulations start with a collection of +:py:class:`~zipline.messaging.DataSource`, which need to be fed to an +algorithm. Each :py:class:`~zipline.sources.DataSource`can contain events of +differing content (trades, quotes, corporate event) and frequency (quarterly, +intraday). To simplify the process of managing the data sources, +:py:class:`~zipline.core.DataFeed` can receive events from multiple +:py:class:`DataSources ` and combine them into a +serial chronological stream. + +Transforms +-------------------- + +Often, an algorithm will require a running calculation on top of a +:py:class:`~zipline.messaging.DataSource`, or on the consolidated feed. A +simple example is a technical indicator or a moving average. Transforms can be +described in :py:class:`~zipline.core.Simulator`'s configuration. Subclass +:py:class:`~zipline.transforms.core.Transform` to add your own Transform. +Transforms must hold their own state between events, and serialize their +current values into messages. + + +Data Alignment +-------------------- + +Like Datasources, Transforms have differing frequencies and results. Simulator +manages the results of parallel transforms and **aligns** transform results +with the raw DataFeed. Client algorithms simply receive a map of data, which +includes the current event and all the transformed values. + +Time Compression +-------------------- + +According to `this post +`_ on the Quantopian +forums, time periods during which none of the selected SIDs were traded are +skipped. + + +Review the unit test coverage_. + + + +.. _coverage: cover/index.html diff --git a/docs/quickstart.rst b/docs/quickstart.rst new file mode 100644 index 00000000..01e77c55 --- /dev/null +++ b/docs/quickstart.rst @@ -0,0 +1,55 @@ +********** +Quickstart +********** + +Dual-Moving Average Example +=========================== + +The following code implements a simple dual moving average algorithm +and tests it on data extracted from yahoo finance. + +.. code:: python + + from zipline.algorithm import TradingAlgorithm + from zipline.transforms import MovingAverage + from zipline.utils.factory import load_from_yahoo + + class DualMovingAverage(TradingAlgorithm): + """Dual Moving Average algorithm. + """ + def initialize(self, short_window=200, long_window=400): + # Add 2 mavg transforms, one with a long window, one + # with a short window. + self.add_transform(MovingAverage, 'short_mavg', ['price'], + market_aware=True, + days=short_window) + + self.add_transform(MovingAverage, 'long_mavg', ['price'], + market_aware=True, + days=long_window) + + # To keep track of whether we invested in the stock or not + self.invested = False + + self.short_mavg = [] + self.long_mavg = [] + + + def handle_data(self, data): + if (data['AAPL'].short_mavg['price'] > data['AAPL'].long_mavg['price']) and not self.invested: + self.order('AAPL', 100) + self.invested = True + elif (data['AAPL'].short_mavg['price'] < data['AAPL'].long_mavg['price']) and self.invested: + self.order('AAPL', -100) + self.invested = False + + # Save mavgs for later analysis. + self.short_mavg.append(data['AAPL'].short_mavg['price']) + self.long_mavg.append(data['AAPL'].long_mavg['price']) + + data = load_from_yahoo() + dma = DualMovingAverage() + results = dma.run(data) + +You can find other examples in the zipline/examples directory. + diff --git a/docs/zipline.data.rst b/docs/zipline.data.rst new file mode 100644 index 00000000..c7269916 --- /dev/null +++ b/docs/zipline.data.rst @@ -0,0 +1,40 @@ +:mod:`zipline.data` subpackage +=============================== + +.. automodule:: zipline.data.__init__ + :members: + :undoc-members: + :show-inheritance: + +:mod:`benchmarks` Module +------------------------- + +.. automodule:: zipline.data.benchmarks + :members: + :undoc-members: + :show-inheritance: + +:mod:`loader` Module +-------------------- + +.. automodule:: zipline.data.loader + :members: + :undoc-members: + :show-inheritance: + +:mod:`loader_utils` Module +-------------------------- + +.. automodule:: zipline.data.loader_utils + :members: + :undoc-members: + :show-inheritance: + +:mod:`treasuries` Module +------------------------ + +.. automodule:: zipline.data.treasuries + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/zipline.finance.rst b/docs/zipline.finance.rst index e99189f6..33b8fe59 100644 --- a/docs/zipline.finance.rst +++ b/docs/zipline.finance.rst @@ -1,5 +1,18 @@ -finance Package -=============== +:mod:`zipline.finance` subpackage +================================== + +.. automodule:: zipline.finance.__init__ + :members: + :undoc-members: + :show-inheritance: + +:mod:`commission` Module +------------------------- + +.. automodule:: zipline.finance.commission + :members: + :undoc-members: + :show-inheritance: :mod:`performance` Module ------------------------- @@ -17,6 +30,14 @@ finance Package :undoc-members: :show-inheritance: +:mod:`slippage` Module +------------------------- + +.. automodule:: zipline.finance.slippage + :members: + :undoc-members: + :show-inheritance: + :mod:`trading` Module --------------------- diff --git a/docs/zipline.gens.rst b/docs/zipline.gens.rst new file mode 100644 index 00000000..b6d344aa --- /dev/null +++ b/docs/zipline.gens.rst @@ -0,0 +1,40 @@ +:mod:`zipline.gens` subpackage +============================== + +.. automodule:: zipline.gens.__init__ + :members: + :undoc-members: + :show-inheritance: + +:mod:`composites` Module +------------------------- + +.. automodule:: zipline.gens.composites + :members: + :undoc-members: + :show-inheritance: + +:mod:`sort` Module +------------------ + +.. automodule:: zipline.gens.sort + :members: + :undoc-members: + :show-inheritance: + +:mod:`tradesimulation` Module +------------------------------ + +.. automodule:: zipline.gens.tradesimulation + :members: + :undoc-members: + :show-inheritance: + +:mod:`utils` Module +--------------------- + +.. automodule:: zipline.gens.utils + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/zipline.rst b/docs/zipline.rst index cf294c88..87be42b1 100644 --- a/docs/zipline.rst +++ b/docs/zipline.rst @@ -1,18 +1,23 @@ -zipline Package -=============== - :mod:`zipline` Package ----------------------- +======================= .. automodule:: zipline.__init__ :members: :undoc-members: :show-inheritance: -:mod:`protocol` Module +:mod:`algorithm` Module +------------------------- + +.. automodule:: zipline.algorithm + :members: + :undoc-members: + :show-inheritance: + +:mod:`sources` Module ---------------------- -.. automodule:: zipline.protocol +.. automodule:: zipline.sources :members: :undoc-members: :show-inheritance: @@ -38,10 +43,9 @@ Subpackages .. toctree:: - zipline.core zipline.data zipline.finance zipline.gens - zipline.optimize + zipline.transforms zipline.utils diff --git a/docs/zipline.transforms.rst b/docs/zipline.transforms.rst new file mode 100644 index 00000000..84e9648d --- /dev/null +++ b/docs/zipline.transforms.rst @@ -0,0 +1,47 @@ +:mod:`zipline.transforms` subpackage +===================================== + +.. automodule:: zipline.transforms.__init__ + :members: + :undoc-members: + :show-inheritance: + +:mod:`mavg` Module +------------------------- + +.. automodule:: zipline.transforms.mavg + :members: + :undoc-members: + :show-inheritance: + +:mod:`returns` Module +------------------------- + +.. automodule:: zipline.transforms.returns + :members: + :undoc-members: + :show-inheritance: + +:mod:`stddev` Module +------------------------- + +.. automodule:: zipline.transforms.stddev + :members: + :undoc-members: + :show-inheritance: + +:mod:`utils` Module +------------------------- + +.. automodule:: zipline.transforms.utils + :members: + :undoc-members: + :show-inheritance: + +:mod:`vwap` Module +------------------------- + +.. automodule:: zipline.transforms.vwap + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/zipline.utils.rst b/docs/zipline.utils.rst new file mode 100644 index 00000000..e7851fe0 --- /dev/null +++ b/docs/zipline.utils.rst @@ -0,0 +1,56 @@ +:mod:`zipline.utils` subpackage +=============================== + +.. automodule:: zipline.utils.__init__ + :members: + :undoc-members: + :show-inheritance: + +:mod:`date_utils` Module +-------------------------- + +.. automodule:: zipline.utils.date_utils + :members: + :undoc-members: + :show-inheritance: + +:mod:`factory` Module +--------------------- + +.. automodule:: zipline.utils.factory + :members: + :undoc-members: + :show-inheritance: + +:mod:`protocol_units` Module +---------------------------- + +.. automodule:: zipline.utils.protocol_utils + :members: + :undoc-members: + :show-inheritance: + +:mod:`simfactory` Module +-------------------------- + +.. automodule:: zipline.utils.simfactory + :members: + :undoc-members: + :show-inheritance: + +:mod:`test_utils` Module +------------------------ + +.. automodule:: zipline.utils.test_utils + :members: + :undoc-members: + :show-inheritance: + +:mod:`tradingcalendar` Module +------------------------------ + +.. automodule:: zipline.utils.tradingcalendar + :members: + :undoc-members: + :show-inheritance: +