Performance#
!pip install mlfinlab
Requirement already satisfied: mlfinlab in /usr/local/lib/python3.6/dist-packages (0.11.0)
Requirement already satisfied: pandas==0.25.3 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (0.25.3)
Requirement already satisfied: matplotlib>=3.1.1 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (3.2.1)
Requirement already satisfied: numpy>=1.17.3 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (1.18.4)
Requirement already satisfied: scipy>=1.3.1 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (1.4.1)
Requirement already satisfied: xmlrunner==1.7.7 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (1.7.7)
Requirement already satisfied: cvxpy>=1.0.25 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (1.0.31)
Requirement already satisfied: statsmodels>=0.11.1 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (0.11.1)
Requirement already satisfied: scikit-learn>=0.21.3 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (0.22.2.post1)
Requirement already satisfied: numba>=0.46.0 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (0.48.0)
Requirement already satisfied: python-dateutil>=2.6.1 in /usr/local/lib/python3.6/dist-packages (from pandas==0.25.3->mlfinlab) (2.8.1)
Requirement already satisfied: pytz>=2017.2 in /usr/local/lib/python3.6/dist-packages (from pandas==0.25.3->mlfinlab) (2018.9)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=3.1.1->mlfinlab) (1.2.0)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=3.1.1->mlfinlab) (0.10.0)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=3.1.1->mlfinlab) (2.4.7)
Requirement already satisfied: ecos>=2 in /usr/local/lib/python3.6/dist-packages (from cvxpy>=1.0.25->mlfinlab) (2.0.7.post1)
Requirement already satisfied: scs>=1.1.3 in /usr/local/lib/python3.6/dist-packages (from cvxpy>=1.0.25->mlfinlab) (2.1.2)
Requirement already satisfied: multiprocess in /usr/local/lib/python3.6/dist-packages (from cvxpy>=1.0.25->mlfinlab) (0.70.9)
Requirement already satisfied: osqp>=0.4.1 in /usr/local/lib/python3.6/dist-packages (from cvxpy>=1.0.25->mlfinlab) (0.6.1)
Requirement already satisfied: patsy>=0.5 in /usr/local/lib/python3.6/dist-packages (from statsmodels>=0.11.1->mlfinlab) (0.5.1)
Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.6/dist-packages (from scikit-learn>=0.21.3->mlfinlab) (0.15.1)
Requirement already satisfied: llvmlite<0.32.0,>=0.31.0dev0 in /usr/local/lib/python3.6/dist-packages (from numba>=0.46.0->mlfinlab) (0.31.0)
Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from numba>=0.46.0->mlfinlab) (47.1.1)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.6/dist-packages (from python-dateutil>=2.6.1->pandas==0.25.3->mlfinlab) (1.12.0)
Requirement already satisfied: dill>=0.3.1 in /usr/local/lib/python3.6/dist-packages (from multiprocess->cvxpy>=1.0.25->mlfinlab) (0.3.1.1)
Requirement already satisfied: future in /usr/local/lib/python3.6/dist-packages (from osqp>=0.4.1->cvxpy>=1.0.25->mlfinlab) (0.16.0)
!pip install yfinance
# See https://plotly.com/python/static-image-export/
!wget https://github.com/plotly/orca/releases/download/v1.2.1/orca-1.2.1-x86_64.AppImage -O /usr/local/bin/orca
!chmod +x /usr/local/bin/orca
!apt-get install xvfb libgtk2.0-0 libgconf-2-4
Requirement already satisfied: yfinance in /usr/local/lib/python3.6/dist-packages (0.1.54)
Requirement already satisfied: pandas>=0.24 in /usr/local/lib/python3.6/dist-packages (from yfinance) (0.25.3)
Requirement already satisfied: requests>=2.20 in /usr/local/lib/python3.6/dist-packages (from yfinance) (2.23.0)
Requirement already satisfied: numpy>=1.15 in /usr/local/lib/python3.6/dist-packages (from yfinance) (1.18.4)
Requirement already satisfied: multitasking>=0.0.7 in /usr/local/lib/python3.6/dist-packages (from yfinance) (0.0.9)
Requirement already satisfied: pytz>=2017.2 in /usr/local/lib/python3.6/dist-packages (from pandas>=0.24->yfinance) (2018.9)
Requirement already satisfied: python-dateutil>=2.6.1 in /usr/local/lib/python3.6/dist-packages (from pandas>=0.24->yfinance) (2.8.1)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests>=2.20->yfinance) (1.24.3)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests>=2.20->yfinance) (3.0.4)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests>=2.20->yfinance) (2.9)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests>=2.20->yfinance) (2020.4.5.1)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.6/dist-packages (from python-dateutil>=2.6.1->pandas>=0.24->yfinance) (1.12.0)
--2020-06-04 02:56:24-- https://github.com/plotly/orca/releases/download/v1.2.1/orca-1.2.1-x86_64.AppImage
Resolving github.com (github.com)... 140.82.113.4
Connecting to github.com (github.com)|140.82.113.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://github-production-release-asset-2e65be.s3.amazonaws.com/99037241/9dc3a580-286a-11e9-8a21-4312b7c8a512?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20200604%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20200604T025624Z&X-Amz-Expires=300&X-Amz-Signature=97f922eb02e8b0f0f08980aa3d5bdbd55e59eb757d42fbbdc6ca33619a0e82b5&X-Amz-SignedHeaders=host&actor_id=0&repo_id=99037241&response-content-disposition=attachment%3B%20filename%3Dorca-1.2.1-x86_64.AppImage&response-content-type=application%2Foctet-stream [following]
--2020-06-04 02:56:24-- https://github-production-release-asset-2e65be.s3.amazonaws.com/99037241/9dc3a580-286a-11e9-8a21-4312b7c8a512?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20200604%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20200604T025624Z&X-Amz-Expires=300&X-Amz-Signature=97f922eb02e8b0f0f08980aa3d5bdbd55e59eb757d42fbbdc6ca33619a0e82b5&X-Amz-SignedHeaders=host&actor_id=0&repo_id=99037241&response-content-disposition=attachment%3B%20filename%3Dorca-1.2.1-x86_64.AppImage&response-content-type=application%2Foctet-stream
Resolving github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)... 52.216.244.244
Connecting to github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)|52.216.244.244|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 51607939 (49M) [application/octet-stream]
Saving to: ‘/usr/local/bin/orca’
/usr/local/bin/orca 100%[===================>] 49.22M 104MB/s in 0.5s
2020-06-04 02:56:24 (104 MB/s) - ‘/usr/local/bin/orca’ saved [51607939/51607939]
Reading package lists... Done
Building dependency tree
Reading state information... Done
libgtk2.0-0 is already the newest version (2.24.32-1ubuntu1).
libgtk2.0-0 set to manually installed.
The following additional packages will be installed:
gconf-service gconf-service-backend gconf2-common libdbus-glib-1-2
The following NEW packages will be installed:
gconf-service gconf-service-backend gconf2-common libdbus-glib-1-2
libgconf-2-4 xvfb
0 upgraded, 6 newly installed, 0 to remove and 32 not upgraded.
Need to get 1,687 kB of archives.
After this operation, 10.5 MB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu bionic/main amd64 libdbus-glib-1-2 amd64 0.110-2 [58.3 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic/universe amd64 gconf2-common all 3.2.6-4ubuntu1 [700 kB]
Get:3 http://archive.ubuntu.com/ubuntu bionic/universe amd64 libgconf-2-4 amd64 3.2.6-4ubuntu1 [84.8 kB]
Get:4 http://archive.ubuntu.com/ubuntu bionic/universe amd64 gconf-service-backend amd64 3.2.6-4ubuntu1 [58.1 kB]
Get:5 http://archive.ubuntu.com/ubuntu bionic/universe amd64 gconf-service amd64 3.2.6-4ubuntu1 [2,036 B]
Get:6 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 xvfb amd64 2:1.19.6-1ubuntu4.4 [784 kB]
Fetched 1,687 kB in 1s (1,818 kB/s)
Selecting previously unselected package libdbus-glib-1-2:amd64.
(Reading database ... 144467 files and directories currently installed.)
Preparing to unpack .../0-libdbus-glib-1-2_0.110-2_amd64.deb ...
Unpacking libdbus-glib-1-2:amd64 (0.110-2) ...
Selecting previously unselected package gconf2-common.
Preparing to unpack .../1-gconf2-common_3.2.6-4ubuntu1_all.deb ...
Unpacking gconf2-common (3.2.6-4ubuntu1) ...
Selecting previously unselected package libgconf-2-4:amd64.
Preparing to unpack .../2-libgconf-2-4_3.2.6-4ubuntu1_amd64.deb ...
Unpacking libgconf-2-4:amd64 (3.2.6-4ubuntu1) ...
Selecting previously unselected package gconf-service-backend.
Preparing to unpack .../3-gconf-service-backend_3.2.6-4ubuntu1_amd64.deb ...
Unpacking gconf-service-backend (3.2.6-4ubuntu1) ...
Selecting previously unselected package gconf-service.
Preparing to unpack .../4-gconf-service_3.2.6-4ubuntu1_amd64.deb ...
Unpacking gconf-service (3.2.6-4ubuntu1) ...
Selecting previously unselected package xvfb.
Preparing to unpack .../5-xvfb_2%3a1.19.6-1ubuntu4.4_amd64.deb ...
Unpacking xvfb (2:1.19.6-1ubuntu4.4) ...
Setting up gconf2-common (3.2.6-4ubuntu1) ...
Creating config file /etc/gconf/2/path with new version
Setting up libdbus-glib-1-2:amd64 (0.110-2) ...
Setting up xvfb (2:1.19.6-1ubuntu4.4) ...
Setting up libgconf-2-4:amd64 (3.2.6-4ubuntu1) ...
Setting up gconf-service-backend (3.2.6-4ubuntu1) ...
Setting up gconf-service (3.2.6-4ubuntu1) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
/sbin/ldconfig.real: /usr/local/lib/python3.6/dist-packages/ideep4py/lib/libmkldnn.so.0 is not a symbolic link
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
import yfinance as yf
stocks = ["NEXCF", "ACB.TO"]
stocks_string = " ".join(stocks)
def enable_plotly_in_cell():
import IPython
from plotly.offline import init_notebook_mode
display(IPython.core.display.HTML('''<script src="/static/components/requirejs/require.js"></script>'''))
init_notebook_mode(connected=False)
enable_plotly_in_cell()
data = yf.download(stocks_string, start="2019-06-01", end="2020-04-30",
group_by="ticker")
data = data.fillna(method='ffill')
import pandas as pd
import plotly.offline as py
import plotly.graph_objs as go
import plotly.io as pio
pio.renderers.default = "svg" # Toggle for GitHub rendering.
nyse = pd.concat([data[ticker]["Close"] for ticker in stocks], axis=1)
nyse.columns = stocks
print(nyse)
from mlfinlab.online_portfolio_selection.benchmarks import *
nyse_bah = BAH()
nyse_bah.allocate(nyse)
nyse_beststock = BestStock()
nyse_beststock.allocate(nyse)
nyse_crp = CRP()
nyse_crp.allocate(nyse)
nyse_bcrp = BCRP()
nyse_bcrp.allocate(nyse)
fig = go.Figure()
idx = nyse_bah.portfolio_return.index
fig.add_trace(go.Scatter(x=idx, y=nyse_beststock.portfolio_return['Returns'], name="Best Stock"))
fig.add_trace(go.Scatter(x=idx, y=nyse_bah.portfolio_return['Returns'], name="Buy and Hold"))
fig.add_trace(go.Scatter(x=idx, y=nyse_crp.portfolio_return['Returns'], name="CRP"))
fig.add_trace(go.Scatter(x=idx, y=nyse_bcrp.portfolio_return['Returns'], name="BCRP"))
fig.update_layout(title='Benchmarks on NYSE', xaxis_title='Date', yaxis_title='Relative Returns')
fig.show()
import plotly.io as pio
pio.write_image(fig, "gantt_suma.png", scale=3)
[*********************100%***********************] 2 of 2 completed
NEXCF ACB.TO
Date
2019-06-03 0.45000 115.680000
2019-06-04 0.45000 126.720001
2019-06-05 0.44500 124.440002
2019-06-06 0.44284 120.839996
2019-06-07 0.44000 121.559998
... ... ...
2020-04-23 1.18500 12.120000
2020-04-24 1.16000 12.360000
2020-04-27 1.12000 12.840000
2020-04-28 1.21000 12.480000
2020-04-29 1.20000 12.720000
[233 rows x 2 columns]