From 5bcc3fe4bc4b7a38bbef993830910ad77f29e285 Mon Sep 17 00:00:00 2001
From: Victor Grau Serrat
catalyst.utils.calendars.TradingCalendar(start=Timestamp('1990-01-01 00:00:00+0000', tz='UTC'), end=Timestamp('2019-02-21 15:47:44.100762+0000', tz='UTC'))[source]¶catalyst.utils.calendars.TradingCalendar(start=Timestamp('1990-01-01 00:00:00+0000', tz='UTC'), end=Timestamp('2019-02-21 22:39:49.439971+0000', tz='UTC'))[source]¶
An TradingCalendar represents the timing information of a single market exchange.
The timing information is made up of two parts: sessions, and opens/closes.
diff --git a/beginner-tutorial.html b/beginner-tutorial.html index 12dae420..8503263a 100644 --- a/beginner-tutorial.html +++ b/beginner-tutorial.html @@ -689,19 +689,20 @@ follow. Most of the added some complexity has been added to beautify the output, which you can skim through for now. A copy of this algorithm is available in theexamples directory:
dual_moving_average.py.
-import numpy as np
+import matplotlib.pyplot as plt
+import numpy as np
import pandas as pd
from logbook import Logger
-import matplotlib.pyplot as plt
from catalyst import run_algorithm
-from catalyst.api import (order, record, symbol, order_target_percent,
- get_open_orders)
+from catalyst.api import (record, symbol, order_target_percent,
+ get_open_orders)
from catalyst.exchange.utils.stats_utils import extract_transactions
NAMESPACE = 'dual_moving_average'
log = Logger(NAMESPACE)
+
def initialize(context):
context.i = 0
context.asset = symbol('ltc_usd')
@@ -710,22 +711,30 @@ the examples dire
def handle_data(context, data):
# define the windows for the moving averages
- short_window = 50
- long_window = 200
+ short_window = 2
+ long_window = 3
# Skip as many bars as long_window to properly compute the average
context.i += 1
if context.i < long_window:
- return
+ return
# Compute moving averages calling data.history() for each
# moving average with the appropriate parameters. We choose to use
# minute bars for this simulation -> freq="1m"
# Returns a pandas dataframe.
- short_mavg = data.history(context.asset, 'price',
- bar_count=short_window, frequency="1m").mean()
- long_mavg = data.history(context.asset, 'price',
- bar_count=long_window, frequency="1m").mean()
+ short_data = data.history(context.asset,
+ 'price',
+ bar_count=short_window,
+ frequency="1T",
+ )
+ short_mavg = short_data.mean()
+ long_data = data.history(context.asset,
+ 'price',
+ bar_count=long_window,
+ frequency="1T",
+ )
+ long_mavg = long_data.mean()
# Let's keep the price of our asset in a more handy variable
price = data.current(context.asset, 'price')
@@ -758,15 +767,14 @@ the examples dire
# Trading logic
if short_mavg > long_mavg and pos_amount == 0:
- # we buy 100% of our portfolio for this asset
- order_target_percent(context.asset, 1)
+ # we buy 100% of our portfolio for this asset
+ order_target_percent(context.asset, 1)
elif short_mavg < long_mavg and pos_amount > 0:
- # we sell all our positions for this asset
- order_target_percent(context.asset, 0)
+ # we sell all our positions for this asset
+ order_target_percent(context.asset, 0)
def analyze(context, perf):
-
# Get the base_currency that was passed as a parameter to the simulation
exchange = list(context.exchanges.values())[0]
base_currency = exchange.base_currency.upper()
@@ -777,18 +785,20 @@ the examples dire
ax1.legend_.remove()
ax1.set_ylabel('Portfolio Value\n({})'.format(base_currency))
start, end = ax1.get_ylim()
- ax1.yaxis.set_ticks(np.arange(start, end, (end-start)/5))
+ ax1.yaxis.set_ticks(np.arange(start, end, (end - start) / 5))
# Second chart: Plot asset price, moving averages and buys/sells
ax2 = plt.subplot(412, sharex=ax1)
- perf.loc[:, ['price','short_mavg','long_mavg']].plot(ax=ax2, label='Price')
+ perf.loc[:, ['price', 'short_mavg', 'long_mavg']].plot(
+ ax=ax2,
+ label='Price')
ax2.legend_.remove()
ax2.set_ylabel('{asset}\n({base})'.format(
- asset = context.asset.symbol,
- base = base_currency
- ))
+ asset=context.asset.symbol,
+ base=base_currency
+ ))
start, end = ax2.get_ylim()
- ax2.yaxis.set_ticks(np.arange(start, end, (end-start)/5))
+ ax2.yaxis.set_ticks(np.arange(start, end, (end - start) / 5))
transaction_df = extract_transactions(perf)
if not transaction_df.empty:
@@ -818,31 +828,43 @@ the examples dire
ax3.legend_.remove()
ax3.set_ylabel('Percent Change')
start, end = ax3.get_ylim()
- ax3.yaxis.set_ticks(np.arange(start, end, (end-start)/5))
+ ax3.yaxis.set_ticks(np.arange(start, end, (end - start) / 5))
# Fourth chart: Plot our cash
ax4 = plt.subplot(414, sharex=ax1)
perf.cash.plot(ax=ax4)
ax4.set_ylabel('Cash\n({})'.format(base_currency))
start, end = ax4.get_ylim()
- ax4.yaxis.set_ticks(np.arange(0, end, end/5))
+ ax4.yaxis.set_ticks(np.arange(0, end, end / 5))
plt.show()
if __name__ == '__main__':
run_algorithm(
- capital_base=1000,
- data_frequency='minute',
- initialize=initialize,
- handle_data=handle_data,
- analyze=analyze,
- exchange_name='bitfinex',
- algo_namespace=NAMESPACE,
- base_currency='usd',
- start=pd.to_datetime('2017-9-22', utc=True),
- end=pd.to_datetime('2017-9-23', utc=True),
- )
+ capital_base=1000,
+ data_frequency='minute',
+ initialize=initialize,
+ handle_data=handle_data,
+ analyze=analyze,
+ exchange_name='bitfinex',
+ algo_namespace=NAMESPACE,
+ base_currency='usd',
+ simulate_orders=True,
+ live=True,
+ )
+ # run_algorithm(
+ # capital_base=1000,
+ # data_frequency='minute',
+ # initialize=initialize,
+ # handle_data=handle_data,
+ # analyze=analyze,
+ # exchange_name='bitfinex',
+ # algo_namespace=NAMESPACE,
+ # base_currency='usd',
+ # start=pd.to_datetime('2017-9-22', utc=True),
+ # end=pd.to_datetime('2017-9-23', utc=True),
+ # )
In order to run the code above, you have to ingest the needed data first:
diff --git a/example-algos.html b/example-algos.html
index a3bf5def..9f76fa66 100644
--- a/example-algos.html
+++ b/example-algos.html
@@ -214,39 +214,60 @@ writting the following article:
Buy BTC Simple Algorithm¶
Source code: examples/buy_btc_simple.py
'''
- Run this example, by executing the following from your terminal:
- catalyst ingest-exchange -x bitfinex -f daily -i btc_usdt
- catalyst run -f buy_btc_simple.py -x bitfinex --start 2016-1-1 --end 2017-9-30 -o buy_btc_simple_out.pickle
+ This is a very simple example referenced in the beginner's tutorial:
+ https://enigmampc.github.io/catalyst/beginner-tutorial.html
- If you want to run this code using another exchange, make sure that
- the asset is available on that exchange. For example, if you were to run
- it for exchange Poloniex, you would need to edit the following line:
+ Run this example, by executing the following from your terminal:
+ catalyst ingest-exchange -x bitfinex -f daily -i btc_usdt
+ catalyst run -f buy_btc_simple.py -x bitfinex --start 2016-1-1 \
+ --end 2017-9-30 -o buy_btc_simple_out.pickle
- context.asset = symbol('btc_usdt') # note 'usdt' instead of 'usd'
+ If you want to run this code using another exchange, make sure that
+ the asset is available on that exchange. For example, if you were to run
+ it for exchange Poloniex, you would need to edit the following line:
- and specify exchange poloniex as follows:
- catalyst ingest-exchange -x poloniex -f daily -i btc_usdt
- catalyst run -f buy_btc_simple.py -x poloniex --start 2016-1-1 --end 2017-9-30 -o buy_btc_simple_out.pickle
+ context.asset = symbol('btc_usdt') # note 'usdt' instead of 'usd'
- To see which assets are available on each exchange, visit:
- https://www.enigma.co/catalyst/status
+ and specify exchange poloniex as follows:
+ catalyst ingest-exchange -x poloniex -f daily -i btc_usdt
+ catalyst run -f buy_btc_simple.py -x poloniex --start 2016-1-1 \
+ --end 2017-9-30 -o buy_btc_simple_out.pickle
+
+ To see which assets are available on each exchange, visit:
+ https://www.enigma.co/catalyst/status
'''
-
+from catalyst import run_algorithm
from catalyst.api import order, record, symbol
+import pandas as pd
+
def initialize(context):
- context.asset = symbol('btc_usd')
+ context.asset = symbol('btc_usdt')
+
def handle_data(context, data):
order(context.asset, 1)
- record(btc = data.current(context.asset, 'price'))
+ record(btc=data.current(context.asset, 'price'))
+
+
+if __name__ == '__main__':
+ run_algorithm(
+ capital_base=10000,
+ data_frequency='daily',
+ initialize=initialize,
+ handle_data=handle_data,
+ exchange_name='poloniex',
+ algo_namespace='buy_and_hodl',
+ base_currency='usdt',
+ start=pd.to_datetime('2015-03-01', utc=True),
+ end=pd.to_datetime('2017-10-31', utc=True),
+ )
This simple algorithm does not produce any output nor displays any chart.
Source code: examples/buy_and_hodl.py
First ingest the historical pricing data needed to run this algorithm:
catalyst ingest-exchange -x bitfinex -f daily -i btc_usd
--start<
that 2015-3-1 is the earliest date that Catalyst supports (if you choose an
earlier date, you’ll get an error), and the most recent date you can choose is
one day prior to the current date.
+Source code: examples/buy_and_hodl.py
#!/usr/bin/env python
#
# Copyright 2017 Enigma MPC, Inc.
@@ -287,11 +309,11 @@ one day prior to the current date.
from catalyst import run_algorithm
from catalyst.api import (order_target_value, symbol, record,
- cancel_order, get_open_orders, )
+ cancel_order, get_open_orders, )
def initialize(context):
- context.ASSET_NAME = 'btc_usd'
+ context.ASSET_NAME = 'btc_usdt'
context.TARGET_HODL_RATIO = 0.8
context.RESERVE_RATIO = 1.0 - context.TARGET_HODL_RATIO
@@ -345,10 +367,10 @@ one day prior to the current date.
# Plot the portfolio and asset data.
ax1 = plt.subplot(611)
results[['portfolio_value']].plot(ax=ax1)
- ax1.set_ylabel('Portfolio Value (USD)')
+ ax1.set_ylabel('Portfolio\nValue\n(USD)')
ax2 = plt.subplot(612, sharex=ax1)
- ax2.set_ylabel('{asset} (USD)'.format(asset=context.ASSET_NAME))
+ ax2.set_ylabel('{asset}\n(USD)'.format(asset=context.ASSET_NAME))
results[['price']].plot(ax=ax2)
trans = results.ix[[t != [] for t in results.transactions]]
@@ -388,11 +410,11 @@ one day prior to the current date.
'algorithm',
'benchmark',
]].plot(ax=ax5)
- ax5.set_ylabel('Percent Change')
+ ax5.set_ylabel('Percent\nChange')
ax6 = plt.subplot(616, sharex=ax1)
results[['volume']].plot(ax=ax6)
- ax6.set_ylabel('Volume (mCoins/5min)')
+ ax6.set_ylabel('Volume')
plt.legend(loc=3)
@@ -408,9 +430,9 @@ one day prior to the current date.
initialize=initialize,
handle_data=handle_data,
analyze=analyze,
- exchange_name='bitfinex',
+ exchange_name='poloniex',
algo_namespace='buy_and_hodl',
- base_currency='usd',
+ base_currency='usdt',
start=pd.to_datetime('2015-03-01', utc=True),
end=pd.to_datetime('2017-10-31', utc=True),
)
@@ -420,22 +442,23 @@ one day prior to the current date.
Dual Moving Average Crossover¶
-Source Code: examples/dual_moving_average.py
This strategy is covered in detail in the last part of
this tutorial.
-import numpy as np
+Source Code: examples/dual_moving_average.py
+import matplotlib.pyplot as plt
+import numpy as np
import pandas as pd
from logbook import Logger
-import matplotlib.pyplot as plt
from catalyst import run_algorithm
-from catalyst.api import (order, record, symbol, order_target_percent,
- get_open_orders)
-from catalyst.exchange.stats_utils import extract_transactions
+from catalyst.api import (record, symbol, order_target_percent,
+ get_open_orders)
+from catalyst.exchange.utils.stats_utils import extract_transactions
NAMESPACE = 'dual_moving_average'
log = Logger(NAMESPACE)
+
def initialize(context):
context.i = 0
context.asset = symbol('ltc_usd')
@@ -444,22 +467,30 @@ one day prior to the current date.
def handle_data(context, data):
# define the windows for the moving averages
- short_window = 50
- long_window = 200
+ short_window = 2
+ long_window = 3
# Skip as many bars as long_window to properly compute the average
context.i += 1
if context.i < long_window:
- return
+ return
# Compute moving averages calling data.history() for each
# moving average with the appropriate parameters. We choose to use
# minute bars for this simulation -> freq="1m"
# Returns a pandas dataframe.
- short_mavg = data.history(context.asset, 'price',
- bar_count=short_window, frequency="1m").mean()
- long_mavg = data.history(context.asset, 'price',
- bar_count=long_window, frequency="1m").mean()
+ short_data = data.history(context.asset,
+ 'price',
+ bar_count=short_window,
+ frequency="1T",
+ )
+ short_mavg = short_data.mean()
+ long_data = data.history(context.asset,
+ 'price',
+ bar_count=long_window,
+ frequency="1T",
+ )
+ long_mavg = long_data.mean()
# Let's keep the price of our asset in a more handy variable
price = data.current(context.asset, 'price')
@@ -492,17 +523,17 @@ one day prior to the current date.
# Trading logic
if short_mavg > long_mavg and pos_amount == 0:
- # we buy 100% of our portfolio for this asset
- order_target_percent(context.asset, 1)
+ # we buy 100% of our portfolio for this asset
+ order_target_percent(context.asset, 1)
elif short_mavg < long_mavg and pos_amount > 0:
- # we sell all our positions for this asset
- order_target_percent(context.asset, 0)
+ # we sell all our positions for this asset
+ order_target_percent(context.asset, 0)
def analyze(context, perf):
-
# Get the base_currency that was passed as a parameter to the simulation
- base_currency = context.exchanges.values()[0].base_currency.upper()
+ exchange = list(context.exchanges.values())[0]
+ base_currency = exchange.base_currency.upper()
# First chart: Plot portfolio value using base_currency
ax1 = plt.subplot(411)
@@ -510,18 +541,20 @@ one day prior to the current date.
ax1.legend_.remove()
ax1.set_ylabel('Portfolio Value\n({})'.format(base_currency))
start, end = ax1.get_ylim()
- ax1.yaxis.set_ticks(np.arange(start, end, (end-start)/5))
+ ax1.yaxis.set_ticks(np.arange(start, end, (end - start) / 5))
# Second chart: Plot asset price, moving averages and buys/sells
ax2 = plt.subplot(412, sharex=ax1)
- perf.loc[:, ['price','short_mavg','long_mavg']].plot(ax=ax2, label='Price')
+ perf.loc[:, ['price', 'short_mavg', 'long_mavg']].plot(
+ ax=ax2,
+ label='Price')
ax2.legend_.remove()
ax2.set_ylabel('{asset}\n({base})'.format(
- asset = context.asset.symbol,
- base = base_currency
- ))
+ asset=context.asset.symbol,
+ base=base_currency
+ ))
start, end = ax2.get_ylim()
- ax2.yaxis.set_ticks(np.arange(start, end, (end-start)/5))
+ ax2.yaxis.set_ticks(np.arange(start, end, (end - start) / 5))
transaction_df = extract_transactions(perf)
if not transaction_df.empty:
@@ -551,38 +584,49 @@ one day prior to the current date.
ax3.legend_.remove()
ax3.set_ylabel('Percent Change')
start, end = ax3.get_ylim()
- ax3.yaxis.set_ticks(np.arange(start, end, (end-start)/5))
+ ax3.yaxis.set_ticks(np.arange(start, end, (end - start) / 5))
# Fourth chart: Plot our cash
ax4 = plt.subplot(414, sharex=ax1)
perf.cash.plot(ax=ax4)
ax4.set_ylabel('Cash\n({})'.format(base_currency))
start, end = ax4.get_ylim()
- ax4.yaxis.set_ticks(np.arange(0, end, end/5))
+ ax4.yaxis.set_ticks(np.arange(0, end, end / 5))
plt.show()
if __name__ == '__main__':
run_algorithm(
- capital_base=1000,
- data_frequency='minute',
- initialize=initialize,
- handle_data=handle_data,
- analyze=analyze,
- exchange_name='bitfinex',
- algo_namespace=NAMESPACE,
- base_currency='usd',
- start=pd.to_datetime('2017-9-22', utc=True),
- end=pd.to_datetime('2017-9-23', utc=True),
- )
+ capital_base=1000,
+ data_frequency='minute',
+ initialize=initialize,
+ handle_data=handle_data,
+ analyze=analyze,
+ exchange_name='bitfinex',
+ algo_namespace=NAMESPACE,
+ base_currency='usd',
+ simulate_orders=True,
+ live=True,
+ )
+ # run_algorithm(
+ # capital_base=1000,
+ # data_frequency='minute',
+ # initialize=initialize,
+ # handle_data=handle_data,
+ # analyze=analyze,
+ # exchange_name='bitfinex',
+ # algo_namespace=NAMESPACE,
+ # base_currency='usd',
+ # start=pd.to_datetime('2017-9-22', utc=True),
+ # end=pd.to_datetime('2017-9-23', utc=True),
+ # )
Mean Reversion Algorithm¶
-Source code: examples/mean_reversion_simple.py
This algorithm is based on a simple momentum strategy. When the cryptoasset goes
up quickly, we’re going to buy; when it goes down quickly, we’re going to sell.
Hopefully, we’ll ride the waves.
@@ -598,7 +642,11 @@ lines 218-245, so in order to run the algorithm we just type:
python mean_reversion_simple.py
-import os
+Source code: examples/mean_reversion_simple.py
+# For this example, we're going to write a simple momentum script. When the
+# stock goes up quickly, we're going to buy; when it goes down quickly, we're
+# going to sell. Hopefully we'll ride the waves.
+import os
import tempfile
import time
@@ -609,7 +657,7 @@ lines 218-245, so in order to run the algorithm we just type:
from catalyst import run_algorithm
from catalyst.api import symbol, record, order_target_percent, get_open_orders
-from catalyst.exchange.stats_utils import extract_transactions
+from catalyst.exchange.utils.stats_utils import extract_transactions
# We give a name to the algorithm which Catalyst will use to persist its state.
# In this example, Catalyst will create the `.catalyst/data/live_algos`
# directory. If we stop and start the algorithm, Catalyst will resume its
@@ -629,17 +677,20 @@ lines 218-245, so in order to run the algorithm we just type:
# trading pairs) you want to backtest. You'll also want to define any
# parameters or values you're going to use.
- # In our example, we're looking at Neo in USD.
- context.neo_eth = symbol('neo_usd')
+ # In our example, we're looking at Neo in Ether.
+ context.market = symbol('bnb_eth')
context.base_price = None
context.current_day = None
- context.RSI_OVERSOLD = 30
- context.RSI_OVERBOUGHT = 80
+ context.RSI_OVERSOLD = 60
+ context.RSI_OVERBOUGHT = 70
context.CANDLE_SIZE = '15T'
context.start_time = time.time()
+ context.set_commission(maker=0.001, taker=0.002)
+ context.set_slippage(spread=0.001)
+
def handle_data(context, data):
# This handle_data function is where the real work is done. Our data is
@@ -656,14 +707,14 @@ lines 218-245, so in order to run the algorithm we just type:
context.current_day = today
# We're computing the volume-weighted-average-price of the security
- # defined above, in the context.neo_eth variable. For this example, we're
+ # defined above, in the context.market variable. For this example, we're
# using three bars on the 15 min bars.
# The frequency attribute determine the bar size. We use this convention
# for the frequency alias:
# http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases
prices = data.history(
- context.neo_eth,
+ context.market,
fields='close',
bar_count=50,
frequency=context.CANDLE_SIZE
@@ -678,7 +729,7 @@ lines 218-245, so in order to run the algorithm we just type:
# We need a variable for the current price of the security to compare to
# the average. Since we are requesting two fields, data.current()
# returns a DataFrame with
- current = data.current(context.neo_eth, fields=['close', 'volume'])
+ current = data.current(context.market, fields=['close', 'volume'])
price = current['close']
# If base_price is not set, we use the current value. This is the
@@ -692,34 +743,36 @@ lines 218-245, so in order to run the algorithm we just type:
# Now that we've collected all current data for this frame, we use
# the record() method to save it. This data will be available as
# a parameter of the analyze() function for further analysis.
+
record(
- price=price,
volume=current['volume'],
+ price=price,
price_change=price_change,
rsi=rsi[-1],
cash=cash
)
-
# We are trying to avoid over-trading by limiting our trades to
# one per day.
if context.traded_today:
return
+ # TODO: retest with open orders
# Since we are using limit orders, some orders may not execute immediately
# we wait until all orders are executed before considering more trades.
- orders = get_open_orders(context.neo_eth)
+ orders = context.blotter.open_orders
if len(orders) > 0:
+ log.info('exiting because orders are open: {}'.format(orders))
return
# Exit if we cannot trade
- if not data.can_trade(context.neo_eth):
+ if not data.can_trade(context.market):
return
# Another powerful built-in feature of the Catalyst backtester is the
# portfolio object. The portfolio object tracks your positions, cash,
# cost basis of specific holdings, and more. In this line, we calculate
# how long or short our position is at this minute.
- pos_amount = context.portfolio.positions[context.neo_eth].amount
+ pos_amount = context.portfolio.positions[context.market].amount
if rsi[-1] <= context.RSI_OVERSOLD and pos_amount == 0:
log.info(
@@ -730,7 +783,7 @@ lines 218-245, so in order to run the algorithm we just type:
# Set a style for limit orders,
limit_price = price * 1.005
order_target_percent(
- context.neo_eth, 1, limit_price=limit_price
+ context.market, 1, limit_price=limit_price
)
context.traded_today = True
@@ -742,7 +795,7 @@ lines 218-245, so in order to run the algorithm we just type:
)
limit_price = price * 0.995
order_target_percent(
- context.neo_eth, 0, limit_price=limit_price
+ context.market, 0, limit_price=limit_price
)
context.traded_today = True
@@ -753,7 +806,7 @@ lines 218-245, so in order to run the algorithm we just type:
import matplotlib.pyplot as plt
# The base currency of the algo exchange
- base_currency = context.exchanges.values()[0].base_currency.upper()
+ base_currency = list(context.exchanges.values())[0].base_currency.upper()
# Plot the portfolio value over time.
ax1 = plt.subplot(611)
@@ -765,7 +818,7 @@ lines 218-245, so in order to run the algorithm we just type:
perf.loc[:, 'price'].plot(ax=ax2, label='Price')
ax2.set_ylabel('{asset}\n({base})'.format(
- asset=context.neo_eth.symbol, base=base_currency
+ asset=context.market.symbol, base=base_currency
))
transaction_df = extract_transactions(perf)
@@ -826,7 +879,7 @@ lines 218-245, so in order to run the algorithm we just type:
)
plt.legend(loc=3)
start, end = ax6.get_ylim()
- ax6.yaxis.set_ticks(np.arange(0, end, end/5))
+ ax6.yaxis.set_ticks(np.arange(0, end, end / 5))
# Show the plot.
plt.gcf().set_size_inches(18, 8)
@@ -836,9 +889,25 @@ lines 218-245, so in order to run the algorithm we just type:
if __name__ == '__main__':
# The execution mode: backtest or live
- MODE = 'backtest'
+ live = True
- if MODE == 'backtest':
+ if live:
+ run_algorithm(
+ capital_base=0.1,
+ initialize=initialize,
+ handle_data=handle_data,
+ analyze=analyze,
+ exchange_name='binance',
+ live=True,
+ algo_namespace=NAMESPACE,
+ base_currency='eth',
+ live_graph=False,
+ simulate_orders=False,
+ stats_output=None,
+ # auth_aliases=dict(poloniex='auth2')
+ )
+
+ else:
folder = os.path.join(
tempfile.gettempdir(), 'catalyst', NAMESPACE
)
@@ -846,34 +915,23 @@ lines 218-245, so in order to run the algorithm we just type:
timestr = time.strftime('%Y%m%d-%H%M%S')
out = os.path.join(folder, '{}.p'.format(timestr))
- # catalyst run -f catalyst/examples/mean_reversion_simple.py -x bitfinex -s 2017-10-1 -e 2017-11-10 -c usdt -n mean-reversion --data-frequency minute --capital-base 10000
+ # catalyst run -f catalyst/examples/mean_reversion_simple.py \
+ # -x bitfinex -s 2017-10-1 -e 2017-11-10 -c usdt -n mean-reversion \
+ # --data-frequency minute --capital-base 10000
run_algorithm(
- capital_base=10000,
+ capital_base=0.035,
data_frequency='minute',
initialize=initialize,
handle_data=handle_data,
analyze=analyze,
exchange_name='bitfinex',
algo_namespace=NAMESPACE,
- base_currency='usd',
+ base_currency='btc',
start=pd.to_datetime('2017-10-01', utc=True),
end=pd.to_datetime('2017-11-10', utc=True),
output=out
)
log.info('saved perf stats: {}'.format(out))
-
- elif MODE == 'live':
- run_algorithm(
- capital_base=0.5,
- initialize=initialize,
- handle_data=handle_data,
- analyze=analyze,
- exchange_name='bittrex',
- live=True,
- algo_namespace=NAMESPACE,
- base_currency='usd',
- live_graph=False
- )
@@ -887,7 +945,6 @@ strategy.
Simple Universe¶
-Source code: examples/simple_universe.py
This example aims to provide an easy way for users to learn how to
collect data from any given exchange and select a subset of the available
currency pairs for trading. You simply need to specify the exchange and
@@ -909,24 +966,52 @@ of the file:
catalyst ingest-exchange -x bitfinex -f minute
-python simple_universe.py
-
-
-Credits: This code was originally submitted by Abner Ayala-Acevedo. Thank you!
-from datetime import timedelta
+Source code: examples/simple_universe.py
+"""
+Requires Catalyst version 0.3.0 or above
+Tested on Catalyst version 0.3.3
+
+This example aims to provide an easy way for users to learn how to
+collect data from any given exchange and select a subset of the available
+currency pairs for trading. You simply need to specify the exchange and
+the market (base_currency) that you want to focus on. You will then see
+how to create a universe of assets, and filter it based the market you
+desire.
+
+The example prints out the closing price of all the pairs for a given
+market in a given exchange every 30 minutes. The example also contains
+the OHLCV data with minute-resolution for the past seven days which
+could be used to create indicators. Use this code as the backbone to
+create your own trading strategy.
+
+The lookback_date variable is used to ensure data for a coin existed on
+the lookback period specified.
+
+To run, execute the following two commands in a terminal (inside catalyst
+environment). The first one retrieves all the pricing data needed for this
+script to run (only needs to be run once), and the second one executes this
+script with the parameters specified in the run_algorithm() call at the end
+of the file:
+
+catalyst ingest-exchange -x bitfinex -f minute
+
+python simple_universe.py
+
+"""
+from datetime import timedelta
import numpy as np
import pandas as pd
from catalyst import run_algorithm
-from catalyst.exchange.utils.exchange_utils import get_exchange_symbols
from catalyst.api import (symbols, )
+from catalyst.exchange.utils.exchange_utils import get_exchange_symbols
def initialize(context):
context.i = -1 # minute counter
- context.exchange = context.exchanges.values()[0].name.lower()
- context.base_currency = context.exchanges.values()[0].base_currency.lower()
+ context.exchange = list(context.exchanges.values())[0].name.lower()
+ context.base_currency = list(context.exchanges.values())[0].base_currency.lower()
def handle_data(context, data):
@@ -947,8 +1032,9 @@ of the file:
# get data every 30 minutes
minutes = 30
+
# get lookback_days of history data: that is 'lookback' number of bins
- lookback = one_day_in_minutes / minutes * lookback_days
+ lookback = int(one_day_in_minutes / minutes * lookback_days)
if not context.i % minutes and context.universe:
# we iterate for every pair in the current universe
for coin in context.coins:
@@ -958,21 +1044,32 @@ of the file:
# required for candlestick or indicators/signals. Return Pandas
# DataFrames. 30T means 30-minute re-sampling of one minute data.
# Adjust it to your desired time interval as needed.
- opened = fill(data.history(coin, 'open',
- bar_count=lookback, frequency='30T')).values
- high = fill(data.history(coin, 'high',
- bar_count=lookback, frequency='30T')).values
- low = fill(data.history(coin, 'low',
- bar_count=lookback, frequency='30T')).values
- close = fill(data.history(coin, 'price',
- bar_count=lookback, frequency='30T')).values
- volume = fill(data.history(coin, 'volume',
- bar_count=lookback, frequency='30T')).values
+ opened = fill(data.history(coin,
+ 'open',
+ bar_count=lookback,
+ frequency='30T')).values
+ high = fill(data.history(coin,
+ 'high',
+ bar_count=lookback,
+ frequency='30T')).values
+ low = fill(data.history(coin,
+ 'low',
+ bar_count=lookback,
+ frequency='30T')).values
+ close = fill(data.history(coin,
+ 'price',
+ bar_count=lookback,
+ frequency='30T')).values
+ volume = fill(data.history(coin,
+ 'volume',
+ bar_count=lookback,
+ frequency='30T')).values
# close[-1] is the last value in the set, which is the equivalent
# to current price (as in the most recent value)
# displays the minute price for each pair every 30 minutes
- print('{now}: {pair} -\tO:{o},\tH:{h},\tL:{c},\tC{c},\tV:{v}'.format(
+ print('{now}: {pair} -\tO:{o},\tH:{h},\tL:{c},\tC{c},'
+ '\tV:{v}'.format(
now=now,
pair=pair,
o=opened[-1],
@@ -980,7 +1077,7 @@ of the file:
l=low[-1],
c=close[-1],
v=volume[-1],
- ))
+ ))
# -------------------------------------------------------------
# --------------- Insert Your Strategy Here -------------------
@@ -998,13 +1095,15 @@ of the file:
json_symbols = get_exchange_symbols(context.exchange)
# convert into a DataFrame for easier processing
df = pd.DataFrame.from_dict(json_symbols).transpose().astype(str)
- df['base_currency'] = df.apply(lambda row: row.symbol.split('_')[1],axis=1)
- df['market_currency'] = df.apply(lambda row: row.symbol.split('_')[0],axis=1)
+ df['base_currency'] = df.apply(lambda row: row.symbol.split('_')[1],
+ axis=1)
+ df['market_currency'] = df.apply(lambda row: row.symbol.split('_')[0],
+ axis=1)
# Filter all the pairs to get only the ones for a given base_currency
df = df[df['base_currency'] == context.base_currency]
- # Filter all the pairs to ensure that pair existed in the current date range
+ # Filter all pairs to ensure that pair existed in the current date range
df = df[df.start_date < lookback_date]
df = df[df.end_daily >= current_date]
context.coins = symbols(*df.symbol) # convert all the pairs to symbols
@@ -1033,7 +1132,7 @@ of the file:
initialize=initialize,
handle_data=handle_data,
analyze=analyze,
- exchange_name='bitfinex',
+ exchange_name='poloniex',
data_frequency='minute',
base_currency='btc',
live=False,
@@ -1049,7 +1148,14 @@ select the portfolio with the maximum Sharpe Ratio. The parameters are set to
use 180 days of historical data and rebalance every 30 days. This code was used
in writting the following article:
Markowitz Portfolio Optimization for Cryptocurrencies.
-'''
+Source code: examples/simple_universe.py
+'''Use this code to execute a portfolio optimization model. This code
+ will select the portfolio with the maximum Sharpe Ratio. The parameters
+ are set to use 180 days of historical data and rebalance every 30 days.
+
+ This is the code used in the following article:
+ https://blog.enigma.co/markowitz-portfolio-optimization-for-cryptocurrencies-in-catalyst-b23c38652556
+
You can run this code using the Python interpreter:
$ python portfolio_optimization.py
@@ -1060,122 +1166,139 @@ in writting the following article:
import pytz
import numpy as np
import pandas as pd
-from scipy.optimize import minimize
import matplotlib.pyplot as plt
from datetime import datetime
-from catalyst.api import record, symbol, symbols, order_target_percent
+from catalyst.api import record, symbols, order_target_percent
from catalyst.utils.run_algo import run_algorithm
np.set_printoptions(threshold='nan', suppress=True)
def initialize(context):
- # Portfolio assets list
- context.assets = symbols('btc_usdt', 'eth_usdt', 'ltc_usdt', 'dash_usdt',
- 'xmr_usdt')
- context.nassets = len(context.assets)
- # Set the time window that will be used to compute expected return
- # and asset correlations
- context.window = 180
- # Set the number of days between each portfolio rebalancing
- context.rebalance_period = 30
- context.i = 0
+ # Portfolio assets list
+ context.assets = symbols('btc_usdt', 'eth_usdt', 'ltc_usdt', 'dash_usdt',
+ 'xmr_usdt')
+ context.nassets = len(context.assets)
+ # Set the time window that will be used to compute expected return
+ # and asset correlations
+ context.window = 180
+ # Set the number of days between each portfolio rebalancing
+ context.rebalance_period = 30
+ context.i = 0
def handle_data(context, data):
- # Only rebalance at the beggining of the algorithm execution and
- # every multiple of the rebalance period
- if context.i == 0 or context.i%context.rebalance_period == 0:
- n = context.window
- prices = data.history(context.assets, fields='price',
- bar_count=n+1, frequency='1d')
- pr = np.asmatrix(prices)
- t_prices = prices.iloc[1:n+1]
- t_val = t_prices.values
- tminus_prices = prices.iloc[0:n]
- tminus_val = tminus_prices.values
- # Compute daily returns (r)
- r = np.asmatrix(t_val/tminus_val-1)
- # Compute the expected returns of each asset with the average
- # daily return for the selected time window
- m = np.asmatrix(np.mean(r, axis=0))
- # ###
- stds = np.std(r, axis=0)
- # Compute excess returns matrix (xr)
- xr = r - m
- # Matrix algebra to get variance-covariance matrix
- cov_m = np.dot(np.transpose(xr),xr)/n
- # Compute asset correlation matrix (informative only)
- corr_m = cov_m/np.dot(np.transpose(stds),stds)
+ # Only rebalance at the beggining of the algorithm execution and
+ # every multiple of the rebalance period
+ if context.i == 0 or context.i % context.rebalance_period == 0:
+ n = context.window
+ prices = data.history(context.assets, fields='price',
+ bar_count=n + 1, frequency='1d')
+ pr = np.asmatrix(prices)
+ t_prices = prices.iloc[1:n + 1]
+ t_val = t_prices.values
+ tminus_prices = prices.iloc[0:n]
+ tminus_val = tminus_prices.values
+ # Compute daily returns (r)
+ r = np.asmatrix(t_val / tminus_val - 1)
+ # Compute the expected returns of each asset with the average
+ # daily return for the selected time window
+ m = np.asmatrix(np.mean(r, axis=0))
+ # ###
+ stds = np.std(r, axis=0)
+ # Compute excess returns matrix (xr)
+ xr = r - m
+ # Matrix algebra to get variance-covariance matrix
+ cov_m = np.dot(np.transpose(xr), xr) / n
+ # Compute asset correlation matrix (informative only)
+ corr_m = cov_m / np.dot(np.transpose(stds), stds)
- # Define portfolio optimization parameters
- n_portfolios = 50000
- results_array = np.zeros((3+context.nassets,n_portfolios))
- for p in xrange(n_portfolios):
- weights = np.random.random(context.nassets)
- weights /= np.sum(weights)
- w = np.asmatrix(weights)
- p_r = np.sum(np.dot(w,np.transpose(m)))*365
- p_std = np.sqrt(np.dot(np.dot(w,cov_m),np.transpose(w)))*np.sqrt(365)
+ # Define portfolio optimization parameters
+ n_portfolios = 50000
+ results_array = np.zeros((3 + context.nassets, n_portfolios))
+ for p in xrange(n_portfolios):
+ weights = np.random.random(context.nassets)
+ weights /= np.sum(weights)
+ w = np.asmatrix(weights)
+ p_r = np.sum(np.dot(w, np.transpose(m))) * 365
+ p_std = np.sqrt(np.dot(np.dot(w, cov_m),
+ np.transpose(w))) * np.sqrt(365)
- #store results in results array
- results_array[0,p] = p_r
- results_array[1,p] = p_std
- #store Sharpe Ratio (return / volatility) - risk free rate element
- #excluded for simplicity
- results_array[2,p] = results_array[0,p] / results_array[1,p]
- i = 0
- for iw in weights:
- results_array[3+i,p] = weights[i]
- i += 1
+ # store results in results array
+ results_array[0, p] = p_r
+ results_array[1, p] = p_std
+ # store Sharpe Ratio (return / volatility) - risk free rate element
+ # excluded for simplicity
+ results_array[2, p] = results_array[0, p] / results_array[1, p]
+ i = 0
+ for iw in weights:
+ results_array[3 + i, p] = weights[i]
+ i += 1
- #convert results array to Pandas DataFrame
- results_frame = pd.DataFrame(np.transpose(results_array),
- columns=['r','stdev','sharpe']+context.assets)
- #locate position of portfolio with highest Sharpe Ratio
- max_sharpe_port = results_frame.iloc[results_frame['sharpe'].idxmax()]
- #locate positon of portfolio with minimum standard deviation
- min_vol_port = results_frame.iloc[results_frame['stdev'].idxmin()]
+ # convert results array to Pandas DataFrame
+ results_frame = pd.DataFrame(np.transpose(results_array),
+ columns=['r', 'stdev', 'sharpe']
+ + context.assets)
+ # locate position of portfolio with highest Sharpe Ratio
+ max_sharpe_port = results_frame.iloc[results_frame['sharpe'].idxmax()]
+ # locate positon of portfolio with minimum standard deviation
+ # min_vol_port = results_frame.iloc[results_frame['stdev'].idxmin()]
- #order optimal weights for each asset
- for asset in context.assets:
- if data.can_trade(asset):
- order_target_percent(asset, max_sharpe_port[asset])
+ # order optimal weights for each asset
+ for asset in context.assets:
+ if data.can_trade(asset):
+ order_target_percent(asset, max_sharpe_port[asset])
- #create scatter plot coloured by Sharpe Ratio
- plt.scatter(results_frame.stdev,results_frame.r,c=results_frame.sharpe,cmap='RdYlGn')
- plt.xlabel('Volatility')
- plt.ylabel('Returns')
- plt.colorbar()
- #plot red star to highlight position of portfolio with highest Sharpe Ratio
- plt.scatter(max_sharpe_port[1],max_sharpe_port[0],marker='o',color='b',s=200)
- #plot green star to highlight position of minimum variance portfolio
- plt.show()
- print(max_sharpe_port)
- record(pr=pr,r=r, m=m, stds=stds ,max_sharpe_port=max_sharpe_port, corr_m=corr_m)
- context.i += 1
+ # create scatter plot coloured by Sharpe Ratio
+ plt.scatter(results_frame.stdev,
+ results_frame.r,
+ c=results_frame.sharpe,
+ cmap='RdYlGn')
+ plt.xlabel('Volatility')
+ plt.ylabel('Returns')
+ plt.colorbar()
+ # plot red star to highlight position of portfolio
+ # with highest Sharpe Ratio
+ plt.scatter(max_sharpe_port[1],
+ max_sharpe_port[0],
+ marker='o',
+ color='b',
+ s=200)
+ # plot green star to highlight position of minimum variance portfolio
+ plt.show()
+ print(max_sharpe_port)
+ record(pr=pr,
+ r=r,
+ m=m,
+ stds=stds,
+ max_sharpe_port=max_sharpe_port,
+ corr_m=corr_m)
+ context.i += 1
def analyze(context=None, results=None):
- # Form DataFrame with selected data
- data = results[['pr','r','m','stds','max_sharpe_port','corr_m','portfolio_value']]
+ # Form DataFrame with selected data
+ data = results[['pr', 'r', 'm', 'stds', 'max_sharpe_port', 'corr_m',
+ 'portfolio_value']]
- # Save results in CSV file
- filename = os.path.splitext(os.path.basename(__file__))[0]
- data.to_csv(filename + '.csv')
+ # Save results in CSV file
+ filename = os.path.splitext(os.path.basename(__file__))[0]
+ data.to_csv(filename + '.csv')
-# Bitcoin data is available from 2015-3-2. Dates vary for other tokens.
-start = datetime(2017, 1, 1, 0, 0, 0, 0, pytz.utc)
-end = datetime(2017, 8, 16, 0, 0, 0, 0, pytz.utc)
-results = run_algorithm(initialize=initialize,
- handle_data=handle_data,
- analyze=analyze,
- start=start,
- end=end,
- exchange_name='poloniex',
- capital_base=100000, )
+if __name__ == '__main__':
+ # Bitcoin data is available from 2015-3-2. Dates vary for other tokens.
+ start = datetime(2017, 1, 1, 0, 0, 0, 0, pytz.utc)
+ end = datetime(2017, 8, 16, 0, 0, 0, 0, pytz.utc)
+ results = run_algorithm(initialize=initialize,
+ handle_data=handle_data,
+ analyze=analyze,
+ start=start,
+ end=end,
+ exchange_name='poloniex',
+ capital_base=100000,
+ base_currency='usdt', )
diff --git a/searchindex.js b/searchindex.js
index 96596e2a..9e9ff6e6 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["appendix","beginner-tutorial","bundles","development-guidelines","example-algos","features","index","install","live-trading","release-process","releases","resources","unit-tests","utilities","videos"],envversion:53,filenames:["appendix.rst","beginner-tutorial.rst","bundles.rst","development-guidelines.rst","example-algos.rst","features.rst","index.rst","install.rst","live-trading.rst","release-process.rst","releases.rst","resources.rst","unit-tests.rst","utilities.rst","videos.rst"],objects:{"catalyst.api":{EODCancel:[0,0,1,""],NeverCancel:[0,0,1,""],cancel_order:[0,0,1,""],date_rules:[0,1,1,""],fetch_csv:[0,0,1,""],get_environment:[0,0,1,""],get_open_orders:[0,0,1,""],get_order:[0,0,1,""],order:[0,0,1,""],order_percent:[0,0,1,""],order_target:[0,0,1,""],order_target_percent:[0,0,1,""],order_target_value:[0,0,1,""],order_value:[0,0,1,""],record:[0,0,1,""],schedule_function:[0,0,1,""],set_benchmark:[0,0,1,""],set_cancel_policy:[0,0,1,""],set_commission:[0,0,1,""],set_do_not_order_list:[0,0,1,""],set_long_only:[0,0,1,""],set_max_leverage:[0,0,1,""],set_max_order_count:[0,0,1,""],set_max_order_size:[0,0,1,""],set_max_position_size:[0,0,1,""],set_slippage:[0,0,1,""],set_symbol_lookup_date:[0,0,1,""],sid:[0,0,1,""],symbol:[0,0,1,""],symbols:[0,0,1,""],time_rules:[0,1,1,""]},"catalyst.api.date_rules":{every_day:[0,2,1,""],month_end:[0,3,1,""],month_start:[0,3,1,""],week_end:[0,3,1,""],week_start:[0,3,1,""]},"catalyst.api.time_rules":{every_minute:[0,2,1,""],market_close:[0,2,1,""],market_open:[0,2,1,""]},"catalyst.assets":{Asset:[0,1,1,""],AssetConvertible:[0,1,1,""]},"catalyst.assets.Asset":{first_traded:[0,2,1,""],from_dict:[0,4,1,""],is_alive_for_session:[0,4,1,""],is_exchange_open:[0,4,1,""],to_dict:[0,4,1,""]},"catalyst.finance.cancel_policy":{CancelPolicy:[0,1,1,""]},"catalyst.finance.cancel_policy.CancelPolicy":{should_cancel:[0,4,1,""]},"catalyst.finance.commission":{CommissionModel:[0,1,1,""],PerDollar:[0,1,1,""],PerShare:[0,1,1,""],PerTrade:[0,1,1,""]},"catalyst.finance.commission.CommissionModel":{calculate:[0,4,1,""]},"catalyst.finance.execution":{ExecutionStyle:[0,1,1,""],LimitOrder:[0,1,1,""],MarketOrder:[0,1,1,""],StopLimitOrder:[0,1,1,""],StopOrder:[0,1,1,""]},"catalyst.finance.execution.ExecutionStyle":{exchange:[0,2,1,""],get_limit_price:[0,4,1,""],get_stop_price:[0,4,1,""]},"catalyst.finance.slippage":{FixedSlippage:[0,1,1,""],SlippageModel:[0,1,1,""],VolumeShareSlippage:[0,1,1,""]},"catalyst.finance.slippage.SlippageModel":{process_order:[0,4,1,""]},"catalyst.protocol":{BarData:[0,1,1,""]},"catalyst.protocol.BarData":{can_trade:[0,4,1,""],current:[0,4,1,""],history:[0,4,1,""],is_stale:[0,4,1,""]},"catalyst.utils.cache":{CachedObject:[0,1,1,""],ExpiringCache:[0,1,1,""],dataframe_cache:[0,1,1,""],working_dir:[0,1,1,""],working_file:[0,1,1,""]},"catalyst.utils.calendars":{TradingCalendar:[0,1,1,""],clear_calendars:[0,0,1,""],deregister_calendar:[0,0,1,""],get_calendar:[0,0,1,""],register_calendar:[0,0,1,""],register_calendar_type:[0,0,1,""]},"catalyst.utils.calendars.TradingCalendar":{is_open_on_minute:[0,4,1,""],is_session:[0,4,1,""],minute_index_to_session_labels:[0,4,1,""],minute_to_session_label:[0,4,1,""],minutes_count_for_sessions_in_range:[0,4,1,""],minutes_for_session:[0,4,1,""],minutes_for_sessions_in_range:[0,4,1,""],minutes_in_range:[0,4,1,""],next_close:[0,4,1,""],next_minute:[0,4,1,""],next_open:[0,4,1,""],next_session_label:[0,4,1,""],open_and_close_for_session:[0,4,1,""],previous_close:[0,4,1,""],previous_minute:[0,4,1,""],previous_open:[0,4,1,""],previous_session_label:[0,4,1,""],regular_holidays:[0,2,1,""],session_distance:[0,4,1,""],sessions_in_range:[0,4,1,""],sessions_window:[0,4,1,""],special_closes:[0,2,1,""],special_closes_adhoc:[0,2,1,""],special_opens:[0,2,1,""],special_opens_adhoc:[0,2,1,""]},"catalyst.utils.cli":{maybe_show_progress:[0,0,1,""]},catalyst:{run_algorithm:[0,0,1,""]}},objnames:{"0":["py","function","Python function"],"1":["py","class","Python class"],"2":["py","attribute","Python attribute"],"3":["py","staticmethod","Python static method"],"4":["py","method","Python method"]},objtypes:{"0":"py:function","1":"py:class","2":"py:attribute","3":"py:staticmethod","4":"py:method"},terms:{"000000e":1,"1000th":1,"15t":4,"1st":1,"30t":4,"328842e":1,"340mb":10,"380954e":1,"40mb":10,"460mb":10,"505275d6646a41f3856b22b16678d":1,"536708e":1,"5min":[1,4],"650729e":1,"7869f7828fa140328eb40477bb7d":1,"998236e":1,"998677e":1,"999120e":1,"999558e":1,"99mb":10,"abstract":0,"boolean":[0,2,8],"break":7,"case":[0,1,2,3,7,13],"class":[0,3,9],"default":[0,1,5,7,8,10,13],"enum":0,"export":9,"final":[1,2,3],"float":[0,1,10],"function":[1,2,3,4,6,7,9,10,11,13],"import":[0,1,2,4,9,13],"int":[0,2],"long":[1,2,4],"new":[0,1,3,7,8,9],"null":12,"public":10,"return":[0,1,4,8,9,10,11],"short":[0,1,3,4],"static":[0,9],"switch":8,"throw":10,"true":[0,1,4,8,10],"try":[3,4,7],"var":1,"while":[5,7,9,10],AWS:10,Added:10,And:1,For:[0,1,2,4,5,7,8,9,12],Not:[0,12],One:2,That:[1,7],The:[0,1,2,3,4,7,8,9,10,13],Then:[2,3,4,7],There:[1,3,7,8],These:[0,1,8,13],Use:[1,4,13],Using:[9,10],Will:8,With:8,__del__:0,__exit__:0,__file__:[4,13],__future__:4,__getitem__:0,__main__:[1,4],__name__:[1,4],__setitem__:0,__wrapped__:9,_html_base:3,_tkinter:1,aapl:2,abc:0,abil:[2,10],abl:[1,2,7],abner:4,about:[0,1,2,6,7],abov:[0,1,3,4,5,7,8,9],absolut:0,abstractholidaycalendar:0,accept:[0,2,7,9],access:[0,5,6,7,8],accord:[0,9],accordingli:[1,4],account:[0,1,2,4,6,10],acevedo:4,acquir:[2,7],across:[5,6,10],activ:[7,8,9],actual:[0,1],add:[1,2,3,7,9,13],added:[0,1,2,5,6,7,9],adding:[1,3],addit:[0,1,3,5,6,7,10],addition:8,address:9,adjust:[0,2,4,10],administr:7,advanc:7,advantag:7,afford:[1,4],aforement:1,after:[0,1,2,4,7,9],afteropen:0,again:[1,3],against:[1,6,8,10,14],agre:4,ahead:1,aim:[4,11],algebra:[4,7],algo:[0,1,2,4,8,10],algo_namespac:[1,4,8],algo_volatil:1,algofil:[1,2],algorithm:[3,5,6,7,10,11,12,13,14],algorithm_period_return:[1,4],algotext:1,alia:[0,4],alias:[4,10],aliv:0,all:[0,1,2,3,4,5,6,7,8,9,10,12],alloc:0,allow:[0,1,2,5,6,7],almost:7,along:[0,2],alongsid:1,alpha:[1,4,7,8],alreadi:[0,1,2,3,7],also:[0,1,2,3,4,6,7,8,9],altern:[1,5,7],although:1,alwai:[0,2,5,8,9],among:1,amount:[0,1,4,8,10],amount_charg:0,amp_btc:5,ana:7,anaconda2:1,anaconda:[1,7,9],analog:1,analysi:[1,4,6,9,10,11],analyst:11,analyt:[6,7],analyz:[0,1,4,8,10,13],ani:[0,1,2,4,5,7,8,9,13],anonym:2,anoth:[1,2,4,5],anymor:1,anyth:[1,7,9],apach:4,api:[1,2,4,5,6,7,8,9,13],app:7,appar:1,appear:[0,2,9],append:9,appli:[0,1,4],applic:[1,4],appropri:[1,3,4],approxim:[1,4],appveyor:9,apt:[1,7],arang:[1,4],arbitrag:5,arbitrari:[8,10],arbitrarili:1,arch:7,architectur:1,ardr_btc:5,arena:0,arg:[0,1,9],argument:[0,1,2,8,9],argv:13,around:[6,9],arrai:[4,7],art:6,articl:[3,4],ask:[1,3],asmatrix:4,assert:[3,12],assertionerror:3,assess:1,asset:[1,2,4,5,6,8,10,13],asset_nam:[0,1,4],asset_restrict:0,assetconvert:0,assetdbwrit:2,assign:[1,8],assimil:1,assist:7,assum:[1,3,4,7],astyp:4,atla:7,attach:0,attempt:[0,2,8],attribut:[0,4,9],auth:[8,10],authent:10,auto:10,auto_close_d:0,automag:7,automat:0,avail:[0,1,4,5,7,8,9,10,12,13],averag:7,avoid:[1,2,4],awai:7,awar:[0,9],ax1:[1,4],ax2:[1,4],ax3:[1,4],ax4:[1,4],ax5:[1,4],ax6:[1,4],axhlin:4,axi:[0,4],ayala:4,back:[0,3,5,7],backbon:4,backend:7,backtest:[1,4,5,6,7,8,10,11],backward:0,bah:4,bar:[0,1,4,10],bar_count:[0,1,4],bar_templ:0,bardata:0,base:[0,1,2,4,5,6,7,8,14],base_curr:[1,4,5,8,13],base_pric:[1,4],basenam:[4,13],basi:[4,10],batch:7,batteri:1,battl:7,bch_btc:5,bch_eth:5,bch_usdt:5,bcn_btc:5,bcn_xmr:5,bcolz:2,bcolzdailybarread:2,bcolzdailybarwrit:2,bcolzminutebarread:2,bcolzminutebarwrit:2,bcy_btc:5,be62ff77760c4599abaac43be9cc9:1,bear:[1,4],beautifi:1,becaus:[0,1,7,9,10],been:[0,1,2,7,9],befor:[0,1,2,4,7,8,10],before_trading_start:[0,4],beforeclos:0,beggin:4,begin:[0,1,4,7],beginn:[4,6],behavior:0,being:[0,1,6],bela_btc:5,believ:1,below:[0,1,3,4,13],benchmark:[0,1,4,5,6,10],benchmark_period_return:[1,4],benchmark_volatil:1,benefit:1,best:[3,6,7],beta:[1,4],better:[0,1],between:[0,1,3,4,5,6,10,12],beyond:5,bfill:4,bia:1,big:7,bin:[1,4,7],binanc:[8,10],binari:[1,7,9],bit:[3,7],bitcoin:[1,4,5,6,8,13],bitcoin_usd_asset:8,bitfinex:[1,4,5,6,8,10],bitmex:8,bittrex:[1,4,5,6,8,10,14],blank:12,bld:3,blk_btc:5,blk_xmr:5,blockchain:5,blotter:13,blue:1,bodi:3,book:1,bool:0,both:[0,1,3,5,8,9,12],bought:[1,8],bound:[0,1],boundari:0,box:1,branch:9,breakdown:8,brew:7,brother:7,brows:7,browser:[1,3,9],btc:[1,8,10],btc_usd:[1,4,5,8],btc_usdt:[4,5,6,10,13],btcd_btc:5,btcd_xmr:5,btm_btc:5,bts_btc:5,bug:[0,2,3],bui:[0,1,8,11,12,14],build:[0,1,3,6,7,9],build_ext:3,built:[4,9,12],bundl:[0,1,5,10],bundle_timestamp:0,burst_btc:5,button:[1,7,9],buy_and_hodl:[4,10],buy_btc_simpl:[1,4],buy_btc_simple_out:[1,4],buy_df:[1,4],buy_low_sell_high:10,cach:[1,10],cachedobject:0,cal_nam:0,calcul:[0,1,3,4,8,12],calendar_typ:0,calendarnamecollis:0,call:[0,1,2,3,4,10],callabl:0,callback:0,can:[0,1,2,3,4,5,6,7,8,9,10,13],can_trad:[0,1,4,10],cancel:[1,4,12],cancel_ord:[0,1,4],cancel_polici:0,cancelpolici:0,candl:[1,5,10,12],candle_s:4,candlestick:4,cannot:[0,1,4,7],canon:3,capabl:10,capit:[0,1,4],capital_bas:[0,1,4,8,10,13],capital_us:1,captur:1,cash:[1,2,3,4,10],catalyst:[0,3,4,5,6,8,10,11,12,13,14],catalyst_dev:[1,6,7],catalyst_root:0,caus:[0,1,2,3],ccxt:[8,10],cell:1,cert:10,certian:0,chanc:1,chang:[0,1,3,4,6,7,9,10],channel:[1,6,7],charact:3,charg:[0,1],chart:[1,4,7],check:[0,1,2,3,4,5,7,8],checker:9,checkout:[3,9],choic:9,choos:[1,4,5,7,9,13],chosen:[1,13],chunk:[0,1,10],circumv:7,clam_btc:5,classic:[1,4],classifi:1,clean:[0,2,7,9,10,12],clean_on_failur:0,clear:2,clear_calendar:0,cli:[0,1,4,10,13],click:[0,1,7,9],client:8,clone:3,close:[0,1,4,5,13],cls:0,cmap:4,cmd:[1,7],cme:0,code:[0,1,4,7,9,10,13],codebas:3,codifi:0,coin:[1,4,10],collect:[1,2,4],collis:0,color:[1,4],colorbar:4,colour:4,column:[0,1,2,4],com:[1,2,3,8],combin:[0,7,8],come:[1,2,7,8],command:[2,4,7,9],comment:1,commiss:[1,5,10],commissionmodel:0,commit:0,common:[0,1],commonli:1,commun:[1,5,7,11],comp:4,compar:[1,4,5,6,7,12],comparison:10,compat:[0,6,10],compil:[7,9,10],complement:4,complet:8,complex:[1,7],complianc:4,complimentari:13,comprehens:10,compress:[1,10],comput:[1,4,7,10,11],concept:[0,1],conda:[1,10],conda_build_matrix:9,condit:[0,4],confid:8,config:7,configur:[1,7,10],congratul:7,consecut:0,consid:[0,1,4],consist:[1,5,12],constant:1,constraint:2,consum:9,contain:[0,1,2,3,4,7,12],content:[1,13],context:[0,1,3,4,10,13],contigu:0,continu:1,continuo:1,continuum:7,contract:0,contribut:5,control:[8,9],conveni:[0,1],convent:[4,8],convers:2,convert:[0,2,4],copi:[1,2,3,4,9],copy_tre:0,copyright:4,core:7,corr_m:4,correct:[2,7,8,9],correctli:[1,7,9],correctwai:7,correl:4,correspond:[0,1,7,8,13],cost:[0,1,4],could:[0,1,2,4,7,13],count:[0,2],counter:4,coupl:1,cov_m:4,covari:4,cover:[0,1,4,8,13],coverag:[5,6,8],cpython:7,crash:2,creat:[1,2,4,7,8,9,10,11,12,13],creation:10,credit:4,critic:5,cross:[0,5],crossov:1,crowd:11,crypto:[1,6,10],cryptoasset:[1,4,13,14],cryptocurr:[4,5,8],csv:[0,1,4,10],csv_data_sourc:0,csvfile:13,csvwriter:13,cumul:10,cumulative_capital_us:3,curat:[1,6],currenc:[1,4],current:[0,1,2,4,7,8,9,10,13],current_d:4,current_dai:4,current_dt:[4,13],current_valu:0,custom:[1,2,5,13],cvc_btc:5,cvc_eth:5,cython:9,d6dca79513214346a646079213526:1,dai:[0,1,2,4,7,9],daili:[0,1,2,4,5,6,10,13],darkgoldenrod:4,dash:8,dash_btc:5,dash_usdt:[4,5],dash_xmr:5,data:[4,5,6,7,8,10,11],data_frequ:[0,1,4,13],data_port:0,databas:2,datafram:[0,1,2,4,5,6,11,12,13],dataframe_cach:[0,2],dataport:0,dataset:[1,2,5],date:[0,1,2,4,7,8,9,10,12,13],date_column:0,date_format:0,date_rul:0,datetim:[0,4,13],datetimeindex:0,day_end:0,day_start:0,days_offset:0,dcr_btc:5,debian:[1,7],debug:9,debugg:1,decentr:5,decid:9,decim:[0,10],decor:9,decreas:4,def:[1,4,13],default_extens:0,defin:[0,1,4,8],delai:1,delet:[0,2],delist:0,demonstr:1,denomin:1,dep:3,depart_docu:3,depend:[0,1,3,7,9,10,13],deploi:9,deprec:3,deregist:0,deregister_calendar:0,deriv:7,describ:[0,5],descript:[3,7],desir:[0,1,4,12,13],desktop:5,detail:[4,5],determin:[0,4],dev1:7,dev2:7,dev3:7,dev4:7,dev5:7,dev6:7,dev8:7,dev9:7,dev:[3,5,7],devel:7,develop:[1,6,7,8,9,10,11,13],deviat:4,devis:1,dgb_btc:5,dict:[0,10],dict_:0,dictionari:[0,10],did:[6,7],didn:7,differ:[0,1,2,4,5,7,8,9,13],dimension:0,dir:7,dir_util:0,direct:0,directli:[1,2,7,10,13],directori:[0,1,2,3,4,7,8,9],disabl:10,disablemsi:7,discard:4,discord:[1,3,6,7],discuss:1,disk:[0,10],dismiss:1,displai:[1,4,7,9,10],dist:9,distanc:0,distinguish:0,distribut:[4,7,9],distutil:9,divid:[0,3],dividend:[0,2],divis:4,dma:1,dname:1,dnf:7,doc:[2,4,8,9],dockerfil:3,docstr:10,doctest:0,document:[3,4,5,6,7,8],docutil:3,doe:[0,1,2,4,5,7],doesn:[0,2],doge_btc:5,dollar:[0,5],don:[0,1,3,7,14],done:[1,4,9],door:5,dot:[0,4],down:[1,4,14],downgrad:3,download:[1,2,7,10],draft:9,drawback:2,drive:1,driven:[1,6,8],drop:[0,1],dropbox:10,dt_minut:0,dual_moving_averag:[1,4],due:0,dure:0,dword:7,dynam:4,each:[0,1,2,3,4,5,6,7,8,10,12,13],earlier:[1,2,3,4],earliest:4,eas:6,easi:[1,2,4,11],easier:[1,2,4,5,7],easiest:7,easili:[1,6,7],eastern:0,echo:7,eco:6,ecosystem:5,edit:[3,4,7,9],editor:7,educ:1,educt:1,effect:7,either:[0,1,4,7],elaps:4,element:[0,4],elif:[1,4],els:[4,7],emc2_btc:5,empow:[1,6],empti:[1,2,3,4,8,9,10],empty_char:0,empyr:10,enabl:8,encapsul:0,encount:7,encourag:8,end:[0,1,4,10,12,13],end_daili:4,end_dat:[0,1,4,8],end_minut:0,end_sess:0,end_session_label:0,ending_cash:1,ending_exposur:1,enforc:0,engin:11,enh:3,enhanc:3,enigma:[1,4,5,6,7,10],enigmampc:[1,3],enough:[0,1,5,7],ensur:[0,4,7,8,9],ensure_directori:4,enter:[0,1,7],entir:3,entri:[1,7],env:[1,3,4,7],enviorn:2,environ:[0,1,4,7,10,13],environemnt:[1,7],eodcancel:0,equal:[0,1,2,4,8,13],equiti:[0,2],equival:[0,4,12],error:[0,1,3,4,5,7,8,10,12],especi:1,essenti:8,establish:6,estim:1,etc:[0,3,9,10],etc_btc:5,etc_eth:5,etc_usdt:5,eth:[1,8],eth_btc:[5,8],eth_usdt:[4,5],ethereum_bitcoin_asset:8,evalu:1,even:[0,2,7],event:[0,1],eventrul:0,eventu:1,everi:[0,1,4,7],every_dai:0,every_minut:0,everydai:4,everyth:[1,2],exact:[4,13],examin:1,exampl:[0,2,3,5,6,8,9,10,11,13],exceed:0,excel:7,except:[0,1,3,4],excess:4,exchang:[0,1,2,4,5,6,10,14],exchange_algorithm:1,exchange_ful:0,exchange_nam:[0,1,4,8,13],exchange_util:4,exclud:4,exclus:0,exe:1,execut:[0,1,4,7,8,10],execution_pric:0,execution_volum:0,executionstyl:0,exist:[0,1,2,3,4,5,6,7],exit:[0,1,4,9],exit_success:9,exp_btc:5,expect:[0,1,2,4,5,7,9],experi:7,experienc:7,expir:0,expiringcach:0,explain:[7,8],explan:0,explicitli:9,explictili:7,exposur:0,express:[1,4,6],extend:1,extens:[0,2,3,7,8],extern:[1,4,7],extra:9,extract_transact:[1,4],facto:1,fail:[0,1,2,7],failur:2,fairli:[1,3],fals:[0,1,4,8],familiar:3,fantast:1,faq:7,far:2,fast:2,fatal:7,fct_btc:5,featur:[1,4,6],fedora:7,fee:5,feedback:2,feel:1,fetch:[0,2,5,8,10,12],fetch_csv:0,few:[1,2,7,9],fewer:7,ffill:4,field:[0,2,4,9],file:[0,1,2,3,4,7,8,10,12],filenam:[1,4,13],fill:[0,1,4],fill_char:0,filter:[4,10],final_path:0,financ:[0,1],financi:[1,10],find:[1,2,7,9],finder:0,fine:9,finish:[1,8],fire:0,firm:0,first:[0,2,3,4,7,8,9,14],first_trad:0,fix:[0,3,12],fixedslippag:0,flag:[1,4,7,8,9],flake8:3,flat:0,fldc_btc:5,flo_btc:5,floor:4,focu:[1,4,6],folder:[4,7,10],follow:[0,1,2,3,4,5,7,8,9,13],foo:0,footprint:7,forc:0,fork:11,form:[1,4,5],format:[0,1,2,4,9,10],fortran:7,forward:[0,2,12],foster:11,found:[0,1,3,5,7],fourth:[1,4],fraction:10,frame:[1,4],framework:7,free:[1,4],freelanc:11,freetyp:7,freq:[1,4],frequenc:[0,1,4,10,12],frequent:7,fresh:9,from:[0,1,2,3,4,5,7,8,9,10,12,13],from_dict:[0,4],full:[0,1,8,13],fulli:8,func:0,fund:11,fundament:11,further:[0,1,4],futur:[0,1,2,5,8],game_btc:5,gas_btc:5,gas_eth:5,gave:1,gcc:7,gcf:[1,4],gdax:8,gear:1,gen:0,gen_type_stub:9,gener:[0,2,3,6,7,8,9,10,13],get:[0,1,2,3,4,5,6,8,10,13],get_calendar:0,get_environ:0,get_exchange_symbol:4,get_limit_pric:0,get_open_ord:[0,1,4],get_ord:0,get_spot_valu:0,get_stop_pric:0,get_ylim:[1,4],gettempdir:4,gfortran:7,git:9,github:[1,3,7,9],give:4,given:[0,1,2,4,5,13],global:1,gno_btc:5,gno_eth:5,gnt_btc:5,gnt_eth:5,goe:[4,8,14],going:[4,7,14],good:[1,9],goog:2,got:1,govern:4,gracefulli:[8,10],grain:9,granular:[5,10],graph:1,grc_btc:5,greater:0,greatli:8,green:[1,4],group:[1,3],grow:2,guarante:0,guard:0,guid:[3,7,10],guidelin:[6,7,10],gzip:9,had:0,half:0,half_dai:0,hand:3,handi:[1,4,7],handl:[3,4,10],handle_data:[0,1,4,8,13],hang:7,happen:[0,1,2,8],happi:9,hard:1,has:[0,1,2,3,7,8,9,10],hash:10,have:[0,1,2,3,6,7,8,9,14],haven:1,head:[1,7],header:[7,9],heavi:[1,4],heavili:11,hedg:11,held:[0,5],help:[0,1,2],henc:1,here:[1,2,4,7,8],hidden:9,high:[0,1,4,8,11,13],highest:[4,9],highlight:4,hint:[7,9],histor:[1,4,5,6,8,10],histori:[0,2,4,10],hit:[1,10],hitchhik:7,hkey_local_machin:7,hold:[0,4,8],holidai:0,holidaycalendar:0,home:10,homebrew:7,hope:1,hopefulli:[4,14],hour:0,how:[0,1,2,4,7,8],howev:[7,8,9],html:[3,4,9],http:[1,4,8,9],huc_btc:5,idea:[1,2,3],ident:[0,7],identifi:0,idxmax:4,idxmin:4,ignore_exception_detail:0,illustr:8,iloc:4,imestamp:0,immedi:[1,4],impact:10,imper:3,implement:[1,2,4,8,10,14],impli:[0,4],implicitli:0,importerror:1,improv:[0,3,10],inadvert:7,inc:4,includ:[0,1,2,3,4,7,9,13],inclus:0,incomplet:2,inconsist:8,increas:[0,2,4,10],increment:[1,9],independ:[5,7],index:[0,1,3,4,9],indic:[0,2,4,7],individu:[1,8],ineffici:10,inf:4,infer:[0,2],infinit:4,influenc:1,info:[0,1,4,10],inform:[0,1,2,4,7,9],ingest:[4,5,10],initi:[0,1,4,8,10,13],inlin:1,inner:1,inplac:3,input:[1,5,6],insert:4,insid:[1,4,7],insight:[1,6],inspect:[1,4],instal:[3,5,6,9,10],installt:7,instanc:[0,2,4,12],instanti:0,instead:[0,1,2,3,4,5,8,10],instruct:[1,3,7],integ:[0,2,10],integr:[0,1,5,6,8,10],intend:[1,3,9],interact:[1,8],interfac:[0,5,8,9,10,13],intern:[2,7],interpret:[1,4,13],interv:[4,12],introduc:[1,4,5,8,10],invalid:0,invest:[1,6],invok:[1,2],involv:[2,7],ipython:1,is_alive_for_sess:0,is_bui:[0,1,4],is_exchange_open:0,is_open_on_minut:0,is_sess:0,is_stal:0,isinst:4,isn:0,issu:[1,3,5,7,9,10],iter:[0,1,2,4,13],itercontext:0,its:[0,1,4,5,7,8],itself:[1,7],jan:1,join:[4,6,7],json:[8,10],json_symbol:4,juli:13,jump:7,jupyt:10,just:[0,1,2,4,5,9],keep:[1,2,4,7,10],kei:[0,2,6,7,8],kept:[1,8],keyerror:[0,10],keynam:0,kind:4,know:[0,1,7],knowledg:6,known:0,kpi:12,kwarg:[0,9],label:[0,1,4,8,9],lack:5,lambda:4,languag:[1,4],lapack:7,larg:2,larger:10,last:[0,1,2,4,7,10,12],last_trad:0,later:[1,2,3,4],latest:[7,9,10],launch:[1,7],law:4,layer:5,lazi:2,lazili:0,lbc_btc:5,leak:2,learn:[1,4,6,7],least:[0,1,3,12],legend:[1,4],legend_:[1,4],len:[1,3,4],length:0,less:2,let:[1,4],level:[1,2,4],leverag:[0,1,4,11],lib:[3,4],libatla:7,libfreetype6:7,libgfortran:7,librari:[1,3,4,6,7,8,10,11],licens:4,lifetim:2,like:[0,1,2,3,5,6,7,9,10,12],limit:[0,1,4,5,10,12],limit_pric:[0,1,4],limitord:0,line:[3,4,5,13],linear:7,link:7,linter:9,linux:[1,5,9],list:[0,1,2,4,5,7,8,9,10,13],littl:[1,3],live:[0,1,4,5,6,7,10,11],live_algo:4,live_graph:4,load:[0,1,2,7],load_ext:1,loader:[1,2],loc:[1,4],local:[1,2,3,7,9],locat:[0,1,2,4,13],lock:0,log1p:10,log:[1,4,7,10],logbook:[1,4],logger:[1,4],logic:[1,4,10],long_mavg:[1,4],long_window:[1,4],longer:[1,3,9],look:[1,2,4,7,9,12,13],lookback:4,lookback_d:4,lookback_dai:4,lookup:[0,1],loop:2,loss:10,lot:[2,10],low:[0,1,4,8],lower:[4,8,10],lowercas:[5,8],lsk_btc:5,lsk_eth:5,ltc:8,ltc_btc:5,ltc_usd:[1,4],ltc_usdt:[4,5],ltc_xmr:5,mac:7,machin:[2,6,9],maco:[1,5],made:[0,2,3],magic:1,mai:[0,1,2,4,7,8,9],maid_btc:5,maid_xmr:5,main:[1,7,9],maint:3,maintain:[0,5,9],mainten:3,major:[0,9],make:[1,2,3,4,5,7,9],maker:0,manag:[0,1,4,7,9],mani:[0,1,2,4,7,9,11],manifest:9,manner:8,manual:[7,9],map:[0,2,5,10],marker:[1,4],markers:1,market:[0,1,4,5,6,8,10],market_clos:0,market_curr:[4,5],market_open:0,marketord:0,marketplac:[1,7,10],markowitz:4,mask:0,master:9,match:[1,7,8,9,12],matplotlib:[1,4,6,11],matplotlibrc:7,matrix:[4,9],matter:3,mavg:1,max:0,max_capital_us:3,max_count:0,max_leverag:[0,3],max_not:0,max_shar:0,max_sharpe_port:4,maxim:6,maximum:[0,4],maybe_show_progress:[0,2],mcoin:[1,4],mean:[0,1,2,7,9,10,14],mean_reversion_simpl:4,memori:[0,2],mention:[1,7,8,9],menu:[1,7],merg:1,merger:[0,2],messag:[1,10],metadata:2,method:[0,1,2,4,7,9,10,12,13],metric:[1,10],micro:9,microsoft:7,midnight:[0,4],might:1,migrat:1,min:4,min_trade_cost:0,min_trade_s:0,min_vol_port:4,mind:[1,4],miniconda:7,minim:[4,6,10],minimum:[0,4,10],minor:[0,7,9],minut:[0,1,2,4,5,6,7,10,13],minute_end:0,minute_index_to_session_label:0,minute_to_session_label:0,minutes_count_for_sessions_in_rang:0,minutes_for_sess:0,minutes_for_sessions_in_rang:0,minutes_in_rang:0,miscellan:9,miss:[0,1,7,8,10],mix:7,mkdir:7,mkvirtualenv:3,mode:[0,1,4,5,6,10],model:[1,3,4,5],modif:[0,3,8],modifi:13,modul:[0,1],moment:[7,9],momentum:[1,4,14],mon:0,monei:0,month:[9,13],month_end:0,month_start:0,more:[0,1,2,4,6,7,8,10,13],most:[0,1,2,4,7,8,10],mostli:1,move:[0,2,9],movement:1,mpc:[1,4],msft:[0,2],msgpack:0,msi:7,msiexec:7,much:[0,1,2],multipl:[0,2,4,5,9,10],multiprocess:0,multithread:0,multupl:0,must:[1,2,8,9],mutabl:0,mutual:0,my_algo_cod:8,my_algo_nam:8,n_portfolio:4,name:[0,1,2,3,4,7,8,9,13],name_of_project:1,namedtemporaryfil:0,namespac:[1,4,9],nan:[0,1,4],nano:9,nanosecond:0,nasset:4,nat:0,nativ:7,naut_btc:5,nav_btc:5,navig:[1,3,7],nchang:4,ndarrai:[1,4],nearest:4,necessari:7,nee:7,need:[0,1,2,3,4,5,7,9,11,13],neg:[0,1],neo:4,neo_eth:[4,8],neo_ethereum_asset:8,neo_usd:4,neos_btc:5,never:[0,2,8],nevercancel:0,newer:[2,7],next:[0,2,7],next_clos:0,next_minut:0,next_open:0,next_session_label:0,nice:[5,6],nmc_btc:5,noebook:1,non:[0,7],none:[0,1,4,13],nor:4,normal:[0,10],note:[0,1,4,5,6,8,13],note_btc:5,notebook:10,noth:7,notic:4,notion:[0,4],novemb:9,now:[0,1,2,4,7,9,10,14],number:[0,1,2,4,7,9,10],numer:[0,7],numpi:[1,3,4,7,9,11],nvalu:4,nxc_btc:5,nxt_btc:5,nxt_usdt:5,nxt_xmr:5,nyse:0,obj:0,object:[1,2,3,4],observ:7,obtain:[1,4,8],occur:[1,3,8],off:11,offer:1,offset:[0,4],ohlc:1,ohlcv:[0,4,10,12],old:[0,9],older:[0,2],omg_btc:5,omg_eth:5,omni:5,omni_btc:5,on_error:0,onc:[0,1,2,4,7,8,9],one:[0,1,2,3,4,5,7,10,12,13],one_day_in_minut:4,ones:[0,4],onli:[0,1,2,3,4,6,7,9,13],open:[0,1,3,4,5,7,10,12,13],open_and_close_for_sess:0,open_ord:0,openssl:7,oper:7,operatbl:7,opportun:5,opt:[4,7],optim:[1,11],option:[0,1,2,7,13],order:[1,4,5,7,8,9,10],order_id:[0,1],order_param:0,order_perc:0,order_target:0,order_target_perc:[0,1,4,8],order_target_valu:[0,1,4],order_valu:0,ordered_pip:3,org:[4,9],organ:1,origin:[1,4,9],osx:[7,9],other:[0,1,2,4,5,7,9,13],otherwis:7,our:[1,3,4,6,7,9,14],out:[0,1,2,3,4,6,7,9,12],outdat:7,outlin:7,output:[1,2,4,5,6],outsid:0,outstand:[1,4],over:[0,3,4,5,6,7],overcom:5,overfit:1,overrid:[7,9,10],overview:[1,5],overwhelm:1,overwritten:0,own:[2,4,7,8],p_r:4,p_std:4,packag:[1,3,7,11],packet:0,pacman:7,page:[3,5,7,9,10],pai:0,paid:0,pair:[0,1,4,5,8,10],pairon:4,panda:[0,1,2,4,5,6,11],pandasrequestscsv:0,panel:0,paper:[3,5,10],param:10,paramet:[1,4,8,9,10,13],parent:7,pares:0,pars:2,part:[0,1,2,4,7,8,14],partial:[7,12],particular:[6,7],pasc_btc:5,pass:[0,1,2,4,9],password:9,past:[1,4],patch:10,path:[0,2,4,7,10,13],pattern:12,pend:9,peopl:3,pep8:3,per:[0,1,2,4,5,10],percent:[0,1,4],percentag:[0,1,4],perdollar:0,perf:[0,1,3,4],perform:[0,1,3,4,5,6,7,10,11],perhap:7,period:[3,4],permiss:[4,7],pershar:0,persist:[1,4,10],pertrad:0,pickl:[0,1,4],piec:[2,7],pink_btc:5,pip:[1,3,9],pipelin:[5,10],pkg:7,place:[0,1,4,8,10],plan:[5,7],platform:[0,7,10,11],pleas:[1,6,7,13],plot:[1,4,11],plt:[1,4],plu:13,point:[0,1,5,9],polici:7,poloniex:[1,4,5,6,8,10,13],popul:9,porfolio:0,portfolio:[0,1,10,13],portfolio_optim:4,portfolio_valu:[1,4],pos_amount:[1,4],posit:[0,1,4,10],positon:4,possibl:[0,2,3,7],post:9,post_func:0,postprocess:0,pot_btc:5,power:[1,4,11],ppc_btc:5,practic:[1,3],pre:[2,7],pre_func:0,precis:10,predefin:8,predict:[1,8],prefer:[1,7],prefix:[3,7],preload:2,prepare_chunk:10,preprocess:[0,9],prerequisit:[1,7],present:[1,8,10],preserv:10,prevent:[2,7,9],previou:[0,7,14],previous:1,previous_clos:0,previous_minut:0,previous_open:0,previous_session_label:0,price:[0,2,4,5,6,8,10,13],price_chang:[1,4],price_impact:0,primari:7,print:[1,4,7,9],print_result:1,prior:[1,4],privileg:7,probabl:1,problem:[1,2,7,9],proce:7,proceed:7,process:[0,1,2,4,8],process_ord:0,produc:[2,4,7],profit:[1,6],program:[1,7],progress:[0,2],project:[1,6,7,11],prompt:[1,7],proper:[7,8],properli:[1,4,7,13],protect:0,protocol:[0,1,5],provid:[0,1,2,4,5,6,7,8,10,11,13],publish:9,pull:[0,3,9],pun:1,purchas:[1,4],purpos:[1,5,8],push:9,put:[7,8],pycharm:9,pydata:[4,5,6],pyfolio:10,pypirc:9,pypitest:9,pyplot:[1,4],python2:[3,5,7,10],python3:[5,7,10],python:[0,1,3,4,6,7,10,11,13],pythonw:7,pytz:[4,13],quandl:0,quandl_api_kei:2,quandl_download_attempt:2,quantit:[1,11],quantopian:[0,4,11],queri:[0,2],queryabl:0,question:[1,3,6],quick:1,quickli:[4,14],quirk:7,quit:2,rads_btc:5,rais:[0,3,10],ran:2,random:[4,12],randomli:12,rang:[0,1,2,4,8,12],rate:[4,10],rather:[0,1,7],ratio:4,raw:[0,2,7],rdylgn:4,reach:[0,8],read:[0,1,2,7,10],read_csv:0,read_pickl:1,readi:9,real:[0,4,8],realist:[1,4],reason:[1,2,7],rebal:4,rebalanc:[1,4],rebalance_period:4,recal:1,receiv:[1,2],recent:[0,1,2,4,5,7],recogn:7,recommend:[2,7],reconcil:0,reconstruct:1,record:[0,1,4,13],red:[1,4],redhat:7,redon:10,redownload:[1,2],reduc:10,redund:10,refactor:3,refer:[1,3,4,5,7,8,9],referenc:[1,8],refus:1,regard:6,regardless:[1,7,8],regedit:7,regist:[0,1,2],register_calendar:0,register_calendar_typ:0,registri:7,regular:[0,7],regular_holidai:0,reinstal:7,reinvest:0,rel:3,relat:3,relationship:2,releas:[3,5,6,7],relev:0,reli:[7,11],remain:10,rememb:[1,7],remot:[0,2],remov:[1,3,4,7,9,10],renam:9,rep:7,rep_btc:5,rep_eth:5,rep_usdt:5,repeat:10,replac:[4,7],repo:7,report:[1,3,7],repositori:[7,9,10],repres:[0,2,8],represent:0,reproduc:2,req:10,request:[0,1,2,3,4,10],requests_csv:0,requir:[1,3,4,8,9],requirements_blaz:3,requirements_dev:3,requirements_doc:3,research:1,reserv:[1,4,5],reserve_ratio:[1,4],reserve_valu:[1,4],resolut:[1,4,5,6,10,13],resolv:[0,10],resourc:[2,6,10],respect:[3,9,13],respons:[0,2,7],rest:2,restart:10,restor:10,restrict:[0,7],restricted_list:0,restructuredtext:3,result:[0,1,2,4,7,8,12,13],results_arrai:4,results_fram:4,resum:4,retri:2,retriev:[0,1,4,10,12],rev:3,revers:[10,14],revert:3,review:[1,7],revis:1,rhel:7,ric_btc:5,ride:[4,14],right:[1,7],risk:[1,4,10],roll:1,rollup:2,root:[3,9],round:10,rout:0,routin:7,row:[0,1,4],rsi:4,rsi_overbought:4,rsi_oversold:4,rst:[3,9],rule:0,run:[3,4,5,7,8,9,10,12,13],run_algo:[1,4,13],run_algorithm:[0,1,4,8,13],runtim:1,runtimeerror:7,safe:1,sai:0,said:1,same:[1,2,4,5,7,8,9,10,13],sampl:[4,10,12],satisfi:7,save:[1,2,3,4,7,13],sbd_btc:5,sc_btc:5,scalar:0,scale:[1,10],scatter:[1,4],schedul:8,schedule_funct:0,scientif:11,scikit:1,scipi:[4,6,7],scratch:7,script:[1,4,9,13],scriptnam:13,seamless:[5,6],search:7,second:[0,1,4,7,14],secret:8,section:[1,3,4,7,8,9,13],secur:[4,6,11],securitylist:0,see:[0,1,2,4,5,6,7,8,13],seek:7,seen:4,select:[1,4,7,12],self:[0,3],sell:[0,1,4,8,10,11,12,14],sell_df:[1,4],semant:0,sentinel:0,separ:[1,3,5,7,8],seper:8,seri:[0,1,4,14],serial:0,seriou:1,server:[1,2,9],servic:2,session:[0,7],session_dist:0,session_label:0,sessions_in_rang:0,sessions_window:0,set:[0,1,2,4,5,7,8,10],set_benchmark:[0,5],set_cancel_polici:0,set_commiss:0,set_do_not_order_list:0,set_long_onli:0,set_max_leverag:0,set_max_order_count:0,set_max_order_s:0,set_max_position_s:0,set_printopt:4,set_size_inch:[1,4],set_slippag:0,set_symbol_lookup_d:0,set_tick:[1,4],set_ylabel:[1,4],setup:[3,9],setuptool:7,seven:4,sever:[1,6,7],share:[0,1,5,6],sharex:[1,4],sharp:[1,4],ship:[2,7,9],short_exposur:1,short_mavg:[1,4],short_valu:1,short_window:[1,4],shorter:1,shorthand:0,shorts_count:1,should:[0,1,2,3,7,8,9,10],should_cancel:0,shourc:2,show:[0,1,2,4],show_progress:0,shown:[0,2],shutil:0,sid:[0,1,2,10],side:7,sidsnotfound:0,signal:[2,4],signatur:2,signific:4,sim_engin:0,similar:[1,7,8],similarli:0,simpl:[0,1,14],simple_univers:4,simpler:13,simplest:4,simpli:[1,3,4,7,13],simplic:4,simplifi:1,simul:[1,4,5,7,8],simulate_ord:[8,10],simulation_dt_func:0,simultan:10,sinc:[1,4,7,8,9,13],singl:[0,2,4,7,10],site:3,six:0,size:[0,4,7,10],sjcx_btc:5,skeleton:9,skim:1,skip:[1,4,10],sklearn:6,sleep:8,slighlti:4,slightli:7,slippag:[1,4,10],slippagemodel:0,smaller:[7,10],smoothli:14,snip:1,snippet:13,softwar:[4,7],sold:8,solut:7,solv:[1,2,7,10],some:[0,1,2,3,4,7,8,10,11],someon:7,someth:3,somewhat:1,sort:0,sortino:[1,10],sourc:[0,1,2,3,4,7,9,11],space:1,special:[0,8],special_clos:0,special_closes_adhoc:0,special_open:0,special_opens_adhoc:0,special_params_check:0,specif:[0,1,4,7,10],specifi:[0,1,2,4,5,8,9,10],spend:1,spent:5,sphinx:[3,9],split:[0,1,2,4],splitext:[4,13],spot:0,spread:0,spring:11,sqliteadjustmentwrit:2,sqrt:4,ssl:10,stabl:[4,7],stai:[9,10],standard:[0,2,3,4,5,10],star:4,start:[0,1,2,3,4,6,7,8,12,13],start_dat:[0,1,4,8],start_minut:0,start_sess:0,start_session_label:0,start_tim:4,starting_cash:[1,4],starting_exposur:1,starting_valu:1,stat:[4,10],state:[0,1,2,4,6,10],statist:[1,5,6,8,10],stats_util:[1,4],statsmodel:6,statu:4,std:4,stdev:4,stdout:1,steem_btc:5,steem_eth:5,step:[2,7],still:[1,2,4,5,7],stock:[1,2],stop:[0,1,4,10],stop_pric:0,stoplimitord:0,stopord:0,storag:[1,8,10],store:[0,1,2,4,5,13],str:[0,4],str_btc:5,str_usdt:5,straightforward:4,strat_btc:5,strategi:[1,4,6,8],stream:1,streamlin:1,strftime:4,strict_extens:0,strictli:[0,2,7],string:[0,1,2,4,9],string_typ:0,strong:0,strongli:7,struct:0,structur:[5,6,8,11],sty:3,style:[0,3,4],subdirectori:2,subject:[0,3],submit:[3,4],subplot:[1,4],subset:4,substanti:1,subtract:0,succe:9,succeed:1,success:[2,3],successfulli:8,sudo:[1,7],suffici:7,suggest:3,sum:4,summar:7,summari:10,suppli:1,support:[0,1,4,5,6,7,9,10,12],suppos:1,suppress:4,sure:[4,7],surpris:1,suspect:3,symbol:[0,1,2,4,5,10,13],symbol_column:0,symbol_str:0,symbolnotfound:0,symbolnotfoundonexchang:5,sync:9,synchron:10,syntax:[0,9,10],sys:13,sys_btc:5,system:[0,1,3,6,7],t_price:4,t_val:4,tag:9,take:[0,1,2,7,10,14],taken:9,taker:0,talib:4,tar:9,tarbal:9,target:[0,1,8,12],target_hodl_ratio:[1,4],target_hodl_valu:[1,4],technic:[4,6],tell:0,tempfil:4,templat:9,temporari:[0,9],ten:1,tend:8,tens:3,tent:10,term:1,termin:[1,4,7],test:[0,1,3,7,8,9,10,11],testpypi:9,tether:5,text:1,than:[0,1,2,3,7,8,10],thank:4,thei:[0,1,2,9,10,11],them:[0,1,3,7,9],therefor:9,therein:7,thi:[0,1,2,3,4,5,7,8,9,13,14],thing:[1,14],think:8,third:[1,4],thorough:7,those:[0,1,3,4,8,9],though:2,thread:0,three:[0,1,2,4,5,6,8],threshold:[1,4],through:[1,2,5,7],throughli:8,throughout:1,thu:[1,4,7],tick:4,tick_siz:1,ticker:[0,2,10],time:[0,1,2,4,6,7,8,9,13],time_rul:0,timedelta:[0,4],timefram:10,timeperiod:4,timeseri:4,timestamp:[0,1,2,10],timestr:4,timezon:0,titl:9,tkagg:7,tminus_pric:4,tminus_v:4,tmp_dir:0,to_csv:[4,13],to_datetim:[1,4],to_dict:0,to_pydatetim:[1,4],todai:[4,9],togeth:1,token:[4,8,13],tolist:4,tool:[2,3,7,9,11],top:[1,6,9],total:[0,2],toward:1,traceback:[0,5],track:[0,1,3,4,10],tracker:[1,5],trade:[1,4,5,6,7,10,11,13],traded_todai:4,trader:[1,11],trading_dai:1,tradingalgorithm:[0,9],tradingcalendar:[0,2],tradingcontrolexcept:0,tradingpair:12,tradingsimul:0,tradit:1,train:1,tran:[1,4],transact:[0,1,4,8,10],transaction:2,transaction_df:[1,4],transfer:5,transform:1,transit:[5,6],transpos:4,travi:9,treasuri:[1,4],treasury_period_return:[1,4],treat:0,trend:1,tri:[1,6],trigger:[0,4],trip:10,tst:3,tue:0,tupl:[0,2],turn:9,tutori:[4,6,7,8],tweak:1,twice:9,two:[0,1,4,5,6,7,8,12,13,14],twoargument:1,txt:[3,7,9],type:[0,4,7,9],typo:3,tzinfo:0,ubuntu:[1,7],uncompress:10,under:[1,2,4,7,8,9],underli:[0,1],underlin:9,underscor:5,understand:[1,7],undesir:0,unexpect:7,uninstal:7,uniqu:0,unit:[1,5,10],univers:[0,1,8],universe_func:0,unknown:1,unless:4,unlik:2,unpack:7,unresolv:10,unsupport:10,untar:2,until:[1,4,7],unus:3,unwrap:0,updat:[1,4,10],upgrad:[7,9,10],upper:[1,4],upward:1,url:[0,9],usag:1,usd:[1,4,5],usdt:[4,5,13],usdt_btc:1,usdt_btc_benchmark:1,use:[0,1,2,3,4,5,6,7,8,9,10,11,13],used:[0,1,2,3,4,7,8],useful:[0,7],user:[1,2,4,5,6,7,9],usernam:9,uses:[0,1,2,5,8],using:[2,3,4,5,7,8,9,10,12,13,14],usr:4,usual:[0,1],utc:[0,1,4,13],util:[1,2,3,4,6],utilit:13,val:0,valid:[0,10],valu:[0,1,4,7,8,10],valueerror:0,vari:[4,7,8,13],variabl:[1,2,4,8,13],varianc:4,varieti:13,variou:[1,2,4],varnam:1,vcforpython27:7,venv:7,veri:[0,1,2,4,7,9],verifi:[7,9],versatil:13,version:[0,1,3,4,5,7,8,9,13],via:[1,5,7],via_btc:5,viabl:5,victori:5,video:[4,6,10],view:[3,9],virtual:[1,7],virtualenv:9,virtualenvwrapp:3,visit:[4,6],visual:[1,4,6,7],vix:0,volatil:4,volum:[0,1,4,5,6,10,12,13],volume_limit:0,volumeshareslippag:[0,1],vrc_btc:5,vtc_btc:5,wai:[1,2,4,6,7],wait:[1,4],want:[0,1,2,3,4,5,7],warn:[0,1,9,10],warn_on_cancel:0,warrant:0,warranti:4,wave:[4,14],web:[5,9],websit:[1,6],wed:0,week_end:0,week_start:0,weekdai:0,weight:4,welcom:3,well:[1,2,6,7],were:[3,4,9],what:[0,1,3,4,5,7,8,9],whatev:2,whatsnew:9,wheel:[7,9],when:[0,1,2,3,4,7,8,9,14],where:[1,2,3,4,5,6,7,8,10,13,14],whether:0,which:[0,1,2,3,4,5,7,8,9,10,13],whitepap:11,whitespac:3,who:3,whole:1,whose:0,why:[3,7],width:9,win:9,window:[0,1,4,5,10],within:[1,7,8],without:[1,2,4,7,8,10],work:[2,3,4,7,8,9,10],workaround:10,workflow:7,working_dir:0,working_fil:0,world:1,wors:1,worth:1,would:[0,1,2,4,7,8,9],wouldlik:1,wrap:[0,9],writ:4,write:[1,4,8,13],writer:[2,3,13],writerow:13,written:[0,1,2,5,6],wrong:5,www:4,xbc_btc:5,xbt:8,xcp_btc:5,xem_btc:5,xlabel:4,xmr_btc:5,xmr_usdt:[4,5],xpm_btc:5,xrang:4,xrp_btc:5,xrp_usdt:5,xvc_btc:5,yahoo_equ:2,yaxi:[1,4],year:9,yet:[0,1],ylabel:4,yml:[7,10],you:[1,2,3,4,5,6,7,8,9,13],your:[1,2,3,4,5,6,7,8,9,11,13],yourself:3,yum:7,zec_btc:5,zec_eth:5,zec_usdt:5,zec_xmr:5,zero:[3,4],ziplin:[0,2,3,6,9,11],zipline_root:[2,9],zlib:7,zrx_btc:5,zrx_eth:5},titles:["API Reference","Catalyst Beginner Tutorial","Data Bundles","Development Guidelines","Example Algorithms","Features","Overview","Install","Live Trading","Release Process","Release Notes","Resources","Unit Tests","Utilities","Videos"],titleterms:{"3rd":11,"default":2,"function":[0,5],"new":2,IDE:1,__version__:9,access:1,adjustment_writ:2,algo:12,algorithm:[0,1,4,8],amazon:7,ami:7,api:[0,11],asset:0,asset_db_writ:2,authent:[8,12],avail:2,averag:[1,4],backtest:[0,2,14],basic:1,bdist:9,beginn:1,branch:3,btc:4,bug:10,bui:4,build:10,bundl:[2,12],cach:[0,2],calendar:[0,2],cancel:0,catalyst:[1,7],command:[0,1],commiss:0,commit:[3,9],conda:[7,9],content:6,contribut:3,control:0,convent:5,creat:3,cross:1,crossov:4,csv:[12,13],currenc:8,current:[5,12],daily_bar_writ:2,data:[0,1,2,12,13],dev1:10,dev2:10,dev3:10,dev4:10,dev5:10,dev6:10,dev7:10,dev8:10,dev9:10,develop:3,discov:2,doc:3,docker:3,docstr:3,document:[9,10],dual:[1,4],end_sess:2,environ:[2,3],exampl:[1,4],exchang:[8,12],extract:13,factori:2,featur:5,file:[9,13],first:1,fix:10,format:3,get:7,git:3,gnu:7,guidelin:3,help:7,histor:12,histori:1,hodl:4,ingest:[1,2,12],instal:[1,7,14],interfac:1,jupyt:1,line:[0,1],linux:7,live:[8,14],maco:[7,14],market:[12,13],matplotlib:7,mean:4,messag:3,metadata:0,minute_bar_writ:2,mirror:2,miscellan:0,mode:8,model:0,move:[1,4],name:5,next:[1,9],note:[7,9,10],notebook:1,object:0,old:2,optim:4,order:[0,12],output:13,output_dir:2,over:1,overview:[4,6],packag:9,paper:8,paramet:0,parti:11,pip:7,pipelin:0,pipenv:7,polici:0,portfolio:4,previou:1,price:[1,12],process:9,pycharm:1,pypi:9,python:9,quandl:2,quantopian:2,refer:0,relat:11,releas:[9,10],requir:7,resourc:11,revers:4,run:[0,1,2],schedul:0,sdist:9,setup:1,show_progress:2,simpl:4,simul:0,slippag:0,start_sess:2,stat:12,step:1,strategi:14,structur:3,stub:9,support:8,symbol:8,tabl:6,test:12,ticker:12,trade:[0,8,14],troubleshoot:7,tutori:1,unit:12,univers:4,upcom:5,updat:[7,9],upload:9,using:1,util:[0,13],valid:12,version:10,video:14,virtualenv:7,wiki:2,window:[7,14],work:1,write:2,yahoo:2}})
\ No newline at end of file
+Search.setIndex({docnames:["appendix","beginner-tutorial","bundles","development-guidelines","example-algos","features","index","install","live-trading","release-process","releases","resources","unit-tests","utilities","videos"],envversion:53,filenames:["appendix.rst","beginner-tutorial.rst","bundles.rst","development-guidelines.rst","example-algos.rst","features.rst","index.rst","install.rst","live-trading.rst","release-process.rst","releases.rst","resources.rst","unit-tests.rst","utilities.rst","videos.rst"],objects:{"catalyst.api":{EODCancel:[0,0,1,""],NeverCancel:[0,0,1,""],cancel_order:[0,0,1,""],date_rules:[0,1,1,""],fetch_csv:[0,0,1,""],get_environment:[0,0,1,""],get_open_orders:[0,0,1,""],get_order:[0,0,1,""],order:[0,0,1,""],order_percent:[0,0,1,""],order_target:[0,0,1,""],order_target_percent:[0,0,1,""],order_target_value:[0,0,1,""],order_value:[0,0,1,""],record:[0,0,1,""],schedule_function:[0,0,1,""],set_benchmark:[0,0,1,""],set_cancel_policy:[0,0,1,""],set_commission:[0,0,1,""],set_do_not_order_list:[0,0,1,""],set_long_only:[0,0,1,""],set_max_leverage:[0,0,1,""],set_max_order_count:[0,0,1,""],set_max_order_size:[0,0,1,""],set_max_position_size:[0,0,1,""],set_slippage:[0,0,1,""],set_symbol_lookup_date:[0,0,1,""],sid:[0,0,1,""],symbol:[0,0,1,""],symbols:[0,0,1,""],time_rules:[0,1,1,""]},"catalyst.api.date_rules":{every_day:[0,2,1,""],month_end:[0,3,1,""],month_start:[0,3,1,""],week_end:[0,3,1,""],week_start:[0,3,1,""]},"catalyst.api.time_rules":{every_minute:[0,2,1,""],market_close:[0,2,1,""],market_open:[0,2,1,""]},"catalyst.assets":{Asset:[0,1,1,""],AssetConvertible:[0,1,1,""]},"catalyst.assets.Asset":{first_traded:[0,2,1,""],from_dict:[0,4,1,""],is_alive_for_session:[0,4,1,""],is_exchange_open:[0,4,1,""],to_dict:[0,4,1,""]},"catalyst.finance.cancel_policy":{CancelPolicy:[0,1,1,""]},"catalyst.finance.cancel_policy.CancelPolicy":{should_cancel:[0,4,1,""]},"catalyst.finance.commission":{CommissionModel:[0,1,1,""],PerDollar:[0,1,1,""],PerShare:[0,1,1,""],PerTrade:[0,1,1,""]},"catalyst.finance.commission.CommissionModel":{calculate:[0,4,1,""]},"catalyst.finance.execution":{ExecutionStyle:[0,1,1,""],LimitOrder:[0,1,1,""],MarketOrder:[0,1,1,""],StopLimitOrder:[0,1,1,""],StopOrder:[0,1,1,""]},"catalyst.finance.execution.ExecutionStyle":{exchange:[0,2,1,""],get_limit_price:[0,4,1,""],get_stop_price:[0,4,1,""]},"catalyst.finance.slippage":{FixedSlippage:[0,1,1,""],SlippageModel:[0,1,1,""],VolumeShareSlippage:[0,1,1,""]},"catalyst.finance.slippage.SlippageModel":{process_order:[0,4,1,""]},"catalyst.protocol":{BarData:[0,1,1,""]},"catalyst.protocol.BarData":{can_trade:[0,4,1,""],current:[0,4,1,""],history:[0,4,1,""],is_stale:[0,4,1,""]},"catalyst.utils.cache":{CachedObject:[0,1,1,""],ExpiringCache:[0,1,1,""],dataframe_cache:[0,1,1,""],working_dir:[0,1,1,""],working_file:[0,1,1,""]},"catalyst.utils.calendars":{TradingCalendar:[0,1,1,""],clear_calendars:[0,0,1,""],deregister_calendar:[0,0,1,""],get_calendar:[0,0,1,""],register_calendar:[0,0,1,""],register_calendar_type:[0,0,1,""]},"catalyst.utils.calendars.TradingCalendar":{is_open_on_minute:[0,4,1,""],is_session:[0,4,1,""],minute_index_to_session_labels:[0,4,1,""],minute_to_session_label:[0,4,1,""],minutes_count_for_sessions_in_range:[0,4,1,""],minutes_for_session:[0,4,1,""],minutes_for_sessions_in_range:[0,4,1,""],minutes_in_range:[0,4,1,""],next_close:[0,4,1,""],next_minute:[0,4,1,""],next_open:[0,4,1,""],next_session_label:[0,4,1,""],open_and_close_for_session:[0,4,1,""],previous_close:[0,4,1,""],previous_minute:[0,4,1,""],previous_open:[0,4,1,""],previous_session_label:[0,4,1,""],regular_holidays:[0,2,1,""],session_distance:[0,4,1,""],sessions_in_range:[0,4,1,""],sessions_window:[0,4,1,""],special_closes:[0,2,1,""],special_closes_adhoc:[0,2,1,""],special_opens:[0,2,1,""],special_opens_adhoc:[0,2,1,""]},"catalyst.utils.cli":{maybe_show_progress:[0,0,1,""]},catalyst:{run_algorithm:[0,0,1,""]}},objnames:{"0":["py","function","Python function"],"1":["py","class","Python class"],"2":["py","attribute","Python attribute"],"3":["py","staticmethod","Python static method"],"4":["py","method","Python method"]},objtypes:{"0":"py:function","1":"py:class","2":"py:attribute","3":"py:staticmethod","4":"py:method"},terms:{"000000e":1,"1000th":1,"15t":4,"1st":1,"30t":4,"328842e":1,"340mb":10,"380954e":1,"40mb":10,"460mb":10,"505275d6646a41f3856b22b16678d":1,"536708e":1,"5min":1,"650729e":1,"7869f7828fa140328eb40477bb7d":1,"998236e":1,"998677e":1,"999120e":1,"999558e":1,"99mb":10,"abstract":0,"boolean":[0,2,8],"break":7,"case":[0,1,2,3,7,13],"class":[0,3,9],"default":[0,1,5,7,8,10,13],"enum":0,"export":9,"final":[1,2,3],"float":[0,1,10],"function":[1,2,3,4,6,7,9,10,11,13],"import":[0,1,2,4,9,13],"int":[0,2,4],"long":[1,2,4],"new":[0,1,3,7,8,9],"null":12,"public":10,"return":[0,1,4,8,9,10,11],"short":[0,1,3,4],"static":[0,9],"switch":8,"throw":10,"true":[0,1,4,8,10],"try":[3,4,7],"var":1,"while":[5,7,9,10],AWS:10,Added:10,And:1,For:[0,1,2,4,5,7,8,9,12],Not:[0,12],One:2,That:[1,7],The:[0,1,2,3,4,7,8,9,10,13],Then:[2,3,4,7],There:[1,3,7,8],These:[0,1,8,13],Use:[1,4,13],Using:[9,10],Will:8,With:8,__del__:0,__exit__:0,__file__:[4,13],__future__:4,__getitem__:0,__main__:[1,4],__name__:[1,4],__setitem__:0,__wrapped__:9,_html_base:3,_tkinter:1,aapl:2,abc:0,abil:[2,10],abl:[1,2,7],abner:[],about:[0,1,2,6,7],abov:[0,1,3,4,5,7,8,9],absolut:0,abstractholidaycalendar:0,accept:[0,2,7,9],access:[0,5,6,7,8],accord:[0,9],accordingli:[1,4],account:[0,1,2,4,6,10],acevedo:[],acquir:[2,7],across:[5,6,10],activ:[7,8,9],actual:[0,1],add:[1,2,3,7,9,13],added:[0,1,2,5,6,7,9],adding:[1,3],addit:[0,1,3,5,6,7,10],addition:8,address:9,adjust:[0,2,4,10],administr:7,advanc:7,advantag:7,afford:[1,4],aforement:1,after:[0,1,2,4,7,9],afteropen:0,again:[1,3],against:[1,6,8,10,14],agre:4,ahead:1,aim:[4,11],algebra:[4,7],algo:[0,1,2,4,8,10],algo_namespac:[1,4,8],algo_volatil:1,algofil:[1,2],algorithm:[3,5,6,7,10,11,12,13,14],algorithm_period_return:[1,4],algotext:1,alia:[0,4],alias:[4,10],aliv:0,all:[0,1,2,3,4,5,6,7,8,9,10,12],alloc:0,allow:[0,1,2,5,6,7],almost:7,along:[0,2],alongsid:1,alpha:[1,4,7,8],alreadi:[0,1,2,3,7],also:[0,1,2,3,4,6,7,8,9],altern:[1,5,7],although:1,alwai:[0,2,5,8,9],among:1,amount:[0,1,4,8,10],amount_charg:0,amp_btc:5,ana:7,anaconda2:1,anaconda:[1,7,9],analog:1,analysi:[1,4,6,9,10,11],analyst:11,analyt:[6,7],analyz:[0,1,4,8,10,13],ani:[0,1,2,4,5,7,8,9,13],anonym:2,anoth:[1,2,4,5],anymor:1,anyth:[1,7,9],apach:4,api:[1,2,4,5,6,7,8,9,13],app:7,appar:1,appear:[0,2,9],append:9,appli:[0,1,4],applic:[1,4],appropri:[1,3,4],approxim:[1,4],appveyor:9,apt:[1,7],arang:[1,4],arbitrag:5,arbitrari:[8,10],arbitrarili:1,arch:7,architectur:1,ardr_btc:5,arena:0,arg:[0,1,9],argument:[0,1,2,8,9],argv:13,around:[6,9],arrai:[4,7],art:6,articl:[3,4],ask:[1,3],asmatrix:4,assert:[3,12],assertionerror:3,assess:1,asset:[1,2,4,5,6,8,10,13],asset_nam:[0,1,4],asset_restrict:0,assetconvert:0,assetdbwrit:2,assign:[1,8],assimil:1,assist:7,assum:[1,3,4,7],astyp:4,atla:7,attach:0,attempt:[0,2,8],attribut:[0,4,9],auth2:4,auth:[8,10],auth_alias:4,authent:10,auto:10,auto_close_d:0,automag:7,automat:0,avail:[0,1,4,5,7,8,9,10,12,13],averag:7,avoid:[1,2,4],awai:7,awar:[0,9],ax1:[1,4],ax2:[1,4],ax3:[1,4],ax4:[1,4],ax5:[1,4],ax6:[1,4],axhlin:4,axi:[0,4],ayala:[],b23c38652556:4,back:[0,3,5,7],backbon:4,backend:7,backtest:[1,4,5,6,7,8,10,11],backward:0,bah:4,bar:[0,1,4,10],bar_count:[0,1,4],bar_templ:0,bardata:0,base:[0,1,2,4,5,6,7,8,14],base_curr:[1,4,5,8,13],base_pric:[1,4],basenam:[4,13],basi:[4,10],batch:7,batteri:1,battl:7,bch_btc:5,bch_eth:5,bch_usdt:5,bcn_btc:5,bcn_xmr:5,bcolz:2,bcolzdailybarread:2,bcolzdailybarwrit:2,bcolzminutebarread:2,bcolzminutebarwrit:2,bcy_btc:5,be62ff77760c4599abaac43be9cc9:1,bear:[1,4],beautifi:1,becaus:[0,1,4,7,9,10],been:[0,1,2,7,9],befor:[0,1,2,4,7,8,10],before_trading_start:[0,4],beforeclos:0,beggin:4,begin:[0,1,4,7],beginn:[4,6],behavior:0,being:[0,1,6],bela_btc:5,believ:1,below:[0,1,3,4,13],benchmark:[0,1,4,5,6,10],benchmark_period_return:[1,4],benchmark_volatil:1,benefit:1,best:[3,6,7],beta:[1,4],better:[0,1],between:[0,1,3,4,5,6,10,12],beyond:5,bfill:4,bia:1,big:7,bin:[1,4,7],binanc:[4,8,10],binari:[1,7,9],bit:[3,7],bitcoin:[1,4,5,6,8,13],bitcoin_usd_asset:8,bitfinex:[1,4,5,6,8,10],bitmex:8,bittrex:[1,5,6,8,10,14],blank:12,bld:3,blk_btc:5,blk_xmr:5,blockchain:5,blog:4,blotter:[4,13],blue:1,bnb_eth:4,bodi:3,book:1,bool:0,both:[0,1,3,5,8,9,12],bought:[1,8],bound:[0,1],boundari:0,box:1,branch:9,breakdown:8,brew:7,brother:7,brows:7,browser:[1,3,9],btc:[1,8,10],btc_usd:[1,4,5,8],btc_usdt:[4,5,6,10,13],btcd_btc:5,btcd_xmr:5,btm_btc:5,bts_btc:5,bug:[0,2,3],bui:[0,1,8,11,12,14],build:[0,1,3,6,7,9],build_ext:3,built:[4,9,12],bundl:[0,1,5,10],bundle_timestamp:0,burst_btc:5,button:[1,7,9],buy_and_hodl:[4,10],buy_btc_simpl:[1,4],buy_btc_simple_out:[1,4],buy_df:[1,4],buy_low_sell_high:10,cach:[1,10],cachedobject:0,cal_nam:0,calcul:[0,1,3,4,8,12],calendar_typ:0,calendarnamecollis:0,call:[0,1,2,3,4,10],callabl:0,callback:0,can:[0,1,2,3,4,5,6,7,8,9,10,13],can_trad:[0,1,4,10],cancel:[1,4,12],cancel_ord:[0,1,4],cancel_polici:0,cancelpolici:0,candl:[1,5,10,12],candle_s:4,candlestick:4,cannot:[0,1,4,7],canon:3,capabl:10,capit:[0,1,4],capital_bas:[0,1,4,8,10,13],capital_us:1,captur:1,cash:[1,2,3,4,10],catalyst:[0,3,4,5,6,8,10,11,12,13,14],catalyst_dev:[1,6,7],catalyst_root:0,caus:[0,1,2,3],ccxt:[8,10],cell:1,cert:10,certian:0,chanc:1,chang:[0,1,3,4,6,7,9,10],channel:[1,6,7],charact:3,charg:[0,1],chart:[1,4,7],check:[0,1,2,3,4,5,7,8],checker:9,checkout:[3,9],choic:9,choos:[1,4,5,7,9,13],chosen:[1,13],chunk:[0,1,10],circumv:7,clam_btc:5,classic:[1,4],classifi:1,clean:[0,2,7,9,10,12],clean_on_failur:0,clear:2,clear_calendar:0,cli:[0,1,4,10,13],click:[0,1,7,9],client:8,clone:3,close:[0,1,4,5,13],cls:0,cmap:4,cmd:[1,7],cme:0,code:[0,1,4,7,9,10,13],codebas:3,codifi:0,coin:[1,4,10],collect:[1,2,4],collis:0,color:[1,4],colorbar:4,colour:4,column:[0,1,2,4],com:[1,2,3,8],combin:[0,7,8],come:[1,2,7,8],command:[2,4,7,9],comment:1,commiss:[1,5,10],commissionmodel:0,commit:0,common:[0,1],commonli:1,commun:[1,5,7,11],comp:4,compar:[1,4,5,6,7,12],comparison:10,compat:[0,6,10],compil:[7,9,10],complement:4,complet:8,complex:[1,7],complianc:4,complimentari:13,comprehens:10,compress:[1,10],comput:[1,4,7,10,11],concept:[0,1],conda:[1,10],conda_build_matrix:9,condit:[0,4],confid:8,config:7,configur:[1,7,10],congratul:7,consecut:0,consid:[0,1,4],consist:[1,5,12],constant:1,constraint:2,consum:9,contain:[0,1,2,3,4,7,12],content:[1,13],context:[0,1,3,4,10,13],contigu:0,continu:1,continuo:1,continuum:7,contract:0,contribut:5,control:[8,9],conveni:[0,1],convent:[4,8],convers:2,convert:[0,2,4],copi:[1,2,3,4,9],copy_tre:0,copyright:4,core:7,corr_m:4,correct:[2,7,8,9],correctli:[1,7,9],correctwai:7,correl:4,correspond:[0,1,7,8,13],cost:[0,1,4],could:[0,1,2,4,7,13],count:[0,2],counter:4,coupl:1,cov_m:4,covari:4,cover:[0,1,4,8,13],coverag:[5,6,8],cpython:7,crash:2,creat:[1,2,4,7,8,9,10,11,12,13],creation:10,credit:[],critic:5,cross:[0,5],crossov:1,crowd:11,crypto:[1,6,10],cryptoasset:[1,4,13,14],cryptocurr:[4,5,8],csv:[0,1,4,10],csv_data_sourc:0,csvfile:13,csvwriter:13,cumul:10,cumulative_capital_us:3,curat:[1,6],currenc:[1,4],current:[0,1,2,4,7,8,9,10,13],current_d:4,current_dai:4,current_dt:[4,13],current_valu:0,custom:[1,2,5,13],cvc_btc:5,cvc_eth:5,cython:9,d6dca79513214346a646079213526:1,dai:[0,1,2,4,7,9],daili:[0,1,2,4,5,6,10,13],darkgoldenrod:4,dash:8,dash_btc:5,dash_usdt:[4,5],dash_xmr:5,data:[4,5,6,7,8,10,11],data_frequ:[0,1,4,13],data_port:0,databas:2,datafram:[0,1,2,4,5,6,11,12,13],dataframe_cach:[0,2],dataport:0,dataset:[1,2,5],date:[0,1,2,4,7,8,9,10,12,13],date_column:0,date_format:0,date_rul:0,datetim:[0,4,13],datetimeindex:0,day_end:0,day_start:0,days_offset:0,dcr_btc:5,debian:[1,7],debug:9,debugg:1,decentr:5,decid:9,decim:[0,10],decor:9,decreas:4,def:[1,4,13],default_extens:0,defin:[0,1,4,8],delai:1,delet:[0,2],delist:0,demonstr:1,denomin:1,dep:3,depart_docu:3,depend:[0,1,3,7,9,10,13],deploi:9,deprec:3,deregist:0,deregister_calendar:0,deriv:7,describ:[0,5],descript:[3,7],desir:[0,1,4,12,13],desktop:5,detail:[4,5],determin:[0,4],dev1:7,dev2:7,dev3:7,dev4:7,dev5:7,dev6:7,dev8:7,dev9:7,dev:[3,5,7],devel:7,develop:[1,6,7,8,9,10,11,13],deviat:4,devis:1,dgb_btc:5,dict:[0,4,10],dict_:0,dictionari:[0,10],did:[6,7],didn:7,differ:[0,1,2,4,5,7,8,9,13],dimension:0,dir:7,dir_util:0,direct:0,directli:[1,2,7,10,13],directori:[0,1,2,3,4,7,8,9],disabl:10,disablemsi:7,discard:4,discord:[1,3,6,7],discuss:1,disk:[0,10],dismiss:1,displai:[1,4,7,9,10],dist:9,distanc:0,distinguish:0,distribut:[4,7,9],distutil:9,divid:[0,3],dividend:[0,2],divis:4,dma:1,dname:1,dnf:7,doc:[2,4,8,9],dockerfil:3,docstr:10,doctest:0,document:[3,4,5,6,7,8],docutil:3,doe:[0,1,2,4,5,7],doesn:[0,2],doge_btc:5,dollar:[0,5],don:[0,1,3,7,14],done:[1,4,9],door:5,dot:[0,4],down:[1,4,14],downgrad:3,download:[1,2,7,10],draft:9,drawback:2,drive:1,driven:[1,6,8],drop:[0,1],dropbox:10,dt_minut:0,dual_moving_averag:[1,4],due:0,dure:0,dword:7,dynam:4,each:[0,1,2,3,4,5,6,7,8,10,12,13],earlier:[1,2,3,4],earliest:4,eas:6,easi:[1,2,4,11],easier:[1,2,4,5,7],easiest:7,easili:[1,6,7],eastern:0,echo:7,eco:6,ecosystem:5,edit:[3,4,7,9],editor:7,educ:1,educt:1,effect:7,either:[0,1,4,7],elaps:4,element:[0,4],elif:[1,4],els:[4,7],emc2_btc:5,empow:[1,6],empti:[1,2,3,4,8,9,10],empty_char:0,empyr:10,enabl:8,encapsul:0,encount:7,encourag:8,end:[0,1,4,10,12,13],end_daili:4,end_dat:[0,1,4,8],end_minut:0,end_sess:0,end_session_label:0,ending_cash:1,ending_exposur:1,enforc:0,engin:11,enh:3,enhanc:3,enigma:[1,4,5,6,7,10],enigmampc:[1,3,4],enough:[0,1,5,7],ensur:[0,4,7,8,9],ensure_directori:4,enter:[0,1,7],entir:3,entri:[1,7],env:[1,3,4,7],enviorn:2,environ:[0,1,4,7,10,13],environemnt:[1,7],eodcancel:0,equal:[0,1,2,4,8,13],equiti:[0,2],equival:[0,4,12],error:[0,1,3,4,5,7,8,10,12],especi:1,essenti:8,establish:6,estim:1,etc:[0,3,9,10],etc_btc:5,etc_eth:5,etc_usdt:5,eth:[1,4,8],eth_btc:[5,8],eth_usdt:[4,5],ether:4,ethereum_bitcoin_asset:8,evalu:1,even:[0,2,7],event:[0,1],eventrul:0,eventu:1,everi:[0,1,4,7],every_dai:0,every_minut:0,everydai:4,everyth:[1,2],exact:[4,13],examin:1,exampl:[0,2,3,5,6,8,9,10,11,13],exceed:0,excel:7,except:[0,1,3,4],excess:4,exchang:[0,1,2,4,5,6,10,14],exchange_algorithm:1,exchange_ful:0,exchange_nam:[0,1,4,8,13],exchange_util:4,exclud:4,exclus:0,exe:1,execut:[0,1,4,7,8,10],execution_pric:0,execution_volum:0,executionstyl:0,exist:[0,1,2,3,4,5,6,7],exit:[0,1,4,9],exit_success:9,exp_btc:5,expect:[0,1,2,4,5,7,9],experi:7,experienc:7,expir:0,expiringcach:0,explain:[7,8],explan:0,explicitli:9,explictili:7,exposur:0,express:[1,4,6],extend:1,extens:[0,2,3,7,8],extern:[1,4,7],extra:9,extract_transact:[1,4],facto:1,fail:[0,1,2,7],failur:2,fairli:[1,3],fals:[0,1,4,8],familiar:3,fantast:1,faq:7,far:2,fast:2,fatal:7,fct_btc:5,featur:[1,4,6],fedora:7,fee:5,feedback:2,feel:1,fetch:[0,2,5,8,10,12],fetch_csv:0,few:[1,2,7,9],fewer:7,ffill:4,field:[0,2,4,9],file:[0,1,2,3,4,7,8,10,12],filenam:[1,4,13],fill:[0,1,4],fill_char:0,filter:[4,10],final_path:0,financ:[0,1],financi:[1,10],find:[1,2,7,9],finder:0,fine:9,finish:[1,8],fire:0,firm:0,first:[0,2,3,4,7,8,9,14],first_trad:0,fix:[0,3,12],fixedslippag:0,flag:[1,4,7,8,9],flake8:3,flat:0,fldc_btc:5,flo_btc:5,floor:4,focu:[1,4,6],folder:[4,7,10],follow:[0,1,2,3,4,5,7,8,9,13],foo:0,footprint:7,forc:0,fork:11,form:[1,4,5],format:[0,1,2,4,9,10],fortran:7,forward:[0,2,12],foster:11,found:[0,1,3,5,7],fourth:[1,4],fraction:10,frame:[1,4],framework:7,free:[1,4],freelanc:11,freetyp:7,freq:[1,4],frequenc:[0,1,4,10,12],frequent:7,fresh:9,from:[0,1,2,3,4,5,7,8,9,10,12,13],from_dict:[0,4],full:[0,1,8,13],fulli:8,func:0,fund:11,fundament:11,further:[0,1,4],futur:[0,1,2,5,8],game_btc:5,gas_btc:5,gas_eth:5,gave:1,gcc:7,gcf:[1,4],gdax:8,gear:1,gen:0,gen_type_stub:9,gener:[0,2,3,6,7,8,9,10,13],get:[0,1,2,3,4,5,6,8,10,13],get_calendar:0,get_environ:0,get_exchange_symbol:4,get_limit_pric:0,get_open_ord:[0,1,4],get_ord:0,get_spot_valu:0,get_stop_pric:0,get_ylim:[1,4],gettempdir:4,gfortran:7,git:9,github:[1,3,4,7,9],give:4,given:[0,1,2,4,5,13],global:1,gno_btc:5,gno_eth:5,gnt_btc:5,gnt_eth:5,goe:[4,8,14],going:[4,7,14],good:[1,9],goog:2,got:1,govern:4,gracefulli:[8,10],grain:9,granular:[5,10],graph:1,grc_btc:5,greater:0,greatli:8,green:[1,4],group:[1,3],grow:2,guarante:0,guard:0,guid:[3,7,10],guidelin:[6,7,10],gzip:9,had:0,half:0,half_dai:0,hand:3,handi:[1,4,7],handl:[3,4,10],handle_data:[0,1,4,8,13],hang:7,happen:[0,1,2,8],happi:9,hard:1,has:[0,1,2,3,7,8,9,10],hash:10,have:[0,1,2,3,6,7,8,9,14],haven:1,head:[1,7],header:[7,9],heavi:[1,4],heavili:11,hedg:11,held:[0,5],hello:[],help:[0,1,2],henc:1,here:[1,2,4,7,8],hidden:9,high:[0,1,4,8,11,13],highest:[4,9],highlight:4,hint:[7,9],histor:[1,4,5,6,8,10],histori:[0,2,4,10],hit:[1,10],hitchhik:7,hkey_local_machin:7,hold:[0,4,8],holidai:0,holidaycalendar:0,home:10,homebrew:7,hope:1,hopefulli:[4,14],hour:0,how:[0,1,2,4,7,8],howev:[7,8,9],html:[3,4,9],http:[1,4,8,9],huc_btc:5,idea:[1,2,3],ident:[0,7],identifi:0,idxmax:4,idxmin:4,ignore_exception_detail:0,illustr:8,iloc:4,imestamp:0,immedi:[1,4],impact:10,imper:3,implement:[1,2,4,8,10,14],impli:[0,4],implicitli:0,importerror:1,improv:[0,3,10],inadvert:7,inc:4,includ:[0,1,2,3,4,7,9,13],inclus:0,incomplet:2,inconsist:8,increas:[0,2,4,10],increment:[1,9],independ:[5,7],index:[0,1,3,4,9],indic:[0,2,4,7],individu:[1,8],ineffici:10,inf:4,infer:[0,2],infinit:4,influenc:1,info:[0,1,4,10],inform:[0,1,2,4,7,9],ingest:[4,5,10],initi:[0,1,4,8,10,13],inlin:1,inner:1,inplac:3,input:[1,5,6],insert:4,insid:[1,4,7],insight:[1,6],inspect:[1,4],instal:[3,5,6,9,10],installt:7,instanc:[0,2,4,12],instanti:0,instead:[0,1,2,3,4,5,8,10],instruct:[1,3,7],integ:[0,2,10],integr:[0,1,5,6,8,10],intend:[1,3,9],interact:[1,8],interfac:[0,5,8,9,10,13],intern:[2,7],interpret:[1,4,13],interv:[4,12],introduc:[1,4,5,8,10],invalid:0,invest:[1,6],invok:[1,2],involv:[2,7],ipython:1,is_alive_for_sess:0,is_bui:[0,1,4],is_exchange_open:0,is_open_on_minut:0,is_sess:0,is_stal:0,isinst:4,isn:0,issu:[1,3,5,7,9,10],iter:[0,1,2,4,13],itercontext:0,its:[0,1,4,5,7,8],itself:[1,7],jan:1,join:[4,6,7],json:[8,10],json_symbol:4,juli:13,jump:7,jupyt:10,just:[0,1,2,4,5,9],keep:[1,2,4,7,10],kei:[0,2,6,7,8],kept:[1,8],keyerror:[0,10],keynam:0,kind:4,know:[0,1,7],knowledg:6,known:0,kpi:12,kwarg:[0,9],label:[0,1,4,8,9],lack:5,lambda:4,languag:[1,4],lapack:7,larg:2,larger:10,last:[0,1,2,4,7,10,12],last_trad:0,later:[1,2,3,4],latest:[7,9,10],launch:[1,7],law:4,layer:5,lazi:2,lazili:0,lbc_btc:5,leak:2,learn:[1,4,6,7],least:[0,1,3,12],legend:[1,4],legend_:[1,4],len:[1,3,4],length:0,less:2,let:[1,4],level:[1,2,4],leverag:[0,1,4,11],lib:[3,4],libatla:7,libfreetype6:7,libgfortran:7,librari:[1,3,4,6,7,8,10,11],licens:4,lifetim:2,like:[0,1,2,3,5,6,7,9,10,12],limit:[0,1,4,5,10,12],limit_pric:[0,1,4],limitord:0,line:[3,4,5,13],linear:7,link:7,linter:9,linux:[1,5,9],list:[0,1,2,4,5,7,8,9,10,13],littl:[1,3],live:[0,1,4,5,6,7,10,11],live_algo:4,live_graph:4,load:[0,1,2,7],load_ext:1,loader:[1,2],loc:[1,4],local:[1,2,3,7,9],locat:[0,1,2,4,13],lock:0,log1p:10,log:[1,4,7,10],logbook:[1,4],logger:[1,4],logic:[1,4,10],long_data:[1,4],long_mavg:[1,4],long_window:[1,4],longer:[1,3,9],look:[1,2,4,7,9,12,13],lookback:4,lookback_d:4,lookback_dai:4,lookup:[0,1],loop:2,loss:10,lot:[2,10],low:[0,1,4,8],lower:[4,8,10],lowercas:[5,8],lsk_btc:5,lsk_eth:5,ltc:8,ltc_btc:5,ltc_usd:[1,4],ltc_usdt:[4,5],ltc_xmr:5,mac:7,machin:[2,6,9],maco:[1,5],made:[0,2,3],magic:1,mai:[0,1,2,4,7,8,9],maid_btc:5,maid_xmr:5,main:[1,7,9],maint:3,maintain:[0,5,9],mainten:3,major:[0,9],make:[1,2,3,4,5,7,9],maker:[0,4],manag:[0,1,4,7,9],mani:[0,1,2,4,7,9,11],manifest:9,manner:8,manual:[7,9],map:[0,2,5,10],marker:[1,4],markers:1,market:[0,1,4,5,6,8,10],market_clos:0,market_curr:[4,5],market_open:0,marketord:0,marketplac:[1,7,10],markowitz:4,mask:0,master:9,match:[1,7,8,9,12],matplotlib:[1,4,6,11],matplotlibrc:7,matrix:[4,9],matter:3,mavg:1,max:0,max_capital_us:3,max_count:0,max_leverag:[0,3],max_not:0,max_shar:0,max_sharpe_port:4,maxim:6,maximum:[0,4],maybe_show_progress:[0,2],mcoin:1,mean:[0,1,2,7,9,10,14],mean_reversion_simpl:4,memori:[0,2],mention:[1,7,8,9],menu:[1,7],merg:1,merger:[0,2],messag:[1,10],metadata:2,method:[0,1,2,4,7,9,10,12,13],metric:[1,10],micro:9,microsoft:7,midnight:[0,4],might:1,migrat:1,min:4,min_trade_cost:0,min_trade_s:0,min_vol_port:4,mind:[1,4],miniconda:7,minim:[6,10],minimum:[0,4,10],minor:[0,7,9],minut:[0,1,2,4,5,6,7,10,13],minute_end:0,minute_index_to_session_label:0,minute_to_session_label:0,minutes_count_for_sessions_in_rang:0,minutes_for_sess:0,minutes_for_sessions_in_rang:0,minutes_in_rang:0,miscellan:9,miss:[0,1,7,8,10],mix:7,mkdir:7,mkvirtualenv:3,mode:[0,1,4,5,6,10],model:[1,3,4,5],modif:[0,3,8],modifi:13,modul:[0,1],moment:[7,9],momentum:[1,4,14],mon:0,monei:0,month:[9,13],month_end:0,month_start:0,more:[0,1,2,4,6,7,8,10,13],most:[0,1,2,4,7,8,10],mostli:1,move:[0,2,9],movement:1,mpc:[1,4],msft:[0,2],msgpack:0,msi:7,msiexec:7,much:[0,1,2],multipl:[0,2,4,5,9,10],multiprocess:0,multithread:0,multupl:0,must:[1,2,8,9],mutabl:0,mutual:0,my_algo_cod:8,my_algo_nam:8,n_portfolio:4,name:[0,1,2,3,4,7,8,9,13],name_of_project:1,namedtemporaryfil:0,namespac:[1,4,9],nan:[0,1,4],nano:9,nanosecond:0,nasset:4,nat:0,nativ:7,naut_btc:5,nav_btc:5,navig:[1,3,7],nchang:4,ndarrai:[1,4],nearest:4,necessari:7,nee:7,need:[0,1,2,3,4,5,7,9,11,13],neg:[0,1],neo:4,neo_eth:8,neo_ethereum_asset:8,neo_usd:4,neos_btc:5,never:[0,2,8],nevercancel:0,newer:[2,7],next:[0,2,7],next_clos:0,next_minut:0,next_open:0,next_session_label:0,nice:[5,6],nmc_btc:5,noebook:1,non:[0,7],none:[0,1,4,13],nor:4,normal:[0,10],note:[0,1,4,5,6,8,13],note_btc:5,notebook:10,noth:7,notic:4,notion:[0,4],novemb:9,now:[0,1,2,4,7,9,10,14],number:[0,1,2,4,7,9,10],numer:[0,7],numpi:[1,3,4,7,9,11],nvalu:4,nxc_btc:5,nxt_btc:5,nxt_usdt:5,nxt_xmr:5,nyse:0,obj:0,object:[1,2,3,4],observ:7,obtain:[1,4,8],occur:[1,3,8],off:11,offer:1,offset:[0,4],ohlc:1,ohlcv:[0,4,10,12],old:[0,9],older:[0,2],omg_btc:5,omg_eth:5,omni:5,omni_btc:5,on_error:0,onc:[0,1,2,4,7,8,9],one:[0,1,2,3,4,5,7,10,12,13],one_day_in_minut:4,ones:[0,4],onli:[0,1,2,3,4,6,7,9,13],open:[0,1,3,4,5,7,10,12,13],open_and_close_for_sess:0,open_ord:[0,4],openssl:7,oper:7,operatbl:7,opportun:5,opt:[4,7],optim:[1,11],option:[0,1,2,7,13],order:[1,4,5,7,8,9,10],order_id:[0,1],order_param:0,order_perc:0,order_target:0,order_target_perc:[0,1,4,8],order_target_valu:[0,1,4],order_valu:0,ordered_pip:3,org:[4,9],organ:1,origin:[1,9],osx:[7,9],other:[0,1,2,4,5,7,9,13],otherwis:7,our:[1,3,4,6,7,9,14],out:[0,1,2,3,4,6,7,9,12],outdat:7,outlin:7,output:[1,2,4,5,6],outsid:0,outstand:[1,4],over:[0,3,4,5,6,7],overcom:5,overfit:1,overrid:[7,9,10],overview:[1,5],overwhelm:1,overwritten:0,own:[2,4,7,8],p_r:4,p_std:4,packag:[1,3,7,11],packet:0,pacman:7,page:[3,5,7,9,10],pai:0,paid:0,pair:[0,1,4,5,8,10],pairon:4,panda:[0,1,2,4,5,6,11],pandasrequestscsv:0,panel:0,paper:[3,5,10],param:10,paramet:[1,4,8,9,10,13],parent:7,pares:0,pars:2,part:[0,1,2,4,7,8,14],partial:[7,12],particular:[6,7],pasc_btc:5,pass:[0,1,2,4,9],password:9,past:[1,4],patch:10,path:[0,2,4,7,10,13],pattern:12,pend:9,peopl:3,pep8:3,per:[0,1,2,4,5,10],percent:[0,1,4],percentag:[0,1,4],perdollar:0,perf:[0,1,3,4],perform:[0,1,3,4,5,6,7,10,11],perhap:7,period:[3,4],permiss:[4,7],pershar:0,persist:[1,4,10],pertrad:0,pickl:[0,1,4],piec:[2,7],pink_btc:5,pip:[1,3,9],pipelin:[5,10],pkg:7,place:[0,1,4,8,10],plan:[5,7],platform:[0,7,10,11],pleas:[1,6,7,13],plot:[1,4,11],plt:[1,4],plu:13,point:[0,1,5,9],polici:7,poloniex:[1,4,5,6,8,10,13],popul:9,porfolio:0,portfolio:[0,1,10,13],portfolio_optim:4,portfolio_valu:[1,4],pos_amount:[1,4],posit:[0,1,4,10],positon:4,possibl:[0,2,3,7],post:9,post_func:0,postprocess:0,pot_btc:5,power:[1,4,11],ppc_btc:5,practic:[1,3],pre:[2,7],pre_func:0,precis:10,predefin:8,predict:[1,8],prefer:[1,7],prefix:[3,7],preload:2,prepare_chunk:10,preprocess:[0,9],prerequisit:[1,7],present:[1,8,10],preserv:10,prevent:[2,7,9],previou:[0,7,14],previous:1,previous_clos:0,previous_minut:0,previous_open:0,previous_session_label:0,price:[0,2,4,5,6,8,10,13],price_chang:[1,4],price_impact:0,primari:7,print:[1,4,7,9],print_result:1,prior:[1,4],privileg:7,probabl:1,problem:[1,2,7,9],proce:7,proceed:7,process:[0,1,2,4,8],process_ord:0,produc:[2,4,7],profit:[1,6],program:[1,7],progress:[0,2],project:[1,6,7,11],prompt:[1,7],proper:[7,8],properli:[1,4,7,13],protect:0,protocol:[0,1,5],provid:[0,1,2,4,5,6,7,8,10,11,13],publish:9,pull:[0,3,9],pun:1,purchas:[1,4],purpos:[1,5,8],push:9,put:[7,8],pycharm:9,pydata:[4,5,6],pyfolio:10,pypirc:9,pypitest:9,pyplot:[1,4],python2:[3,5,7,10],python3:[5,7,10],python:[0,1,3,4,6,7,10,11,13],pythonw:7,pytz:[4,13],quandl:0,quandl_api_kei:2,quandl_download_attempt:2,quantit:[1,11],quantopian:[0,4,11],queri:[0,2],queryabl:0,question:[1,3,6],quick:1,quickli:[4,14],quirk:7,quit:2,rads_btc:5,rais:[0,3,10],ran:2,random:[4,12],randomli:12,rang:[0,1,2,4,8,12],rate:[4,10],rather:[0,1,7],ratio:4,raw:[0,2,7],rdylgn:4,reach:[0,8],read:[0,1,2,7,10],read_csv:0,read_pickl:1,readi:9,real:[0,4,8],realist:[1,4],reason:[1,2,7],rebal:4,rebalanc:[1,4],rebalance_period:4,recal:1,receiv:[1,2],recent:[0,1,2,4,5,7],recogn:7,recommend:[2,7],reconcil:0,reconstruct:1,record:[0,1,4,13],red:[1,4],redhat:7,redon:10,redownload:[1,2],reduc:10,redund:10,refactor:3,refer:[1,3,4,5,7,8,9],referenc:[1,4,8],refus:1,regard:6,regardless:[1,7,8],regedit:7,regist:[0,1,2],register_calendar:0,register_calendar_typ:0,registri:7,regular:[0,7],regular_holidai:0,reinstal:7,reinvest:0,rel:3,relat:3,relationship:2,releas:[3,5,6,7],relev:0,reli:[7,11],remain:10,rememb:[1,7],remot:[0,2],remov:[1,3,4,7,9,10],renam:9,rep:7,rep_btc:5,rep_eth:5,rep_usdt:5,repeat:10,replac:[4,7],repo:7,report:[1,3,7],repositori:[7,9,10],repres:[0,2,8],represent:0,reproduc:2,req:10,request:[0,1,2,3,4,10],requests_csv:0,requir:[1,3,4,8,9],requirements_blaz:3,requirements_dev:3,requirements_doc:3,research:1,reserv:[1,4,5],reserve_ratio:[1,4],reserve_valu:[1,4],resolut:[1,4,5,6,10,13],resolv:[0,10],resourc:[2,6,10],respect:[3,9,13],respons:[0,2,7],rest:2,restart:10,restor:10,restrict:[0,7],restricted_list:0,restructuredtext:3,result:[0,1,2,4,7,8,12,13],results_arrai:4,results_fram:4,resum:4,retest:4,retri:2,retriev:[0,1,4,10,12],rev:3,revers:[10,14],revert:3,review:[1,7],revis:1,rhel:7,ric_btc:5,ride:[4,14],right:[1,7],risk:[1,4,10],roll:1,rollup:2,root:[3,9],round:10,rout:0,routin:7,row:[0,1,4],rsi:4,rsi_overbought:4,rsi_oversold:4,rst:[3,9],rule:0,run:[3,4,5,7,8,9,10,12,13],run_algo:[1,4,13],run_algorithm:[0,1,4,8,13],runtim:1,runtimeerror:7,safe:1,sai:0,said:1,same:[1,2,4,5,7,8,9,10,13],sampl:[4,10,12],satisfi:7,save:[1,2,3,4,7,13],sbd_btc:5,sc_btc:5,scalar:0,scale:[1,10],scatter:[1,4],schedul:8,schedule_funct:0,scientif:11,scikit:1,scipi:[6,7],scratch:7,script:[1,4,9,13],scriptnam:13,seamless:[5,6],search:7,second:[0,1,4,7,14],secret:8,section:[1,3,4,7,8,9,13],secur:[4,6,11],securitylist:0,see:[0,1,2,4,5,6,7,8,13],seek:7,seen:4,select:[1,4,7,12],self:[0,3],sell:[0,1,4,8,10,11,12,14],sell_df:[1,4],semant:0,sentinel:0,separ:[1,3,5,7,8],seper:8,seri:[0,1,4,14],serial:0,seriou:1,server:[1,2,9],servic:2,session:[0,7],session_dist:0,session_label:0,sessions_in_rang:0,sessions_window:0,set:[0,1,2,4,5,7,8,10],set_benchmark:[0,5],set_cancel_polici:0,set_commiss:[0,4],set_do_not_order_list:0,set_long_onli:0,set_max_leverag:0,set_max_order_count:0,set_max_order_s:0,set_max_position_s:0,set_printopt:4,set_size_inch:[1,4],set_slippag:[0,4],set_symbol_lookup_d:0,set_tick:[1,4],set_ylabel:[1,4],setup:[3,9],setuptool:7,seven:4,sever:[1,6,7],share:[0,1,5,6],sharex:[1,4],sharp:[1,4],ship:[2,7,9],short_data:[1,4],short_exposur:1,short_mavg:[1,4],short_valu:1,short_window:[1,4],shorter:1,shorthand:0,shorts_count:1,should:[0,1,2,3,7,8,9,10],should_cancel:0,shourc:2,show:[0,1,2,4],show_progress:0,shown:[0,2],shutil:0,sid:[0,1,2,10],side:7,sidsnotfound:0,signal:[2,4],signatur:2,signific:4,sim_engin:0,similar:[1,7,8],similarli:0,simpl:[0,1,14],simple_univers:4,simpler:13,simplest:4,simpli:[1,3,4,7,13],simplic:4,simplifi:1,simul:[1,4,5,7,8],simulate_ord:[1,4,8,10],simulation_dt_func:0,simultan:10,sinc:[1,4,7,8,9,13],singl:[0,2,4,7,10],site:3,six:0,size:[0,4,7,10],sjcx_btc:5,skeleton:9,skim:1,skip:[1,4,10],sklearn:6,sleep:8,slighlti:4,slightli:7,slippag:[1,4,10],slippagemodel:0,smaller:[7,10],smoothli:14,snip:1,snippet:13,softwar:[4,7],sold:8,solut:7,solv:[1,2,7,10],some:[0,1,2,3,4,7,8,10,11],someon:7,someth:3,somewhat:1,sort:0,sortino:[1,10],sourc:[0,1,2,3,4,7,9,11],space:1,special:[0,8],special_clos:0,special_closes_adhoc:0,special_open:0,special_opens_adhoc:0,special_params_check:0,specif:[0,1,4,7,10],specifi:[0,1,2,4,5,8,9,10],spend:1,spent:5,sphinx:[3,9],split:[0,1,2,4],splitext:[4,13],spot:0,spread:[0,4],spring:11,sqliteadjustmentwrit:2,sqrt:4,ssl:10,stabl:[4,7],stai:[9,10],standard:[0,2,3,4,5,10],star:4,start:[0,1,2,3,4,6,7,8,12,13],start_dat:[0,1,4,8],start_minut:0,start_sess:0,start_session_label:0,start_tim:4,starting_cash:[1,4],starting_exposur:1,starting_valu:1,stat:[4,10],state:[0,1,2,4,6,10],statist:[1,5,6,8,10],stats_output:4,stats_util:[1,4],statsmodel:6,statu:4,std:4,stdev:4,stdout:1,steem_btc:5,steem_eth:5,step:[2,7],still:[1,2,4,5,7],stock:[1,2,4],stop:[0,1,4,10],stop_pric:0,stoplimitord:0,stopord:0,storag:[1,8,10],store:[0,1,2,4,5,13],str:[0,4],str_btc:5,str_usdt:5,straightforward:4,strat_btc:5,strategi:[1,4,6,8],stream:1,streamlin:1,strftime:4,strict_extens:0,strictli:[0,2,7],string:[0,1,2,4,9],string_typ:0,strong:0,strongli:7,struct:0,structur:[5,6,8,11],sty:3,style:[0,3,4],subdirectori:2,subject:[0,3],submit:3,subplot:[1,4],subset:4,substanti:1,subtract:0,succe:9,succeed:1,success:[2,3],successfulli:8,sudo:[1,7],suffici:7,suggest:3,sum:4,summar:7,summari:10,suppli:1,support:[0,1,4,5,6,7,9,10,12],suppos:1,suppress:4,sure:[4,7],surpris:1,suspect:3,symbol:[0,1,2,4,5,10,13],symbol_column:0,symbol_str:0,symbolnotfound:0,symbolnotfoundonexchang:5,sync:9,synchron:10,syntax:[0,9,10],sys:13,sys_btc:5,system:[0,1,3,6,7],t_price:4,t_val:4,tag:9,take:[0,1,2,7,10,14],taken:9,taker:[0,4],talib:4,tar:9,tarbal:9,target:[0,1,8,12],target_hodl_ratio:[1,4],target_hodl_valu:[1,4],technic:[4,6],tell:0,tempfil:4,templat:9,temporari:[0,9],ten:1,tend:8,tens:3,tent:10,term:1,termin:[1,4,7],test:[0,1,3,4,7,8,9,10,11],testpypi:9,tether:5,text:1,than:[0,1,2,3,7,8,10],thank:[],thei:[0,1,2,9,10,11],them:[0,1,3,7,9],therefor:9,therein:7,thi:[0,1,2,3,4,5,7,8,9,13,14],thing:[1,14],think:8,third:[1,4],thorough:7,those:[0,1,3,4,8,9],though:2,thread:0,three:[0,1,2,4,5,6,8],threshold:[1,4],through:[1,2,5,7],throughli:8,throughout:1,thu:[1,4,7],tick:4,tick_siz:1,ticker:[0,2,10],time:[0,1,2,4,6,7,8,9,13],time_rul:0,timedelta:[0,4],timefram:10,timeperiod:4,timeseri:4,timestamp:[0,1,2,10],timestr:4,timezon:0,titl:9,tkagg:7,tminus_pric:4,tminus_v:4,tmp_dir:0,to_csv:[4,13],to_datetim:[1,4],to_dict:0,to_pydatetim:[1,4],todai:[4,9],todo:4,togeth:1,token:[4,8,13],tolist:4,tool:[2,3,7,9,11],top:[1,6,9],total:[0,2],toward:1,traceback:[0,5],track:[0,1,3,4,10],tracker:[1,5],trade:[1,4,5,6,7,10,11,13],traded_todai:4,trader:[1,11],trading_dai:1,tradingalgorithm:[0,9],tradingcalendar:[0,2],tradingcontrolexcept:0,tradingpair:12,tradingsimul:0,tradit:1,train:1,tran:[1,4],transact:[0,1,4,8,10],transaction:2,transaction_df:[1,4],transfer:5,transform:1,transit:[5,6],transpos:4,travi:9,treasuri:[1,4],treasury_period_return:[1,4],treat:0,trend:1,tri:[1,6],trigger:[0,4],trip:10,tst:3,tue:0,tupl:[0,2],turn:9,tutori:[4,6,7,8],tweak:1,twice:9,two:[0,1,4,5,6,7,8,12,13,14],twoargument:1,txt:[3,7,9],type:[0,4,7,9],typo:3,tzinfo:0,ubuntu:[1,7],uncompress:10,under:[1,2,4,7,8,9],underli:[0,1],underlin:9,underscor:5,understand:[1,7],undesir:0,unexpect:7,uninstal:7,uniqu:0,unit:[1,5,10],univers:[0,1,8],universe_func:0,unknown:1,unless:4,unlik:2,unpack:7,unresolv:10,unsupport:10,untar:2,until:[1,4,7],unus:3,unwrap:0,updat:[1,4,10],upgrad:[7,9,10],upper:[1,4],upward:1,url:[0,9],usag:1,usd:[1,4,5],usdt:[4,5,13],usdt_btc:1,usdt_btc_benchmark:1,use:[0,1,2,3,4,5,6,7,8,9,10,11,13],used:[0,1,2,3,4,7,8],useful:[0,7],user:[1,2,4,5,6,7,9],usernam:9,uses:[0,1,2,5,8],using:[2,3,4,5,7,8,9,10,12,13,14],usr:4,usual:[0,1],utc:[0,1,4,13],util:[1,2,3,4,6],utilit:13,val:0,valid:[0,10],valu:[0,1,4,7,8,10],valueerror:0,vari:[4,7,8,13],variabl:[1,2,4,8,13],varianc:4,varieti:13,variou:[1,2,4],varnam:1,vcforpython27:7,venv:7,veri:[0,1,2,4,7,9],verifi:[7,9],versatil:13,version:[0,1,3,4,5,7,8,9,13],via:[1,5,7],via_btc:5,viabl:5,victori:5,video:[4,6,10],view:[3,9],virtual:[1,7],virtualenv:9,virtualenvwrapp:3,visit:[4,6],visual:[1,4,6,7],vix:0,volatil:4,volum:[0,1,4,5,6,10,12,13],volume_limit:0,volumeshareslippag:[0,1],vrc_btc:5,vtc_btc:5,wai:[1,2,4,6,7],wait:[1,4],want:[0,1,2,3,4,5,7],warn:[0,1,9,10],warn_on_cancel:0,warrant:0,warranti:4,wave:[4,14],web:[5,9],websit:[1,6],wed:0,week_end:0,week_start:0,weekdai:0,weight:4,welcom:3,well:[1,2,6,7],were:[3,4,9],what:[0,1,3,4,5,7,8,9],whatev:2,whatsnew:9,wheel:[7,9],when:[0,1,2,3,4,7,8,9,14],where:[1,2,3,4,5,6,7,8,10,13,14],whether:0,which:[0,1,2,3,4,5,7,8,9,10,13],whitepap:11,whitespac:3,who:3,whole:1,whose:0,why:[3,7],width:9,win:9,window:[0,1,4,5,10],within:[1,7,8],without:[1,2,4,7,8,10],work:[2,3,4,7,8,9,10],workaround:10,workflow:7,working_dir:0,working_fil:0,world:1,wors:1,worth:1,would:[0,1,2,4,7,8,9],wouldlik:1,wrap:[0,9],writ:4,write:[1,4,8,13],writer:[2,3,13],writerow:13,written:[0,1,2,5,6],wrong:5,www:4,xbc_btc:5,xbt:8,xcp_btc:5,xem_btc:5,xlabel:4,xmr_btc:5,xmr_usdt:[4,5],xpm_btc:5,xrang:4,xrp_btc:5,xrp_usdt:5,xvc_btc:5,yahoo_equ:2,yaxi:[1,4],year:9,yet:[0,1],ylabel:4,yml:[7,10],you:[1,2,3,4,5,6,7,8,9,13],your:[1,2,3,4,5,6,7,8,9,11,13],yourself:3,yum:7,zec_btc:5,zec_eth:5,zec_usdt:5,zec_xmr:5,zero:[3,4],ziplin:[0,2,3,6,9,11],zipline_root:[2,9],zlib:7,zrx_btc:5,zrx_eth:5},titles:["API Reference","Catalyst Beginner Tutorial","Data Bundles","Development Guidelines","Example Algorithms","Features","Overview","Install","Live Trading","Release Process","Release Notes","Resources","Unit Tests","Utilities","Videos"],titleterms:{"3rd":11,"default":2,"function":[0,5],"new":2,IDE:1,__version__:9,access:1,adjustment_writ:2,algo:12,algorithm:[0,1,4,8],amazon:7,ami:7,api:[0,11],asset:0,asset_db_writ:2,authent:[8,12],avail:2,averag:[1,4],backtest:[0,2,14],basic:1,bdist:9,beginn:1,branch:3,btc:4,bug:10,bui:4,build:10,bundl:[2,12],cach:[0,2],calendar:[0,2],cancel:0,catalyst:[1,7],command:[0,1],commiss:0,commit:[3,9],conda:[7,9],content:6,contribut:3,control:0,convent:5,creat:3,cross:1,crossov:4,csv:[12,13],currenc:8,current:[5,12],daily_bar_writ:2,data:[0,1,2,12,13],dev1:10,dev2:10,dev3:10,dev4:10,dev5:10,dev6:10,dev7:10,dev8:10,dev9:10,develop:3,discov:2,doc:3,docker:3,docstr:3,document:[9,10],dual:[1,4],end_sess:2,environ:[2,3],exampl:[1,4],exchang:[8,12],extract:13,factori:2,featur:5,file:[9,13],first:1,fix:10,format:3,get:7,git:3,gnu:7,guidelin:3,help:7,histor:12,histori:1,hodl:4,ingest:[1,2,12],instal:[1,7,14],interfac:1,jupyt:1,line:[0,1],linux:7,live:[8,14],maco:[7,14],market:[12,13],matplotlib:7,mean:4,messag:3,metadata:0,minute_bar_writ:2,mirror:2,miscellan:0,mode:8,model:0,move:[1,4],name:5,next:[1,9],note:[7,9,10],notebook:1,object:0,old:2,optim:4,order:[0,12],output:13,output_dir:2,over:1,overview:[4,6],packag:9,paper:8,paramet:0,parti:11,pip:7,pipelin:0,pipenv:7,polici:0,portfolio:4,previou:1,price:[1,12],process:9,pycharm:1,pypi:9,python:9,quandl:2,quantopian:2,refer:0,relat:11,releas:[9,10],requir:7,resourc:11,revers:4,run:[0,1,2],schedul:0,sdist:9,setup:1,show_progress:2,simpl:4,simul:0,slippag:0,start_sess:2,stat:12,step:1,strategi:14,structur:3,stub:9,support:8,symbol:8,tabl:6,test:12,ticker:12,trade:[0,8,14],troubleshoot:7,tutori:1,unit:12,univers:4,upcom:5,updat:[7,9],upload:9,using:1,util:[0,13],valid:12,version:10,video:14,virtualenv:7,wiki:2,window:[7,14],work:1,write:2,yahoo:2}})
\ No newline at end of file