diff --git a/asset_backtester/__init__.py b/asset_backtester/__init__.py new file mode 100644 index 0000000..216e997 --- /dev/null +++ b/asset_backtester/__init__.py @@ -0,0 +1,2 @@ +from backtester import Backtest +from signal import Signal, get_order \ No newline at end of file diff --git a/asset_backtester/backtester.py b/asset_backtester/backtester.py new file mode 100644 index 0000000..e4c4fcd --- /dev/null +++ b/asset_backtester/backtester.py @@ -0,0 +1,119 @@ +import pandas as pd +import numpy as np +import pyprind + +from strategy.strategy import Strategy + + +class Backtest: + """Processes signals from the Strategy object""" + def __init__(self, schema): + self.schema = schema + self._strategy = None + self._data = None + + @property + def strategy(self): + return self._strategy + + @strategy.setter + def strategy(self, strat): + assert isinstance(strat, Strategy) + self._strategy = strat + + @property + def data(self): + return self._data + + @data.setter + def data(self, data): + self._data = data + + def run(self, initial_capital=1_000_000): + assert self._data is not None + assert self._strategy is not None + + self.current_capital = 0 + self.current_cash = initial_capital + + self.inventory = pd.DataFrame(columns=['symbol', 'cost', 'qty']) + self.balance = pd.DataFrame() + + data_iterator = self._data.iter_dates() + monthly_iterator = self._data.iter_months() + + rebalancing_days = [] + for date, _ in monthly_iterator: + rebalancing_days.append(date) + + bar = pyprind.ProgBar(data_iterator.ngroups, bar_char='█') + + self.balance = pd.DataFrame( + { + 'capital': self.current_cash, + 'cash': self.current_cash + }, + index=[self.data.start_date - pd.Timedelta(1, unit='day')]) + + for date, stocks in data_iterator: + + if date in rebalancing_days: + self.rebalance_portfolio(stocks) + + self._update_balance(date, stocks) + + bar.update() + + self.balance['% change'] = self.balance['capital'].pct_change() + self.balance['accumulated return'] = ( + 1.0 + self.balance['% change']).cumprod() + + return self.balance + + def rebalance_portfolio(self, stocks): + money_total = self.current_cash + self.current_capital + for asset in self._strategy.assets: + stock = stocks[stocks['symbol'] == asset.symbol] + stock_price = stock[self.schema['Adj Close']].values[0] + qty = (money_total * asset.percentage) // stock_price + inventory_entry = self.inventory[self.inventory['symbol'] == + asset.symbol] + self.inventory.drop(inventory_entry.index, inplace=True) + update = pd.Series([asset.symbol, stock_price, qty]) + update.index = self.inventory.columns + self.inventory = self.inventory.append(update, ignore_index=True) + + # Update current cash + invested_capital = sum(self.inventory['cost'] * self.inventory['qty']) + self.current_cash = money_total - invested_capital + + def _update_balance(self, date, stocks): + """Updates positions and calculates statistics for the current date. + + Args: + date (pd.Timestamp): Current date. + stocks (pd.DataFrame): DataFrame of (daily/monthly) stocks. + """ + + costs = [] + + for asset in self._strategy.assets: + asset_entry = stocks[stocks['symbol'] == asset.symbol] + inventory_asset_entry = self.inventory[self.inventory['symbol'] == + asset.symbol] + cost = asset_entry[self.schema['Adj Close']].values[0] + qty = inventory_asset_entry['qty'].values[0] + costs.append(cost * qty) + + total_value = sum(costs) + self.current_capital = total_value + money_total = total_value + self.current_cash + + row = pd.Series( + { + 'total_value': total_value, + 'cash': self.current_cash, + 'capital': money_total, + }, + name=date) + self.balance = self.balance.append(row) diff --git a/asset_backtester/datahandler/__init__.py b/asset_backtester/datahandler/__init__.py new file mode 100644 index 0000000..3abd5ad --- /dev/null +++ b/asset_backtester/datahandler/__init__.py @@ -0,0 +1,2 @@ +from .schema import * +from .historical_stock_data import HistoricalStockData \ No newline at end of file diff --git a/asset_backtester/datahandler/historical_stock_data.py b/asset_backtester/datahandler/historical_stock_data.py new file mode 100644 index 0000000..6e93179 --- /dev/null +++ b/asset_backtester/datahandler/historical_stock_data.py @@ -0,0 +1,80 @@ +import os +from .schema import Schema +import pandas as pd + + +class HistoricalStockData: + """Historical Stock Data container class.""" + def __init__(self, file, schema=None, **params): + if schema: + assert isinstance(schema, Schema) + else: + self.schema = HistoricalStockData.default_schema() + + file_extension = os.path.splitext(file)[1] + + if file_extension == '.h5': + self._data = pd.read_hdf(file, **params) + elif file_extension == '.csv': + params['parse_dates'] = [self.schema.date.mapping] + self._data = pd.read_csv(file, **params) + + columns = self._data.columns + assert all((col in columns for _key, col in self.schema)) + + date_col = self.schema['date'] + + self.start_date = self._data[date_col].min() + self.end_date = self._data[date_col].max() + + def apply_filter(self, f): + """Apply Filter `f` to the data. Returns a `pd.DataFrame` with the filtered rows.""" + return self._data.query(f.query) + + def iter_dates(self): + """Returns `pd.DataFrameGroupBy` that groups contracts by date""" + return self._data.groupby(self.schema['date']) + + def iter_months(self): + """Returns `pd.DataFrameGroupBy` that groups contracts by month""" + date_col = self.schema['date'] + iterator = self._data.groupby(pd.Grouper( + key=date_col, freq="MS")).apply(lambda g: g[g[date_col] == g[ + date_col].min()]).reset_index(drop=True).groupby(date_col) + return iterator + + def __getattr__(self, attr): + """Pass method invocation to `self._data`""" + + method = getattr(self._data, attr) + if hasattr(method, '__call__'): + + def df_method(*args, **kwargs): + return method(*args, **kwargs) + + return df_method + else: + return method + + def __getitem__(self, item): + if isinstance(item, pd.Series): + return self._data[item] + else: + key = self.schema[item] + return self._data[key] + + def __setitem__(self, key, value): + self._data[key] = value + if key not in self.schema: + self.schema.update({key: key}) + + def __len__(self): + return len(self._data) + + def __repr__(self): + return self._data.__repr__() + + def default_schema(): + """Returns default schema for Historical Options Data""" + schema = Schema.canonical() + return schema diff --git a/asset_backtester/datahandler/schema.py b/asset_backtester/datahandler/schema.py new file mode 100644 index 0000000..355401b --- /dev/null +++ b/asset_backtester/datahandler/schema.py @@ -0,0 +1,163 @@ +class Schema: + """Data schema class. + Used to run validations and provide uniform access to fields in the data set. + """ + + columns = [ + "symbol", "date", "open", "close", "high", "low", "volume", "Adj Close" + ] + + def canonical(): + """Builder method that returns a `Schema` with default mappings""" + mappings = {key: key for key in Schema.columns} + return Schema(mappings) + + def __init__(self, mappings): + assert all((key in mappings for key in Schema.columns)) + + self._mappings = mappings + + def update(self, mappings): + """Update schema according to given `mappings`""" + self._mappings.update(mappings) + return self + + def __contains__(self, key): + """Returns True if key is in schema""" + return key in self._mappings.keys() + + def __getattr__(self, key): + """Returns Field object used to build Filters""" + return Field(key, self._mappings[key]) + + def __setitem__(self, key, value): + self._mappings[key] = value + + def __getitem__(self, key): + """Returns mapping of given `key`""" + return self._mappings[key] + + def __iter__(self): + return iter(self._mappings.items()) + + def __repr__(self): + return "Schema({})".format( + [Field(k, m) for k, m in self._mappings.items()]) + + def __eq__(self, other): + return self._mappings == other._mappings + + +class Field: + """Encapsulates data fields to build filters used by strategies""" + + __slots__ = ("name", "mapping") + + def __init__(self, name, mapping): + self.name = name + self.mapping = mapping + + def _create_filter(self, op, other): + if isinstance(other, Field): + query = Field._format_query(self.mapping, op, other.mapping) + else: + query = Field._format_query(self.mapping, op, other) + return Filter(query) + + def _combine_fields(self, op, other, invert=False): + if isinstance(other, Field): + name = Field._format_query(self.name, op, other.name, invert) + mapping = Field._format_query(self.mapping, op, other.mapping, + invert) + elif isinstance(other, (int, float)): + name = Field._format_query(self.name, op, other, invert) + mapping = Field._format_query(self.mapping, op, other, invert) + else: + raise TypeError + + return Field(name, mapping) + + def _format_query(left, op, right, invert=False): + if invert: + left, right = right, left + query = "{left} {op} {right}".format(left=left, op=op, right=right) + return query + + def __add__(self, value): + return self._combine_fields("+", value) + + def __radd__(self, value): + return self._combine_fields("+", value, invert=True) + + def __sub__(self, value): + return self._combine_fields("-", value) + + def __rsub__(self, value): + return self._combine_fields("-", value, invert=True) + + def __mul__(self, value): + return self._combine_fields("*", value) + + def __rmul__(self, value): + return self._combine_fields("*", value, invert=True) + + def __truediv__(self, value): + return self._combine_fields("/", value) + + def __rtruediv__(self, value): + return self._combine_fields("/", value, invert=True) + + def __lt__(self, value): + return self._create_filter("<", value) + + def __le__(self, value): + return self._create_filter("<=", value) + + def __gt__(self, value): + return self._create_filter(">", value) + + def __ge__(self, value): + return self._create_filter(">=", value) + + def __eq__(self, value): + if isinstance(value, str): + value = "'{}'".format(value) + return self._create_filter("==", value) + + def __ne__(self, value): + return self._create_filter("!=", value) + + def __repr__(self): + return "Field(name='{}', mapping='{}')".format(self.name, self.mapping) + + +class Filter: + """This class determines entry/exit conditions for strategies""" + + __slots__ = ("query") + + def __init__(self, query): + self.query = query + + def __and__(self, other): + """Returns logical *and* between `self` and `other`""" + assert isinstance(other, Filter) + new_query = "({}) & ({})".format(self.query, other.query) + return Filter(query=new_query) + + def __or__(self, other): + """Returns logical *or* between `self` and `other`""" + assert isinstance(other, Filter) + new_query = "(({}) | ({}))".format(self.query, other.query) + return Filter(query=new_query) + + def __invert__(self): + """Negates filter""" + return Filter("!({})".format(self.query)) + + def __call__(self, data): + """Returns dataframe of filtered data""" + return data.eval(self.query) + + def __repr__(self): + return "Filter(query='{}')".format(self.query) \ No newline at end of file diff --git a/asset_backtester/statistics/__init__.py b/asset_backtester/statistics/__init__.py new file mode 100644 index 0000000..bbf880d --- /dev/null +++ b/asset_backtester/statistics/__init__.py @@ -0,0 +1 @@ +from .charts import returns_chart diff --git a/asset_backtester/statistics/charts.py b/asset_backtester/statistics/charts.py new file mode 100644 index 0000000..00e7f5a --- /dev/null +++ b/asset_backtester/statistics/charts.py @@ -0,0 +1,48 @@ +"""Generates charts from a portfolio report""" + +import altair as alt + + +def returns_chart(report): + # Time interval selector + time_interval = alt.selection(type='interval', encodings=['x']) + + # Area plot + areas = alt.Chart().mark_area(opacity=0.7).encode( + x='index:T', + y=alt.Y('accumulated return:Q', axis=alt.Axis(format='%'))) + + # Nearest point selector + nearest = alt.selection(type='single', + nearest=True, + on='mouseover', + fields=['index'], + empty='none') + + points = areas.mark_point().encode( + opacity=alt.condition(nearest, alt.value(1), alt.value(0))) + + # Transparent date selector + selectors = alt.Chart().mark_point().encode( + x='index:T', + opacity=alt.value(0), + ).add_selection(nearest) + + text = areas.mark_text( + align='left', dx=5, dy=-5).encode(text=alt.condition( + nearest, 'accumulated return:Q', alt.value(' '), format='.2%')) + + layered = alt.layer(selectors, + points, + text, + areas.encode( + alt.X('index:T', + axis=alt.Axis(title='date'), + scale=alt.Scale(domain=time_interval))), + width=700, + height=350, + title='Wealth over time') + + lower = areas.properties(width=700, height=70).add_selection(time_interval) + + return alt.vconcat(layered, lower, data=report.reset_index()) \ No newline at end of file diff --git a/asset_backtester/strategy/__init__.py b/asset_backtester/strategy/__init__.py new file mode 100644 index 0000000..140f8c6 --- /dev/null +++ b/asset_backtester/strategy/__init__.py @@ -0,0 +1,2 @@ +from .strategy import Strategy +from .asset import Asset \ No newline at end of file diff --git a/asset_backtester/strategy/asset.py b/asset_backtester/strategy/asset.py new file mode 100644 index 0000000..d01e866 --- /dev/null +++ b/asset_backtester/strategy/asset.py @@ -0,0 +1,16 @@ +from .direction import Direction +from datahandler.schema import Schema + + +class Asset: + """Strategy Leg data class""" + def __init__(self, symbol, percentage, direction=Direction.BUY): + assert isinstance(direction, Direction) + + self.symbol = symbol + self.percentage = percentage + self.direction = direction + + def __repr__(self): + return "Asset(symbol={}, percentage={}, direction={})".format( + self.symbol, self.percentage, self.direction) diff --git a/asset_backtester/strategy/direction.py b/asset_backtester/strategy/direction.py new file mode 100644 index 0000000..85f85c2 --- /dev/null +++ b/asset_backtester/strategy/direction.py @@ -0,0 +1,10 @@ +from enum import Enum + + +class Direction(Enum): + BUY = 'ask' # Schema field for BUY price + SELL = 'bid' # Schema field for SELL price + + def __invert__(self): + flip = Direction.SELL if self == Direction.BUY else Direction.BUY + return flip \ No newline at end of file diff --git a/asset_backtester/strategy/strategy.py b/asset_backtester/strategy/strategy.py new file mode 100644 index 0000000..332c375 --- /dev/null +++ b/asset_backtester/strategy/strategy.py @@ -0,0 +1,37 @@ +import math +from functools import reduce + +import pandas as pd +import numpy as np + +from .direction import Direction +from .asset import Asset + + +class Strategy: + def __init__(self, direction=Direction.BUY): + assert isinstance(direction, Direction) + self.direction = direction + self.assets = [] + + def add_asset(self, asset): + """Adds asset to the strategy""" + assert isinstance(asset, Asset) + self.assets.append(asset) + return self + + def add_assets(self, assets): + """Adds assets to the strategy""" + for asset in assets: + self.add_asset(asset) + return self + + def remove_asset(self, asset_number): + """Removes asset from the strategy""" + self.assets.pop(asset_number) + return self + + def clear_assets(self): + """Removes *all* assets from the strategy""" + self.assets = [] + return self diff --git a/asset_backtester/test.ipynb b/asset_backtester/test.ipynb new file mode 100644 index 0000000..e24fb30 --- /dev/null +++ b/asset_backtester/test.ipynb @@ -0,0 +1,2788 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from backtester import Backtest\n", + "from strategy.strategy import Strategy\n", + "from strategy.asset import Asset\n", + "from strategy.direction import Direction\n", + "from datahandler import HistoricalStockData\n", + "from statistics.charts import returns_chart" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "%config InlineBackend.figure_format=\"retina\"\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas_datareader.data as web\n", + "import datetime" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "start = datetime.datetime(2019, 1, 1)\n", + "end = datetime.datetime(2019, 12, 31)\n", + "\n", + "tickers = [\"VOO\", \"TUR\", \"RSX\", \"EWY\", \"EWS\", \"VTIP\", \"TLT\", \"BWX\", \"PDBC\", \"IAU\", \"VNQI\"]\n", + "portfolio = [0.1, 0.05, 0.05, 0.05, 0.05, 0.10, 0.20, 0.10, 0.05, 0.15, 0.10, 1]\n", + "\n", + "dfs = []\n", + "for ticker in tickers:\n", + " df = web.DataReader(ticker, 'yahoo', start, end).reset_index().rename(columns={'Date': 'date', 'High': 'high', 'Low': 'low', 'Open': 'open', 'Close': 'close', 'Volume': 'volume'})\n", + " df['symbol'] = ticker\n", + " dfs.append(df)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "portfolio = pd.concat(dfs)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "portfolio = portfolio.sort_values(by='date').reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "portfolio.to_csv(\"data/portfolio.csv\", index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "data = HistoricalStockData(\"data/portfolio.csv\")\n", + "schema = data.schema" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
datehighlowopenclosevolumeAdj Closesymbol
02019-01-02230.850006226.020004226.179993229.9900054891300.0225.350449VOO
12019-01-0215.33300014.89000014.92000015.1200001382500.014.909319PDBC
22019-01-02122.160004121.339996121.660004122.15000219841500.0119.344078TLT
32019-01-0247.91000047.86000147.86000147.910000771400.046.986149VTIP
42019-01-0222.10000021.85000021.93000022.100000876200.021.076557EWS
...........................
27672019-12-3127.18000027.00000027.11000127.090000132900.027.090000TUR
27682019-12-3116.65000016.51000016.52000016.5599991780800.016.559999PDBC
27692019-12-31295.989990294.170013294.529999295.7999882512700.0295.799988VOO
27702019-12-31136.460007135.380005136.210007135.47999610707400.0135.479996TLT
27712019-12-3159.09000058.84999858.95000159.090000219900.059.090000VNQI
\n", + "

2772 rows × 8 columns

\n", + "
" + ], + "text/plain": [ + " date high low open close volume \\\n", + "0 2019-01-02 230.850006 226.020004 226.179993 229.990005 4891300.0 \n", + "1 2019-01-02 15.333000 14.890000 14.920000 15.120000 1382500.0 \n", + "2 2019-01-02 122.160004 121.339996 121.660004 122.150002 19841500.0 \n", + "3 2019-01-02 47.910000 47.860001 47.860001 47.910000 771400.0 \n", + "4 2019-01-02 22.100000 21.850000 21.930000 22.100000 876200.0 \n", + "... ... ... ... ... ... ... \n", + "2767 2019-12-31 27.180000 27.000000 27.110001 27.090000 132900.0 \n", + "2768 2019-12-31 16.650000 16.510000 16.520000 16.559999 1780800.0 \n", + "2769 2019-12-31 295.989990 294.170013 294.529999 295.799988 2512700.0 \n", + "2770 2019-12-31 136.460007 135.380005 136.210007 135.479996 10707400.0 \n", + "2771 2019-12-31 59.090000 58.849998 58.950001 59.090000 219900.0 \n", + "\n", + " Adj Close symbol \n", + "0 225.350449 VOO \n", + "1 14.909319 PDBC \n", + "2 119.344078 TLT \n", + "3 46.986149 VTIP \n", + "4 21.076557 EWS \n", + "... ... ... \n", + "2767 27.090000 TUR \n", + "2768 16.559999 PDBC \n", + "2769 295.799988 VOO \n", + "2770 135.479996 TLT \n", + "2771 59.090000 VNQI \n", + "\n", + "[2772 rows x 8 columns]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "strat = Strategy()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "asset_1 = Asset('VOO', 0.1)\n", + "asset_2 = Asset('TUR', 0.05)\n", + "asset_3 = Asset('RSX', 0.05)\n", + "asset_4 = Asset('EWY', 0.05)\n", + "asset_5 = Asset('EWS', 0.05)\n", + "asset_6 = Asset('VTIP', 0.10)\n", + "asset_7 = Asset('TLT', 0.20)\n", + "asset_8 = Asset('BWX', 0.10)\n", + "asset_9 = Asset('PDBC', 0.05)\n", + "asset_10 = Asset('IAU', 0.15)\n", + "asset_11 = Asset('VNQI', 0.10)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "strat.add_assets([\n", + " asset_1, asset_2, asset_3, asset_4, asset_5, asset_6, asset_7, asset_8,\n", + " asset_9, asset_10, asset_11\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "bt = Backtest(schema)\n", + "bt.strategy = strat\n", + "bt.data = data\n", + "bt.stop_if_broke = False" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "0% [██████████████████████████████] 100% | ETA: 00:00:00\n", + "Total time elapsed: 00:00:04\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
capitalcashtotal_value% changeaccumulated return
2019-01-011.000000e+061000000.000000NaNNaNNaN
2019-01-021.000000e+06403.1126559.995969e+050.0000001.000000
2019-01-039.987008e+05403.1126559.982976e+05-0.0012990.998701
2019-01-041.008706e+06403.1126551.008302e+060.0100181.008706
2019-01-071.010929e+06403.1126551.010526e+060.0022051.010929
..................
2019-12-241.161007e+06447.3096371.160560e+060.0026501.161007
2019-12-261.166209e+06447.3096371.165761e+060.0044801.166209
2019-12-271.168988e+06447.3096371.168541e+060.0023831.168988
2019-12-301.166540e+06447.3096371.166092e+06-0.0020941.166540
2019-12-311.166803e+06447.3096371.166356e+060.0002261.166803
\n", + "

253 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " capital cash total_value % change \\\n", + "2019-01-01 1.000000e+06 1000000.000000 NaN NaN \n", + "2019-01-02 1.000000e+06 403.112655 9.995969e+05 0.000000 \n", + "2019-01-03 9.987008e+05 403.112655 9.982976e+05 -0.001299 \n", + "2019-01-04 1.008706e+06 403.112655 1.008302e+06 0.010018 \n", + "2019-01-07 1.010929e+06 403.112655 1.010526e+06 0.002205 \n", + "... ... ... ... ... \n", + "2019-12-24 1.161007e+06 447.309637 1.160560e+06 0.002650 \n", + "2019-12-26 1.166209e+06 447.309637 1.165761e+06 0.004480 \n", + "2019-12-27 1.168988e+06 447.309637 1.168541e+06 0.002383 \n", + "2019-12-30 1.166540e+06 447.309637 1.166092e+06 -0.002094 \n", + "2019-12-31 1.166803e+06 447.309637 1.166356e+06 0.000226 \n", + "\n", + " accumulated return \n", + "2019-01-01 NaN \n", + "2019-01-02 1.000000 \n", + "2019-01-03 0.998701 \n", + "2019-01-04 1.008706 \n", + "2019-01-07 1.010929 \n", + "... ... \n", + "2019-12-24 1.161007 \n", + "2019-12-26 1.166209 \n", + "2019-12-27 1.168988 \n", + "2019-12-30 1.166540 \n", + "2019-12-31 1.166803 \n", + "\n", + "[253 rows x 5 columns]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bt.run(initial_capital=1_000_000)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.vegalite.v3+json": { + "$schema": "https://vega.github.io/schema/vega-lite/v3.4.0.json", + "config": { + "mark": { + "tooltip": null + }, + "view": { + "height": 300, + "width": 400 + } + }, + "data": { + "name": "data-43bc2ed72dd9ab9ca7c17b62ef7caa1e" + }, + "datasets": { + "data-43bc2ed72dd9ab9ca7c17b62ef7caa1e": [ + { + "% change": null, + "accumulated return": null, + "capital": 1000000, + "cash": 1000000, + "index": "2019-01-01T00:00:00", + "total_value": null + }, + { + "% change": 0, + "accumulated return": 1, + "capital": 1000000, + "cash": 403.1126546859741, + "index": "2019-01-02T00:00:00", + "total_value": 999596.887345314 + }, + { + "% change": -0.0012992443809509702, + "accumulated return": 0.998700755619049, + "capital": 998700.7556190491, + "cash": 403.1126546859741, + "index": "2019-01-03T00:00:00", + "total_value": 998297.6429643631 + }, + { + "% change": 0.010017772279682369, + "accumulated return": 1.0087055123643873, + "capital": 1008705.5123643875, + "cash": 403.1126546859741, + "index": "2019-01-04T00:00:00", + "total_value": 1008302.3997097015 + }, + { + "% change": 0.002204660702090022, + "accumulated return": 1.0109293657674787, + "capital": 1010929.365767479, + "cash": 403.1126546859741, + "index": "2019-01-07T00:00:00", + "total_value": 1010526.253112793 + }, + { + "% change": 0.000515881069494295, + "accumulated return": 1.011450885089874, + "capital": 1011450.8850898743, + "cash": 403.1126546859741, + "index": "2019-01-08T00:00:00", + "total_value": 1011047.7724351883 + }, + { + "% change": 0.0068216669096126115, + "accumulated return": 1.01835066612339, + "capital": 1018350.6661233902, + "cash": 403.1126546859741, + "index": "2019-01-09T00:00:00", + "total_value": 1017947.5534687042 + }, + { + "% change": 0.000769932925444472, + "accumulated return": 1.0191347278308869, + "capital": 1019134.7278308868, + "cash": 403.1126546859741, + "index": "2019-01-10T00:00:00", + "total_value": 1018731.6151762009 + }, + { + "% change": -0.0004622806127192458, + "accumulated return": 1.0186636016044617, + "capital": 1018663.6016044617, + "cash": 403.1126546859741, + "index": "2019-01-11T00:00:00", + "total_value": 1018260.4889497757 + }, + { + "% change": -0.002552297189245545, + "accumulated return": 1.0160636693573, + "capital": 1016063.6693572998, + "cash": 403.1126546859741, + "index": "2019-01-14T00:00:00", + "total_value": 1015660.5567026138 + }, + { + "% change": 0.002386746968450426, + "accumulated return": 1.0184887562398912, + "capital": 1018488.756239891, + "cash": 403.1126546859741, + "index": "2019-01-15T00:00:00", + "total_value": 1018085.6435852051 + }, + { + "% change": 0.006485368345748643, + "accumulated return": 1.0250940309801102, + "capital": 1025094.0309801102, + "cash": 403.1126546859741, + "index": "2019-01-16T00:00:00", + "total_value": 1024690.9183254242 + }, + { + "% change": 0.0012639786654555785, + "accumulated return": 1.0263897279653549, + "capital": 1026389.7279653549, + "cash": 403.1126546859741, + "index": "2019-01-17T00:00:00", + "total_value": 1025986.615310669 + }, + { + "% change": 0.00211310821247368, + "accumulated return": 1.028558600528717, + "capital": 1028558.600528717, + "cash": 403.1126546859741, + "index": "2019-01-18T00:00:00", + "total_value": 1028155.4878740311 + }, + { + "% change": -0.004414434088781394, + "accumulated return": 1.0240180963802339, + "capital": 1024018.0963802338, + "cash": 403.1126546859741, + "index": "2019-01-22T00:00:00", + "total_value": 1023614.9837255478 + }, + { + "% change": 0.0035960312390337368, + "accumulated return": 1.027700497444153, + "capital": 1027700.4974441528, + "cash": 403.1126546859741, + "index": "2019-01-23T00:00:00", + "total_value": 1027297.3847894669 + }, + { + "% change": 0.0037492236322473893, + "accumulated return": 1.031553576436043, + "capital": 1031553.5764360428, + "cash": 403.1126546859741, + "index": "2019-01-24T00:00:00", + "total_value": 1031150.4637813568 + }, + { + "% change": 0.006059688086419657, + "accumulated return": 1.037804469353676, + "capital": 1037804.4693536758, + "cash": 403.1126546859741, + "index": "2019-01-25T00:00:00", + "total_value": 1037401.3566989899 + }, + { + "% change": -0.0028227551667387996, + "accumulated return": 1.0348750014257433, + "capital": 1034875.0014257431, + "cash": 403.1126546859741, + "index": "2019-01-28T00:00:00", + "total_value": 1034471.8887710571 + }, + { + "% change": 0.005208742634250418, + "accumulated return": 1.0402653989667896, + "capital": 1040265.3989667892, + "cash": 403.1126546859741, + "index": "2019-01-29T00:00:00", + "total_value": 1039862.2863121033 + }, + { + "% change": 0.009722744846105913, + "accumulated return": 1.0503796340131764, + "capital": 1050379.634013176, + "cash": 403.1126546859741, + "index": "2019-01-30T00:00:00", + "total_value": 1049976.52135849 + }, + { + "% change": 0.002270120916235019, + "accumulated return": 1.052764122790337, + "capital": 1052764.1227903366, + "cash": 403.1126546859741, + "index": "2019-01-31T00:00:00", + "total_value": 1052361.0101356506 + }, + { + "% change": 0, + "accumulated return": 1.052764122790337, + "capital": 1052764.1227903366, + "cash": 425.5575408935547, + "index": "2019-02-01T00:00:00", + "total_value": 1052338.565249443 + }, + { + "% change": -0.0009864434445734371, + "accumulated return": 1.0517256305227285, + "capital": 1051725.630522728, + "cash": 425.5575408935547, + "index": "2019-02-04T00:00:00", + "total_value": 1051300.0729818344 + }, + { + "% change": 0.003959504691010585, + "accumulated return": 1.0558899430904394, + "capital": 1055889.9430904388, + "cash": 425.5575408935547, + "index": "2019-02-05T00:00:00", + "total_value": 1055464.3855495453 + }, + { + "% change": -0.003932425592744315, + "accumulated return": 1.051737734455109, + "capital": 1051737.7344551086, + "cash": 425.5575408935547, + "index": "2019-02-06T00:00:00", + "total_value": 1051312.176914215 + }, + { + "% change": -0.002526600044983729, + "accumulated return": 1.0490804138479237, + "capital": 1049080.4138479233, + "cash": 425.5575408935547, + "index": "2019-02-07T00:00:00", + "total_value": 1048654.8563070297 + }, + { + "% change": 0.001212175885912048, + "accumulated return": 1.0503520838279727, + "capital": 1050352.0838279724, + "cash": 425.5575408935547, + "index": "2019-02-08T00:00:00", + "total_value": 1049926.5262870789 + }, + { + "% change": -0.0023340658306397755, + "accumulated return": 1.0479004929189686, + "capital": 1047900.4929189682, + "cash": 425.5575408935547, + "index": "2019-02-11T00:00:00", + "total_value": 1047474.9353780746 + }, + { + "% change": 0.0024438611626396156, + "accumulated return": 1.0504614162359243, + "capital": 1050461.4162359238, + "cash": 425.5575408935547, + "index": "2019-02-12T00:00:00", + "total_value": 1050035.8586950302 + }, + { + "% change": -0.004320522526899739, + "accumulated return": 1.0459228740234379, + "capital": 1045922.8740234375, + "cash": 425.5575408935547, + "index": "2019-02-13T00:00:00", + "total_value": 1045497.316482544 + }, + { + "% change": 0.0038570903613412977, + "accumulated return": 1.04995709305954, + "capital": 1049957.0930595398, + "cash": 425.5575408935547, + "index": "2019-02-14T00:00:00", + "total_value": 1049531.5355186462 + }, + { + "% change": 0.0047674539070265975, + "accumulated return": 1.0549627151050571, + "capital": 1054962.7151050568, + "cash": 425.5575408935547, + "index": "2019-02-15T00:00:00", + "total_value": 1054537.1575641632 + }, + { + "% change": 0.0043089584669127046, + "accumulated return": 1.0595085056285862, + "capital": 1059508.5056285858, + "cash": 425.5575408935547, + "index": "2019-02-19T00:00:00", + "total_value": 1059082.9480876923 + }, + { + "% change": 0.0003561079808773737, + "accumulated return": 1.059885805063248, + "capital": 1059885.8050632477, + "cash": 425.5575408935547, + "index": "2019-02-20T00:00:00", + "total_value": 1059460.2475223541 + }, + { + "% change": -0.004669549547527185, + "accumulated return": 1.0549366157817845, + "capital": 1054936.615781784, + "cash": 425.5575408935547, + "index": "2019-02-21T00:00:00", + "total_value": 1054511.0582408905 + }, + { + "% change": 0.004504687338915181, + "accumulated return": 1.0596887753982547, + "capital": 1059688.7753982544, + "cash": 425.5575408935547, + "index": "2019-02-22T00:00:00", + "total_value": 1059263.2178573608 + }, + { + "% change": 0.0002054561291975343, + "accumulated return": 1.0599064949522021, + "capital": 1059906.4949522018, + "cash": 425.5575408935547, + "index": "2019-02-25T00:00:00", + "total_value": 1059480.9374113083 + }, + { + "% change": 0.0014998989319479072, + "accumulated return": 1.0614962475719456, + "capital": 1061496.2475719452, + "cash": 425.5575408935547, + "index": "2019-02-26T00:00:00", + "total_value": 1061070.6900310516 + }, + { + "% change": -0.005199261731887006, + "accumulated return": 1.055977250753403, + "capital": 1055977.2507534027, + "cash": 425.5575408935547, + "index": "2019-02-27T00:00:00", + "total_value": 1055551.6932125092 + }, + { + "% change": -0.005526585576125731, + "accumulated return": 1.0501413021106725, + "capital": 1050141.302110672, + "cash": 425.5575408935547, + "index": "2019-02-28T00:00:00", + "total_value": 1049715.7445697784 + }, + { + "% change": 0, + "accumulated return": 1.0501413021106725, + "capital": 1050141.302110672, + "cash": 432.1398468017578, + "index": "2019-03-01T00:00:00", + "total_value": 1049709.1622638702 + }, + { + "% change": 0.001410071459587936, + "accumulated return": 1.0516220763893132, + "capital": 1051622.0763893127, + "cash": 432.1398468017578, + "index": "2019-03-04T00:00:00", + "total_value": 1051189.936542511 + }, + { + "% change": 0.0009535955225887793, + "accumulated return": 1.0526248984928135, + "capital": 1052624.898492813, + "cash": 432.1398468017578, + "index": "2019-03-05T00:00:00", + "total_value": 1052192.7586460114 + }, + { + "% change": -0.0018873316464007583, + "accumulated return": 1.0506382462100987, + "capital": 1050638.2462100983, + "cash": 432.1398468017578, + "index": "2019-03-06T00:00:00", + "total_value": 1050206.1063632965 + }, + { + "% change": -0.0030519981014746067, + "accumulated return": 1.0474317002773288, + "capital": 1047431.7002773285, + "cash": 432.1398468017578, + "index": "2019-03-07T00:00:00", + "total_value": 1046999.5604305267 + }, + { + "% change": 0.001864504454123006, + "accumulated return": 1.0493846413478856, + "capital": 1049384.6413478851, + "cash": 432.1398468017578, + "index": "2019-03-08T00:00:00", + "total_value": 1048952.5015010834 + }, + { + "% change": 0.0025736546975105856, + "accumulated return": 1.052085395059586, + "capital": 1052085.3950595856, + "cash": 432.1398468017578, + "index": "2019-03-11T00:00:00", + "total_value": 1051653.2552127838 + }, + { + "% change": 0.00489602650804688, + "accumulated return": 1.0572364330425268, + "capital": 1057236.4330425262, + "cash": 432.1398468017578, + "index": "2019-03-12T00:00:00", + "total_value": 1056804.2931957245 + }, + { + "% change": 0.002190652798305992, + "accumulated return": 1.0595524709930424, + "capital": 1059552.470993042, + "cash": 432.1398468017578, + "index": "2019-03-13T00:00:00", + "total_value": 1059120.3311462402 + }, + { + "% change": -0.004187429198914905, + "accumulated return": 1.0551156700382236, + "capital": 1055115.6700382233, + "cash": 432.1398468017578, + "index": "2019-03-14T00:00:00", + "total_value": 1054683.5301914215 + }, + { + "% change": 0.006373858230571017, + "accumulated return": 1.0618408277359013, + "capital": 1061840.8277359009, + "cash": 432.1398468017578, + "index": "2019-03-15T00:00:00", + "total_value": 1061408.6878890991 + }, + { + "% change": 0.003334568973422991, + "accumulated return": 1.0653816092147832, + "capital": 1065381.6092147827, + "cash": 432.1398468017578, + "index": "2019-03-18T00:00:00", + "total_value": 1064949.469367981 + }, + { + "% change": 0.0005757819672678188, + "accumulated return": 1.065995036733628, + "capital": 1065995.0367336273, + "cash": 432.1398468017578, + "index": "2019-03-19T00:00:00", + "total_value": 1065562.8968868256 + }, + { + "% change": 0.004912990238142845, + "accumulated return": 1.071232259943009, + "capital": 1071232.2599430084, + "cash": 432.1398468017578, + "index": "2019-03-20T00:00:00", + "total_value": 1070800.1200962067 + }, + { + "% change": 0.0008708419472425177, + "accumulated return": 1.072165133930207, + "capital": 1072165.1339302063, + "cash": 432.1398468017578, + "index": "2019-03-21T00:00:00", + "total_value": 1071732.9940834045 + }, + { + "% change": -0.008440563116746014, + "accumulated return": 1.0631154564456946, + "capital": 1063115.456445694, + "cash": 432.1398468017578, + "index": "2019-03-22T00:00:00", + "total_value": 1062683.3165988922 + }, + { + "% change": 0.005527216243250699, + "accumulated return": 1.0689915254650122, + "capital": 1068991.5254650116, + "cash": 432.1398468017578, + "index": "2019-03-25T00:00:00", + "total_value": 1068559.3856182098 + }, + { + "% change": 0.00045022533119642993, + "accumulated return": 1.0694728125286108, + "capital": 1069472.8125286102, + "cash": 432.1398468017578, + "index": "2019-03-26T00:00:00", + "total_value": 1069040.6726818085 + }, + { + "% change": -0.0049844299241291745, + "accumulated return": 1.0641421002388005, + "capital": 1064142.1002388, + "cash": 432.1398468017578, + "index": "2019-03-27T00:00:00", + "total_value": 1063709.9603919983 + }, + { + "% change": -0.0007612727998299595, + "accumulated return": 1.0633319978027347, + "capital": 1063331.9978027344, + "cash": 432.1398468017578, + "index": "2019-03-28T00:00:00", + "total_value": 1062899.8579559326 + }, + { + "% change": 0.002263024520113177, + "accumulated return": 1.0657383441867831, + "capital": 1065738.3441867828, + "cash": 432.1398468017578, + "index": "2019-03-29T00:00:00", + "total_value": 1065306.204339981 + }, + { + "% change": 0, + "accumulated return": 1.0657383441867831, + "capital": 1065738.3441867828, + "cash": 461.3523693084717, + "index": "2019-04-01T00:00:00", + "total_value": 1065276.9918174744 + }, + { + "% change": 0.00023805719182456997, + "accumulated return": 1.06599205086422, + "capital": 1065992.0508642197, + "cash": 461.3523693084717, + "index": "2019-04-02T00:00:00", + "total_value": 1065530.6984949112 + }, + { + "% change": -4.527556505629082e-05, + "accumulated return": 1.0659437874717717, + "capital": 1065943.7874717712, + "cash": 461.3523693084717, + "index": "2019-04-03T00:00:00", + "total_value": 1065482.4351024628 + }, + { + "% change": 0.0034638367864971986, + "accumulated return": 1.0696360427751546, + "capital": 1069636.042775154, + "cash": 461.3523693084717, + "index": "2019-04-04T00:00:00", + "total_value": 1069174.6904058456 + }, + { + "% change": 0.0009250940625449289, + "accumulated return": 1.0706255567274099, + "capital": 1070625.5567274094, + "cash": 461.3523693084717, + "index": "2019-04-05T00:00:00", + "total_value": 1070164.204358101 + }, + { + "% change": -0.0006301699815962625, + "accumulated return": 1.0699508806400304, + "capital": 1069950.88064003, + "cash": 461.3523693084717, + "index": "2019-04-08T00:00:00", + "total_value": 1069489.5282707214 + }, + { + "% change": 0.00030253032429405913, + "accumulated return": 1.0702745732269292, + "capital": 1070274.5732269287, + "cash": 461.3523693084717, + "index": "2019-04-09T00:00:00", + "total_value": 1069813.2208576202 + }, + { + "% change": 0.0039583119836701375, + "accumulated return": 1.0745110538959508, + "capital": 1074511.0538959503, + "cash": 461.3523693084717, + "index": "2019-04-10T00:00:00", + "total_value": 1074049.7015266418 + }, + { + "% change": -0.0070380309734092705, + "accumulated return": 1.0669486118173606, + "capital": 1066948.61181736, + "cash": 461.3523693084717, + "index": "2019-04-11T00:00:00", + "total_value": 1066487.2594480515 + }, + { + "% change": 0.00042343337306571804, + "accumulated return": 1.0674003934669503, + "capital": 1067400.3934669495, + "cash": 461.3523693084717, + "index": "2019-04-12T00:00:00", + "total_value": 1066939.041097641 + }, + { + "% change": -0.0009940060537210194, + "accumulated return": 1.0663393910141, + "capital": 1066339.3910140991, + "cash": 461.3523693084717, + "index": "2019-04-15T00:00:00", + "total_value": 1065878.0386447906 + }, + { + "% change": -0.0009944646422330727, + "accumulated return": 1.065278954193116, + "capital": 1065278.9541931152, + "cash": 461.3523693084717, + "index": "2019-04-16T00:00:00", + "total_value": 1064817.6018238068 + }, + { + "% change": 0.00032101432980180533, + "accumulated return": 1.0656209240026482, + "capital": 1065620.9240026474, + "cash": 461.3523693084717, + "index": "2019-04-17T00:00:00", + "total_value": 1065159.571633339 + }, + { + "% change": -0.0010230355131952695, + "accumulated return": 1.0645307559537895, + "capital": 1064530.7559537888, + "cash": 461.3523693084717, + "index": "2019-04-18T00:00:00", + "total_value": 1064069.4035844803 + }, + { + "% change": -0.0011002300970462953, + "accumulated return": 1.0633595271768577, + "capital": 1063359.527176857, + "cash": 461.3523693084717, + "index": "2019-04-22T00:00:00", + "total_value": 1062898.1748075485 + }, + { + "% change": 0.0009174984367859018, + "accumulated return": 1.0643351578807838, + "capital": 1064335.157880783, + "cash": 461.3523693084717, + "index": "2019-04-23T00:00:00", + "total_value": 1063873.8055114746 + }, + { + "% change": -0.001499850746105147, + "accumulated return": 1.0627388140001304, + "capital": 1062738.8140001297, + "cash": 461.3523693084717, + "index": "2019-04-24T00:00:00", + "total_value": 1062277.4616308212 + }, + { + "% change": -0.002033052367217736, + "accumulated return": 1.0605782103385932, + "capital": 1060578.2103385925, + "cash": 461.3523693084717, + "index": "2019-04-25T00:00:00", + "total_value": 1060116.857969284 + }, + { + "% change": 0.0025281679793258682, + "accumulated return": 1.063259530209542, + "capital": 1063259.5302095413, + "cash": 461.3523693084717, + "index": "2019-04-26T00:00:00", + "total_value": 1062798.1778402328 + }, + { + "% change": -0.0002420440180671557, + "accumulated return": 1.063002174600602, + "capital": 1063002.1746006012, + "cash": 461.3523693084717, + "index": "2019-04-29T00:00:00", + "total_value": 1062540.8222312927 + }, + { + "% change": 0.0015283779599508662, + "accumulated return": 1.0646268436956414, + "capital": 1064626.8436956406, + "cash": 461.3523693084717, + "index": "2019-04-30T00:00:00", + "total_value": 1064165.491326332 + }, + { + "% change": 0, + "accumulated return": 1.0646268436956414, + "capital": 1064626.8436956406, + "cash": 251.68225955963135, + "index": "2019-05-01T00:00:00", + "total_value": 1064375.161436081 + }, + { + "% change": -0.0026638972779746695, + "accumulated return": 1.061790787144662, + "capital": 1061790.787144661, + "cash": 251.68225955963135, + "index": "2019-05-02T00:00:00", + "total_value": 1061539.1048851013 + }, + { + "% change": 0.004486124545319603, + "accumulated return": 1.0665541128568659, + "capital": 1066554.112856865, + "cash": 251.68225955963135, + "index": "2019-05-03T00:00:00", + "total_value": 1066302.4305973053 + }, + { + "% change": -0.004424768493704878, + "accumulated return": 1.0618348578214654, + "capital": 1061834.8578214645, + "cash": 251.68225955963135, + "index": "2019-05-06T00:00:00", + "total_value": 1061583.175561905 + }, + { + "% change": -0.003834693216600016, + "accumulated return": 1.0577630468950279, + "capital": 1057763.0468950272, + "cash": 251.68225955963135, + "index": "2019-05-07T00:00:00", + "total_value": 1057511.3646354675 + }, + { + "% change": -0.0017667297925600955, + "accumulated return": 1.0558942654066092, + "capital": 1055894.2654066086, + "cash": 251.68225955963135, + "index": "2019-05-08T00:00:00", + "total_value": 1055642.583147049 + }, + { + "% change": -0.0026526704535170254, + "accumulated return": 1.053093325886727, + "capital": 1053093.3258867264, + "cash": 251.68225955963135, + "index": "2019-05-09T00:00:00", + "total_value": 1052841.6436271667 + }, + { + "% change": 0.0035881091587932623, + "accumulated return": 1.0568719396944053, + "capital": 1056871.9396944046, + "cash": 251.68225955963135, + "index": "2019-05-10T00:00:00", + "total_value": 1056620.257434845 + }, + { + "% change": -0.006400473070178547, + "accumulated return": 1.050107459305764, + "capital": 1050107.4593057632, + "cash": 251.68225955963135, + "index": "2019-05-13T00:00:00", + "total_value": 1049855.7770462036 + }, + { + "% change": 0.004818398138242808, + "accumulated return": 1.0551672951326379, + "capital": 1055167.295132637, + "cash": 251.68225955963135, + "index": "2019-05-14T00:00:00", + "total_value": 1054915.6128730774 + }, + { + "% change": 0.0027249319157145457, + "accumulated return": 1.058042554171563, + "capital": 1058042.5541715622, + "cash": 251.68225955963135, + "index": "2019-05-15T00:00:00", + "total_value": 1057790.8719120026 + }, + { + "% change": -0.0009949939526712193, + "accumulated return": 1.0569898082284934, + "capital": 1056989.8082284927, + "cash": 251.68225955963135, + "index": "2019-05-16T00:00:00", + "total_value": 1056738.125968933 + }, + { + "% change": -0.005294795774057559, + "accumulated return": 1.0513932630586633, + "capital": 1051393.2630586626, + "cash": 251.68225955963135, + "index": "2019-05-17T00:00:00", + "total_value": 1051141.580799103 + }, + { + "% change": -0.0005803720056829498, + "accumulated return": 1.0507830638418205, + "capital": 1050783.0638418198, + "cash": 251.68225955963135, + "index": "2019-05-20T00:00:00", + "total_value": 1050531.3815822601 + }, + { + "% change": 0.0013346120211878976, + "accumulated return": 1.0521854515504845, + "capital": 1052185.4515504837, + "cash": 251.68225955963135, + "index": "2019-05-21T00:00:00", + "total_value": 1051933.769290924 + }, + { + "% change": -0.0010325614962242158, + "accumulated return": 1.051099005366326, + "capital": 1051099.0053663254, + "cash": 251.68225955963135, + "index": "2019-05-22T00:00:00", + "total_value": 1050847.3231067657 + }, + { + "% change": 7.079657299513542e-05, + "accumulated return": 1.0511734195737845, + "capital": 1051173.4195737839, + "cash": 251.68225955963135, + "index": "2019-05-23T00:00:00", + "total_value": 1050921.7373142242 + }, + { + "% change": 0.0041636712077237625, + "accumulated return": 1.0555501600751884, + "capital": 1055550.1600751877, + "cash": 251.68225955963135, + "index": "2019-05-24T00:00:00", + "total_value": 1055298.477815628 + }, + { + "% change": -0.0005762541240680319, + "accumulated return": 1.0549418949422844, + "capital": 1054941.8949422836, + "cash": 251.68225955963135, + "index": "2019-05-28T00:00:00", + "total_value": 1054690.212682724 + }, + { + "% change": 0.00099367124546057, + "accumulated return": 1.0559901603689203, + "capital": 1055990.1603689194, + "cash": 251.68225955963135, + "index": "2019-05-29T00:00:00", + "total_value": 1055738.4781093597 + }, + { + "% change": 0.004710763757681091, + "accumulated return": 1.060964680544854, + "capital": 1060964.6805448532, + "cash": 251.68225955963135, + "index": "2019-05-30T00:00:00", + "total_value": 1060712.9982852936 + }, + { + "% change": 0.003319107927187037, + "accumulated return": 1.064486136826516, + "capital": 1064486.1368265152, + "cash": 251.68225955963135, + "index": "2019-05-31T00:00:00", + "total_value": 1064234.4545669556 + }, + { + "% change": 0, + "accumulated return": 1.064486136826516, + "capital": 1064486.1368265152, + "cash": 366.54854106903076, + "index": "2019-06-03T00:00:00", + "total_value": 1064119.5882854462 + }, + { + "% change": 0.00277191804393917, + "accumulated return": 1.0674368051567085, + "capital": 1067436.8051567078, + "cash": 366.54854106903076, + "index": "2019-06-04T00:00:00", + "total_value": 1067070.2566156387 + }, + { + "% change": -0.001634073655202739, + "accumulated return": 1.065692534794808, + "capital": 1065692.5347948074, + "cash": 366.54854106903076, + "index": "2019-06-05T00:00:00", + "total_value": 1065325.9862537384 + }, + { + "% change": 0.0038232016023276305, + "accumulated return": 1.0697668922014243, + "capital": 1069766.8922014236, + "cash": 366.54854106903076, + "index": "2019-06-06T00:00:00", + "total_value": 1069400.3436603546 + }, + { + "% change": 0.007203947910364272, + "accumulated return": 1.0774734371690757, + "capital": 1077473.437169075, + "cash": 366.54854106903076, + "index": "2019-06-07T00:00:00", + "total_value": 1077106.888628006 + }, + { + "% change": -0.00042221740676939845, + "accumulated return": 1.0770185091285713, + "capital": 1077018.5091285706, + "cash": 366.54854106903076, + "index": "2019-06-10T00:00:00", + "total_value": 1076651.9605875015 + }, + { + "% change": 0.001100147008316732, + "accumulated return": 1.078203387819291, + "capital": 1078203.3878192902, + "cash": 366.54854106903076, + "index": "2019-06-11T00:00:00", + "total_value": 1077836.8392782211 + }, + { + "% change": -0.0029639569603260307, + "accumulated return": 1.0750076393833168, + "capital": 1075007.639383316, + "cash": 366.54854106903076, + "index": "2019-06-12T00:00:00", + "total_value": 1074641.090842247 + }, + { + "% change": 0.0028060699481073925, + "accumulated return": 1.0780241860141762, + "capital": 1078024.1860141754, + "cash": 366.54854106903076, + "index": "2019-06-13T00:00:00", + "total_value": 1077657.6374731064 + }, + { + "% change": -0.0011328369073972944, + "accumulated return": 1.0768029604291924, + "capital": 1076802.9604291916, + "cash": 366.54854106903076, + "index": "2019-06-14T00:00:00", + "total_value": 1076436.4118881226 + }, + { + "% change": 0.0014803929859534826, + "accumulated return": 1.0783970519790658, + "capital": 1078397.051979065, + "cash": 366.54854106903076, + "index": "2019-06-17T00:00:00", + "total_value": 1078030.503437996 + }, + { + "% change": 0.009406558998420689, + "accumulated return": 1.0885410574722298, + "capital": 1088541.057472229, + "cash": 366.54854106903076, + "index": "2019-06-18T00:00:00", + "total_value": 1088174.50893116 + }, + { + "% change": 0.0046907551538715175, + "accumulated return": 1.0936471370477685, + "capital": 1093647.1370477676, + "cash": 366.54854106903076, + "index": "2019-06-19T00:00:00", + "total_value": 1093280.5885066986 + }, + { + "% change": 0.009948136654461814, + "accumulated return": 1.1045268882188806, + "capital": 1104526.8882188797, + "cash": 366.54854106903076, + "index": "2019-06-20T00:00:00", + "total_value": 1104160.3396778107 + }, + { + "% change": -0.0022339442512698815, + "accumulated return": 1.102059436726571, + "capital": 1102059.4367265701, + "cash": 366.54854106903076, + "index": "2019-06-21T00:00:00", + "total_value": 1101692.888185501 + }, + { + "% change": 0.005349454496386352, + "accumulated return": 1.107954853535653, + "capital": 1107954.8535356522, + "cash": 366.54854106903076, + "index": "2019-06-24T00:00:00", + "total_value": 1107588.3049945831 + }, + { + "% change": -0.0014648321461763203, + "accumulated return": 1.1063318856496818, + "capital": 1106331.885649681, + "cash": 366.54854106903076, + "index": "2019-06-25T00:00:00", + "total_value": 1105965.337108612 + }, + { + "% change": -0.0014741167311441705, + "accumulated return": 1.1047010233068473, + "capital": 1104701.0233068466, + "cash": 366.54854106903076, + "index": "2019-06-26T00:00:00", + "total_value": 1104334.4747657776 + }, + { + "% change": 0.002719177806783213, + "accumulated return": 1.107704901812554, + "capital": 1107704.9018125534, + "cash": 366.54854106903076, + "index": "2019-06-27T00:00:00", + "total_value": 1107338.3532714844 + }, + { + "% change": 0.0006347670725550536, + "accumulated return": 1.1084080364103324, + "capital": 1108408.0364103317, + "cash": 366.54854106903076, + "index": "2019-06-28T00:00:00", + "total_value": 1108041.4878692627 + }, + { + "% change": 0, + "accumulated return": 1.1084080364103324, + "capital": 1108408.0364103317, + "cash": 207.24219608306885, + "index": "2019-07-01T00:00:00", + "total_value": 1108200.7942142487 + }, + { + "% change": 0.0041051669059122275, + "accumulated return": 1.1129582363996513, + "capital": 1112958.2363996506, + "cash": 207.24219608306885, + "index": "2019-07-02T00:00:00", + "total_value": 1112750.9942035675 + }, + { + "% change": 0.0039924296542002136, + "accumulated return": 1.1174016438665397, + "capital": 1117401.643866539, + "cash": 207.24219608306885, + "index": "2019-07-03T00:00:00", + "total_value": 1117194.401670456 + }, + { + "% change": -0.006269172528579281, + "accumulated return": 1.1103964601774223, + "capital": 1110396.4601774216, + "cash": 207.24219608306885, + "index": "2019-07-05T00:00:00", + "total_value": 1110189.2179813385 + }, + { + "% change": -0.004365632903540084, + "accumulated return": 1.1055488768548973, + "capital": 1105548.8768548965, + "cash": 207.24219608306885, + "index": "2019-07-08T00:00:00", + "total_value": 1105341.6346588135 + }, + { + "% change": -0.0013896793858981793, + "accumulated return": 1.1040125183706293, + "capital": 1104012.5183706284, + "cash": 207.24219608306885, + "index": "2019-07-09T00:00:00", + "total_value": 1103805.2761745453 + }, + { + "% change": 0.006590202628658393, + "accumulated return": 1.1112881845712672, + "capital": 1111288.1845712662, + "cash": 207.24219608306885, + "index": "2019-07-10T00:00:00", + "total_value": 1111080.942375183 + }, + { + "% change": -0.003939688155966237, + "accumulated return": 1.1069100556726466, + "capital": 1106910.0556726456, + "cash": 207.24219608306885, + "index": "2019-07-11T00:00:00", + "total_value": 1106702.8134765625 + }, + { + "% change": 0.0018085750633052289, + "accumulated return": 1.1089119855966578, + "capital": 1108911.9855966568, + "cash": 207.24219608306885, + "index": "2019-07-12T00:00:00", + "total_value": 1108704.7434005737 + }, + { + "% change": 0.00046424091835928216, + "accumulated return": 1.1094267879152309, + "capital": 1109426.7879152298, + "cash": 207.24219608306885, + "index": "2019-07-15T00:00:00", + "total_value": 1109219.5457191467 + }, + { + "% change": -0.003924161430289841, + "accumulated return": 1.1050732181043637, + "capital": 1105073.2181043625, + "cash": 207.24219608306885, + "index": "2019-07-16T00:00:00", + "total_value": 1104865.9759082794 + }, + { + "% change": 0.0036603550787230876, + "accumulated return": 1.1091181784706128, + "capital": 1109118.1784706116, + "cash": 207.24219608306885, + "index": "2019-07-17T00:00:00", + "total_value": 1108910.9362745285 + }, + { + "% change": 0.007305408485777987, + "accumulated return": 1.1172207398233427, + "capital": 1117220.7398233414, + "cash": 207.24219608306885, + "index": "2019-07-18T00:00:00", + "total_value": 1117013.4976272583 + }, + { + "% change": -0.0050768177201305775, + "accumulated return": 1.11154881377411, + "capital": 1111548.813774109, + "cash": 207.24219608306885, + "index": "2019-07-19T00:00:00", + "total_value": 1111341.5715780258 + }, + { + "% change": -0.0003184999024049562, + "accumulated return": 1.1111947855854047, + "capital": 1111194.7855854034, + "cash": 207.24219608306885, + "index": "2019-07-22T00:00:00", + "total_value": 1110987.5433893204 + }, + { + "% change": -0.00048166926137815924, + "accumulated return": 1.1106595572137845, + "capital": 1110659.5572137833, + "cash": 207.24219608306885, + "index": "2019-07-23T00:00:00", + "total_value": 1110452.3150177002 + }, + { + "% change": 0.0021681640210267084, + "accumulated return": 1.1130676493053449, + "capital": 1113067.6493053436, + "cash": 207.24219608306885, + "index": "2019-07-24T00:00:00", + "total_value": 1112860.4071092606 + }, + { + "% change": -0.005107134778037037, + "accumulated return": 1.1073830628032697, + "capital": 1107383.0628032684, + "cash": 207.24219608306885, + "index": "2019-07-25T00:00:00", + "total_value": 1107175.8206071854 + }, + { + "% change": 0.0015975244651404985, + "accumulated return": 1.1091521343383801, + "capital": 1109152.134338379, + "cash": 207.24219608306885, + "index": "2019-07-26T00:00:00", + "total_value": 1108944.8921422958 + }, + { + "% change": 0.001198945071258839, + "accumulated return": 1.1104819468231213, + "capital": 1110481.9468231201, + "cash": 207.24219608306885, + "index": "2019-07-29T00:00:00", + "total_value": 1110274.704627037 + }, + { + "% change": 0.0003812377375596032, + "accumulated return": 1.110905304448129, + "capital": 1110905.3044481277, + "cash": 207.24219608306885, + "index": "2019-07-30T00:00:00", + "total_value": 1110698.0622520447 + }, + { + "% change": -0.0055079448401601505, + "accumulated return": 1.1047864993085874, + "capital": 1104786.4993085861, + "cash": 207.24219608306885, + "index": "2019-07-31T00:00:00", + "total_value": 1104579.257112503 + }, + { + "% change": 0, + "accumulated return": 1.1047864993085874, + "capital": 1104786.4993085861, + "cash": 404.3723077774048, + "index": "2019-08-01T00:00:00", + "total_value": 1104382.1270008087 + }, + { + "% change": -0.00018342305112684087, + "accumulated return": 1.1045838559980405, + "capital": 1104583.8559980392, + "cash": 404.3723077774048, + "index": "2019-08-02T00:00:00", + "total_value": 1104179.4836902618 + }, + { + "% change": -0.005284368027823616, + "accumulated return": 1.0987468283853543, + "capital": 1098746.828385353, + "cash": 404.3723077774048, + "index": "2019-08-05T00:00:00", + "total_value": 1098342.4560775757 + }, + { + "% change": 0.007713794533448004, + "accumulated return": 1.1072223356637967, + "capital": 1107222.3356637955, + "cash": 404.3723077774048, + "index": "2019-08-06T00:00:00", + "total_value": 1106817.963356018 + }, + { + "% change": 0.003130232729614546, + "accumulated return": 1.1106881992578517, + "capital": 1110688.1992578506, + "cash": 404.3723077774048, + "index": "2019-08-07T00:00:00", + "total_value": 1110283.8269500732 + }, + { + "% change": 0.005461575157364784, + "accumulated return": 1.1167543063344967, + "capital": 1116754.3063344955, + "cash": 404.3723077774048, + "index": "2019-08-08T00:00:00", + "total_value": 1116349.9340267181 + }, + { + "% change": -0.0035046731950830745, + "accumulated return": 1.1128404474515925, + "capital": 1112840.4474515915, + "cash": 404.3723077774048, + "index": "2019-08-09T00:00:00", + "total_value": 1112436.075143814 + }, + { + "% change": 0.0013937073074161699, + "accumulated return": 1.114391421315194, + "capital": 1114391.4213151932, + "cash": 404.3723077774048, + "index": "2019-08-12T00:00:00", + "total_value": 1113987.0490074158 + }, + { + "% change": 0.00319392743650182, + "accumulated return": 1.1179507066507348, + "capital": 1117950.706650734, + "cash": 404.3723077774048, + "index": "2019-08-13T00:00:00", + "total_value": 1117546.3343429565 + }, + { + "% change": -0.0049778612293882585, + "accumulated return": 1.112385703171731, + "capital": 1112385.70317173, + "cash": 404.3723077774048, + "index": "2019-08-14T00:00:00", + "total_value": 1111981.3308639526 + }, + { + "% change": 0.006154083797361709, + "accumulated return": 1.119231418004037, + "capital": 1119231.418004036, + "cash": 404.3723077774048, + "index": "2019-08-15T00:00:00", + "total_value": 1118827.0456962585 + }, + { + "% change": -0.0003949436372068238, + "accumulated return": 1.1187893846769343, + "capital": 1118789.3846769333, + "cash": 404.3723077774048, + "index": "2019-08-16T00:00:00", + "total_value": 1118385.012369156 + }, + { + "% change": -0.0042137793804728485, + "accumulated return": 1.1140750530366907, + "capital": 1114075.0530366898, + "cash": 404.3723077774048, + "index": "2019-08-19T00:00:00", + "total_value": 1113670.6807289124 + }, + { + "% change": 0.004207554216639542, + "accumulated return": 1.1187625842237483, + "capital": 1118762.5842237473, + "cash": 404.3723077774048, + "index": "2019-08-20T00:00:00", + "total_value": 1118358.2119159698 + }, + { + "% change": 0.00015743831913295203, + "accumulated return": 1.1189387203245174, + "capital": 1118938.7203245163, + "cash": 404.3723077774048, + "index": "2019-08-21T00:00:00", + "total_value": 1118534.348016739 + }, + { + "% change": -0.0039406199689981936, + "accumulated return": 1.1145294080591213, + "capital": 1114529.4080591202, + "cash": 404.3723077774048, + "index": "2019-08-22T00:00:00", + "total_value": 1114125.0357513428 + }, + { + "% change": 0.001741409665320326, + "accumulated return": 1.116470260342599, + "capital": 1116470.260342598, + "cash": 404.3723077774048, + "index": "2019-08-23T00:00:00", + "total_value": 1116065.8880348206 + }, + { + "% change": 0.00070696883649779, + "accumulated return": 1.117259570023538, + "capital": 1117259.5700235367, + "cash": 404.3723077774048, + "index": "2019-08-26T00:00:00", + "total_value": 1116855.1977157593 + }, + { + "% change": 0.004462302855395839, + "accumulated return": 1.1222451205930724, + "capital": 1122245.120593071, + "cash": 404.3723077774048, + "index": "2019-08-27T00:00:00", + "total_value": 1121840.7482852936 + }, + { + "% change": 0.0021838192253393895, + "accumulated return": 1.124695901062967, + "capital": 1124695.9010629654, + "cash": 404.3723077774048, + "index": "2019-08-28T00:00:00", + "total_value": 1124291.528755188 + }, + { + "% change": 0.0008408914708248894, + "accumulated return": 1.1256416482534424, + "capital": 1125641.6482534409, + "cash": 404.3723077774048, + "index": "2019-08-29T00:00:00", + "total_value": 1125237.2759456635 + }, + { + "% change": -0.0005375833136915809, + "accumulated return": 1.1250365220861451, + "capital": 1125036.5220861435, + "cash": 404.3723077774048, + "index": "2019-08-30T00:00:00", + "total_value": 1124632.149778366 + }, + { + "% change": 0, + "accumulated return": 1.1250365220861451, + "capital": 1125036.5220861435, + "cash": 290.7544279098511, + "index": "2019-09-03T00:00:00", + "total_value": 1124745.7676582336 + }, + { + "% change": 0.010191804009169303, + "accumulated return": 1.1365026738224047, + "capital": 1136502.673822403, + "cash": 290.7544279098511, + "index": "2019-09-04T00:00:00", + "total_value": 1136211.919394493 + }, + { + "% change": -0.005533426249462292, + "accumulated return": 1.1302139200944916, + "capital": 1130213.92009449, + "cash": 290.7544279098511, + "index": "2019-09-05T00:00:00", + "total_value": 1129923.1656665802 + }, + { + "% change": -7.877061122107953e-05, + "accumulated return": 1.1301248924531953, + "capital": 1130124.8924531937, + "cash": 290.7544279098511, + "index": "2019-09-06T00:00:00", + "total_value": 1129834.1380252838 + }, + { + "% change": -0.0028990614377496504, + "accumulated return": 1.1268485909576431, + "capital": 1126848.5909576416, + "cash": 290.7544279098511, + "index": "2019-09-09T00:00:00", + "total_value": 1126557.8365297318 + }, + { + "% change": -0.003988911953810681, + "accumulated return": 1.1223536911430374, + "capital": 1122353.691143036, + "cash": 290.7544279098511, + "index": "2019-09-10T00:00:00", + "total_value": 1122062.936715126 + }, + { + "% change": 0.0022754328183562933, + "accumulated return": 1.1249075315656676, + "capital": 1124907.5315656662, + "cash": 290.7544279098511, + "index": "2019-09-11T00:00:00", + "total_value": 1124616.7771377563 + }, + { + "% change": 0.000982175899041815, + "accumulated return": 1.126012388631822, + "capital": 1126012.3886318207, + "cash": 290.7544279098511, + "index": "2019-09-12T00:00:00", + "total_value": 1125721.6342039108 + }, + { + "% change": -0.0038625211615928023, + "accumulated return": 1.121663141952516, + "capital": 1121663.1419525146, + "cash": 290.7544279098511, + "index": "2019-09-13T00:00:00", + "total_value": 1121372.3875246048 + }, + { + "% change": 0.003969951463276056, + "accumulated return": 1.1261160901842133, + "capital": 1126116.0901842117, + "cash": 290.7544279098511, + "index": "2019-09-16T00:00:00", + "total_value": 1125825.3357563019 + }, + { + "% change": 0.000311017055144136, + "accumulated return": 1.1264663314943328, + "capital": 1126466.3314943314, + "cash": 290.7544279098511, + "index": "2019-09-17T00:00:00", + "total_value": 1126175.5770664215 + }, + { + "% change": -0.0006571229544928281, + "accumulated return": 1.1257261046104445, + "capital": 1125726.104610443, + "cash": 290.7544279098511, + "index": "2019-09-18T00:00:00", + "total_value": 1125435.3501825333 + }, + { + "% change": 0.0003285182758860916, + "accumulated return": 1.1260959262094512, + "capital": 1126095.9262094498, + "cash": 290.7544279098511, + "index": "2019-09-19T00:00:00", + "total_value": 1125805.17178154 + }, + { + "% change": 0.003258429734655399, + "accumulated return": 1.1297652306594863, + "capital": 1129765.2306594849, + "cash": 290.7544279098511, + "index": "2019-09-20T00:00:00", + "total_value": 1129474.476231575 + }, + { + "% change": 0.0020067188549852677, + "accumulated return": 1.1320323518495574, + "capital": 1132032.351849556, + "cash": 290.7544279098511, + "index": "2019-09-23T00:00:00", + "total_value": 1131741.5974216461 + }, + { + "% change": 0.0016776892684973177, + "accumulated return": 1.133931550377847, + "capital": 1133931.5503778458, + "cash": 290.7544279098511, + "index": "2019-09-24T00:00:00", + "total_value": 1133640.795949936 + }, + { + "% change": -0.005896835032937808, + "accumulated return": 1.1272449430866256, + "capital": 1127244.9430866241, + "cash": 290.7544279098511, + "index": "2019-09-25T00:00:00", + "total_value": 1126954.1886587143 + }, + { + "% change": 0.0016078377283152978, + "accumulated return": 1.129057370035173, + "capital": 1129057.3700351715, + "cash": 290.7544279098511, + "index": "2019-09-26T00:00:00", + "total_value": 1128766.6156072617 + }, + { + "% change": -0.002298186277157388, + "accumulated return": 1.1264625858812347, + "capital": 1126462.5858812332, + "cash": 290.7544279098511, + "index": "2019-09-27T00:00:00", + "total_value": 1126171.8314533234 + }, + { + "% change": -0.0005576295481602989, + "accumulated return": 1.1258344370584503, + "capital": 1125834.4370584488, + "cash": 290.7544279098511, + "index": "2019-09-30T00:00:00", + "total_value": 1125543.682630539 + }, + { + "% change": 0, + "accumulated return": 1.1258344370584503, + "capital": 1125834.4370584488, + "cash": 286.6349697113037, + "index": "2019-10-01T00:00:00", + "total_value": 1125547.8020887375 + }, + { + "% change": -0.0018796516265456864, + "accumulated return": 1.1237182605276124, + "capital": 1123718.2605276108, + "cash": 286.6349697113037, + "index": "2019-10-02T00:00:00", + "total_value": 1123431.6255578995 + }, + { + "% change": 0.005966421254151699, + "accumulated return": 1.1304228370409026, + "capital": 1130422.8370409012, + "cash": 286.6349697113037, + "index": "2019-10-03T00:00:00", + "total_value": 1130136.2020711899 + }, + { + "% change": 0.0047664862520564455, + "accumulated return": 1.1358109819526687, + "capital": 1135810.9819526672, + "cash": 286.6349697113037, + "index": "2019-10-04T00:00:00", + "total_value": 1135524.346982956 + }, + { + "% change": -0.006352376582498209, + "accumulated return": 1.1285958828687683, + "capital": 1128595.8828687668, + "cash": 286.6349697113037, + "index": "2019-10-07T00:00:00", + "total_value": 1128309.2478990555 + }, + { + "% change": -0.0008713824507464718, + "accumulated return": 1.1276124442224518, + "capital": 1127612.4442224503, + "cash": 286.6349697113037, + "index": "2019-10-08T00:00:00", + "total_value": 1127325.809252739 + }, + { + "% change": 5.6909442755603834e-05, + "accumulated return": 1.1276766160182967, + "capital": 1127676.6160182953, + "cash": 286.6349697113037, + "index": "2019-10-09T00:00:00", + "total_value": 1127389.981048584 + }, + { + "% change": -0.0016044647053117256, + "accumulated return": 1.12586729868889, + "capital": 1125867.2986888885, + "cash": 286.6349697113037, + "index": "2019-10-10T00:00:00", + "total_value": 1125580.6637191772 + }, + { + "% change": -0.00037981719918156465, + "accumulated return": 1.1254396749248519, + "capital": 1125439.6749248505, + "cash": 286.6349697113037, + "index": "2019-10-11T00:00:00", + "total_value": 1125153.0399551392 + }, + { + "% change": -0.0012826447016497378, + "accumulated return": 1.123996135688783, + "capital": 1123996.1356887817, + "cash": 286.6349697113037, + "index": "2019-10-14T00:00:00", + "total_value": 1123709.5007190704 + }, + { + "% change": -0.00018545012410287054, + "accumulated return": 1.1237876904659285, + "capital": 1123787.6904659271, + "cash": 286.6349697113037, + "index": "2019-10-15T00:00:00", + "total_value": 1123501.0554962158 + }, + { + "% change": 0.0025296290623388895, + "accumulated return": 1.12663045646763, + "capital": 1126630.4564676285, + "cash": 286.6349697113037, + "index": "2019-10-16T00:00:00", + "total_value": 1126343.8214979172 + }, + { + "% change": 0.00275991909075346, + "accumulated return": 1.1297398653726591, + "capital": 1129739.8653726578, + "cash": 286.6349697113037, + "index": "2019-10-17T00:00:00", + "total_value": 1129453.2304029465 + }, + { + "% change": -0.0010597894582098366, + "accumulated return": 1.1285425789728178, + "capital": 1128542.5789728165, + "cash": 286.6349697113037, + "index": "2019-10-18T00:00:00", + "total_value": 1128255.9440031052 + }, + { + "% change": 0.00018132159029216055, + "accumulated return": 1.1287472081079497, + "capital": 1128747.2081079483, + "cash": 286.6349697113037, + "index": "2019-10-21T00:00:00", + "total_value": 1128460.573138237 + }, + { + "% change": 0.002998747374124644, + "accumulated return": 1.1321320358343139, + "capital": 1132132.0358343124, + "cash": 286.6349697113037, + "index": "2019-10-22T00:00:00", + "total_value": 1131845.4008646011 + }, + { + "% change": 0.0033118518345895964, + "accumulated return": 1.1358814893941893, + "capital": 1135881.489394188, + "cash": 286.6349697113037, + "index": "2019-10-23T00:00:00", + "total_value": 1135594.8544244766 + }, + { + "% change": 0.001058201227297939, + "accumulated return": 1.1370834805803312, + "capital": 1137083.48058033, + "cash": 286.6349697113037, + "index": "2019-10-24T00:00:00", + "total_value": 1136796.8456106186 + }, + { + "% change": 0.0008539355336956156, + "accumulated return": 1.138054476569177, + "capital": 1138054.4765691757, + "cash": 286.6349697113037, + "index": "2019-10-25T00:00:00", + "total_value": 1137767.8415994644 + }, + { + "% change": -0.002394412968717563, + "accumulated return": 1.1353295041713727, + "capital": 1135329.5041713715, + "cash": 286.6349697113037, + "index": "2019-10-28T00:00:00", + "total_value": 1135042.8692016602 + }, + { + "% change": -0.0009023849754646873, + "accumulated return": 1.1343049998846066, + "capital": 1134304.9998846054, + "cash": 286.6349697113037, + "index": "2019-10-29T00:00:00", + "total_value": 1134018.364914894 + }, + { + "% change": 0.0054474321382560476, + "accumulated return": 1.1404840493955626, + "capital": 1140484.0493955612, + "cash": 286.6349697113037, + "index": "2019-10-30T00:00:00", + "total_value": 1140197.41442585 + }, + { + "% change": 0.002819841286244573, + "accumulated return": 1.1437000334043517, + "capital": 1143700.0334043503, + "cash": 286.6349697113037, + "index": "2019-10-31T00:00:00", + "total_value": 1143413.398434639 + }, + { + "% change": 0, + "accumulated return": 1.1437000334043517, + "capital": 1143700.0334043503, + "cash": 459.86015224456787, + "index": "2019-11-01T00:00:00", + "total_value": 1143240.1732521057 + }, + { + "% change": -0.0008956205315419075, + "accumulated return": 1.1426757121725095, + "capital": 1142675.7121725082, + "cash": 459.86015224456787, + "index": "2019-11-04T00:00:00", + "total_value": 1142215.8520202637 + }, + { + "% change": -0.005213593644537107, + "accumulated return": 1.13671826534176, + "capital": 1136718.2653417587, + "cash": 459.86015224456787, + "index": "2019-11-05T00:00:00", + "total_value": 1136258.4051895142 + }, + { + "% change": 0.0016081066930115906, + "accumulated return": 1.1385462295923245, + "capital": 1138546.2295923233, + "cash": 459.86015224456787, + "index": "2019-11-06T00:00:00", + "total_value": 1138086.3694400787 + }, + { + "% change": -0.0041964705940723546, + "accumulated return": 1.1337683538198484, + "capital": 1133768.353819847, + "cash": 459.86015224456787, + "index": "2019-11-07T00:00:00", + "total_value": 1133308.4936676025 + }, + { + "% change": -0.0035160549901549487, + "accumulated return": 1.1297819619417204, + "capital": 1129781.961941719, + "cash": 459.86015224456787, + "index": "2019-11-08T00:00:00", + "total_value": 1129322.1017894745 + }, + { + "% change": -0.002673890900631082, + "accumulated return": 1.1267610482339874, + "capital": 1126761.048233986, + "cash": 459.86015224456787, + "index": "2019-11-11T00:00:00", + "total_value": 1126301.1880817413 + }, + { + "% change": -0.00013039329415820422, + "accumulated return": 1.1266141261491789, + "capital": 1126614.1261491776, + "cash": 459.86015224456787, + "index": "2019-11-12T00:00:00", + "total_value": 1126154.265996933 + }, + { + "% change": 0.001870167116529542, + "accumulated return": 1.1287210828409207, + "capital": 1128721.0828409195, + "cash": 459.86015224456787, + "index": "2019-11-13T00:00:00", + "total_value": 1128261.222688675 + }, + { + "% change": 0.003365578276103065, + "accumulated return": 1.1325198819971096, + "capital": 1132519.8819971085, + "cash": 459.86015224456787, + "index": "2019-11-14T00:00:00", + "total_value": 1132060.021844864 + }, + { + "% change": 0.0037822045142348326, + "accumulated return": 1.1368033038072598, + "capital": 1136803.3038072586, + "cash": 459.86015224456787, + "index": "2019-11-15T00:00:00", + "total_value": 1136343.443655014 + }, + { + "% change": 0.0013147448682504503, + "accumulated return": 1.1382979101171506, + "capital": 1138297.9101171494, + "cash": 459.86015224456787, + "index": "2019-11-18T00:00:00", + "total_value": 1137838.0499649048 + }, + { + "% change": 0.0020350145391179186, + "accumulated return": 1.1406143629140866, + "capital": 1140614.3629140854, + "cash": 459.86015224456787, + "index": "2019-11-19T00:00:00", + "total_value": 1140154.5027618408 + }, + { + "% change": 0.0008684709846773497, + "accumulated return": 1.1416049533929837, + "capital": 1141604.9533929825, + "cash": 459.86015224456787, + "index": "2019-11-20T00:00:00", + "total_value": 1141145.093240738 + }, + { + "% change": -0.0034327278578127896, + "accumulated return": 1.1376861342668545, + "capital": 1137686.1342668533, + "cash": 459.86015224456787, + "index": "2019-11-21T00:00:00", + "total_value": 1137226.2741146088 + }, + { + "% change": 1.1529185352188165e-05, + "accumulated return": 1.137699250861169, + "capital": 1137699.250861168, + "cash": 459.86015224456787, + "index": "2019-11-22T00:00:00", + "total_value": 1137239.3907089233 + }, + { + "% change": 0.0015130714655249289, + "accumulated return": 1.139420671133996, + "capital": 1139420.671133995, + "cash": 459.86015224456787, + "index": "2019-11-25T00:00:00", + "total_value": 1138960.8109817505 + }, + { + "% change": 0.0022576172205539535, + "accumulated return": 1.1419930468626034, + "capital": 1141993.0468626022, + "cash": 459.86015224456787, + "index": "2019-11-26T00:00:00", + "total_value": 1141533.1867103577 + }, + { + "% change": -0.0013382450252417133, + "accumulated return": 1.1404647803487789, + "capital": 1140464.7803487778, + "cash": 459.86015224456787, + "index": "2019-11-27T00:00:00", + "total_value": 1140004.9201965332 + }, + { + "% change": -0.003742942884212841, + "accumulated return": 1.136196085814477, + "capital": 1136196.085814476, + "cash": 459.86015224456787, + "index": "2019-11-29T00:00:00", + "total_value": 1135736.2256622314 + }, + { + "% change": 0, + "accumulated return": 1.136196085814477, + "capital": 1136196.085814476, + "cash": 447.30963706970215, + "index": "2019-12-02T00:00:00", + "total_value": 1135748.7761774063 + }, + { + "% change": 0.003515201257466849, + "accumulated return": 1.140190043724061, + "capital": 1140190.04372406, + "cash": 447.30963706970215, + "index": "2019-12-03T00:00:00", + "total_value": 1139742.7340869904 + }, + { + "% change": 0.0004399478872685325, + "accumulated return": 1.1406916679248822, + "capital": 1140691.667924881, + "cash": 447.30963706970215, + "index": "2019-12-04T00:00:00", + "total_value": 1140244.3582878113 + }, + { + "% change": -9.061400155108146e-06, + "accumulated return": 1.1406813316612254, + "capital": 1140681.3316612244, + "cash": 447.30963706970215, + "index": "2019-12-05T00:00:00", + "total_value": 1140234.0220241547 + }, + { + "% change": 0.00029776644314138956, + "accumulated return": 1.141020988284112, + "capital": 1141020.988284111, + "cash": 447.30963706970215, + "index": "2019-12-06T00:00:00", + "total_value": 1140573.6786470413 + }, + { + "% change": -0.0007528430540637565, + "accumulated return": 1.1401619785585413, + "capital": 1140161.9785585403, + "cash": 447.30963706970215, + "index": "2019-12-09T00:00:00", + "total_value": 1139714.6689214706 + }, + { + "% change": 0.0010558320072924232, + "accumulated return": 1.1413657980690013, + "capital": 1141365.7980690002, + "cash": 447.30963706970215, + "index": "2019-12-10T00:00:00", + "total_value": 1140918.4884319305 + }, + { + "% change": 0.006143591284567984, + "accumulated return": 1.148377883038522, + "capital": 1148377.8830385208, + "cash": 447.30963706970215, + "index": "2019-12-11T00:00:00", + "total_value": 1147930.573401451 + }, + { + "% change": 0.0004090850208076091, + "accumulated return": 1.1488476672286998, + "capital": 1148847.6672286987, + "cash": 447.30963706970215, + "index": "2019-12-12T00:00:00", + "total_value": 1148400.357591629 + }, + { + "% change": 0.004204254552145459, + "accumulated return": 1.1536777152633677, + "capital": 1153677.7152633667, + "cash": 447.30963706970215, + "index": "2019-12-13T00:00:00", + "total_value": 1153230.405626297 + }, + { + "% change": 0.0010136297580323195, + "accumulated return": 1.1548471173267374, + "capital": 1154847.1173267365, + "cash": 447.30963706970215, + "index": "2019-12-16T00:00:00", + "total_value": 1154399.8076896667 + }, + { + "% change": 0.0003874751283305944, + "accumulated return": 1.155294591861726, + "capital": 1155294.5918617249, + "cash": 447.30963706970215, + "index": "2019-12-17T00:00:00", + "total_value": 1154847.2822246552 + }, + { + "% change": -0.002272775411589212, + "accumulated return": 1.1526688667202005, + "capital": 1152668.8667201996, + "cash": 447.30963706970215, + "index": "2019-12-18T00:00:00", + "total_value": 1152221.5570831299 + }, + { + "% change": 0.001719099235785615, + "accumulated return": 1.154650418888093, + "capital": 1154650.418888092, + "cash": 447.30963706970215, + "index": "2019-12-19T00:00:00", + "total_value": 1154203.1092510223 + }, + { + "% change": 0.0015604417934935721, + "accumulated return": 1.1564521836586008, + "capital": 1156452.1836585999, + "cash": 447.30963706970215, + "index": "2019-12-20T00:00:00", + "total_value": 1156004.8740215302 + }, + { + "% change": 0.001285220138130816, + "accumulated return": 1.157938479293824, + "capital": 1157938.4792938232, + "cash": 447.30963706970215, + "index": "2019-12-23T00:00:00", + "total_value": 1157491.1696567535 + }, + { + "% change": 0.002650106123738505, + "accumulated return": 1.1610071391487131, + "capital": 1161007.1391487122, + "cash": 447.30963706970215, + "index": "2019-12-24T00:00:00", + "total_value": 1160559.8295116425 + }, + { + "% change": 0.004480166872847358, + "accumulated return": 1.1662086448726665, + "capital": 1166208.6448726654, + "cash": 447.30963706970215, + "index": "2019-12-26T00:00:00", + "total_value": 1165761.3352355957 + }, + { + "% change": 0.002383230134836989, + "accumulated return": 1.1689879884586345, + "capital": 1168987.9884586334, + "cash": 447.30963706970215, + "index": "2019-12-27T00:00:00", + "total_value": 1168540.6788215637 + }, + { + "% change": -0.0020943438529887892, + "accumulated return": 1.1665397256507883, + "capital": 1166539.7256507874, + "cash": 447.30963706970215, + "index": "2019-12-30T00:00:00", + "total_value": 1166092.4160137177 + }, + { + "% change": 0.00022561705175982993, + "accumulated return": 1.1668029169044505, + "capital": 1166802.9169044495, + "cash": 447.30963706970215, + "index": "2019-12-31T00:00:00", + "total_value": 1166355.6072673798 + } + ] + }, + "vconcat": [ + { + "height": 350, + "layer": [ + { + "encoding": { + "opacity": { + "value": 0 + }, + "x": { + "field": "index", + "type": "temporal" + } + }, + "mark": "point", + "selection": { + "selector002": { + "empty": "none", + "fields": [ + "index" + ], + "nearest": true, + "on": "mouseover", + "type": "single" + } + } + }, + { + "encoding": { + "opacity": { + "condition": { + "selection": "selector002", + "value": 1 + }, + "value": 0 + }, + "x": { + "field": "index", + "type": "temporal" + }, + "y": { + "axis": { + "format": "%" + }, + "field": "accumulated return", + "type": "quantitative" + } + }, + "mark": "point" + }, + { + "encoding": { + "text": { + "condition": { + "field": "accumulated return", + "format": ".2%", + "selection": "selector002", + "type": "quantitative" + }, + "value": " " + }, + "x": { + "field": "index", + "type": "temporal" + }, + "y": { + "axis": { + "format": "%" + }, + "field": "accumulated return", + "type": "quantitative" + } + }, + "mark": { + "align": "left", + "dx": 5, + "dy": -5, + "type": "text" + } + }, + { + "encoding": { + "x": { + "axis": { + "title": "date" + }, + "field": "index", + "scale": { + "domain": { + "selection": "selector001" + } + }, + "type": "temporal" + }, + "y": { + "axis": { + "format": "%" + }, + "field": "accumulated return", + "type": "quantitative" + } + }, + "mark": { + "opacity": 0.7, + "type": "area" + } + } + ], + "title": "Wealth over time", + "width": 700 + }, + { + "encoding": { + "x": { + "field": "index", + "type": "temporal" + }, + "y": { + "axis": { + "format": "%" + }, + "field": "accumulated return", + "type": "quantitative" + } + }, + "height": 70, + "mark": { + "opacity": 0.7, + "type": "area" + }, + "selection": { + "selector001": { + "encodings": [ + "x" + ], + "type": "interval" + } + }, + "width": 700 + } + ] + }, + "image/png": "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", + "text/plain": [ + "\n", + "\n", + "If you see this message, it means the renderer has not been properly enabled\n", + "for the frontend that you are using. For more information, see\n", + "https://altair-viz.github.io/user_guide/troubleshooting.html\n" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "returns_chart(bt.balance)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}