From a6f982e2b84a2a4ba7ac66da3e3c57f07c83f8b1 Mon Sep 17 00:00:00 2001 From: Victor Grau Serrat Date: Tue, 21 Nov 2017 22:54:31 -0700 Subject: [PATCH] DOC: remake of beginner tutorial --- _sources/beginner-tutorial.txt | 250 ++++++++++++++++++++++----------- _sources/install.txt | 14 +- appendix.html | 4 +- beginner-tutorial.html | 240 +++++++++++++++++++------------ bundles.html | 2 +- development-guidelines.html | 2 +- example-algos.html | 2 +- genindex.html | 4 +- index.html | 4 +- install.html | 22 +-- jupyter.html | 2 +- live-trading.html | 2 +- naming-convention.html | 2 +- release-process.html | 2 +- releases.html | 2 +- resources.html | 2 +- search.html | 4 +- searchindex.js | 2 +- utilities.html | 2 +- welcome.html | 2 +- 20 files changed, 358 insertions(+), 208 deletions(-) diff --git a/_sources/beginner-tutorial.txt b/_sources/beginner-tutorial.txt index 6848a806..f79c2c7e 100644 --- a/_sources/beginner-tutorial.txt +++ b/_sources/beginner-tutorial.txt @@ -5,9 +5,8 @@ Basics ~~~~~~ Catalyst is an open-source algorithmic trading simulator for crypto -assets written in Python. - -The source can be found at: https://github.com/enigmampc/catalyst +assets written in Python. The source code can be found at: +https://github.com/enigmampc/catalyst Some benefits include: @@ -25,8 +24,7 @@ Some benefits include: build profitable, data-driven investment strategies. This tutorial assumes that you have Catalyst correctly installed, see the -:doc:`installation instructions ` if you haven't set up -Catalyst yet. +:doc:`Install` section if you haven't set up Catalyst yet. Every ``catalyst`` algorithm consists of at least two functions you have to define: @@ -40,10 +38,12 @@ Before the start of the algorithm, ``catalyst`` calls the need to access from one algorithm iteration to the next. After the algorithm has been initialized, ``catalyst`` calls the -``handle_data()`` function once for each event. At every call, it passes -the same ``context`` variable and an event-frame called ``data`` -containing the current trading bar with open, high, low, and close -(OHLC) prices as well as volume for each crypto asset in your universe. +``handle_data()`` function on each iteration, that's one per day (daily) or +once every minute (minute), depending on the frequency we choose to run our +simulation. On every iteration, ``handle_data()`` passes the same ``context`` +variable and an event-frame called ``data`` containing the current trading bar +with open, high, low, and close (OHLC) prices as well as volume for each +crypto asset in your universe. .. For more information on these functions, see the `relevant part of the .. Quantopian docs `. @@ -51,8 +51,8 @@ containing the current trading bar with open, high, low, and close My first algorithm ~~~~~~~~~~~~~~~~~~ -Lets take a look at a very simple algorithm from the ``examples`` -directory: `buy_btc_simple.py `_: +Lets take a look at a very simple algorithm from the ``examples`` directory: +`buy_btc_simple.py `_: .. code-block:: python @@ -70,9 +70,9 @@ directory: `buy_btc_simple.py `__. -Running the algorithm -~~~~~~~~~~~~~~~~~~~~~ - -To can now test this algorithm on crypto data, ``catalyst`` provides three -interfaces: - -- A command-line interface, -- ``IPython Notebook`` magic, -- and :func:`~catalyst.run_algorithm`. - Ingesting data -^^^^^^^^^^^^^^ +~~~~~~~~~~~~~~ -In previous versions of Catalyst you needed to manually ingest data before running -your algorithm to make it available at runtime. Starting with version 0.3, the -algorithm will automagically ingest the data it needs the first time that encounters -a data request for data that it doesn't have. +Before you can backtest your algorithm, you first need to load the historical +pricing data that Catalyst needs to run your simulation through a process called +``ingestion``. When you ingest data, Catalyst downloads that data in compressed +form from the Enigma servers (which eventually will migrate to the Enigma Data +Marketplace), and stores it locally to make it available at runtime. -Still, we believe it is important for you to have a high-level understanding -of how data is managed: +In order to ingest data, you need to run a command like the following: + +.. code-block:: bash + + catalyst ingest-exchange -x bitfinex -i btc_usd + +This instructs Catalyst to download pricing data from the ``Bitfinex`` exchange +for the ``btc_usd`` currency pair (this follows from the simple algorithm +presented above where we want to trade ``btc_usd``), and we're choosing to test +our algorithm using historical pricing data from the Bitfinex exchange. By +default, Catalyst assumes that you want data with ``daily`` frequency (one candle +bar per day). If you want instead ``minute`` frequency (one candle bar for every +minute), you would need to specify it as follows: + +.. code-block:: bash + + catalyst ingest-exchange -x bitfinex -i btc_usd -f minute + +.. parsed-literal:: + + Ingesting exchange bundle bitfinex... + [====================================] Ingesting daily price data on bitfinex: 100% + +We believe it is important for you to have a high-level understanding of how +data is managed, hence the following overview: - Pricing data is split and packaged into ``bundles``: chunks of data organized as time series that are kept up to date daily on Enigma's servers. Catalyst - downloads the bundles that needs at any given time, and reconstructs the whole - dataset in your hard drive. + downloads the requested bundles and reconstructs the full dataset in your + hard drive. -- Pricing data is provided in ``daily`` and ``minute`` resolution. Those are different - bundle datasets, and are managed separately. +- Pricing data is provided in ``daily`` and ``minute`` resolution. Those are + different bundle datasets, and are managed separately. -- Bundles are exchange-specific, as the pricing data is specific to the trades that - happen in each exchange. You can optionally specify which exchange you want pricing - data from. +- Bundles are exchange-specific, as the pricing data is specific to the trades + that happen in each exchange. As a result, you can must specify which + exchange you want pricing data from when ingesting data -- Catalyst keeps track of all the downloaded bundles, so that it only has to download - them once, and will do incremental updates as needed. +- Catalyst keeps track of all the downloaded bundles, so that it only has to + download them once, and will do incremental updates as needed. -- When running in ``live trading`` mode, Catalyst will first look for historical - pricing data in the locally stored bundles. If there is anything missing, Catalyst will - hit the exchange for the most recent data, and merge it with the local bundle to make - it available for future iterations. +- When running in ``live trading`` mode, Catalyst will first look for + historical pricing data in the locally stored bundles. If there is anything + missing, Catalyst will hit the exchange for the most recent data, and merge + it with the local bundle to optimize the number of requests it needs to make + to the exchange. -If you want to learn more, check out the :ref:`ingesting data ` section -for more detail. +The ``ingest-exchange`` command in catalyst offers additional parameters to +further tweak the data ingestion process. You can learn more by running the +following from the command line: + +.. code-block:: bash + + catalyst ingest-exchange --help + +Running the algorithm +~~~~~~~~~~~~~~~~~~~~~ + +You can now test your algorithm using cryptoassets' historical pricing data, +``catalyst`` provides three interfaces: + +- A command-line interface (CLI), +- the ``IPython Notebook`` magic, +- and a :func:`~catalyst.run_algorithm` that you can call from other + Python scripts. + +We'll start with the CLI, and introduce the ``IPython Notebook`` below. Some of +the :doc:`example algorithms ` provide instructions on how to run +them both from the CLI, and using the :func:`~catalyst.run_algorithm` function. Command line interface ^^^^^^^^^^^^^^^^^^^^^^ -After you installed Catalyst you should be able to execute the following -from your command line (e.g. ``cmd.exe`` on Windows, or the Terminal app -on OSX). Displaying here a simplified output for eductional purposes: +After you installed Catalyst, you should be able to execute the following +from your command line (e.g. ``cmd.exe`` or the ``Anaconda Prompt`` on Windows, +or the Terminal application on MacOS). .. code-block:: bash $ catalyst --help +This is the resulting output, simplified for eductional purposes: + .. parsed-literal:: Usage: catalyst [OPTIONS] COMMAND [ARGS]... @@ -158,10 +195,11 @@ on OSX). Displaying here a simplified output for eductional purposes: live Trade live with the given algorithm. run Run a backtest for the given algorithm. -There are three main modes you can run on Catalyst. The first being ``ingest-exchange`` -for data ingestion, which we have summarized in the previous section. The second -is ``live`` to use your algorithm to trade live against a given exchange, and the -third mode ``run`` is to backtest your algorithm before trading live with it. +There are three main modes you can run on Catalyst. The first being +``ingest-exchange`` for data ingestion, which we have covered in the previous +section. The second is ``live`` to use your algorithm to trade live against a +given exchange, and the third mode ``run`` is to backtest your algorithm before +trading live with it. Let's start with backtesting, so run this other command to learn more about the available options: @@ -210,22 +248,24 @@ the available options: As you can see there are a couple of flags that specify where to find your -algorithm (``-f``) as well as a parameter to specify which exchange to use. -There are also arguments for the date range to run the algorithm over -(``--start`` and ``--end``). Finally, you'll want to save the performance -metrics of your algorithm so that you can analyze how it performed. This is -done via the ``--output`` flag and will cause it to write the performance -``DataFrame`` in the pickle Python file format. Note that you can also define -a configuration file with these parameters that you can then conveniently pass -to the ``-c`` option so that you don't have to supply the command line args -all the time (see the .conf files in the examples directory). +algorithm (``-f``) as well as a the ``-x`` flag to specify which exchange to +use. There are also arguments for the date range to run the algorithm over +(``--start`` and ``--end``). You also need to set the base currency for your +algorithm through the ``-c`` flag, and the ``--capital_base``. All the +aforementioned parameters are required. Optionally, you will want to save the +performance metrics of your algorithm so that you can analyze how it performed. +This is done via the ``--output`` flag and will cause it to write the +performance ``DataFrame`` in the pickle Python file format. Note that you can +also define a configuration file with these parameters that you can then +conveniently pass to the ``-c`` option so that you don't have to supply the +command line args all the time. Thus, to execute our algorithm from above and save the results to ``buy_btc_simple_out.pickle`` we would call ``catalyst run`` as follows: .. code-block:: python - catalyst run -f buy_btc_simple.py -x bitfinex --start 2016-1-1 --end 2017-9-30 -o buy_btc_simple_out.pickle + catalyst run -f buy_btc_simple.py -x bitfinex --start 2016-1-1 --end 2017-9-30 -c usd --capital-base 100000 -o buy_btc_simple_out.pickle .. parsed-literal:: @@ -253,17 +293,25 @@ slippage model that ``catalyst`` uses). .. see the `Quantopian docs `__ .. for more information). -Let's take a quick look at the performance ``DataFrame``. For this, we -use ``pandas`` from inside the IPython Notebook and print the first ten -rows. Note that ``catalyst`` makes heavy usage of -`pandas `_, especially for data input and -outputting so it's worth spending some time to learn it. + +Let's take a quick look at the performance ``DataFrame``. For this, we write +different Python script--let's call it ``print_results.py``--and we make use of +the fantastic ``pandas`` library to print the first ten rows. Note that +``catalyst`` makes heavy usage of `pandas `_, +especially for data analysis and outputting so it's worth spending some time to +learn it. .. code-block:: python import pandas as pd perf = pd.read_pickle('buy_btc_simple_out.pickle') # read in perf DataFrame - perf.head() + print(perf.head()) + +Which we execute by running: + +.. code-block:: bash + + $ python print_results.py .. raw:: html @@ -429,30 +477,48 @@ and allows us to plot the price of bitcoin. For example, we could easily examine now how our portfolio value changed over time compared to the bitcoin price. -.. code-block:: python - - %load_ext catalyst +Now we will run the simulation again, but this time we extend our original +algorithm with the addition of the ``analyze()`` function. Somewhat analogously +as how ``initialize()`` gets called once before the start of the algorith, +``analyze()`` gets called once at the end of the algorithm, and receives two +variables: ``context``, which we discussed at the very beginning, and ``perf``, +which is the pandas dataframe containing the performance data for our algorithm +that we reviewed above. Inside the ``analyze()`` function is where we can +analyze and visualize the results of our strategy. Here's the revised simple +algorithm (note the addition of Line 1, and Lines 11-18) .. code-block:: python - %pylab inline - figsize(12, 12) import matplotlib.pyplot as plt + from catalyst.api import order, record, symbol - ax1 = plt.subplot(211) - perf.portfolio_value.plot(ax=ax1) - ax1.set_ylabel('portfolio value') - ax2 = plt.subplot(212, sharex=ax1) - perf.btc.plot(ax=ax2) - ax2.set_ylabel('bitcoin price') + def initialize(context): + context.asset = symbol('btc_usd') -.. parsed-literal:: + def handle_data(context, data): + order(context.asset, 1) + record(btc = data.current(context.asset, 'price')) - Populating the interactive namespace from numpy and matplotlib + def analyze(context, perf): + ax1 = plt.subplot(211) + perf.portfolio_value.plot(ax=ax1) + ax1.set_ylabel('portfolio value') + ax2 = plt.subplot(212, sharex=ax1) + perf.btc.plot(ax=ax2) + ax2.set_ylabel('bitcoin price') + plt.show() -.. parsed-literal:: +Here we make use of the external visualization library called +`matplotlib `_, which you might recall we installed +alongside enigma-catalyst (with the exception of the ``Conda`` install, where it +was included by default inside the conda environment we created). If for any +reason you don't have it installed, you can add it by running: - +.. code-block:: python + + (catalyst)$ pip install matplotlib + +If everything works well, you'll see the following chart: .. image:: https://s3.amazonaws.com/enigmaco-docs/github.io/buy_btc_simple_graph.png @@ -460,6 +526,22 @@ Our algorithm performance as assessed by the ``portfolio_value`` closely matches that of the bitcoin price. This is not surprising as our algorithm only bought bitcoin every chance it got. + If you get an error when invoking matplotlib to visualize the performance + results refer to `MacOS + Matplotlib `_. + Alternatively, some users have reported the following error when running an algo + in a Linux environment: + + .. parsed-literal:: + + ImportError: No module named _tkinter, please install the python-tk package + + Which can easily solved by running (in Ubuntu/Debian-based systems): + + .. code-block:: python + + sudo apt install python-tk + + Access to previous prices using ``history`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/_sources/install.txt b/_sources/install.txt index 53ccbf29..e95eea65 100644 --- a/_sources/install.txt +++ b/_sources/install.txt @@ -80,7 +80,7 @@ Once either Conda or MiniConda has been set up you can install Catalyst: 4. Activate the environment (which you need to do every time you start a new session to run Catalyst): - **Linux or OSX:** + **Linux or MacOS:** .. code-block:: bash @@ -125,7 +125,7 @@ with the following steps: 3. Activate the environment: - **Linux or OSX:** + **Linux or MacOS:** .. code-block:: bash @@ -358,11 +358,11 @@ beginning of this page. MacOS Requirements ------------------ -The version of Python shipped with OSX by default is generally out of date, +The version of Python shipped with MacOS by default is generally out of date, and has a number of quirks because it's used directly by the operating system. For these reasons, many developers choose to install and use a separate Python installation. The `Hitchhiker's Guide to Python`_ provides an excellent guide -to `Installing Python on OSX `_, +to `Installing Python on MacOS `_, which explains how to install Python with the `Homebrew`_ manager. Assuming you've installed Python with Homebrew, you'll also likely need the @@ -372,17 +372,17 @@ following brew packages: $ brew install freetype pkg-config gcc openssl -OSX + virtualenv + matplotlib +MacOS + virtualenv + matplotlib ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -A note about using matplotlib in virtual enviroments on OSX: it may be +A note about using matplotlib in virtual enviroments on MacOS: it may be necessary to run .. code-block:: bash echo "backend: TkAgg" > ~/.matplotlib/matplotlibrc -in order to override the default ``macosx`` backend for your system, which +in order to override the default ``MacOS`` backend for your system, which may not be accessible from inside the virtual environment. This will allow Catalyst to open matplotlib charts from within a virtual environment, which is useful for displaying the performance of your backtests. To learn more diff --git a/appendix.html b/appendix.html index dc117c2c..365b4574 100644 --- a/appendix.html +++ b/appendix.html @@ -84,7 +84,7 @@
  • MacOS Requirements
  • Windows Requirements
  • @@ -94,8 +94,8 @@
  • Catalyst Beginner Tutorial
  • MacOS Requirements
  • Windows Requirements
  • @@ -96,8 +96,8 @@
  • Catalyst Beginner Tutorial
    • Basics
    • My first algorithm
    • +
    • Ingesting data
    • Running the algorithm
    • @@ -134,7 +134,7 @@
    • Videos
    • Resources
        @@ -241,8 +241,8 @@

        Basics

        Catalyst is an open-source algorithmic trading simulator for crypto -assets written in Python.

        -

        The source can be found at: https://github.com/enigmampc/catalyst

        +assets written in Python. The source code can be found at: +https://github.com/enigmampc/catalyst

        Some benefits include:

        • Support for several of the top crypto-exchanges by trading volume.
        • @@ -259,8 +259,7 @@ marketplace, Catalyst empowers users to share and curate data and build profitable, data-driven investment strategies.

        This tutorial assumes that you have Catalyst correctly installed, see the -installation instructions if you haven’t set up -Catalyst yet.

        +Install section if you haven’t set up Catalyst yet.

        Every catalyst algorithm consists of at least two functions you have to define:

          @@ -272,15 +271,17 @@ define:

          context is a persistent namespace for you to store variables you need to access from one algorithm iteration to the next.

          After the algorithm has been initialized, catalyst calls the -handle_data() function once for each event. At every call, it passes -the same context variable and an event-frame called data -containing the current trading bar with open, high, low, and close -(OHLC) prices as well as volume for each crypto asset in your universe.

          +handle_data() function on each iteration, that’s one per day (daily) or +once every minute (minute), depending on the frequency we choose to run our +simulation. On every iteration, handle_data() passes the same context +variable and an event-frame called data containing the current trading bar +with open, high, low, and close (OHLC) prices as well as volume for each +crypto asset in your universe.

        My first algorithm

        -

        Lets take a look at a very simple algorithm from the examples -directory: buy_btc_simple.py:

        +

        Lets take a look at a very simple algorithm from the examples directory: +buy_btc_simple.py:

        -
        -

        Running the algorithm

        -

        To can now test this algorithm on crypto data, catalyst provides three -interfaces:

        -
          -
        • A command-line interface,
        • -
        • IPython Notebook magic,
        • -
        • and run_algorithm().
        • -
        -

        Ingesting data

        -

        In previous versions of Catalyst you needed to manually ingest data before running -your algorithm to make it available at runtime. Starting with version 0.3, the -algorithm will automagically ingest the data it needs the first time that encounters -a data request for data that it doesn’t have.

        -

        Still, we believe it is important for you to have a high-level understanding -of how data is managed:

        +

        Ingesting data

        +

        Before you can backtest your algorithm, you first need to load the historical +pricing data that Catalyst needs to run your simulation through a process called +ingestion. When you ingest data, Catalyst downloads that data in compressed +form from the Enigma servers (which eventually will migrate to the Enigma Data +Marketplace), and stores it locally to make it available at runtime.

        +

        In order to ingest data, you need to run a command like the following:

        +
        catalyst ingest-exchange -x bitfinex -i btc_usd
        +
        +
        +

        This instructs Catalyst to download pricing data from the Bitfinex exchange +for the btc_usd currency pair (this follows from the simple algorithm +presented above where we want to trade btc_usd), and we’re choosing to test +our algorithm using historical pricing data from the Bitfinex exchange. By +default, Catalyst assumes that you want data with daily frequency (one candle +bar per day). If you want instead minute frequency (one candle bar for every +minute), you would need to specify it as follows:

        +
        catalyst ingest-exchange -x bitfinex -i btc_usd -f minute
        +
        +
        +
        Ingesting exchange bundle bitfinex...
        +  [====================================]  Ingesting daily price data on bitfinex:  100%
        +
        +
        +

        We believe it is important for you to have a high-level understanding of how +data is managed, hence the following overview:

        • Pricing data is split and packaged into bundles: chunks of data organized as time series that are kept up to date daily on Enigma’s servers. Catalyst -downloads the bundles that needs at any given time, and reconstructs the whole -dataset in your hard drive.
        • -
        • Pricing data is provided in daily and minute resolution. Those are different -bundle datasets, and are managed separately.
        • -
        • Bundles are exchange-specific, as the pricing data is specific to the trades that -happen in each exchange. You can optionally specify which exchange you want pricing -data from.
        • -
        • Catalyst keeps track of all the downloaded bundles, so that it only has to download -them once, and will do incremental updates as needed.
        • -
        • When running in live trading mode, Catalyst will first look for historical -pricing data in the locally stored bundles. If there is anything missing, Catalyst will -hit the exchange for the most recent data, and merge it with the local bundle to make -it available for future iterations.
        • +downloads the requested bundles and reconstructs the full dataset in your +hard drive. +
        • Pricing data is provided in daily and minute resolution. Those are +different bundle datasets, and are managed separately.
        • +
        • Bundles are exchange-specific, as the pricing data is specific to the trades +that happen in each exchange. As a result, you can must specify which +exchange you want pricing data from when ingesting data
        • +
        • Catalyst keeps track of all the downloaded bundles, so that it only has to +download them once, and will do incremental updates as needed.
        • +
        • When running in live trading mode, Catalyst will first look for +historical pricing data in the locally stored bundles. If there is anything +missing, Catalyst will hit the exchange for the most recent data, and merge +it with the local bundle to optimize the number of requests it needs to make +to the exchange.
        -

        If you want to learn more, check out the ingesting data section -for more detail.

        +

        The ingest-exchange command in catalyst offers additional parameters to +further tweak the data ingestion process. You can learn more by running the +following from the command line:

        +
        catalyst ingest-exchange --help
        +
        +
        +
        +

        Running the algorithm

        +

        You can now test your algorithm using cryptoassets’ historical pricing data, +catalyst provides three interfaces:

        +
          +
        • A command-line interface (CLI),
        • +
        • the IPython Notebook magic,
        • +
        • and a run_algorithm() that you can call from other +Python scripts.
        • +
        +

        We’ll start with the CLI, and introduce the IPython Notebook below. Some of +the example algorithms provide instructions on how to run +them both from the CLI, and using the run_algorithm() function.

        Command line interface

        -

        After you installed Catalyst you should be able to execute the following -from your command line (e.g. cmd.exe on Windows, or the Terminal app -on OSX). Displaying here a simplified output for eductional purposes:

        +

        After you installed Catalyst, you should be able to execute the following +from your command line (e.g. cmd.exe or the Anaconda Prompt on Windows, +or the Terminal application on MacOS).

        $ catalyst --help
         
        +

        This is the resulting output, simplified for eductional purposes:

        Usage: catalyst [OPTIONS] COMMAND [ARGS]...
         
           Top level catalyst entry point.
        @@ -366,10 +396,11 @@ Commands:
           run              Run a backtest for the given algorithm.
         
        -

        There are three main modes you can run on Catalyst. The first being ingest-exchange -for data ingestion, which we have summarized in the previous section. The second -is live to use your algorithm to trade live against a given exchange, and the -third mode run is to backtest your algorithm before trading live with it.

        +

        There are three main modes you can run on Catalyst. The first being +ingest-exchange for data ingestion, which we have covered in the previous +section. The second is live to use your algorithm to trade live against a +given exchange, and the third mode run is to backtest your algorithm before +trading live with it.

        Let’s start with backtesting, so run this other command to learn more about the available options:

        $ catalyst run --help
        @@ -413,18 +444,20 @@ Options:
         

        As you can see there are a couple of flags that specify where to find your -algorithm (-f) as well as a parameter to specify which exchange to use. -There are also arguments for the date range to run the algorithm over -(--start and --end). Finally, you’ll want to save the performance -metrics of your algorithm so that you can analyze how it performed. This is -done via the --output flag and will cause it to write the performance -DataFrame in the pickle Python file format. Note that you can also define -a configuration file with these parameters that you can then conveniently pass -to the -c option so that you don’t have to supply the command line args -all the time (see the .conf files in the examples directory).

        +algorithm (-f) as well as a the -x flag to specify which exchange to +use. There are also arguments for the date range to run the algorithm over +(--start and --end). You also need to set the base currency for your +algorithm through the -c flag, and the --capital_base. All the +aforementioned parameters are required. Optionally, you will want to save the +performance metrics of your algorithm so that you can analyze how it performed. +This is done via the --output flag and will cause it to write the +performance DataFrame in the pickle Python file format. Note that you can +also define a configuration file with these parameters that you can then +conveniently pass to the -c option so that you don’t have to supply the +command line args all the time.

        Thus, to execute our algorithm from above and save the results to buy_btc_simple_out.pickle we would call catalyst run as follows:

        -
        catalyst run -f buy_btc_simple.py -x bitfinex --start 2016-1-1 --end 2017-9-30 -o buy_btc_simple_out.pickle
        +
        catalyst run -f buy_btc_simple.py -x bitfinex --start 2016-1-1 --end 2017-9-30 -c usd --capital-base 100000 -o buy_btc_simple_out.pickle
         
        INFO: run_algo: running algo in backtest mode
        @@ -446,14 +479,19 @@ applying the slippage model which models the influence of your order on
         the stock price, so your algorithm will be charged more than just the
         asset price. (Note, that you can also change the commission and
         slippage model that catalyst uses).

        -

        Let’s take a quick look at the performance DataFrame. For this, we -use pandas from inside the IPython Notebook and print the first ten -rows. Note that catalyst makes heavy usage of -pandas, especially for data input and -outputting so it’s worth spending some time to learn it.

        +

        Let’s take a quick look at the performance DataFrame. For this, we write +different Python script–let’s call it print_results.py–and we make use of +the fantastic pandas library to print the first ten rows. Note that +catalyst makes heavy usage of pandas, +especially for data analysis and outputting so it’s worth spending some time to +learn it.

        import pandas as pd
         perf = pd.read_pickle('buy_btc_simple_out.pickle') # read in perf DataFrame
        -perf.head()
        +print(perf.head())
        +
        +
        +

        Which we execute by running:

        +
        $ python print_results.py
         
        @@ -617,31 +655,61 @@ information about the state of your algorithm. The column and allows us to plot the price of bitcoin. For example, we could easily examine now how our portfolio value changed over time compared to the bitcoin price.

        -
        %load_ext catalyst
        -
        -
        -
        %pylab inline
        -figsize(12, 12)
        -import matplotlib.pyplot as plt
        +

        Now we will run the simulation again, but this time we extend our original +algorithm with the addition of the analyze() function. Somewhat analogously +as how initialize() gets called once before the start of the algorith, +analyze() gets called once at the end of the algorithm, and receives two +variables: context, which we discussed at the very beginning, and perf, +which is the pandas dataframe containing the performance data for our algorithm +that we reviewed above. Inside the analyze() function is where we can +analyze and visualize the results of our strategy. Here’s the revised simple +algorithm (note the addition of Line 1, and Lines 11-18)

        +
        import matplotlib.pyplot as plt
        +from catalyst.api import order, record, symbol
         
        -ax1 = plt.subplot(211)
        -perf.portfolio_value.plot(ax=ax1)
        -ax1.set_ylabel('portfolio value')
        -ax2 = plt.subplot(212, sharex=ax1)
        -perf.btc.plot(ax=ax2)
        -ax2.set_ylabel('bitcoin price')
        +def initialize(context):
        +    context.asset = symbol('btc_usd')
        +
        +def handle_data(context, data):
        +    order(context.asset, 1)
        +    record(btc = data.current(context.asset, 'price'))
        +
        +def analyze(context, perf):
        +    ax1 = plt.subplot(211)
        +    perf.portfolio_value.plot(ax=ax1)
        +    ax1.set_ylabel('portfolio value')
        +    ax2 = plt.subplot(212, sharex=ax1)
        +    perf.btc.plot(ax=ax2)
        +    ax2.set_ylabel('bitcoin price')
        +    plt.show()
         
        -
        Populating the interactive namespace from numpy and matplotlib
        -
        -
        -
        <matplotlib.text.Text at 0x10eaeadd0>
        +

        Here we make use of the external visualization library called +matplotlib, which you might recall we installed +alongside enigma-catalyst (with the exception of the Conda install, where it +was included by default inside the conda environment we created). If for any +reason you don’t have it installed, you can add it by running:

        +
        (catalyst)$ pip install matplotlib
         
        +

        If everything works well, you’ll see the following chart:

        https://s3.amazonaws.com/enigmaco-docs/github.io/buy_btc_simple_graph.png

        Our algorithm performance as assessed by the portfolio_value closely matches that of the bitcoin price. This is not surprising as our algorithm only bought bitcoin every chance it got.

        +
        +

        If you get an error when invoking matplotlib to visualize the performance +results refer to MacOS + Matplotlib. +Alternatively, some users have reported the following error when running an algo +in a Linux environment:

        +
        ImportError: No module named _tkinter, please install the python-tk package
        +
        +
        +

        Which can easily solved by running (in Ubuntu/Debian-based systems):

        +
        sudo apt install python-tk
        +
        +
        +
        diff --git a/bundles.html b/bundles.html index 8c2a312d..c405c590 100644 --- a/bundles.html +++ b/bundles.html @@ -132,7 +132,7 @@
      • Videos
      • Resources
      • Activate the environment:

        -

        Linux or OSX:

        +

        Linux or MacOS:

        source activate catalyst
         
        @@ -519,25 +519,25 @@ beginning of this page.

      • MacOS Requirements

        -

        The version of Python shipped with OSX by default is generally out of date, +

        The version of Python shipped with MacOS by default is generally out of date, and has a number of quirks because it’s used directly by the operating system. For these reasons, many developers choose to install and use a separate Python installation. The Hitchhiker’s Guide to Python provides an excellent guide -to Installing Python on OSX, +to Installing Python on MacOS, which explains how to install Python with the Homebrew manager.

        Assuming you’ve installed Python with Homebrew, you’ll also likely need the following brew packages:

        $ brew install freetype pkg-config gcc openssl
         
        -
        -

        OSX + virtualenv + matplotlib

        -

        A note about using matplotlib in virtual enviroments on OSX: it may be +

        +

        MacOS + virtualenv + matplotlib

        +

        A note about using matplotlib in virtual enviroments on MacOS: it may be necessary to run

        echo "backend: TkAgg" > ~/.matplotlib/matplotlibrc
         
        -

        in order to override the default macosx backend for your system, which +

        in order to override the default MacOS backend for your system, which may not be accessible from inside the virtual environment. This will allow Catalyst to open matplotlib charts from within a virtual environment, which is useful for displaying the performance of your backtests. To learn more diff --git a/jupyter.html b/jupyter.html index 39cacf3f..9548c6b3 100644 --- a/jupyter.html +++ b/jupyter.html @@ -134,7 +134,7 @@

      • Videos
      • Resources
          diff --git a/live-trading.html b/live-trading.html index 61bcff7e..9ae59e2e 100644 --- a/live-trading.html +++ b/live-trading.html @@ -134,7 +134,7 @@
        • Videos
        • Resources
            diff --git a/naming-convention.html b/naming-convention.html index f9e7ff5c..97cafe62 100644 --- a/naming-convention.html +++ b/naming-convention.html @@ -134,7 +134,7 @@
          • Videos
          • Resources
              diff --git a/release-process.html b/release-process.html index 8933f62d..cc1e3eec 100644 --- a/release-process.html +++ b/release-process.html @@ -132,7 +132,7 @@
            • Videos
            • Resources
                diff --git a/releases.html b/releases.html index 30eab0f8..6a37ffbf 100644 --- a/releases.html +++ b/releases.html @@ -133,7 +133,7 @@
              • Videos
              • Resources
                  diff --git a/resources.html b/resources.html index eafd5ad2..08374de0 100644 --- a/resources.html +++ b/resources.html @@ -134,7 +134,7 @@
                • Videos
                • Resources
                    diff --git a/search.html b/search.html index 36fbe42d..4283bca1 100644 --- a/search.html +++ b/search.html @@ -84,7 +84,7 @@
                • MacOS Requirements
                • Windows Requirements
                • @@ -94,8 +94,8 @@
                • Catalyst Beginner Tutorial
                  • Basics
                  • My first algorithm
                  • +
                  • Ingesting data
                  • Running the algorithm
                  • diff --git a/searchindex.js b/searchindex.js index 5aba74e6..246b82fe 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:46,filenames:["appendix","beginner-tutorial","bundles","development-guidelines","example-algos","index","install","jupyter","live-trading","naming-convention","release-process","releases","resources","utilities","videos","welcome"],objects:{"zipline.data.bundles":{bundles:[0,0,1,""]}},objnames:{"0":["py","data","Python data"]},objtypes:{"0":"py:data"},terms:{"000000e":1,"0x10eaeadd0":1,"1000th":7,"15t":4,"1st":1,"328842e":1,"340mb":11,"380954e":1,"40mb":11,"460mb":11,"505275d6646a41f3856b22b16678d":1,"536708e":1,"5min":[4,7],"650729e":1,"7869f7828fa140328eb40477bb7d":1,"998236e":1,"998677e":1,"999120e":1,"999558e":1,"99mb":11,"__file__":13,"__main__":4,"__name__":4,"__wrapped__":10,"boolean":[2,8],"case":[1,2,3,6,13],"class":[3,10],"default":1,"export":10,"final":[1,2,3],"float":[1,11],"import":[1,2,4,7,10,13],"int":2,"long":[1,2,4],"new":1,"public":11,"return":[1,4,8,10,11,12],"short":[1,3,4],"static":10,"throw":11,"true":[4,7,8],"try":[4,6],"var":1,"while":[6,10,11],aapl:2,abil:2,abl:[1,2,6],about:[1,2,5,6,15],abov:[1,3,4,6,8,9,10],accept:[2,6,10],accord:10,account:[2,4,5,7,11,15],achiev:1,acquir:[2,6],across:[5,9,11,15],activ:[6,10],actual:7,add:[2,3,6,10,13],add_subplot:1,addit:[3,5,6,11,15],address:10,adjust:[2,11],administr:6,advantag:6,afford:[4,7],after:[1,2,4,6,7,10],against:[1,5,8,11,15],agre:4,ahead:1,aim:12,algebra:6,algo:[1,2,4,11],algo_namespac:[4,8],algo_volatil:[1,7],algofil:[1,2],algorithm_period_return:[1,4,7],algotext:1,alia:4,alias:4,all:[0,1,2,3,4,5,6,7,8,9,10,11,15],allow:[1,2,5,6,15],allowfullscreen:[],along:2,alpha:[1,4,6,7],alreadi:[2,3,6,7],also:[1,2,3,4,5,6,7,8,10,15],altern:[6,9],although:1,alwai:[2,8,9,10],amount:[1,4,7,11],amp_btc:9,anaconda:[6,10],analysi:[4,5,10,11,12,15],analyst:12,analyt:[5,6,15],analyz:[1,4,7,8,11,13],ani:[1,2,4,6,7,9,10,13],anonym:2,anoth:[1,2,4,7],anymor:1,anyth:[1,6,10],apach:4,app:1,appar:1,appear:[2,10],append:10,appli:1,applic:[1,4],appropri:3,approxim:[4,7],appveyor:10,apt:6,arbitrari:8,arch:6,architectur:1,ardr_btc:9,arg:[1,10],argument:[0,1,2,7,8,10],argv:13,around:[5,10,15],arrai:[4,6],art:[5,15],articl:3,ask:[1,3],assess:1,asset_nam:[4,7],assetdbwrit:2,assign:[1,8],assist:6,assum:[1,3,6],atla:6,attempt:[2,8],attribut:[4,10],auth:[8,11],auto:11,automag:1,automat:1,avail:1,avoid:[1,2,4],awar:10,ax1:[1,4,7],ax2:[1,4,7],ax3:[4,7],ax4:[4,7],ax5:[4,7],ax6:[4,7],axhlin:4,back:[3,6,9],backend:6,bah:4,bar:[1,4,11],bar_count:[1,4],base:[1,2,4,5,6,7,8,14,15],base_curr:[4,8,9,13],base_pric:4,basenam:13,basi:[4,11],batch:6,batteri:1,bch_btc:9,bch_eth:9,bch_usdt:9,bcn_btc:9,bcn_xmr:9,bcolz:2,bcolzdailybarread:2,bcolzdailybarwrit:2,bcolzminutebarread:2,bcolzminutebarwrit:2,bcy_btc:9,be62ff77760c4599abaac43be9cc9:1,bear:4,becaus:[6,7,10,11],been:[0,1,2,6,10],befor:[1,2,4,6,8,11],before_trading_start:[0,4],begin:6,behavior:0,bela_btc:9,believ:1,below:[1,4,6,7,13],benchmark:[4,5,7,11,15],benchmark_period_return:[1,4,7],benchmark_volatil:[1,7],benefit:1,best:[3,5,6,15],beta:[1,4,7],between:[3,5,9,15],bia:1,big:6,bin:[4,6],binari:[6,10],bit:[3,6],bitcoin:[1,5,8,9,13,15],bitcoin_usd_asset:8,bitfinex:[1,4,5,7,8,11,15],bittrex:[1,5,8,11,15],bld:3,blk_btc:9,blk_xmr:9,blockchain:9,blotter:13,bodi:3,book:1,both:[3,8,9,10],bought:1,bound:1,breakdown:8,brew:6,brother:6,brows:6,browser:[3,7,10],btc:[1,4,8,11],btc_usd:[1,7,8,9],btc_usdt:[4,5,9,13,15],btcd_btc:9,btcd_xmr:9,btm_btc:9,bts_btc:9,bug:[2,3],bui:1,build:[1,3,6,10],build_ext:3,burst_btc:9,button:[6,10],buy_and_hodl:[1,4,11],buy_btc_simpl:1,buy_btc_simple_out:1,buy_df:4,buy_low_sell_high:11,calcul:[1,3,4,8],call:[1,2,3,4],can:[1,2,3,4,5,6,8,9,10,11,13,15],can_trad:[4,11],cancel_ord:[4,7],candl:9,cannot:[4,6],canon:3,capit:[1,4,7],capital_bas:[4,13],capital_us:[1,7],captur:1,cash:[2,3,4,7],catalyst_dev:[1,5,6,15],caus:[0,1,2,3],cell:7,cert:11,certian:0,chanc:1,chang:[1,3,4,5,6,7,10,11,15],channel:[1,5,6,15],charact:3,charg:1,chart:6,check:[1,2,3,4,6,7,8,9],checker:10,checkout:[3,10],choic:10,choos:[4,6,9,10,13],chosen:13,chunk:[1,11],circumv:6,clam_btc:9,classic:1,classifi:1,clean:[2,6,10,11],clear:2,cli:[4,7,11,13],click:[6,10],client:8,clone:3,close:[1,4,7,13],cmd:[1,6],code:[4,6,10,11,13],codebas:3,coin:[7,11],collect:[1,2,4],color:[1,4,7],column:[1,2,7],com:[1,2,3,8],combin:[6,8],come:[2,6],common:1,commonli:1,commun:[6,12],comp:4,compar:[1,4,5,15],comparison:11,compat:[5,11,15],compil:[6,10,11],complement:4,complet:8,complex:6,complianc:4,complimentari:13,comprehens:11,compress:11,comput:[1,4,6,12],concept:1,conda_build_matrix:10,condit:4,conf:1,config:6,configur:[1,6,11],congratul:6,consid:4,consist:[1,9],constant:7,constraint:2,consum:10,contain:[1,2,3,6,7],context:[1,4,7,13],continu:1,continuum:6,conveni:1,convent:[4,8],convers:2,convert:2,copi:[2,3,4,10],copyright:4,core:6,correct:[2,6,8,10],correctli:[1,6,10],correctwai:6,correspond:[6,8,13],cost:[1,4],could:[0,1,2,4,6,7,13],count:2,coupl:1,cover:13,coverag:[5,8,9,15],cpython:6,crash:2,creat:2,creation:11,crowd:12,crypto:[1,5,11,15],cryptoasset:[1,4,13,14],cryptocurr:[4,9],csv:7,csvfile:13,csvwriter:13,cumul:11,cumulative_capital_us:3,curat:[1,5,15],currenc:[1,4],current:[0,1,2,4,6,7,8,10,11,13],current_dai:4,current_dt:[4,13],custom:[2,13],cvc_btc:9,cvc_eth:9,cython:10,d6dca79513214346a646079213526:1,dai:[1,2,4,7,10],daili:[1,2,4,5,9,11,13,15],darkgoldenrod:4,dash:8,dash_btc:9,dash_usdt:9,dash_xmr:9,data_frequ:[4,13],databas:2,datafram:[1,2,4,5,7,12,13,15],dataframe_cach:2,dataset:[1,2],date:[1,2,4,6,10,11,13],datetim:13,dcr_btc:9,debian:6,debug:10,decid:10,decim:11,decor:10,decreas:4,def:[1,4,7,13],defin:[1,4,7,8],delai:1,delet:2,denomin:7,dep:3,depend:[3,6,10,11,13],deploi:10,deprec:3,deriv:6,descript:[3,6],desir:[1,7,13],desktop:9,detail:[1,5,15],determin:4,dev1:6,dev2:6,dev3:6,dev4:6,dev5:6,dev6:6,dev8:6,dev9:6,dev:[3,6,9],devel:6,develop:1,devis:1,dgb_btc:9,dictionari:11,did:[5,15],didn:6,differ:[1,2,6,8,9,10,13],dir:6,directli:[1,2,6,11,13],directori:[1,2,3,4,6,8,10],disabl:11,disablemsi:6,discord:[1,3,5,6,15],disk:11,displai:[1,6,7,10],dist:10,distribut:[4,6,10],distutil:10,divid:3,dividend:2,dma:1,dname:1,dnf:6,doc:2,docker:3,dockerfil:3,document:[3,4,6,8],doe:[2,6,7,9],doesn:[1,2],doge_btc:9,dollar:9,don:[1,3,7,14],done:[1,4,7,10],down:[1,4,14],download:[1,2,6,7,11],draft:10,drawback:2,drive:1,driven:[1,5,15],dropbox:11,dword:6,each:[1,2,3,4,5,6,8,9,11,13,15],earlier:[1,2,3,4],earliest:4,eas:[5,15],easi:[2,7,12],easier:[1,2,9],easiest:6,easili:[1,5,6,15],echo:6,eco:[5,15],edit:[3,6,10],editor:6,educt:1,either:[1,4,6],elabor:1,elif:[1,4],els:6,emb:[],emc2_btc:9,empow:[1,5,15],empti:[2,3,4,8,10,11],enabl:8,encount:[1,6],end:[1,4,7,11,13],ending_cash:[1,7],ending_exposur:[1,7],enh:3,enhanc:3,enigma:[1,4,5,6,8,9,15],enigmampc:[1,3],enough:[1,6],ensur:[0,6,8,10],enter:[1,6],entir:3,entri:[1,6],env:[4,6],enviorn:2,enviro:6,environemnt:[6,7],equal:[2,4,7,13],equiti:2,error:[3,4,6,7,8,9,11],especi:1,establish:[5,15],estim:1,etc:[3,10,11],etc_btc:9,etc_eth:9,etc_usdt:9,eth:[1,8],eth_btc:[8,9],eth_usdt:9,ether:4,ethereum_bitcoin_asset:8,evalu:1,even:[2,6],event:1,everi:[1,6,7],everyth:2,exact:13,examin:1,excel:6,except:4,exchang:[1,2,4],exchange_algorithm:1,exchange_nam:[4,8,13],execut:[0,1,4,7,8,11],exist:[2,3,5,6,15],exit:[1,4,10],exit_success:10,exp_btc:9,expect:[0,2,6,7,9,10],experi:6,experienc:6,explain:[6,8],explicitli:[1,10],explictili:6,express:[1,4,5,15],extens:[2,3,6],extern:6,extra:10,extract_transact:4,facto:7,fail:[2,6,7],failur:2,fairli:3,fals:[4,7],familiar:3,far:2,fast:2,fatal:6,fct_btc:9,featur:[1,4],fedora:6,feedback:2,feel:[1,7],fetch:[2,9],few:[2,10],fewer:6,field:[2,4,10],fig:1,figsiz:1,figur:1,file:[1,2,3,4,6,7,8],filenam:[1,13],fill:1,filter:11,financ:7,financi:[1,11],find:[1,2,6,10],fine:10,finish:1,fix:3,flag:[1,4,6,8,10],flake8:3,fldc_btc:9,flo_btc:9,floor:4,focu:[5,15],folder:[4,6,11],follow:[0,1,2,3,4,6,7,8,9,10,13],footprint:6,fork:12,form:[1,9],format:[1,2],fortran:6,forward:2,foster:12,found:[1,3,6,9],fraction:11,frame:[1,4],framebord:[],free:[1,7],freelanc:12,freetyp:6,frequenc:[1,4,11],fresh:10,from:[0,1,2,3,4,6,7,9,10,11,13],full:[1,7,13],fund:12,fundament:12,further:[1,4,5,15],futur:[1,2],game_btc:9,gas_btc:9,gas_eth:9,gave:1,gcc:6,gcf:[4,7],gen_type_stub:10,gener:[2,3,5,6,8,10,11,13,15],get:[1,2,3,4],get_open_ord:[4,7],gfortran:6,github:[1,3,6,10],give:4,given:[1,2,9,13],gno_btc:9,gno_eth:9,gnt_btc:9,gnt_eth:9,goe:[4,8,14],good:10,goog:2,got:1,govern:4,grain:10,graph:7,grc_btc:9,green:4,group:[1,3],grow:2,guid:[3,6,11],gzip:10,hand:3,handi:6,handl:[3,4,11],handle_data:[0,1,4,7,8,13],hang:6,happen:[1,2],happi:10,hard:1,hash:11,have:[0,1,2,3,5,6,7,10,15],haven:1,head:[1,6,7],header:[6,10],heavi:1,heavili:12,hedg:12,height:[],held:9,help:[1,2],here:[1,2,6,7,8],hidden:10,high:[1,8,12,13],highest:10,hint:[6,10],histor:[1,4,5,11,15],hit:[1,11],hitchhik:6,hkey_local_machin:6,hold:[4,8],home:11,homebrew:6,hope:1,hopefulli:[4,14],how:[1,2,4,6,7,8],howev:[8,10],html:[3,4,10],http:[1,4,8,10],huc_btc:9,idea:[1,2,3],ifram:[],illustr:8,immedi:4,immut:0,impact:11,imper:3,implement:[1,2,4,11],impli:4,implicitli:0,improv:[3,11],inc:4,includ:[1,2,3,4,6,10,13],incomplet:2,inconsist:8,increas:[2,4,11],increment:[1,10],independ:6,index:[1,3,4,7,10],indic:[2,4,6],individu:[1,8],infer:2,influenc:1,info:[1,4,7],inform:[0,1,2,6,10],initi:[0,1,4,7,8,11,13],inlin:[1,7],inplac:3,input:[1,5,7,9,15],insid:[1,6,7],insight:[1,5,15],inspect:1,instal:[1,3],installt:6,instanc:[0,2,4],instead:[2,3,4,7,9,11],instruct:[1,3,6],integ:[2,11],integr:[5,15],intend:[1,3,10],interact:[1,7],intern:[2,6],interpret:[4,7,13],interv:4,introduc:[8,9,11],invest:[1,5,15],invok:2,involv:[2,6],ipython:[1,7],is_bui:[4,7],issu:[1,3,6,9,10,11],iter:[1,2,13],itself:1,jan:1,jobrwst9jui:[],join:[5,6,15],json:[8,11],juli:13,jump:6,jupyt:[],just:[1,2,4,7,9,10],keep:[1,2,6],kei:[2,5,6,8,15],kept:1,keyerror:11,kind:4,know:7,knowledg:[5,15],kwarg:10,label:[1,4,8,10],lack:9,languag:4,lapack:6,larg:2,larger:11,last:[1,2,6,7],later:[1,2,3],latest:[10,11],launch:[6,7],law:4,layer:9,lazi:2,lbc_btc:9,leak:2,learn:[1,5,6,15],least:[1,3],legend:[1,4,7],len:4,less:2,let:[1,7],level:[1,2,4],leverag:[4,7,12],lib:4,libatla:6,libfreetype6:6,libgfortran:6,librari:[3,4,5,6,11,12,15],licens:4,lifetim:2,like:[1,2,3,5,6,9,10,15],limit:[4,9],limit_pric:[4,7],linear:6,linter:10,list:[0,2,6,9,10,13],littl:[1,3],live:[1,4,6],live_algo:4,live_graph:4,load:[2,7],load_ext:[1,7],loc:[1,4,7],local:[1,2,3,6,7,10],locat:[1,2,13],log:[4,6],logbook:4,logger:4,logic:[1,11],long_mavg:1,longer:[1,3,10],look:[1,2,4,7,10,13],lookup:1,loop:2,loss:11,lot:2,low:[1,8],lower:11,lowercas:[8,9],lsk_btc:9,lsk_eth:9,ltc:8,ltc_btc:9,ltc_usdt:9,ltc_xmr:9,machin:[2,5,10,15],macosx:6,made:[2,3],magic:[1,7],mai:[1,2,4,6,10],maid_btc:9,maid_xmr:9,main:[1,6,10],maint:3,maintain:[9,10],mainten:3,major:10,make:[1,2,3,4,6,7,9,10],manag:[1,6,10],mani:[1,2,6,10,12],manifest:10,manner:8,manual:[1,6,10],map:[0,2,9],marker:4,markers:[1,4,7],market:[1,8,9],market_curr:9,marketplac:1,master:10,match:[1,6,8,10],matplotlib:[1,4],matplotlibrc:6,matrix:10,matter:3,mavg:1,max_capital_us:3,max_leverag:3,maxim:[5,15],maybe_show_progress:2,mcoin:[4,7],mean:[1,2],mean_reversion_simpl:4,memori:2,mention:[1,6,10],menu:6,merg:1,merger:2,messag:1,method:[0,2,4,6,10,11,13],metric:[1,11],micro:10,microsoft:6,might:1,min:4,mind:4,miniconda:6,minim:[5,15],minimum:11,minor:10,minut:[1,2,4,5,6,11,13,15],miss:[1,6,8,11],mkvirtualenv:3,mode:[1,4,5,8,15],modif:[3,8],modifi:13,moment:[6,10],momentum:[1,4,14],monei:0,month:[10,13],more:[0,1,2,4,5,6,11,13,15],most:[1,2,4,6,7,8,11],movement:1,mpc:[1,4],msft:2,msi:6,msiexec:6,much:[1,2],multipl:[2,10,11],must:[2,8,10],my_algo_cod:8,my_algo_nam:8,name:[1,2,3,4,6,7,8],namespac:[1,4,10],nan:[1,7],nano:10,nativ:6,natur:1,naut_btc:9,nav_btc:9,navig:[3,6],ndarrai:1,necessari:6,nee:6,need:[1,2,3,4,6,9,10,12,13],neg:1,neo_eth:8,neo_ethereum_asset:8,neo_usd:4,neos_btc:9,never:2,newer:2,next:[1,2,6],nice:[5,15],nmc_btc:9,non:6,none:[4,7,13],normal:11,note:1,note_btc:9,notebook:1,noth:6,novemb:10,now:[1,2,4,6,10,11],number:[1,2,4,6,10,11],numer:6,numpi:[1,3,6,10,12],nxc_btc:9,nxt_btc:9,nxt_usdt:9,nxt_xmr:9,observ:6,obtain:4,occur:8,off:12,offset:4,ohlc:1,ohlcv:11,older:2,omg_btc:9,omg_eth:9,omni:9,omni_btc:9,onc:[1,2,4,6,7,10],onli:[0,1,2,3,4,5,6,10,13,15],open:[1,3,6,7,11,13],openssl:6,oper:6,operatbl:6,opt:4,optim:12,option:[1,2,6,13],order_id:1,order_target:1,order_target_perc:4,order_target_valu:[4,7],ordered_pip:3,org:[4,10],organ:1,origin:10,osx:1,other:[1,2,4,6,9,10,13],otherwis:6,our:[1,3,4,5,6,10,15],out:[1,2,3,5,6,7,10,15],outdat:6,outlin:6,output:[1,2,7],outstand:[4,7],overcom:9,overrid:[6,10],overview:[5,9,15],own:[2,6,8],packag:[1,6,7],pacman:6,page:[3,6,10,11],pair:[4,7,8,9,11],panda:[1,2,4,5,12,15],paper:3,param:1,parent:6,pars:2,part:[2,6,8],partial:6,particular:[5,6,15],pasc_btc:9,pass:[1,2,4,7,10],password:10,past:1,path:[2,6,11,13],pend:10,peopl:3,pep8:3,per:[2,4,11],percent:[4,7],perf:[1,3,4],perf_tran:1,perform:[0,1,3,4,5,6,7,11,12,15],period:[3,4],permiss:[4,6],persist:[1,4,11],pickl:[1,4],piec:[2,6],pink_btc:9,pip:3,pkg:6,place:[1,4,7,11],platform:[6,11,12],pleas:[5,6,13,15],plot:[1,4,7,12],plt:[1,4,7],plu:13,png:7,point:[1,9,10],poloniex:[1,4,5,7,8,9,11,13,15],popul:[1,10],portfolio:[1,4,7,11,13],portfolio_valu:[1,4,7],pos_amount:4,posit:[1,4,7,11],possibl:[2,3,6],post:10,pot_btc:9,power:[1,4,7,12],ppc_btc:9,practic:3,pre:[2,6],precis:11,predict:[1,8],prefer:6,prefix:3,preload:2,prepare_chunk:11,preprocess:10,prerequisit:6,present:1,preserv:11,prevent:[2,6,10],previous:1,price_chang:4,primari:6,print:[1,6,10],prior:[1,4],privileg:6,probabl:1,problem:[1,2,6,10],proce:6,proceed:6,process:[1,2,8],produc:[2,6],profit:[1,5,15],program:6,progress:2,project:[5,6,12,15],prompt:6,proper:6,properli:[6,13],protect:0,protocol:[1,9],provid:[0,1,2,5,6,7,8,11,12,13,15],publish:10,pull:[3,10],pun:1,purchas:[4,7],purpos:[1,8],push:10,put:8,pycharm:10,pydata:[4,5,15],pyfolio:11,pylab:1,pypirc:10,pypitest:10,pyplot:[1,4,7],python2:[6,11],python3:11,python:[1,3,4,6,7],pytz:13,qlkqcwluby8:[],quandl_api_kei:2,quandl_download_attempt:2,quantit:[7,12],queri:2,question:[1,3,5,15],quick:1,quickli:[4,14],quirk:6,quit:2,rads_btc:9,rais:3,ran:2,rang:[1,2,4],rather:[1,6],raw:[2,6],read:[1,2,6],read_pickl:1,readi:10,real:[0,4],realist:1,reason:[2,6],rebalanc:1,receiv:2,recent:[1,2,4,6],recogn:6,recommend:[2,6],reconstruct:1,record:[1,4,7,13],red:4,redhat:6,redon:11,redownload:[2,7],reduc:11,refactor:3,referenc:8,refus:7,regard:[5,15],regardless:[6,7,8],regedit:6,regist:[0,2,7],registri:6,regular:6,rel:3,relat:3,relationship:2,releas:[3,6],reli:12,remain:11,rememb:6,remot:2,remov:[3,6,10,11],renam:10,rep:6,rep_btc:9,rep_eth:9,rep_usdt:9,report:[1,3,6],repositori:[6,10,11],repres:[2,8],reproduc:2,request:[1,2,3,4],requir:[1,3,4],requirements_blaz:3,requirements_dev:3,requirements_doc:3,research:7,reserv:[4,7,9],reserve_ratio:[4,7],reserve_valu:[4,7],resolut:[1,4,5,11,13,15],resourc:[2,11],respect:[3,10,13],respons:2,rest:2,restart:11,restrict:6,restructuredtext:3,result:[1,2,4,6,7,8,13],resum:4,retri:2,retriev:[4,7,11],rev:3,revert:3,review:6,rhel:6,ric_btc:9,ride:[4,14],right:6,risk:[1,11],roll:1,rollup:2,root:[3,10],routin:6,row:[1,7],rsi:4,rst:[3,10],run_algo:[1,13],run_algorithm:[1,4,8,13],runtim:1,same:[1,2,6,7,8,10,11,13],sampl:11,satisfi:6,save:[1,2,3,4,6,13],sbd_btc:9,sc_btc:9,scale:[7,11],scatter:4,scientif:12,scikit:1,scipi:[5,6,15],scratch:6,script:[1,10,13],scriptnam:13,seamless:[5,15],search:6,second:[1,6],secret:8,section:[1,3,4,6,8,10,13],secur:[4,5,12,15],see:[0,1,2,4,5,6,8,13,15],seek:6,select:6,self:0,sell:[1,4,8,11,12,14],sell_df:4,separ:[1,3,6,8,9],seper:8,seri:1,seriou:1,server:[1,2,7,10],servic:2,session:6,set:[1,2,4,6,11],set_size_inch:[4,7],set_ylabel:[1,4,7],setup:[3,7,10],setuptool:6,sever:[1,5,6,15],share:[1,5,15],sharex:[1,4,7],sharp:1,ship:[2,6,10],short_exposur:1,short_mavg:1,short_valu:1,shorter:1,shorts_count:1,should:[0,1,2,3,6,8,10],shourc:2,show:[1,2,4,7],shown:2,sid:[2,7,11],signal:2,signatur:2,similar:[6,8],simpl:[1,4,14],simpler:13,simpli:[1,3,6,13],simplifi:1,simultan:11,sinc:[4,6,7,10,13],singl:[2,6,11],size:[4,6,11],sjcx_btc:9,skeleton:10,skip:1,sklearn:[5,15],slightli:6,small:4,smaller:6,smoothli:14,snip:7,snippet:13,softwar:[4,6],solut:6,solv:[2,6],some:[1,2,3,4,6,8,11,12],someon:6,someth:3,sortino:1,sourc:[1,2,3,4,6,10,12],space:7,special:8,specif:[1,4,11],specifi:[1,2,4,7,8,10],spend:1,spent:9,sphinx:[3,10],split:[1,2],splitext:13,spring:12,sqliteadjustmentwrit:2,src:[],ssl:11,stabl:[4,6],stai:10,standard:[2,3,9,11],start:[1,2,3,4,5,6,7,8,13,15],starting_cash:[1,4,7],starting_exposur:[1,7],starting_valu:[1,7],stat:11,state:[1,2,4,5,11,15],statist:[1,5,8,11,15],stats_util:4,statsmodel:[5,15],statu:8,stdout:1,steem_btc:9,steem_eth:9,step:[1,2,6],still:[1,2,4,6,7],stock:[1,2],stop:[4,7,11],stop_pric:[4,7],storag:[1,8,11],store:[1,2,9,13],str_btc:9,str_usdt:9,strat_btc:9,strategi:[1,4,15],stream:1,strictli:[2,6],string:[2,7,10],strongli:6,sty:3,style:3,subdirectori:2,subject:3,submit:3,subplot:[1,4,7],succe:10,succeed:7,success:[2,3],sudo:6,suffici:6,suggest:3,summar:[1,6],summari:11,suppli:[1,7],support:[1,4,6,7],suppos:[1,7],sure:6,surpris:1,suspect:3,symbol:[1,2,4,7],symbolnotfoundonexchang:9,sync:10,syntax:[10,11],sys_btc:9,system:[3,5,6,15],tag:10,take:[1,2,6,7,11],taken:10,talib:4,tar:10,tarbal:10,target:[1,8],target_hodl_ratio:[4,7],target_hodl_valu:[4,7],technic:[4,5,15],templat:10,temporari:10,ten:1,tend:8,tens:3,term:1,termin:[1,6],test:[1,3,10,11,12],testpypi:10,tether:[4,9],text:1,than:[1,2,3,6],thei:[1,2,10,11,12],them:[1,3,6,10],therefor:10,therein:6,thi:[0,1,2,3,4,6,7,8,9,10,13,14],thing:14,third:1,those:[1,3,10],though:2,three:[1,2,4,5,15],threshold:[4,7],through:[0,1,2,6,7],thu:[1,4,6,7],tick:4,tick_siz:7,ticker:2,time:[1,2,4,5,6,7,10,13,15],timeperiod:4,timeseri:4,timestamp:[1,2,11],titl:10,tkagg:6,to_csv:13,to_datetim:4,to_pydatetim:4,todai:[4,10],togeth:1,token:[8,13],too:1,tool:[2,3,6,10,12],top:[1,5,10,15],total:2,traceback:9,track:[1,3,4,11],tracker:1,traded_todai:4,trader:[1,12],trading_dai:[1,7],tradingalgorithm:[0,10],tradingcalendar:2,train:1,tran:[4,7],transact:[1,4,7,11],transaction:2,transaction_df:4,transfer:9,transform:1,transit:[5,15],travi:10,treasuri:[4,7],treasury_period_return:[1,4,7],trend:1,tri:[1,5,15],tst:3,tupl:2,turn:10,twice:10,two:[1,4,5,6,13,15],txt:[3,6,10],type:[4,6,10],typo:3,ubuntu:6,uncompress:11,under:[1,2,4,10],underli:1,underlin:10,underscor:9,understand:[1,6],undesir:0,unexpect:6,unit:[1,9,11],univers:[1,8],unknown:7,unless:4,unlik:2,unpack:6,unregist:0,unresolv:11,untar:2,until:4,unus:3,updat:1,upgrad:[6,10],upper:4,upward:1,url:10,usag:1,usd:[1,4,7,9],usdt:[4,9,13],usdt_btc:7,usdt_btc_benchmark:7,user:[1,2,5,6,7,9,10,15],usernam:10,usr:4,utc:[4,13],utilit:13,valid:11,valu:[1,4,6,7,8,11],vari:[6,13],variabl:[1,2,4,7,13],varieti:13,variou:[1,2,4],varnam:1,vcforpython27:6,venv:6,veri:[1,2,6,7,10],verifi:[6,10],versatil:13,version:[1,4,6,10],via:[1,6,7,9],via_btc:9,viabl:9,victori:9,video:11,view:[3,10],virtual:6,virtualenvwrapp:3,visit:[5,15],visual:[5,6,15],volum:[1,4,5,7,9,11,13,15],volumeshareslippag:7,vrc_btc:9,vtc_btc:9,wai:[2,5,6,7,15],wait:4,want:[1,2,3,4,7,9],warn:[7,10,11],warranti:4,wave:[4,14],web:10,weight:4,welcom:3,well:[1,2,5,6,15],were:[3,10],what:[3,6,8,10],whatev:2,whatsnew:10,wheel:[6,10],when:[0,1,2,3,4,6,8,10,14],where:[1,2,3,4,5,6,8,9,13,14,15],which:[1,2,3,4,6,7,8,10,11,13],whitepap:[5,12,15],whitespac:3,who:3,whole:1,why:3,width:10,win:10,window:1,within:[6,7],without:[2,4,6,7,8,11],workaround:11,worth:1,would:[1,2,4,6,10],wrap:10,write:1,writerow:13,written:[1,2,5,9,15],wrong:9,www:[4,8],xbc_btc:9,xbt:8,xcp_btc:9,xem_btc:9,xmr_btc:9,xmr_usdt:9,xpm_btc:9,xrp_btc:9,xrp_usdt:9,xvc_btc:9,yahoo_equ:2,year:10,yet:1,yml:[6,11],you:[1,2,3,4,5,6,7,9,10,13,15],your:[1,2,3,4,5,6,7,8,10,12,13,15],yourself:3,youtub:[],yum:6,zec_btc:9,zec_eth:9,zec_usdt:9,zec_xmr:9,zero:3,ziplin:[0,2,3,5,10,12,15],zipline_root:[2,10],zlib:6,zrx_btc:9,zrx_eth:9},titles:["API Reference","Catalyst Beginner Tutorial","Data Bundles","Development Guidelines","Example Algorithms","Features","Install","Catalyst & Jupyter Notebook","Live Trading","Naming Convention","Release Process","Release Notes","Resources","Utilities","Videos","Features"],titleterms:{"3rd":12,"__version__":10,"default":2,"function":0,"new":2,access:1,adjustment_writ:2,algorithm:[0,1,4,7,8],amazon:6,ami:6,api:[0,12],asset:0,asset_db_writ:2,authent:8,avail:2,averag:1,backtest:[0,2,14],basic:1,bdist:10,beginn:1,branch:3,bug:11,bui:4,build:11,built:0,bundl:[0,2],cach:[0,2],calendar:[0,2],cancel:0,catalyst:[1,7],command:[0,1],commiss:0,commit:[3,10],conclus:1,conda:[6,10],content:5,contribut:3,control:0,convent:9,creat:3,cross:1,csv:13,currenc:8,daily_bar_writ:2,data:[0,1,2,13],dev1:11,dev2:11,dev3:11,dev4:11,dev5:11,dev6:11,dev7:11,dev8:11,dev9:11,develop:3,discov:2,doc:3,docstr:3,document:[10,11],dual:1,end_sess:2,engin:0,environ:[2,3],exampl:[1,4],exchang:8,extract:13,factor:0,factori:2,featur:[5,15],file:[10,13],first:1,fix:11,format:3,get:6,git:3,gnu:6,guidelin:3,help:6,histori:1,hodl:4,ingest:[1,2],instal:[6,7,14],interfac:1,jupyt:7,line:[0,1],linux:6,live:8,loader:0,maco:[6,14],market:13,matplotlib:6,mean:4,messag:3,metadata:0,minute_bar_writ:2,mirror:2,miscellan:0,model:0,move:1,name:9,next:10,note:[6,10,11],notebook:7,object:0,old:2,order:0,osx:6,output:13,output_dir:2,over:1,packag:10,paramet:0,parti:12,pip:6,pipelin:0,polici:0,previou:1,price:1,process:10,pypi:10,python:10,quandl:2,quantopian:2,reader:0,refer:0,relat:12,releas:[10,11],requir:6,resourc:12,revers:4,run:[0,1,2,7],schedul:0,sdist:10,show_progress:2,simul:0,slippag:0,start_sess:2,strategi:14,structur:3,stub:10,support:8,symbol:8,tabl:5,trade:[0,8],troubleshoot:6,tutori:1,updat:10,upload:10,util:[0,13],version:11,video:14,virtualenv:6,wiki:2,window:[6,14],work:1,write:2,writer:0,yahoo:2}}) \ No newline at end of file +Search.setIndex({envversion:46,filenames:["appendix","beginner-tutorial","bundles","development-guidelines","example-algos","index","install","jupyter","live-trading","naming-convention","release-process","releases","resources","utilities","videos","welcome"],objects:{"zipline.data.bundles":{bundles:[0,0,1,""]}},objnames:{"0":["py","data","Python data"]},objtypes:{"0":"py:data"},terms:{"000000e":1,"0x10eaeadd0":[],"1000th":7,"15t":4,"1st":1,"328842e":1,"340mb":11,"380954e":1,"40mb":11,"460mb":11,"505275d6646a41f3856b22b16678d":1,"536708e":1,"5min":[4,7],"650729e":1,"7869f7828fa140328eb40477bb7d":1,"998236e":1,"998677e":1,"999120e":1,"999558e":1,"99mb":11,"__file__":13,"__main__":4,"__name__":4,"__wrapped__":10,"_tkinter":1,"boolean":[2,8],"case":[1,2,3,6,13],"class":[3,10],"default":[],"export":10,"final":[1,2,3],"float":[1,11],"import":[1,2,4,7,10,13],"int":2,"long":[1,2,4],"new":[],"public":11,"return":[1,4,8,10,11,12],"short":[1,3,4],"static":10,"throw":11,"true":[4,7,8],"try":[4,6],"var":1,"while":[6,10,11],aapl:2,abil:2,abl:[1,2,6],about:[1,2,5,6,15],abov:[1,3,4,6,8,9,10],accept:[2,6,10],accord:10,account:[2,4,5,7,11,15],achiev:1,acquir:[2,6],across:[5,9,11,15],activ:[6,10],actual:7,add:[1,2,3,6,10,13],add_subplot:1,addit:[1,3,5,6,11,15],address:10,adjust:[2,11],administr:6,advantag:6,afford:[4,7],aforement:1,after:[1,2,4,6,7,10],again:1,against:[1,5,8,11,15],agre:4,ahead:1,aim:12,algebra:6,algo:[1,2,4,11],algo_namespac:[4,8],algo_volatil:[1,7],algofil:[1,2],algorith:1,algorithm_period_return:[1,4,7],algotext:1,alia:4,alias:4,all:[0,1,2,3,4,5,6,7,8,9,10,11,15],allow:[1,2,5,6,15],along:2,alongsid:1,alpha:[1,4,6,7],alreadi:[2,3,6,7],also:[1,2,3,4,5,6,7,8,10,15],altern:[1,6,9],although:1,alwai:[2,8,9,10],amount:[1,4,7,11],amp_btc:9,anaconda:[1,6,10],analog:1,analysi:[1,4,5,10,11,12,15],analyst:12,analyt:[5,6,15],analyz:[1,4,7,8,11,13],ani:[1,2,4,6,7,9,10,13],anonym:2,anoth:[1,2,4,7],anymor:1,anyth:[1,6,10],apach:4,app:[],appar:1,appear:[2,10],append:10,appli:1,applic:[1,4],appropri:3,approxim:[4,7],appveyor:10,apt:[1,6],arbitrari:8,arch:6,architectur:1,ardr_btc:9,arg:[1,10],argument:[0,1,2,7,8,10],argv:13,around:[5,10,15],arrai:[4,6],art:[5,15],articl:3,ask:[1,3],assess:1,asset_nam:[4,7],assetdbwrit:2,assign:[1,8],assist:6,assum:[1,3,6],atla:6,attempt:[2,8],attribut:[4,10],auth:[8,11],auto:11,automag:[],automat:1,avail:[],avoid:[1,2,4],awar:10,ax1:[1,4,7],ax2:[1,4,7],ax3:[4,7],ax4:[4,7],ax5:[4,7],ax6:[4,7],axhlin:4,back:[3,6,9],backend:6,bah:4,bar:[1,4,11],bar_count:[1,4],base:[1,2,4,5,6,7,8,14,15],base_curr:[4,8,9,13],base_pric:4,basenam:13,basi:[4,11],batch:6,batteri:1,bch_btc:9,bch_eth:9,bch_usdt:9,bcn_btc:9,bcn_xmr:9,bcolz:2,bcolzdailybarread:2,bcolzdailybarwrit:2,bcolzminutebarread:2,bcolzminutebarwrit:2,bcy_btc:9,be62ff77760c4599abaac43be9cc9:1,bear:4,becaus:[6,7,10,11],been:[0,1,2,6,10],befor:[1,2,4,6,8,11],before_trading_start:[0,4],begin:[1,6],behavior:0,bela_btc:9,believ:1,below:[1,4,6,7,13],benchmark:[4,5,7,11,15],benchmark_period_return:[1,4,7],benchmark_volatil:[1,7],benefit:1,best:[3,5,6,15],beta:[1,4,7],between:[3,5,9,15],bia:1,big:6,bin:[4,6],binari:[6,10],bit:[3,6],bitcoin:[1,5,8,9,13,15],bitcoin_usd_asset:8,bitfinex:[1,4,5,7,8,11,15],bittrex:[1,5,8,11,15],bld:3,blk_btc:9,blk_xmr:9,blockchain:9,blotter:13,bodi:3,book:1,both:[1,3,8,9,10],bought:1,bound:1,breakdown:8,brew:6,brother:6,brows:6,browser:[3,7,10],btc:[1,4,8,11],btc_usd:[1,7,8,9],btc_usdt:[4,5,9,13,15],btcd_btc:9,btcd_xmr:9,btm_btc:9,bts_btc:9,bug:[2,3],bui:[],build:[3,10],build_ext:3,burst_btc:9,button:[6,10],buy_and_hodl:[1,4,11],buy_btc_simpl:1,buy_btc_simple_out:1,buy_df:4,buy_low_sell_high:11,calcul:[1,3,4,8],call:[1,2,3,4],can:[1,2,3,4,5,6,8,9,10,11,13,15],can_trad:[4,11],cancel_ord:[4,7],candl:[1,9],cannot:[4,6],canon:3,capit:[1,4,7],capital_bas:[1,4,13],capital_us:[1,7],captur:1,cash:[2,3,4,7],catalyst_dev:[1,5,6,15],caus:[0,1,2,3],cell:7,cert:11,certian:0,chanc:1,chang:[1,3,4,5,6,7,10,11,15],channel:[1,5,6,15],charact:3,charg:1,chart:[1,6],check:[1,2,3,4,6,7,8,9],checker:10,checkout:[3,10],choic:10,choos:[1,4,6,9,10,13],chosen:13,chunk:[1,11],circumv:6,clam_btc:9,classic:1,classifi:1,clean:[2,6,10,11],clear:2,cli:[1,4,7,11,13],click:[6,10],client:8,clone:3,close:[1,4,7,13],cmd:[1,6],code:[1,4,6,10,11,13],codebas:3,coin:[7,11],collect:[1,2,4],color:[1,4,7],column:[1,2,7],com:[1,2,3,8],combin:[6,8],come:[2,6],common:1,commonli:1,commun:[6,12],comp:4,compar:[1,4,5,15],comparison:11,compat:[5,11,15],compil:[6,10,11],complement:4,complet:8,complex:6,complianc:4,complimentari:13,comprehens:11,compress:[1,11],comput:[1,4,6,12],concept:1,conda_build_matrix:10,condit:4,conf:[],config:6,configur:[1,6,11],congratul:6,consid:4,consist:[1,9],constant:7,constraint:2,consum:10,contain:[1,2,3,6,7],context:[1,4,7,13],continu:1,continuum:6,conveni:1,convent:[4,8],convers:2,convert:2,copi:[2,3,4,10],copyright:4,core:6,correct:[2,6,8,10],correctli:[1,6,10],correctwai:6,correspond:[6,8,13],cost:[1,4],could:[0,1,2,4,6,7,13],count:2,coupl:1,cover:[1,13],coverag:[5,8,9,15],cpython:6,crash:2,creat:2,creation:11,crowd:12,crypto:[1,5,11,15],cryptoasset:[1,4,13,14],cryptocurr:[4,9],csv:7,csvfile:13,csvwriter:13,cumul:11,cumulative_capital_us:3,curat:[1,5,15],currenc:4,current:[0,1,2,4,6,7,8,10,11,13],current_dai:4,current_dt:[4,13],custom:[2,13],cvc_btc:9,cvc_eth:9,cython:10,d6dca79513214346a646079213526:1,dai:[1,2,4,7,10],daili:[1,2,4,5,9,11,13,15],darkgoldenrod:4,dash:8,dash_btc:9,dash_usdt:9,dash_xmr:9,data_frequ:[4,13],databas:2,datafram:[1,2,4,5,7,12,13,15],dataframe_cach:2,dataset:[1,2],date:[1,2,4,6,10,11,13],datetim:13,dcr_btc:9,debian:[1,6],debug:10,decid:10,decim:11,decor:10,decreas:4,def:[1,4,7,13],defin:[1,4,7,8],delai:1,delet:2,denomin:7,dep:3,depend:[1,3,6,10,11,13],deploi:10,deprec:3,deriv:6,descript:[3,6],desir:[1,7,13],desktop:9,detail:[5,15],determin:4,dev1:[],dev2:[],dev3:[],dev4:[],dev5:[],dev6:[],dev8:[],dev9:[],dev:[3,6,9],devel:6,develop:[],devis:1,dgb_btc:9,dictionari:11,did:[5,15],didn:6,differ:[1,2,6,8,9,10,13],dir:6,directli:[1,2,6,11,13],directori:[1,2,3,4,6,8,10],disabl:11,disablemsi:6,discord:[1,3,5,6,15],discuss:1,disk:11,displai:[6,7,10],dist:10,distribut:[4,6,10],distutil:10,divid:3,dividend:2,dma:1,dname:1,dnf:6,doc:2,docker:3,dockerfil:3,document:[3,4,8],doe:[2,6,7,9],doesn:2,doge_btc:9,dollar:9,don:[1,3,7,14],done:[1,4,7,10],down:[1,4,14],download:[1,2,6,7,11],draft:10,drawback:2,drive:1,driven:[1,5,15],dropbox:11,dword:6,each:[1,2,3,4,5,6,8,9,11,13,15],earlier:[1,2,3,4],earliest:4,eas:[5,15],easi:[2,7,12],easier:[1,2,9],easiest:6,easili:[1,5,6,15],echo:6,eco:[5,15],edit:[3,6,10],editor:6,educt:1,either:[1,4,6],elabor:1,elif:[1,4],els:6,emc2_btc:9,empow:[1,5,15],empti:[2,3,4,8,10,11],enabl:8,encount:6,end:[1,4,7,11,13],ending_cash:[1,7],ending_exposur:[1,7],enh:3,enhanc:3,enigma:[1,4,5,6,8,9,15],enigmampc:[1,3],enough:[1,6],ensur:[0,6,8,10],enter:[1,6],entir:3,entri:[1,6],env:[4,6],enviorn:2,enviro:6,environemnt:[6,7],equal:[2,4,7,13],equiti:2,error:[1,3,4,6,7,8,9,11],especi:1,establish:[5,15],estim:1,etc:[3,10,11],etc_btc:9,etc_eth:9,etc_usdt:9,eth:[1,8],eth_btc:[8,9],eth_usdt:9,ether:4,ethereum_bitcoin_asset:8,evalu:1,even:[2,6],event:1,eventu:1,everi:[1,6,7],everyth:[1,2],exact:13,examin:1,excel:6,except:[1,4],exchang:[2,4],exchange_algorithm:1,exchange_nam:[4,8,13],execut:[0,1,4,7,8,11],exist:[2,3,5,6,15],exit:[1,4,10],exit_success:10,exp_btc:9,expect:[0,2,6,7,9,10],experi:6,experienc:6,explain:[6,8],explicitli:[1,10],explictili:6,express:[1,4,5,15],extend:1,extens:[2,3,6],extern:[1,6],extra:10,extract_transact:4,facto:7,fail:[2,6,7],failur:2,fairli:3,fals:[4,7],familiar:3,fantast:1,far:2,fast:2,fatal:6,fct_btc:9,featur:4,fedora:6,feedback:2,feel:[1,7],fetch:[2,9],few:[2,10],fewer:6,field:[2,4,10],fig:1,figsiz:1,figur:1,file:[2,3,4,7,8],filenam:[1,13],fill:1,filter:11,financ:7,financi:[1,11],find:[1,2,6,10],fine:10,finish:1,fix:3,flag:[1,4,6,8,10],flake8:3,fldc_btc:9,flo_btc:9,floor:4,focu:[5,15],folder:[4,6,11],follow:[0,1,2,3,4,6,7,8,9,10,13],footprint:6,fork:12,form:[1,9],format:2,fortran:6,forward:2,foster:12,found:[1,3,6,9],fraction:11,frame:[1,4],free:[1,7],freelanc:12,freetyp:6,frequenc:[1,4,11],fresh:10,from:[0,1,2,3,4,6,7,9,10,11,13],full:[1,7,13],fund:12,fundament:12,further:[1,4,5,15],futur:[1,2],game_btc:9,gas_btc:9,gas_eth:9,gave:1,gcc:6,gcf:[4,7],gen_type_stub:10,gener:[2,3,5,6,8,10,11,13,15],get:[2,3,4],get_open_ord:[4,7],gfortran:6,github:[1,3,6,10],give:4,given:[1,2,9,13],gno_btc:9,gno_eth:9,gnt_btc:9,gnt_eth:9,goe:[4,8,14],good:10,goog:2,got:1,govern:4,grain:10,graph:7,grc_btc:9,green:4,group:[1,3],grow:2,guid:[3,6,11],gzip:10,hand:3,handi:6,handl:[3,4,11],handle_data:[0,1,4,7,8,13],hang:6,happen:[1,2],happi:10,hard:1,hash:11,have:[0,1,2,3,5,6,7,10,15],haven:1,head:[1,6,7],header:[6,10],heavi:1,heavili:12,hedg:12,held:9,help:2,henc:1,here:[1,2,6,7,8],hidden:10,high:[1,8,12,13],highest:10,hint:[6,10],histor:[1,4,5,11,15],hit:[1,11],hitchhik:6,hkey_local_machin:6,hold:[4,8],home:11,homebrew:6,hope:1,hopefulli:[4,14],how:[1,2,4,6,7,8],howev:[8,10],html:[3,4,10],http:[1,4,8,10],huc_btc:9,idea:[1,2,3],illustr:8,immedi:4,immut:0,impact:11,imper:3,implement:[1,2,4,11],impli:4,implicitli:0,importerror:1,improv:[3,11],inc:4,includ:[1,2,3,4,6,10,13],incomplet:2,inconsist:8,increas:[2,4,11],increment:[1,10],independ:6,index:[1,3,4,7,10],indic:[2,4,6],individu:[1,8],infer:2,influenc:1,info:[1,4,7],inform:[0,1,2,6,10],initi:[0,1,4,7,8,11,13],inlin:7,inplac:3,input:[5,7,9,15],insid:[1,6,7],insight:[1,5,15],inspect:1,instal:3,installt:6,instanc:[0,2,4],instead:[1,2,3,4,7,9,11],instruct:[1,3,6],integ:[2,11],integr:[5,15],intend:[1,3,10],interact:7,intern:[2,6],interpret:[4,7,13],interv:4,introduc:[1,8,9,11],invest:[1,5,15],invok:[1,2],involv:[2,6],ipython:[1,7],is_bui:[4,7],issu:[1,3,6,9,10,11],iter:[1,2,13],itself:1,jan:1,join:[5,6,15],json:[8,11],juli:13,jump:6,jupyt:[],just:[1,2,4,7,9,10],keep:[1,2,6],kei:[2,5,6,8,15],kept:1,keyerror:11,kind:4,know:7,knowledg:[5,15],kwarg:10,label:[1,4,8,10],lack:9,languag:4,lapack:6,larg:2,larger:11,last:[1,2,6,7],later:[1,2,3],latest:[10,11],launch:[6,7],law:4,layer:9,lazi:2,lbc_btc:9,leak:2,learn:[1,5,6,15],least:[1,3],legend:[1,4,7],len:4,less:2,let:[1,7],level:[1,2,4],leverag:[4,7,12],lib:4,libatla:6,libfreetype6:6,libgfortran:6,librari:[1,3,4,5,6,11,12,15],licens:4,lifetim:2,like:[1,2,3,5,6,9,10,15],limit:[4,9],limit_pric:[4,7],linear:6,linter:10,list:[0,2,6,9,10,13],littl:[1,3],live:4,live_algo:4,live_graph:4,load:[1,2,7],load_ext:[1,7],loc:[1,4,7],local:[1,2,3,6,7,10],locat:[1,2,13],log:[4,6],logbook:4,logger:4,logic:[1,11],long_mavg:1,longer:[1,3,10],look:[1,2,4,7,10,13],lookup:1,loop:2,loss:11,lot:2,low:[1,8],lower:11,lowercas:[8,9],lsk_btc:9,lsk_eth:9,ltc:8,ltc_btc:9,ltc_usdt:9,ltc_xmr:9,machin:[2,5,10,15],macosx:[],made:[2,3],magic:[1,7],mai:[1,2,4,6,10],maid_btc:9,maid_xmr:9,main:[1,6,10],maint:3,maintain:[9,10],mainten:3,major:10,make:[1,2,3,4,6,7,9,10],manag:[1,6,10],mani:[1,2,6,10,12],manifest:10,manner:8,manual:[6,10],map:[0,2,9],marker:4,markers:[1,4,7],market:[8,9],market_curr:9,marketplac:1,master:10,match:[1,6,8,10],matplotlib:4,matplotlibrc:6,matrix:10,matter:3,mavg:1,max_capital_us:3,max_leverag:3,maxim:[5,15],maybe_show_progress:2,mcoin:[4,7],mean:2,mean_reversion_simpl:4,memori:2,mention:[1,6,10],menu:6,merg:1,merger:2,messag:[],method:[0,2,4,6,10,11,13],metric:[1,11],micro:10,microsoft:6,might:1,migrat:1,min:4,mind:4,miniconda:6,minim:[5,15],minimum:11,minor:10,minut:[1,2,4,5,6,11,13,15],miss:[1,6,8,11],mkvirtualenv:3,mode:[1,4,5,8,15],modif:[3,8],modifi:13,modul:1,moment:[6,10],momentum:[1,4,14],monei:0,month:[10,13],more:[0,1,2,4,5,6,11,13,15],most:[1,2,4,6,7,8,11],movement:1,mpc:[1,4],msft:2,msi:6,msiexec:6,much:[1,2],multipl:[2,10,11],must:[1,2,8,10],my_algo_cod:8,my_algo_nam:8,name:[2,3,4,7,8],namespac:[1,4,10],nan:[1,7],nano:10,nativ:6,natur:1,naut_btc:9,nav_btc:9,navig:[3,6],ndarrai:1,necessari:6,nee:6,need:[1,2,3,4,6,9,10,12,13],neg:1,neo_eth:8,neo_ethereum_asset:8,neo_usd:4,neos_btc:9,never:2,newer:2,next:2,nice:[5,15],nmc_btc:9,non:6,none:[4,7,13],normal:11,note:[],note_btc:9,notebook:[],noth:6,novemb:10,now:[1,2,4,6,10,11],number:[1,2,4,6,10,11],numer:6,numpi:[1,3,6,10,12],nxc_btc:9,nxt_btc:9,nxt_usdt:9,nxt_xmr:9,observ:6,obtain:4,occur:8,off:12,offer:1,offset:4,ohlc:1,ohlcv:11,older:2,omg_btc:9,omg_eth:9,omni:9,omni_btc:9,onc:[1,2,4,6,7,10],onli:[0,1,2,3,4,5,6,10,13,15],open:[1,3,6,7,11,13],openssl:6,oper:6,operatbl:6,opt:4,optim:[1,12],option:[1,2,6,13],order_id:1,order_target:1,order_target_perc:4,order_target_valu:[4,7],ordered_pip:3,org:[4,10],organ:1,origin:[1,10],osx:[],other:[1,2,4,6,9,10,13],otherwis:6,our:[1,3,4,5,6,10,15],out:[1,2,3,5,6,7,10,15],outdat:6,outlin:6,output:[2,7],outstand:[4,7],overcom:9,overrid:[6,10],overview:[1,5,9,15],own:[2,6,8],packag:7,pacman:6,page:[3,6,10,11],pair:[1,4,7,8,9,11],panda:[1,2,4,5,12,15],paper:3,param:1,parent:6,pars:2,part:[2,6,8],partial:6,particular:[5,6,15],pasc_btc:9,pass:[1,2,4,7,10],password:10,past:1,path:[2,6,11,13],pend:10,peopl:3,pep8:3,per:[1,2,4,11],percent:[4,7],perf:[1,3,4],perf_tran:1,perform:[0,1,3,4,5,6,7,11,12,15],period:[3,4],permiss:[4,6],persist:[1,4,11],pickl:[1,4],piec:[2,6],pink_btc:9,pip:3,pkg:6,place:[1,4,7,11],platform:[6,11,12],pleas:[1,5,6,13,15],plot:[1,4,7,12],plt:[1,4,7],plu:13,png:7,point:[1,9,10],poloniex:[1,4,5,7,8,9,11,13,15],popul:10,portfolio:[1,4,7,11,13],portfolio_valu:[1,4,7],pos_amount:4,posit:[1,4,7,11],possibl:[2,3,6],post:10,pot_btc:9,power:[1,4,7,12],ppc_btc:9,practic:3,pre:[2,6],precis:11,predict:[1,8],prefer:6,prefix:3,preload:2,prepare_chunk:11,preprocess:10,prerequisit:6,present:1,preserv:11,prevent:[2,6,10],previous:1,price_chang:4,primari:6,print:[1,6,10],print_result:1,prior:[1,4],privileg:6,probabl:1,problem:[1,2,6,10],proce:6,proceed:6,process:[2,8],produc:[2,6],profit:[1,5,15],program:6,progress:2,project:[5,6,12,15],prompt:[1,6],proper:6,properli:[6,13],protect:0,protocol:[1,9],provid:[0,1,2,5,6,7,8,11,12,13,15],publish:10,pull:[3,10],pun:1,purchas:[4,7],purpos:[1,8],push:10,put:8,pycharm:10,pydata:[4,5,15],pyfolio:11,pylab:[],pypirc:10,pypitest:10,pyplot:[1,4,7],python2:[6,11],python3:11,python:[3,4,7],pytz:13,quandl_api_kei:2,quandl_download_attempt:2,quantit:[7,12],queri:2,question:[1,3,5,15],quick:1,quickli:[4,14],quirk:6,quit:2,rads_btc:9,rais:3,ran:2,rang:[1,2,4],rather:[1,6],raw:[2,6],read:[1,2,6],read_pickl:1,readi:10,real:[0,4],realist:1,reason:[1,2,6],rebalanc:1,recal:1,receiv:[1,2],recent:[1,2,4,6],recogn:6,recommend:[2,6],reconstruct:1,record:[1,4,7,13],red:4,redhat:6,redon:11,redownload:[2,7],reduc:11,refactor:3,referenc:8,refus:7,regard:[5,15],regardless:[6,7,8],regedit:6,regist:[0,2,7],registri:6,regular:6,rel:3,relat:3,relationship:2,releas:3,reli:12,remain:11,rememb:6,remot:2,remov:[3,6,10,11],renam:10,rep:6,rep_btc:9,rep_eth:9,rep_usdt:9,report:[1,3,6],repositori:[6,10,11],repres:[2,8],reproduc:2,request:[1,2,3,4],requir:[3,4],requirements_blaz:3,requirements_dev:3,requirements_doc:3,research:7,reserv:[4,7,9],reserve_ratio:[4,7],reserve_valu:[4,7],resolut:[1,4,5,11,13,15],resourc:[2,11],respect:[3,10,13],respons:2,rest:2,restart:11,restrict:6,restructuredtext:3,result:[1,2,4,6,7,8,13],resum:4,retri:2,retriev:[4,7,11],rev:3,revert:3,review:[1,6],revis:1,rhel:6,ric_btc:9,ride:[4,14],right:6,risk:[1,11],roll:1,rollup:2,root:[3,10],routin:6,row:[1,7],rsi:4,rst:[3,10],run_algo:[1,13],run_algorithm:[1,4,8,13],runtim:1,same:[1,2,6,7,8,10,11,13],sampl:11,satisfi:6,save:[1,2,3,4,6,13],sbd_btc:9,sc_btc:9,scale:[7,11],scatter:4,scientif:12,scikit:1,scipi:[5,6,15],scratch:6,script:[1,10,13],scriptnam:13,seamless:[5,15],search:6,second:[1,6],secret:8,section:[1,3,4,6,8,10,13],sectionfor:[],secur:[4,5,12,15],see:[0,1,2,4,5,6,8,13,15],seek:6,select:6,self:0,sell:[1,4,8,11,12,14],sell_df:4,separ:[1,3,6,8,9],seper:8,seri:1,seriou:1,server:[1,2,7,10],servic:2,session:6,set:[1,2,4,6,11],set_size_inch:[4,7],set_ylabel:[1,4,7],setup:[3,7,10],setuptool:6,sever:[1,5,6,15],share:[1,5,15],sharex:[1,4,7],sharp:1,ship:[2,6,10],short_exposur:1,short_mavg:1,short_valu:1,shorter:1,shorts_count:1,should:[0,1,2,3,6,8,10],shourc:2,show:[1,2,4,7],shown:2,sid:[2,7,11],signal:2,signatur:2,similar:[6,8],simpl:[1,4,14],simpler:13,simpli:[1,3,6,13],simplifi:1,simultan:11,sinc:[4,6,7,10,13],singl:[2,6,11],size:[4,6,11],sjcx_btc:9,skeleton:10,skip:1,sklearn:[5,15],slightli:6,small:4,smaller:6,smoothli:14,snip:7,snippet:13,softwar:[4,6],solut:6,solv:[1,2,6],some:[1,2,3,4,6,8,11,12],someon:6,someth:3,somewhat:1,sortino:1,sourc:[1,2,3,4,6,10,12],space:7,special:8,specif:[1,4,11],specifi:[1,2,4,7,8,10],spend:1,spent:9,sphinx:[3,10],split:[1,2],splitext:13,spring:12,sqliteadjustmentwrit:2,ssl:11,stabl:[4,6],stai:10,standard:[2,3,9,11],start:[1,2,3,4,5,6,7,8,13,15],starting_cash:[1,4,7],starting_exposur:[1,7],starting_valu:[1,7],stat:11,state:[1,2,4,5,11,15],statist:[1,5,8,11,15],stats_util:4,statsmodel:[5,15],statu:8,stdout:1,steem_btc:9,steem_eth:9,step:[1,2,6],still:[1,2,4,6,7],stock:[1,2],stop:[4,7,11],stop_pric:[4,7],storag:[1,8,11],store:[1,2,9,13],str_btc:9,str_usdt:9,strat_btc:9,strategi:4,stream:1,strictli:[2,6],string:[2,7,10],strongli:6,sty:3,style:3,subdirectori:2,subject:3,submit:3,subplot:[1,4,7],succe:10,succeed:7,success:[2,3],sudo:[1,6],suffici:6,suggest:3,summar:6,summari:11,suppli:[1,7],support:[4,7],suppos:[1,7],sure:6,surpris:1,suspect:3,symbol:[2,4,7],symbolnotfoundonexchang:9,sync:10,syntax:[10,11],sys_btc:9,system:[1,3,5,6,15],tag:10,take:[1,2,6,7,11],taken:10,talib:4,tar:10,tarbal:10,target:[1,8],target_hodl_ratio:[4,7],target_hodl_valu:[4,7],technic:[4,5,15],templat:10,temporari:10,ten:1,tend:8,tens:3,term:1,termin:[1,6],test:[1,3,10,11,12],testpypi:10,tether:[4,9],text:1,than:[1,2,3,6],thei:[1,2,10,11,12],them:[1,3,6,10],therefor:10,therein:6,thi:[0,1,2,3,4,6,7,8,9,10,13,14],thing:14,third:1,those:[1,3,10],though:2,three:[1,2,4,5,15],threshold:[4,7],through:[0,1,2,6,7],thu:[1,4,6,7],tick:4,tick_siz:7,ticker:2,time:[1,2,4,5,6,7,10,13,15],timeperiod:4,timeseri:4,timestamp:[1,2,11],titl:10,tkagg:6,to_csv:13,to_datetim:4,to_pydatetim:4,todai:[4,10],todo:[],togeth:1,token:[8,13],too:1,tool:[2,3,6,10,12],top:[1,5,10,15],tot:[],total:2,traceback:9,track:[1,3,4,11],tracker:1,traded_todai:4,trader:[1,12],trading_dai:[1,7],tradingalgorithm:[0,10],tradingcalendar:2,train:1,tran:[4,7],transact:[1,4,7,11],transaction:2,transaction_df:4,transfer:9,transform:1,transit:[5,15],travi:10,treasuri:[4,7],treasury_period_return:[1,4,7],trend:1,tri:[1,5,15],tst:3,tupl:2,turn:10,tweak:1,twice:10,two:[1,4,5,6,13,15],twoargument:1,txt:[3,6,10],type:[4,6,10],typo:3,ubuntu:[1,6],uncompress:11,under:[1,2,4,10],underli:1,underlin:10,underscor:9,understand:[1,6],undesir:0,unexpect:6,unit:[1,9,11],univers:[1,8],unknown:7,unless:4,unlik:2,unpack:6,unregist:0,unresolv:11,untar:2,until:4,unus:3,updat:[],upgrad:[6,10],upper:4,upward:1,url:10,usag:1,usd:[1,4,7,9],usdt:[4,9,13],usdt_btc:7,usdt_btc_benchmark:7,user:[1,2,5,6,7,9,10,15],usernam:10,usr:4,utc:[4,13],utilit:13,valid:11,valu:[1,4,6,7,8,11],vari:[6,13],variabl:[1,2,4,7,13],varieti:13,variou:[1,2,4],varnam:1,vcforpython27:6,venv:6,veri:[1,2,6,7,10],verifi:[6,10],versatil:13,version:[4,10],via:[1,6,7,9],via_btc:9,viabl:9,victori:9,video:11,view:[3,10],virtual:6,virtualenvwrapp:3,visit:[5,15],visual:[1,5,6,15],volum:[1,4,5,7,9,11,13,15],volumeshareslippag:7,vrc_btc:9,vtc_btc:9,wai:[2,5,6,7,15],wait:4,want:[1,2,3,4,7,9],warn:[7,10,11],warranti:4,wave:[4,14],web:10,weight:4,welcom:3,well:[1,2,5,6,15],were:[3,10],what:[3,6,8,10],whatev:2,whatsnew:10,wheel:[6,10],when:[0,1,2,3,4,6,8,10,14],whenw:[],where:[1,2,3,4,5,6,8,9,13,14,15],which:[1,2,3,4,6,7,8,10,11,13],whitepap:[5,12,15],whitespac:3,who:3,whole:[],why:3,width:10,win:10,window:[],within:[6,7],without:[2,4,6,7,8,11],workaround:11,worth:1,would:[1,2,4,6,10],wouldlik:1,wrap:10,write:[],writerow:13,written:[1,2,5,9,15],wrong:9,www:[4,8],xbc_btc:9,xbt:8,xcp_btc:9,xem_btc:9,xmr_btc:9,xmr_usdt:9,xpm_btc:9,xrp_btc:9,xrp_usdt:9,xvc_btc:9,yahoo_equ:2,year:10,yet:1,yml:[6,11],you:[1,2,3,4,5,6,7,9,10,13,15],your:[1,2,3,4,5,6,7,8,10,12,13,15],yourself:3,yum:6,zec_btc:9,zec_eth:9,zec_usdt:9,zec_xmr:9,zero:3,ziplin:[0,2,3,5,10,12,15],zipline_root:[2,10],zlib:6,zrx_btc:9,zrx_eth:9},titles:["API Reference","Catalyst Beginner Tutorial","Data Bundles","Development Guidelines","Example Algorithms","Features","Install","Catalyst & Jupyter Notebook","Live Trading","Naming Convention","Release Process","Release Notes","Resources","Utilities","Videos","Features"],titleterms:{"3rd":12,"__version__":10,"default":2,"function":0,"new":2,access:1,adjustment_writ:2,algorithm:[0,1,4,7,8],amazon:6,ami:6,api:[0,12],asset:0,asset_db_writ:2,authent:8,avail:2,averag:1,backtest:[0,2,14],basic:1,bdist:10,beginn:1,branch:3,bug:11,bui:4,build:11,built:0,bundl:[0,2],cach:[0,2],calendar:[0,2],cancel:0,catalyst:[1,7],command:[0,1],commiss:0,commit:[3,10],conclus:1,conda:[6,10],content:5,contribut:3,control:0,convent:9,creat:3,cross:1,csv:13,currenc:8,daily_bar_writ:2,data:[0,1,2,13],dev1:11,dev2:11,dev3:11,dev4:11,dev5:11,dev6:11,dev7:11,dev8:11,dev9:11,develop:3,discov:2,doc:3,docstr:3,document:[10,11],dual:1,end_sess:2,engin:0,environ:[2,3],exampl:[1,4],exchang:8,extract:13,factor:0,factori:2,featur:[5,15],file:[10,13],first:1,fix:11,format:3,get:6,git:3,gnu:6,guidelin:3,help:6,histori:1,hodl:4,ingest:[1,2],instal:[6,7,14],interfac:1,jupyt:7,line:[0,1],linux:6,live:8,loader:0,maco:[6,14],market:13,matplotlib:6,mean:4,messag:3,metadata:0,minute_bar_writ:2,mirror:2,miscellan:0,model:0,move:1,name:9,next:10,note:[6,10,11],notebook:7,object:0,old:2,order:0,osx:[],output:13,output_dir:2,over:1,packag:10,paramet:0,parti:12,pip:6,pipelin:0,polici:0,previou:1,price:1,process:10,pypi:10,python:10,quandl:2,quantopian:2,reader:0,refer:0,relat:12,releas:[10,11],requir:6,resourc:12,revers:4,run:[0,1,2,7],schedul:0,sdist:10,show_progress:2,simul:0,slippag:0,start_sess:2,strategi:14,structur:3,stub:10,support:8,symbol:8,tabl:5,trade:[0,8],troubleshoot:6,tutori:1,updat:10,upload:10,util:[0,13],version:11,video:14,virtualenv:6,wiki:2,window:[6,14],work:1,write:2,writer:0,yahoo:2}}) \ No newline at end of file diff --git a/utilities.html b/utilities.html index 3ef3393c..48ec9091 100644 --- a/utilities.html +++ b/utilities.html @@ -134,7 +134,7 @@
                  • Videos
                  • Resources