mirror of
https://github.com/wassname/catalyst.git
synced 2026-10-02 12:10:23 +08:00
DOC: jupyter notebook in beginner tutorial
This commit is contained in:
1 parent
cd7e254e0c
commit
d43d5821ef
3 files changed
+485
-47
No files matched your search
+235
-15
@@ -52,7 +52,7 @@ My first algorithm
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Lets take a look at a very simple algorithm from the ``examples``
|
||||
directory, ``buy_btc.py``:
|
||||
directory: `buy_btc_simple.py <https://github.com/enigmampc/catalyst/blob/master/catalyst/examples/buy_btc_simple.py>`_:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
@@ -225,16 +225,16 @@ Thus, to execute our algorithm from above and save the results to
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
catalyst run -f buy_btc_simple.py -x bitfinex --start 2016-1-1 --end 2016-9-29 -o buy_simple_btc_out.pickle
|
||||
catalyst run -f buy_btc_simple.py -x bitfinex --start 2016-1-1 --end 2017-9-30 -o buy_btc_simple_out.pickle
|
||||
|
||||
|
||||
..
|
||||
.. parsed-literal
|
||||
.. parsed-literal::
|
||||
|
||||
.. AAPL
|
||||
.. [2015-11-04 22:45:32.820166] INFO: Performance: Simulated 3521 trading days out of 3521.
|
||||
.. [2015-11-04 22:45:32.820314] INFO: Performance: first open: 2000-01-03 14:31:00+00:00
|
||||
.. [2015-11-04 22:45:32.820401] INFO: Performance: last close: 2013-12-31 21:00:00+00:00
|
||||
INFO: run_algo: running algo in backtest mode
|
||||
INFO: exchange_algorithm: initialized trading algorithm in backtest mode
|
||||
INFO: Performance: Simulated 639 trading days out of 639.
|
||||
INFO: Performance: first open: 2016-01-01 00:00:00+00:00
|
||||
INFO: Performance: last close: 2017-09-30 23:59:00+00:00
|
||||
|
||||
|
||||
``run`` first calls the ``initialize()`` function, and then
|
||||
@@ -255,7 +255,7 @@ 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
|
||||
rows. and print the first ten rows. Note that ``catalyst`` makes heavy usage of
|
||||
`pandas <http://pandas.pydata.org/>`_, especially for data input and
|
||||
outputting so it's worth spending some time to learn it.
|
||||
|
||||
@@ -265,17 +265,196 @@ outputting so it's worth spending some time to learn it.
|
||||
perf = pd.read_pickle('buy_btc_simple_out.pickle') # read in perf DataFrame
|
||||
perf.head()
|
||||
|
||||
.. raw:: html
|
||||
|
||||
<div style="max-height:1000px;max-width:1500px;overflow:auto;">
|
||||
<table border="1" class="dataframe">
|
||||
<thead>
|
||||
<tr style="text-align: right;">
|
||||
<th></th>
|
||||
<th>algo_volatility</th>
|
||||
<th>algorithm_period_return</th>
|
||||
<th>alpha</th>
|
||||
<th>benchmark_period_return</th>
|
||||
<th>benchmark_volatility</th>
|
||||
<th>beta</th>
|
||||
<th>btc</th>
|
||||
<th>capital_used</th>
|
||||
<th>ending_cash</th>
|
||||
<th>ending_exposure</th>
|
||||
<th>...</th>
|
||||
<th>short_exposure</th>
|
||||
<th>short_value</th>
|
||||
<th>shorts_count</th>
|
||||
<th>sortino</th>
|
||||
<th>starting_cash</th>
|
||||
<th>starting_exposure</th>
|
||||
<th>starting_value</th>
|
||||
<th>trading_days</th>
|
||||
<th>transactions</th>
|
||||
<th>treasury_period_return</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>2016-01-01 23:59:00+00:00</th>
|
||||
<td>NaN</td>
|
||||
<td>0.000000e+00</td>
|
||||
<td>NaN</td>
|
||||
<td>-0.010937</td>
|
||||
<td>NaN</td>
|
||||
<td>NaN</td>
|
||||
<td>433.979999</td>
|
||||
<td>0.000000</td>
|
||||
<td>1.000000e+07</td>
|
||||
<td>0.00</td>
|
||||
<td>...</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>NaN</td>
|
||||
<td>1.000000e+07</td>
|
||||
<td>0.00</td>
|
||||
<td>0.00</td>
|
||||
<td>1</td>
|
||||
<td>[]</td>
|
||||
<td>0.0227</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>2016-01-02 23:59:00+00:00</th>
|
||||
<td>0.000011</td>
|
||||
<td>-9.536708e-07</td>
|
||||
<td>-0.000170</td>
|
||||
<td>-0.006480</td>
|
||||
<td>0.173338</td>
|
||||
<td>-0.000062</td>
|
||||
<td>432.700000</td>
|
||||
<td>-442.236708</td>
|
||||
<td>9.999558e+06</td>
|
||||
<td>432.70</td>
|
||||
<td>...</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>-11.224972</td>
|
||||
<td>1.000000e+07</td>
|
||||
<td>0.00</td>
|
||||
<td>0.00</td>
|
||||
<td>2</td>
|
||||
<td>[{u'order_id': u'7869f7828fa140328eb40477bb7de...</td>
|
||||
<td>0.0227</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>2016-01-03 23:59:00+00:00</th>
|
||||
<td>0.000011</td>
|
||||
<td>-2.328842e-06</td>
|
||||
<td>-0.000176</td>
|
||||
<td>-0.026512</td>
|
||||
<td>0.197857</td>
|
||||
<td>0.000009</td>
|
||||
<td>428.390000</td>
|
||||
<td>-437.831716</td>
|
||||
<td>9.999120e+06</td>
|
||||
<td>856.78</td>
|
||||
<td>...</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>-12.754262</td>
|
||||
<td>9.999558e+06</td>
|
||||
<td>432.70</td>
|
||||
<td>432.70</td>
|
||||
<td>3</td>
|
||||
<td>[{u'order_id': u'be62ff77760c4599abaac43be9cc9...</td>
|
||||
<td>0.0227</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>2016-01-04 23:59:00+00:00</th>
|
||||
<td>0.000011</td>
|
||||
<td>-2.380954e-06</td>
|
||||
<td>-0.000139</td>
|
||||
<td>-0.008640</td>
|
||||
<td>0.269790</td>
|
||||
<td>0.000020</td>
|
||||
<td>432.900000</td>
|
||||
<td>-442.441116</td>
|
||||
<td>9.998677e+06</td>
|
||||
<td>1298.70</td>
|
||||
<td>...</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>-11.287205</td>
|
||||
<td>9.999120e+06</td>
|
||||
<td>856.78</td>
|
||||
<td>856.78</td>
|
||||
<td>4</td>
|
||||
<td>[{u'order_id': u'd6dca79513214346a646079213526...</td>
|
||||
<td>0.0224</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>2016-01-05 23:59:00+00:00</th>
|
||||
<td>0.000011</td>
|
||||
<td>-3.650729e-06</td>
|
||||
<td>-0.000158</td>
|
||||
<td>-0.021426</td>
|
||||
<td>0.245989</td>
|
||||
<td>0.000024</td>
|
||||
<td>431.840000</td>
|
||||
<td>-441.357754</td>
|
||||
<td>9.998236e+06</td>
|
||||
<td>1727.36</td>
|
||||
<td>...</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>-12.333847</td>
|
||||
<td>9.998677e+06</td>
|
||||
<td>1298.70</td>
|
||||
<td>1298.70</td>
|
||||
<td>5</td>
|
||||
<td>[{u'order_id': u'505275d6646a41f3856b22b16678d...</td>
|
||||
<td>0.0225</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
|
||||
There is a row for each trading day, starting on the first day of our
|
||||
simulation Jan 1st, 2016. In the columns you can find various
|
||||
information about the state of your algorithm. The very first column
|
||||
information about the state of your algorithm. The column
|
||||
``btc`` was placed there by the ``record()`` function mentioned earlier
|
||||
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.
|
||||
|
||||
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.
|
||||
.. code-block:: python
|
||||
|
||||
%pylab inline
|
||||
figsize(12, 12)
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
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')
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
Populating the interactive namespace from numpy and matplotlib
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
<matplotlib.text.Text at 0x10eaeadd0>
|
||||
|
||||
.. image:: 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.
|
||||
|
||||
|
||||
Access to previous prices using ``history``
|
||||
@@ -305,13 +484,14 @@ a function we use in the ``handle_data()`` section:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from catalyst.api import order, record, symbol
|
||||
%%catalyst --start 2016-1-1 --end 2017-9-30 -x bitfinex -o dma.pickle
|
||||
from catalyst.api import order, record, symbol, order_target
|
||||
|
||||
def initialize(context):
|
||||
context.i = 0
|
||||
context.asset = symbol('btc_usd')
|
||||
|
||||
def handle_data(context, data):
|
||||
def handle_data(context, data):
|
||||
# Skip first 300 days to get full windows
|
||||
context.i += 1
|
||||
if context.i < 300:
|
||||
@@ -336,6 +516,46 @@ a function we use in the ``handle_data()`` section:
|
||||
short_mavg=short_mavg,
|
||||
long_mavg=long_mavg)
|
||||
|
||||
def analyze(context, perf):
|
||||
import matplotlib.pyplot as plt
|
||||
fig = plt.figure()
|
||||
ax1 = fig.add_subplot(211)
|
||||
perf.portfolio_value.plot(ax=ax1)
|
||||
ax1.set_ylabel('portfolio value in $')
|
||||
|
||||
ax2 = fig.add_subplot(212)
|
||||
perf['btc'].plot(ax=ax2)
|
||||
perf[['short_mavg', 'long_mavg']].plot(ax=ax2)
|
||||
|
||||
perf_trans = perf.ix[[t != [] for t in perf.transactions]]
|
||||
buys = perf_trans.ix[[t[0]['amount'] > 0 for t in perf_trans.transactions]]
|
||||
sells = perf_trans.ix[
|
||||
[t[0]['amount'] < 0 for t in perf_trans.transactions]]
|
||||
ax2.plot(buys.index, perf.short_mavg.ix[buys.index],
|
||||
'^', markersize=10, color='m')
|
||||
ax2.plot(sells.index, perf.short_mavg.ix[sells.index],
|
||||
'v', markersize=10, color='k')
|
||||
ax2.set_ylabel('price in $')
|
||||
plt.legend(loc=0)
|
||||
plt.show()
|
||||
|
||||
Here we are explicitly defining an ``analyze()`` function that gets
|
||||
automatically called once the backtest is done.
|
||||
|
||||
Although it might not be directly apparent, the power of ``history()``
|
||||
(pun intended) can not be under-estimated as most algorithms make use of
|
||||
prior market developments in one form or another. You could easily
|
||||
devise a strategy that trains a classifier with
|
||||
`scikit-learn <http://scikit-learn.org/stable/>`__ which tries to
|
||||
predict future market movements based on past prices (note, that most of
|
||||
the ``scikit-learn`` functions require ``numpy.ndarray``\ s rather than
|
||||
``pandas.DataFrame``\ s, so you can simply pass the underlying
|
||||
``ndarray`` of a ``DataFrame`` via ``.values``).
|
||||
|
||||
We also used the ``order_target()`` function above. This and other
|
||||
functions like it can make order management and portfolio rebalancing
|
||||
much easier.
|
||||
|
||||
|
||||
Conclusions
|
||||
~~~~~~~~~~~
|
||||
|
||||
+249
-31
@@ -188,7 +188,7 @@ containing the current trading bar with open, high, low, and close
|
||||
<div class="section" id="my-first-algorithm">
|
||||
<h2>My first algorithm<a class="headerlink" href="#my-first-algorithm" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Lets take a look at a very simple algorithm from the <code class="docutils literal"><span class="pre">examples</span></code>
|
||||
directory, <code class="docutils literal"><span class="pre">buy_btc.py</span></code>:</p>
|
||||
directory: <a class="reference external" href="https://github.com/enigmampc/catalyst/blob/master/catalyst/examples/buy_btc_simple.py">buy_btc_simple.py</a>:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">catalyst.api</span> <span class="kn">import</span> <span class="n">order</span><span class="p">,</span> <span class="n">record</span><span class="p">,</span> <span class="n">symbol</span>
|
||||
|
||||
|
||||
@@ -332,7 +332,14 @@ to the <code class="docutils literal"><span class="pre">-c</span></code> option
|
||||
all the time (see the .conf files in the examples directory).</p>
|
||||
<p>Thus, to execute our algorithm from above and save the results to
|
||||
<code class="docutils literal"><span class="pre">buy_btc_simple_out.pickle</span></code> we would call <code class="docutils literal"><span class="pre">catalyst</span> <span class="pre">run</span></code> as follows:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="n">catalyst</span> <span class="n">run</span> <span class="o">-</span><span class="n">f</span> <span class="n">buy_btc_simple</span><span class="o">.</span><span class="n">py</span> <span class="o">-</span><span class="n">x</span> <span class="n">bitfinex</span> <span class="o">--</span><span class="n">start</span> <span class="mi">2016</span><span class="o">-</span><span class="mi">1</span><span class="o">-</span><span class="mi">1</span> <span class="o">--</span><span class="n">end</span> <span class="mi">2016</span><span class="o">-</span><span class="mi">9</span><span class="o">-</span><span class="mi">29</span> <span class="o">-</span><span class="n">o</span> <span class="n">buy_simple_btc_out</span><span class="o">.</span><span class="n">pickle</span>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="n">catalyst</span> <span class="n">run</span> <span class="o">-</span><span class="n">f</span> <span class="n">buy_btc_simple</span><span class="o">.</span><span class="n">py</span> <span class="o">-</span><span class="n">x</span> <span class="n">bitfinex</span> <span class="o">--</span><span class="n">start</span> <span class="mi">2016</span><span class="o">-</span><span class="mi">1</span><span class="o">-</span><span class="mi">1</span> <span class="o">--</span><span class="n">end</span> <span class="mi">2017</span><span class="o">-</span><span class="mi">9</span><span class="o">-</span><span class="mi">30</span> <span class="o">-</span><span class="n">o</span> <span class="n">buy_btc_simple_out</span><span class="o">.</span><span class="n">pickle</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="highlight-python"><div class="highlight"><pre>INFO: run_algo: running algo in backtest mode
|
||||
INFO: exchange_algorithm: initialized trading algorithm in backtest mode
|
||||
INFO: Performance: Simulated 639 trading days out of 639.
|
||||
INFO: Performance: first open: 2016-01-01 00:00:00+00:00
|
||||
INFO: Performance: last close: 2017-09-30 23:59:00+00:00
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><code class="docutils literal"><span class="pre">run</span></code> first calls the <code class="docutils literal"><span class="pre">initialize()</span></code> function, and then
|
||||
@@ -349,7 +356,7 @@ asset price. (Note, that you can also change the commission and
|
||||
slippage model that <code class="docutils literal"><span class="pre">catalyst</span></code> uses).</p>
|
||||
<p>Let’s take a quick look at the performance <code class="docutils literal"><span class="pre">DataFrame</span></code>. For this, we
|
||||
use <code class="docutils literal"><span class="pre">pandas</span></code> from inside the IPython Notebook and print the first ten
|
||||
rows. Note that <code class="docutils literal"><span class="pre">catalyst</span></code> makes heavy usage of
|
||||
rows. and print the first ten rows. Note that <code class="docutils literal"><span class="pre">catalyst</span></code> makes heavy usage of
|
||||
<a class="reference external" href="http://pandas.pydata.org/">pandas</a>, especially for data input and
|
||||
outputting so it’s worth spending some time to learn it.</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">pandas</span> <span class="kn">as</span> <span class="nn">pd</span>
|
||||
@@ -357,16 +364,189 @@ outputting so it’s worth spending some time to learn it.</p>
|
||||
<span class="n">perf</span><span class="o">.</span><span class="n">head</span><span class="p">()</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<div style="max-height:1000px;max-width:1500px;overflow:auto;">
|
||||
<table border="1" class="dataframe">
|
||||
<thead>
|
||||
<tr style="text-align: right;">
|
||||
<th></th>
|
||||
<th>algo_volatility</th>
|
||||
<th>algorithm_period_return</th>
|
||||
<th>alpha</th>
|
||||
<th>benchmark_period_return</th>
|
||||
<th>benchmark_volatility</th>
|
||||
<th>beta</th>
|
||||
<th>btc</th>
|
||||
<th>capital_used</th>
|
||||
<th>ending_cash</th>
|
||||
<th>ending_exposure</th>
|
||||
<th>...</th>
|
||||
<th>short_exposure</th>
|
||||
<th>short_value</th>
|
||||
<th>shorts_count</th>
|
||||
<th>sortino</th>
|
||||
<th>starting_cash</th>
|
||||
<th>starting_exposure</th>
|
||||
<th>starting_value</th>
|
||||
<th>trading_days</th>
|
||||
<th>transactions</th>
|
||||
<th>treasury_period_return</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>2016-01-01 23:59:00+00:00</th>
|
||||
<td>NaN</td>
|
||||
<td>0.000000e+00</td>
|
||||
<td>NaN</td>
|
||||
<td>-0.010937</td>
|
||||
<td>NaN</td>
|
||||
<td>NaN</td>
|
||||
<td>433.979999</td>
|
||||
<td>0.000000</td>
|
||||
<td>1.000000e+07</td>
|
||||
<td>0.00</td>
|
||||
<td>...</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>NaN</td>
|
||||
<td>1.000000e+07</td>
|
||||
<td>0.00</td>
|
||||
<td>0.00</td>
|
||||
<td>1</td>
|
||||
<td>[]</td>
|
||||
<td>0.0227</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>2016-01-02 23:59:00+00:00</th>
|
||||
<td>0.000011</td>
|
||||
<td>-9.536708e-07</td>
|
||||
<td>-0.000170</td>
|
||||
<td>-0.006480</td>
|
||||
<td>0.173338</td>
|
||||
<td>-0.000062</td>
|
||||
<td>432.700000</td>
|
||||
<td>-442.236708</td>
|
||||
<td>9.999558e+06</td>
|
||||
<td>432.70</td>
|
||||
<td>...</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>-11.224972</td>
|
||||
<td>1.000000e+07</td>
|
||||
<td>0.00</td>
|
||||
<td>0.00</td>
|
||||
<td>2</td>
|
||||
<td>[{u'order_id': u'7869f7828fa140328eb40477bb7de...</td>
|
||||
<td>0.0227</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>2016-01-03 23:59:00+00:00</th>
|
||||
<td>0.000011</td>
|
||||
<td>-2.328842e-06</td>
|
||||
<td>-0.000176</td>
|
||||
<td>-0.026512</td>
|
||||
<td>0.197857</td>
|
||||
<td>0.000009</td>
|
||||
<td>428.390000</td>
|
||||
<td>-437.831716</td>
|
||||
<td>9.999120e+06</td>
|
||||
<td>856.78</td>
|
||||
<td>...</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>-12.754262</td>
|
||||
<td>9.999558e+06</td>
|
||||
<td>432.70</td>
|
||||
<td>432.70</td>
|
||||
<td>3</td>
|
||||
<td>[{u'order_id': u'be62ff77760c4599abaac43be9cc9...</td>
|
||||
<td>0.0227</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>2016-01-04 23:59:00+00:00</th>
|
||||
<td>0.000011</td>
|
||||
<td>-2.380954e-06</td>
|
||||
<td>-0.000139</td>
|
||||
<td>-0.008640</td>
|
||||
<td>0.269790</td>
|
||||
<td>0.000020</td>
|
||||
<td>432.900000</td>
|
||||
<td>-442.441116</td>
|
||||
<td>9.998677e+06</td>
|
||||
<td>1298.70</td>
|
||||
<td>...</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>-11.287205</td>
|
||||
<td>9.999120e+06</td>
|
||||
<td>856.78</td>
|
||||
<td>856.78</td>
|
||||
<td>4</td>
|
||||
<td>[{u'order_id': u'd6dca79513214346a646079213526...</td>
|
||||
<td>0.0224</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>2016-01-05 23:59:00+00:00</th>
|
||||
<td>0.000011</td>
|
||||
<td>-3.650729e-06</td>
|
||||
<td>-0.000158</td>
|
||||
<td>-0.021426</td>
|
||||
<td>0.245989</td>
|
||||
<td>0.000024</td>
|
||||
<td>431.840000</td>
|
||||
<td>-441.357754</td>
|
||||
<td>9.998236e+06</td>
|
||||
<td>1727.36</td>
|
||||
<td>...</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>-12.333847</td>
|
||||
<td>9.998677e+06</td>
|
||||
<td>1298.70</td>
|
||||
<td>1298.70</td>
|
||||
<td>5</td>
|
||||
<td>[{u'order_id': u'505275d6646a41f3856b22b16678d...</td>
|
||||
<td>0.0225</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div><div class="line-block">
|
||||
<div class="line"><br /></div>
|
||||
</div>
|
||||
<p>There is a row for each trading day, starting on the first day of our
|
||||
simulation Jan 1st, 2016. In the columns you can find various
|
||||
information about the state of your algorithm. The very first column
|
||||
information about the state of your algorithm. The column
|
||||
<code class="docutils literal"><span class="pre">btc</span></code> was placed there by the <code class="docutils literal"><span class="pre">record()</span></code> function mentioned earlier
|
||||
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.</p>
|
||||
<p>Our algorithm performance as assessed by the
|
||||
<code class="docutils literal"><span class="pre">portfolio_value</span></code> closely matches that of the bitcoin price. This
|
||||
is not surprising as our algorithm only bought bitcoin every chance it got.</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="o">%</span><span class="n">pylab</span> <span class="n">inline</span>
|
||||
<span class="n">figsize</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">12</span><span class="p">)</span>
|
||||
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>
|
||||
|
||||
<span class="n">ax1</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">211</span><span class="p">)</span>
|
||||
<span class="n">perf</span><span class="o">.</span><span class="n">portfolio_value</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span><span class="o">=</span><span class="n">ax1</span><span class="p">)</span>
|
||||
<span class="n">ax1</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s">'portfolio value'</span><span class="p">)</span>
|
||||
<span class="n">ax2</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">212</span><span class="p">,</span> <span class="n">sharex</span><span class="o">=</span><span class="n">ax1</span><span class="p">)</span>
|
||||
<span class="n">perf</span><span class="o">.</span><span class="n">btc</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span><span class="o">=</span><span class="n">ax2</span><span class="p">)</span>
|
||||
<span class="n">ax2</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s">'bitcoin price'</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="highlight-python"><div class="highlight"><pre>Populating the interactive namespace from numpy and matplotlib
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="highlight-python"><div class="highlight"><pre><matplotlib.text.Text at 0x10eaeadd0>
|
||||
</pre></div>
|
||||
</div>
|
||||
<img alt="https://s3.amazonaws.com/enigmaco-docs/github.io/buy_btc_simple_graph.png" src="https://s3.amazonaws.com/enigmaco-docs/github.io/buy_btc_simple_graph.png" />
|
||||
<p>Our algorithm performance as assessed by the <code class="docutils literal"><span class="pre">portfolio_value</span></code> closely
|
||||
matches that of the bitcoin price. This is not surprising as our algorithm
|
||||
only bought bitcoin every chance it got.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="access-to-previous-prices-using-history">
|
||||
@@ -389,38 +569,76 @@ data for you. The first argument is the number of bars you want to
|
||||
collect, the second argument is the unit (either <code class="docutils literal"><span class="pre">'1d'</span></code> for <code class="docutils literal"><span class="pre">'1m'</span></code>
|
||||
but note that you need to have minute-level data for using <code class="docutils literal"><span class="pre">1m</span></code>). This is
|
||||
a function we use in the <code class="docutils literal"><span class="pre">handle_data()</span></code> section:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre> <span class="kn">from</span> <span class="nn">catalyst.api</span> <span class="kn">import</span> <span class="n">order</span><span class="p">,</span> <span class="n">record</span><span class="p">,</span> <span class="n">symbol</span>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="o">%%</span><span class="n">catalyst</span> <span class="o">--</span><span class="n">start</span> <span class="mi">2016</span><span class="o">-</span><span class="mi">1</span><span class="o">-</span><span class="mi">1</span> <span class="o">--</span><span class="n">end</span> <span class="mi">2017</span><span class="o">-</span><span class="mi">9</span><span class="o">-</span><span class="mi">30</span> <span class="o">-</span><span class="n">x</span> <span class="n">bitfinex</span> <span class="o">-</span><span class="n">o</span> <span class="n">dma</span><span class="o">.</span><span class="n">pickle</span>
|
||||
<span class="kn">from</span> <span class="nn">catalyst.api</span> <span class="kn">import</span> <span class="n">order</span><span class="p">,</span> <span class="n">record</span><span class="p">,</span> <span class="n">symbol</span><span class="p">,</span> <span class="n">order_target</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">context</span><span class="p">):</span>
|
||||
<span class="n">context</span><span class="o">.</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">context</span><span class="o">.</span><span class="n">asset</span> <span class="o">=</span> <span class="n">symbol</span><span class="p">(</span><span class="s">'btc_usd'</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">context</span><span class="p">):</span>
|
||||
<span class="n">context</span><span class="o">.</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">context</span><span class="o">.</span><span class="n">asset</span> <span class="o">=</span> <span class="n">symbol</span><span class="p">(</span><span class="s">'btc_usd'</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">handle_data</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="c"># Skip first 300 days to get full windows</span>
|
||||
<span class="n">context</span><span class="o">.</span><span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="k">if</span> <span class="n">context</span><span class="o">.</span><span class="n">i</span> <span class="o"><</span> <span class="mi">300</span><span class="p">:</span>
|
||||
<span class="k">return</span>
|
||||
<span class="c"># Skip first 300 days to get full windows</span>
|
||||
<span class="n">context</span><span class="o">.</span><span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="k">if</span> <span class="n">context</span><span class="o">.</span><span class="n">i</span> <span class="o"><</span> <span class="mi">300</span><span class="p">:</span>
|
||||
<span class="k">return</span>
|
||||
|
||||
<span class="c"># Compute averages</span>
|
||||
<span class="c"># data.history() has to be called with the same params</span>
|
||||
<span class="c"># from above and returns a pandas dataframe.</span>
|
||||
<span class="n">short_mavg</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">history</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">asset</span><span class="p">,</span> <span class="s">'price'</span><span class="p">,</span> <span class="n">bar_count</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">frequency</span><span class="o">=</span><span class="s">"1d"</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
|
||||
<span class="n">long_mavg</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">history</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">asset</span><span class="p">,</span> <span class="s">'price'</span><span class="p">,</span> <span class="n">bar_count</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="n">frequency</span><span class="o">=</span><span class="s">"1d"</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
|
||||
<span class="c"># Compute averages</span>
|
||||
<span class="c"># data.history() has to be called with the same params</span>
|
||||
<span class="c"># from above and returns a pandas dataframe.</span>
|
||||
<span class="n">short_mavg</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">history</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">asset</span><span class="p">,</span> <span class="s">'price'</span><span class="p">,</span> <span class="n">bar_count</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">frequency</span><span class="o">=</span><span class="s">"1d"</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
|
||||
<span class="n">long_mavg</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">history</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">asset</span><span class="p">,</span> <span class="s">'price'</span><span class="p">,</span> <span class="n">bar_count</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="n">frequency</span><span class="o">=</span><span class="s">"1d"</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
|
||||
|
||||
<span class="c"># Trading logic</span>
|
||||
<span class="k">if</span> <span class="n">short_mavg</span> <span class="o">></span> <span class="n">long_mavg</span><span class="p">:</span>
|
||||
<span class="c"># order_target orders as many shares as needed to</span>
|
||||
<span class="c"># achieve the desired number of shares.</span>
|
||||
<span class="n">order_target</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">asset</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">short_mavg</span> <span class="o"><</span> <span class="n">long_mavg</span><span class="p">:</span>
|
||||
<span class="n">order_target</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">asset</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
<span class="c"># Trading logic</span>
|
||||
<span class="k">if</span> <span class="n">short_mavg</span> <span class="o">></span> <span class="n">long_mavg</span><span class="p">:</span>
|
||||
<span class="c"># order_target orders as many shares as needed to</span>
|
||||
<span class="c"># achieve the desired number of shares.</span>
|
||||
<span class="n">order_target</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">asset</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">short_mavg</span> <span class="o"><</span> <span class="n">long_mavg</span><span class="p">:</span>
|
||||
<span class="n">order_target</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">asset</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
|
||||
<span class="c"># Save values for later inspection</span>
|
||||
<span class="n">record</span><span class="p">(</span><span class="n">btc</span><span class="o">=</span><span class="n">data</span><span class="o">.</span><span class="n">current</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">asset</span><span class="p">,</span> <span class="s">'price'</span><span class="p">),</span>
|
||||
<span class="n">short_mavg</span><span class="o">=</span><span class="n">short_mavg</span><span class="p">,</span>
|
||||
<span class="n">long_mavg</span><span class="o">=</span><span class="n">long_mavg</span><span class="p">)</span>
|
||||
<span class="c"># Save values for later inspection</span>
|
||||
<span class="n">record</span><span class="p">(</span><span class="n">btc</span><span class="o">=</span><span class="n">data</span><span class="o">.</span><span class="n">current</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">asset</span><span class="p">,</span> <span class="s">'price'</span><span class="p">),</span>
|
||||
<span class="n">short_mavg</span><span class="o">=</span><span class="n">short_mavg</span><span class="p">,</span>
|
||||
<span class="n">long_mavg</span><span class="o">=</span><span class="n">long_mavg</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">analyze</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">perf</span><span class="p">):</span>
|
||||
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>
|
||||
<span class="n">fig</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span>
|
||||
<span class="n">ax1</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">add_subplot</span><span class="p">(</span><span class="mi">211</span><span class="p">)</span>
|
||||
<span class="n">perf</span><span class="o">.</span><span class="n">portfolio_value</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span><span class="o">=</span><span class="n">ax1</span><span class="p">)</span>
|
||||
<span class="n">ax1</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s">'portfolio value in $'</span><span class="p">)</span>
|
||||
|
||||
<span class="n">ax2</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">add_subplot</span><span class="p">(</span><span class="mi">212</span><span class="p">)</span>
|
||||
<span class="n">perf</span><span class="p">[</span><span class="s">'btc'</span><span class="p">]</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span><span class="o">=</span><span class="n">ax2</span><span class="p">)</span>
|
||||
<span class="n">perf</span><span class="p">[[</span><span class="s">'short_mavg'</span><span class="p">,</span> <span class="s">'long_mavg'</span><span class="p">]]</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span><span class="o">=</span><span class="n">ax2</span><span class="p">)</span>
|
||||
|
||||
<span class="n">perf_trans</span> <span class="o">=</span> <span class="n">perf</span><span class="o">.</span><span class="n">ix</span><span class="p">[[</span><span class="n">t</span> <span class="o">!=</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">perf</span><span class="o">.</span><span class="n">transactions</span><span class="p">]]</span>
|
||||
<span class="n">buys</span> <span class="o">=</span> <span class="n">perf_trans</span><span class="o">.</span><span class="n">ix</span><span class="p">[[</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">'amount'</span><span class="p">]</span> <span class="o">></span> <span class="mi">0</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">perf_trans</span><span class="o">.</span><span class="n">transactions</span><span class="p">]]</span>
|
||||
<span class="n">sells</span> <span class="o">=</span> <span class="n">perf_trans</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span>
|
||||
<span class="p">[</span><span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">'amount'</span><span class="p">]</span> <span class="o"><</span> <span class="mi">0</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">perf_trans</span><span class="o">.</span><span class="n">transactions</span><span class="p">]]</span>
|
||||
<span class="n">ax2</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">buys</span><span class="o">.</span><span class="n">index</span><span class="p">,</span> <span class="n">perf</span><span class="o">.</span><span class="n">short_mavg</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="n">buys</span><span class="o">.</span><span class="n">index</span><span class="p">],</span>
|
||||
<span class="s">'^'</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">'m'</span><span class="p">)</span>
|
||||
<span class="n">ax2</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">sells</span><span class="o">.</span><span class="n">index</span><span class="p">,</span> <span class="n">perf</span><span class="o">.</span><span class="n">short_mavg</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="n">sells</span><span class="o">.</span><span class="n">index</span><span class="p">],</span>
|
||||
<span class="s">'v'</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">'k'</span><span class="p">)</span>
|
||||
<span class="n">ax2</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s">'price in $'</span><span class="p">)</span>
|
||||
<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Here we are explicitly defining an <code class="docutils literal"><span class="pre">analyze()</span></code> function that gets
|
||||
automatically called once the backtest is done.</p>
|
||||
<p>Although it might not be directly apparent, the power of <code class="docutils literal"><span class="pre">history()</span></code>
|
||||
(pun intended) can not be under-estimated as most algorithms make use of
|
||||
prior market developments in one form or another. You could easily
|
||||
devise a strategy that trains a classifier with
|
||||
<a class="reference external" href="http://scikit-learn.org/stable/">scikit-learn</a> which tries to
|
||||
predict future market movements based on past prices (note, that most of
|
||||
the <code class="docutils literal"><span class="pre">scikit-learn</span></code> functions require <code class="docutils literal"><span class="pre">numpy.ndarray</span></code>s rather than
|
||||
<code class="docutils literal"><span class="pre">pandas.DataFrame</span></code>s, so you can simply pass the underlying
|
||||
<code class="docutils literal"><span class="pre">ndarray</span></code> of a <code class="docutils literal"><span class="pre">DataFrame</span></code> via <code class="docutils literal"><span class="pre">.values</span></code>).</p>
|
||||
<p>We also used the <code class="docutils literal"><span class="pre">order_target()</span></code> function above. This and other
|
||||
functions like it can make order management and portfolio rebalancing
|
||||
much easier.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="conclusions">
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
Search.setIndex({envversion:46,filenames:["appendix","beginner-tutorial","bundles","development-guidelines","index","install","naming-convention","release-process","releases","welcome"],objects:{"zipline.data.bundles":{bundles:[0,0,1,""]}},objnames:{"0":["py","data","Python data"]},objtypes:{"0":"py:data"},terms:{"00pm":8,"01pm":8,"11465d9":8,"1st":1,"2ee40db":8,"533233fae43c7ff74abfb0044f046978817cb4e4":8,"5f49fa2":8,"__getitem__":8,"__main__":8,"__name__":8,"__repr__":8,"__wrapped__":7,"_position_amount":8,"abstract":8,"boolean":[2,8],"case":[1,2,3,5,8],"catch":8,"class":[3,7,8],"default":1,"export":7,"final":[1,2,3],"float":[1,8],"import":[1,2,7,8],"int":[2,8],"long":[1,2,8],"new":1,"null":8,"return":[1,7,8],"short":[1,3,8],"static":[7,8],"switch":8,"throw":8,"true":8,"try":[3,5,8],"var":1,"while":[7,8],aapl:[2,8],abil:[2,8],abl:[1,2,5,8],about:[1,2,3,5,8],abov:[1,3,5,6,7,8],absolut:8,accept:[2,7,8],accident:8,accord:[7,8],accordingli:8,account:[2,4,8,9],achiev:1,acquir:[2,5],across:[6,8],act:8,action:8,activ:[5,7,8],actual:8,add:[2,3,7,8],add_histori:8,addit:[3,5,8],address:7,adjust:[2,8],advanc:8,advantag:5,affect:8,after:[1,2,3,5,7,8],again:8,against:[1,8],ahead:1,alexand:8,algebra:5,algo:[1,2,8],algofil:[1,2],algorithm_period_return:8,algotext:1,alia:8,alias_dt:8,align:8,all:[0,1,2,3,4,5,6,7,8,9],all_api_method:8,alloc:8,allow:[1,2,5,8],along:[2,8],alpha:[5,8],alreadi:[2,3,5],also:[1,2,3,5,7,8],altern:[5,6,8],alwai:[2,6,7,8],amor:8,amount:[1,8],amp_btc:6,anaconda:[5,7,8],anaconda_token:8,analogu:8,analysi:[4,7,9],analyt:5,analyz:[1,8],andrea:8,ani:[1,2,5,6,7,8],announc:8,annual:8,annualizedvolatil:8,anonym:2,anoth:[2,5,8],anymor:1,anyth:[1,5,7],app:1,appear:[2,7],append:[7,8],appendix:3,appli:[1,8],applic:1,appropri:3,approxim:8,appveyor:[3,7,8],april:8,apt:5,arch:5,architectur:1,ardr_btc:6,arena:8,arg:[1,7,8],argument:[0,1,2,7,8],aroon:8,around:[7,8],arrai:[5,8],art:[4,9],ask:[1,3],asof_d:8,assess:1,asset_find:8,assetdbwrit:2,assetfind:8,assetfindercachedequ:8,assign:[1,8],assist:5,assum:[1,3,5],atla:5,atleastn:8,attach_pipelin:8,attempt:[2,8],attribut:[7,8],author:8,auto:8,auto_close_d:8,automag:1,avail:1,averagedollarvolum:8,avoid:[1,2,8],awar:[7,8],back:[3,6,8],backend:5,backfil:8,backward:8,bad:8,band:8,bar:[1,8],bar_count:[1,8],bardata:8,barread:8,base:[1,2,4,5,8,9],base_curr:6,basi:8,batch:8,batch_transform:8,batchtransform:8,batteri:1,bch_btc:6,bch_eth:6,bch_usdt:6,bcn_btc:6,bcn_xmr:6,bcolz:[2,8],bcolzdailybarread:[2,8],bcolzdailybarwrit:[2,8],bcolzminutebarread:[2,8],bcolzminutebarwrit:[2,8],bcy_btc:6,becaus:[5,7,8],becom:8,been:[0,1,2,5,7,8],befor:[1,2,3,5,8],before_trading_start:[0,8],begin:[5,8],behavior:[0,8],bela_btc:6,believ:1,below:[1,5],benchmark:8,benefit:1,best:[3,5],beta:8,better:8,between:[3,4,6,8,9],bia:1,big:5,bin:5,binari:[5,7,8],bit:[3,8],bitcoin:[1,6],bitfinex:[1,4,9],bittrex:[1,4,9],blaze:8,blazeearningscalendarload:8,blazeload:8,bld:3,blk_btc:6,blk_xmr:6,bloat:8,blockchain:6,blotter:8,bmf:8,board:8,bodi:3,bolling:8,bollinger_band:8,bollingerband:8,book:1,book_target_perc:8,bool:8,both:[3,4,6,7,8,9],bottom:8,bought:1,bound:1,boundari:8,boundcolumn:8,bovespa:8,branch:[3,7],brew:[3,5],brother:5,brows:5,browser:[3,7],btc:1,btc_usd:[1,6],btc_usdt:6,btcd_btc:6,btcd_xmr:6,btm_btc:6,bts_btc:6,bucket:8,bug:[2,3],bui:8,build:[1,3,5,7],build_ext:3,bump:8,burst_btc:6,businessdayssincecashbuybackauth:8,businessdayssincedividendannounc:8,businessdayssincepreviousearn:8,businessdayssincepreviousexd:8,businessdayssincesharebuybackauth:8,businessdaysuntilnextearn:8,businessdaysuntilnextexd:8,button:[5,7],buy_and_hodl:1,buy_btc:1,buy_btc_simpl:1,buy_btc_simple_out:1,buy_simple_btc_out:1,buyback:8,buyback_auth:8,cachedobject:8,calc:8,calc_dividend_ratio:8,calcul:[1,3,8],calculate_max_drawdown:8,call:[1,2,3,8],can:[1,2,3,4,5,6,7,8,9],can_trad:8,candl:6,cannot:5,canon:3,cap:8,capabl:8,capit:[1,8],capital_bas:8,captur:[1,8],cash:[2,3,8],cashbuybackauthor:8,catalyst_dev:[1,5],categor:8,caus:[0,1,2,3,8],ceiling:8,cell:8,certain:8,certian:0,chain:8,chanc:1,chang:[1,3,7],channel:[1,5],charact:3,charg:[1,8],chart:5,check:[1,2,3,6,8],checker:7,checkout:[3,7],checkpoint:8,choic:7,choos:[5,6,7],chunk:[1,8],clam_btc:6,classic:1,classifi:8,classmethod:8,clean:[2,5,7,8],cleaner:8,clear:2,cli:8,click:[5,7],clock:8,clone:3,close:[1,8],cloud:8,cmd:1,code:[7,8],codebas:3,coerc:8,colin:8,collect:[1,2],column:[1,2,8],com:[1,2,3,8],combin:8,come:[2,5,8],comingl:8,commis:8,commissionmodel:8,common:[1,8],commonli:1,commun:5,compar:[1,8],comparison:8,compat:8,compil:[5,7,8],complex:[5,8],complic:8,compounded_log_return:8,comput:[1,5,8],concept:[1,8],conceptu:8,concurr:8,conda:3,conda_build_matrix:7,condit:8,conf:1,config:5,configur:[1,3,5,8],conflict:8,congratul:5,connect:8,consid:8,consist:[1,6,8],constraint:2,construct:8,constructor:8,consum:[7,8],contain:[1,2,3,5,8],context:[1,8],contigu:8,continu:1,continuum:5,contract:8,conveni:1,convent:[],convers:2,convert:[2,8],copi:[2,3,7,8],core:[5,8],correct:[2,5,7,8],cLine truncated
|
||||
Search.setIndex({envversion:46,filenames:["appendix","beginner-tutorial","bundles","development-guidelines","index","install","naming-convention","release-process","releases","welcome"],objects:{"zipline.data.bundles":{bundles:[0,0,1,""]}},objnames:{"0":["py","data","Python data"]},objtypes:{"0":"py:data"},terms:{"000000e":1,"00pm":8,"01pm":8,"0x10eaeadd0":1,"11465d9":8,"1st":1,"2ee40db":8,"328842e":1,"380954e":1,"505275d6646a41f3856b22b16678d":1,"533233fae43c7ff74abfb0044f046978817cb4e4":8,"536708e":1,"5f49fa2":8,"650729e":1,"7869f7828fa140328eb40477bb7d":1,"998236e":1,"998677e":1,"999120e":1,"999558e":1,"__getitem__":8,"__main__":8,"__name__":8,"__repr__":8,"__wrapped__":7,"_position_amount":8,"abstract":8,"boolean":[2,8],"case":[1,2,3,5,8],"catch":8,"class":[3,7,8],"default":[],"export":7,"final":[1,2,3],"float":[1,8],"import":[1,2,7,8],"int":[2,8],"long":[1,2,8],"new":[],"null":8,"return":[1,7,8],"short":[1,3,8],"static":[7,8],"switch":8,"throw":8,"true":8,"try":[3,5,8],"var":1,"while":[7,8],aapl:[2,8],abil:[2,8],abl:[1,2,5,8],about:[1,2,3,5,8],abov:[1,3,5,6,7,8],absolut:8,accept:[2,7,8],accident:8,accord:[7,8],accordingli:8,account:[2,4,8,9],achiev:1,acquir:[2,5],across:[6,8],act:8,action:8,activ:[5,7,8],actual:8,add:[2,3,7,8],add_histori:8,add_subplot:1,addit:[3,5,8],address:7,adjust:[2,8],advanc:8,advantag:5,affect:8,after:[1,2,3,5,7,8],again:8,against:[1,8],ahead:1,alexand:8,algebra:5,algo:[1,2,8],algo_volatil:1,algofil:[1,2],algorithm_period_return:[1,8],algotext:1,alia:8,alias_dt:8,align:8,all:[0,1,2,3,4,5,6,7,8,9],all_api_method:8,alloc:8,allow:[1,2,5,8],along:[2,8],alpha:[1,5,8],alreadi:[2,3,5],also:[1,2,3,5,7,8],altern:[5,6,8],although:1,alwai:[2,6,7,8],amor:8,amount:[1,8],amp_btc:6,anaconda:[5,7,8],anaconda_token:8,analogu:8,analysi:[4,7,9],analyt:5,analyz:[1,8],andrea:8,ani:[1,2,5,6,7,8],announc:8,annual:8,annualizedvolatil:8,anonym:2,anoth:[1,2,5,8],anymor:1,anyth:[1,5,7],app:1,appar:1,appear:[2,7],append:[7,8],appendix:3,appli:[1,8],applic:1,appropri:3,approxim:8,appveyor:[3,7,8],april:8,apt:5,arch:5,architectur:1,ardr_btc:6,arena:8,arg:[1,7,8],argument:[0,1,2,7,8],aroon:8,around:[7,8],arrai:[5,8],art:[4,9],ask:[1,3],asof_d:8,assess:1,asset_find:8,assetdbwrit:2,assetfind:8,assetfindercachedequ:8,assign:[1,8],assist:5,assum:[1,3,5],atla:5,atleastn:8,attach_pipelin:8,attempt:[2,8],attribut:[7,8],author:8,auto:8,auto_close_d:8,automag:1,automat:1,avail:[],averagedollarvolum:8,avoid:[1,2,8],awar:[7,8],ax1:1,ax2:1,back:[3,6,8],backend:5,backfil:8,backward:8,bad:8,band:8,bar:[1,8],bar_count:[1,8],bardata:8,barread:8,base:[1,2,4,5,8,9],base_curr:6,basi:8,batch:8,batch_transform:8,batchtransform:8,batteri:1,bch_btc:6,bch_eth:6,bch_usdt:6,bcn_btc:6,bcn_xmr:6,bcolz:[2,8],bcolzdailybarread:[2,8],bcolzdailybarwrit:[2,8],bcolzminutebarread:[2,8],bcolzminutebarwrit:[2,8],bcy_btc:6,be62ff77760c4599abaac43be9cc9:1,becaus:[5,7,8],becom:8,been:[0,1,2,5,7,8],befor:[1,2,3,5,8],before_trading_start:[0,8],begin:[5,8],behavior:[0,8],bela_btc:6,believ:1,below:[1,5],benchmark:8,benchmark_period_return:1,benchmark_volatil:1,benefit:1,best:[3,5],beta:[1,8],better:8,between:[3,4,6,8,9],bia:1,big:5,bin:5,binari:[5,7,8],bit:[3,8],bitcoin:[1,6],bitfinex:[1,4,9],bittrex:[1,4,9],blaze:8,blazeearningscalendarload:8,blazeload:8,bld:3,blk_btc:6,blk_xmr:6,bloat:8,blockchain:6,blotter:8,bmf:8,board:8,bodi:3,bolling:8,bollinger_band:8,bollingerband:8,book:1,book_target_perc:8,bool:8,both:[3,4,6,7,8,9],bottom:8,bought:1,bound:1,boundari:8,boundcolumn:8,bovespa:8,branch:[3,7],brew:[3,5],brother:5,brows:5,browser:[3,7],btc:1,btc_usd:[1,6],btc_usdt:6,btcd_btc:6,btcd_xmr:6,btm_btc:6,bts_btc:6,bucket:8,bug:[2,3],bui:[1,8],build:[3,5,7],build_ext:3,bump:8,burst_btc:6,businessdayssincecashbuybackauth:8,businessdayssincedividendannounc:8,businessdayssincepreviousearn:8,businessdayssincepreviousexd:8,businessdayssincesharebuybackauth:8,businessdaysuntilnextearn:8,businessdaysuntilnextexd:8,button:[5,7],buy_and_hodl:1,buy_btc:[],buy_btc_simpl:1,buy_btc_simple_out:1,buy_simple_btc_out:[],buyback:8,buyback_auth:8,cachedobject:8,calc:8,calc_dividend_ratio:8,calcul:[1,3,8],calculate_max_drawdown:8,call:[1,2,3,8],can:[1,2,3,4,5,6,7,8,9],can_trad:8,candl:6,cannot:5,canon:3,cap:8,capabl:8,capit:[1,8],capital_bas:8,capital_us:1,captur:[1,8],cash:[2,3,8],cashbuybackauthor:8,catalyst_dev:[1,5],categor:8,caus:[0,1,2,3,8],ceiling:8,cell:8,certain:8,certian:0,chain:8,chanc:1,chang:[3,7],channel:[1,5],charact:3,charg:[1,8],chart:5,check:[1,2,3,6,8],checker:7,checkout:[3,7],checkpoint:8,choic:7,choos:[5,6,7],chunk:[1,8],clam_btc:6,classic:1,classifi:[1,8],classmethod:8,clean:[2,5,7,8],cleaner:8,clear:2,cli:8,click:[5,7],clock:8,clone:3,close:[1,8],cloud:8,cmd:1,code:[7,8],codebas:3,coerc:8,colin:8,collect:[1,2],color:1,column:[1,2,8],com:[1,2,3,8],combin:8,come:[2,5,8],comingl:8,commis:8,commissionmodel:8,common:[1,8],commonli:1,commun:5,compar:[1,8],comparison:8,compat:8,compil:[5,7,8],complex:[5,8],complic:8,compounded_log_return:8,comput:[1,5,8],concLine truncated
|
||||
Reference in new issue
Block a user