Last active
May 30, 2024 18:41
-
-
Save mohitkh7/499ec2f9959d05298925c0f876ae9f37 to your computer and use it in GitHub Desktop.
algo-trading-setup.ipynb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"provenance": [], | |
"collapsed_sections": [ | |
"Kh-3Ju9V32ra", | |
"X0WZa_Wv38Dc", | |
"2u7XPCRsN_e9", | |
"JWOHawiFjV0G", | |
"Mwvf1Spmq2zl", | |
"P-fG-ovcu7wL", | |
"2tOceZ5IchOS", | |
"PLNJVBB7mjPq", | |
"hSXNlErylXIv" | |
], | |
"toc_visible": true, | |
"authorship_tag": "ABX9TyMYFrwfVXYhb56bOZShpJZB", | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
}, | |
"language_info": { | |
"name": "python" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/mohitkh7/499ec2f9959d05298925c0f876ae9f37/algo-trading-setup.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "3WY_CvoJBRFH" | |
}, | |
"source": [ | |
"## Algo Trading Setup\n", | |
"\n", | |
"The Aim of the notebook is to verify different trade setup based on technical analysis tools such as candlestick pattern, indicators etc. To backtest and identify best trade setup." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "W0FLaMs1BmV6" | |
}, | |
"source": [ | |
"**Todo**\n", | |
"\n", | |
"1. [x] Load NSE stock prices\n", | |
"2. [x] Plot stock price as candlestick on chart\n", | |
"3. [x] Backtest marobazu trade setup.\n", | |
"4. [ ] Replicate equity delievery charges as commision\n", | |
"5. [ ] Create HangingMan / Hammer Trade setup\n", | |
"6. [ ] compute S&R\n", | |
"7. [ ] fix yahoo finance for date calculation\n", | |
"\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "Kw6Cob55MeCa" | |
}, | |
"source": [ | |
"### Load Necessary Libraries & Packages" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "UQ6LBh0ho9vi" | |
}, | |
"source": [ | |
"TA-Lib package is a technical analysis library with 150+ technical indicator implementations.\n", | |
"\n", | |
"Ta-Lib package needs a dependent C module installation. Command to install C module required for talib.\n", | |
"\n", | |
"Ref - [stackoverflow answer](https://stackoverflow.com/questions/49648391/how-to-install-ta-lib-in-google-colab)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "kkG8wIqppgtC", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "c07fb164-2cc1-4c36-ac3e-d6c46913607e" | |
}, | |
"source": [ | |
"url = 'https://launchpad.net/~mario-mariomedina/+archive/ubuntu/talib/+files'\n", | |
"!wget $url/libta-lib0_0.4.0-oneiric1_amd64.deb -qO libta.deb\n", | |
"!wget $url/ta-lib0-dev_0.4.0-oneiric1_amd64.deb -qO ta.deb\n", | |
"!dpkg -i libta.deb ta.deb\n", | |
"!pip install TA-Lib\n" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Selecting previously unselected package libta-lib0.\n", | |
"(Reading database ... 155113 files and directories currently installed.)\n", | |
"Preparing to unpack libta.deb ...\n", | |
"Unpacking libta-lib0 (0.4.0-oneiric1) ...\n", | |
"Selecting previously unselected package ta-lib0-dev.\n", | |
"Preparing to unpack ta.deb ...\n", | |
"Unpacking ta-lib0-dev (0.4.0-oneiric1) ...\n", | |
"Setting up libta-lib0 (0.4.0-oneiric1) ...\n", | |
"Setting up ta-lib0-dev (0.4.0-oneiric1) ...\n", | |
"Processing triggers for man-db (2.8.3-2ubuntu0.1) ...\n", | |
"Processing triggers for libc-bin (2.27-3ubuntu1.3) ...\n", | |
"/sbin/ldconfig.real: /usr/local/lib/python3.7/dist-packages/ideep4py/lib/libmkldnn.so.0 is not a symbolic link\n", | |
"\n", | |
"Collecting TA-Lib\n", | |
" Downloading TA-Lib-0.4.24.tar.gz (269 kB)\n", | |
"\u001b[K |████████████████████████████████| 269 kB 5.3 MB/s \n", | |
"\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from TA-Lib) (1.21.5)\n", | |
"Building wheels for collected packages: TA-Lib\n", | |
" Building wheel for TA-Lib (setup.py) ... \u001b[?25l\u001b[?25hdone\n", | |
" Created wheel for TA-Lib: filename=TA_Lib-0.4.24-cp37-cp37m-linux_x86_64.whl size=1465745 sha256=82b86a91aad309653683fa20ea9491d279ab8c645e4b2df0fd741040e9aa167c\n", | |
" Stored in directory: /root/.cache/pip/wheels/02/b1/a5/aca31e8cdd0137d7a83bf72237056b8705663dd1f9b5eac11e\n", | |
"Successfully built TA-Lib\n", | |
"Installing collected packages: TA-Lib\n", | |
"Successfully installed TA-Lib-0.4.24\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "eoa-H9Cge0s_", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "8812b6f2-b8f2-4e3f-b077-bf5a8982d642" | |
}, | |
"source": [ | |
"!pip install yfinance" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Collecting yfinance\n", | |
" Downloading yfinance-0.1.70-py2.py3-none-any.whl (26 kB)\n", | |
"Requirement already satisfied: multitasking>=0.0.7 in /usr/local/lib/python3.7/dist-packages (from yfinance) (0.0.10)\n", | |
"Collecting lxml>=4.5.1\n", | |
" Downloading lxml-4.7.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (6.4 MB)\n", | |
"\u001b[K |████████████████████████████████| 6.4 MB 7.7 MB/s \n", | |
"\u001b[?25hRequirement already satisfied: pandas>=0.24.0 in /usr/local/lib/python3.7/dist-packages (from yfinance) (1.3.5)\n", | |
"Collecting requests>=2.26\n", | |
" Downloading requests-2.27.1-py2.py3-none-any.whl (63 kB)\n", | |
"\u001b[K |████████████████████████████████| 63 kB 1.4 MB/s \n", | |
"\u001b[?25hRequirement already satisfied: numpy>=1.15 in /usr/local/lib/python3.7/dist-packages (from yfinance) (1.21.5)\n", | |
"Requirement already satisfied: pytz>=2017.3 in /usr/local/lib/python3.7/dist-packages (from pandas>=0.24.0->yfinance) (2018.9)\n", | |
"Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.7/dist-packages (from pandas>=0.24.0->yfinance) (2.8.2)\n", | |
"Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.7.3->pandas>=0.24.0->yfinance) (1.15.0)\n", | |
"Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.7/dist-packages (from requests>=2.26->yfinance) (2.0.11)\n", | |
"Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests>=2.26->yfinance) (2021.10.8)\n", | |
"Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests>=2.26->yfinance) (1.24.3)\n", | |
"Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests>=2.26->yfinance) (2.10)\n", | |
"Installing collected packages: requests, lxml, yfinance\n", | |
" Attempting uninstall: requests\n", | |
" Found existing installation: requests 2.23.0\n", | |
" Uninstalling requests-2.23.0:\n", | |
" Successfully uninstalled requests-2.23.0\n", | |
" Attempting uninstall: lxml\n", | |
" Found existing installation: lxml 4.2.6\n", | |
" Uninstalling lxml-4.2.6:\n", | |
" Successfully uninstalled lxml-4.2.6\n", | |
"\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", | |
"google-colab 1.0.0 requires requests~=2.23.0, but you have requests 2.27.1 which is incompatible.\n", | |
"datascience 0.10.6 requires folium==0.2.1, but you have folium 0.8.3 which is incompatible.\u001b[0m\n", | |
"Successfully installed lxml-4.7.1 requests-2.27.1 yfinance-0.1.70\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "k19AWcsnm6z2", | |
"outputId": "6e716192-d60e-4fcb-b8d1-db6aa5c2f34c" | |
}, | |
"source": [ | |
"%pip install backtrader" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Collecting backtrader\n", | |
" Downloading backtrader-1.9.76.123-py2.py3-none-any.whl (410 kB)\n", | |
"\u001b[?25l\r\u001b[K |▉ | 10 kB 20.6 MB/s eta 0:00:01\r\u001b[K |█▋ | 20 kB 13.1 MB/s eta 0:00:01\r\u001b[K |██▍ | 30 kB 9.3 MB/s eta 0:00:01\r\u001b[K |███▏ | 40 kB 8.3 MB/s eta 0:00:01\r\u001b[K |████ | 51 kB 5.8 MB/s eta 0:00:01\r\u001b[K |████▉ | 61 kB 5.9 MB/s eta 0:00:01\r\u001b[K |█████▋ | 71 kB 5.7 MB/s eta 0:00:01\r\u001b[K |██████▍ | 81 kB 6.3 MB/s eta 0:00:01\r\u001b[K |███████▏ | 92 kB 6.2 MB/s eta 0:00:01\r\u001b[K |████████ | 102 kB 5.4 MB/s eta 0:00:01\r\u001b[K |████████▉ | 112 kB 5.4 MB/s eta 0:00:01\r\u001b[K |█████████▋ | 122 kB 5.4 MB/s eta 0:00:01\r\u001b[K |██████████▍ | 133 kB 5.4 MB/s eta 0:00:01\r\u001b[K |███████████▏ | 143 kB 5.4 MB/s eta 0:00:01\r\u001b[K |████████████ | 153 kB 5.4 MB/s eta 0:00:01\r\u001b[K |████████████▉ | 163 kB 5.4 MB/s eta 0:00:01\r\u001b[K |█████████████▋ | 174 kB 5.4 MB/s eta 0:00:01\r\u001b[K |██████████████▍ | 184 kB 5.4 MB/s eta 0:00:01\r\u001b[K |███████████████▏ | 194 kB 5.4 MB/s eta 0:00:01\r\u001b[K |████████████████ | 204 kB 5.4 MB/s eta 0:00:01\r\u001b[K |████████████████▉ | 215 kB 5.4 MB/s eta 0:00:01\r\u001b[K |█████████████████▋ | 225 kB 5.4 MB/s eta 0:00:01\r\u001b[K |██████████████████▍ | 235 kB 5.4 MB/s eta 0:00:01\r\u001b[K |███████████████████▏ | 245 kB 5.4 MB/s eta 0:00:01\r\u001b[K |████████████████████ | 256 kB 5.4 MB/s eta 0:00:01\r\u001b[K |████████████████████▊ | 266 kB 5.4 MB/s eta 0:00:01\r\u001b[K |█████████████████████▋ | 276 kB 5.4 MB/s eta 0:00:01\r\u001b[K |██████████████████████▍ | 286 kB 5.4 MB/s eta 0:00:01\r\u001b[K |███████████████████████▏ | 296 kB 5.4 MB/s eta 0:00:01\r\u001b[K |████████████████████████ | 307 kB 5.4 MB/s eta 0:00:01\r\u001b[K |████████████████████████▊ | 317 kB 5.4 MB/s eta 0:00:01\r\u001b[K |█████████████████████████▋ | 327 kB 5.4 MB/s eta 0:00:01\r\u001b[K |██████████████████████████▍ | 337 kB 5.4 MB/s eta 0:00:01\r\u001b[K |███████████████████████████▏ | 348 kB 5.4 MB/s eta 0:00:01\r\u001b[K |████████████████████████████ | 358 kB 5.4 MB/s eta 0:00:01\r\u001b[K |████████████████████████████▊ | 368 kB 5.4 MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▋ | 378 kB 5.4 MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▍ | 389 kB 5.4 MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▏| 399 kB 5.4 MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 409 kB 5.4 MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 410 kB 5.4 MB/s \n", | |
"\u001b[?25hInstalling collected packages: backtrader\n", | |
"Successfully installed backtrader-1.9.76.123\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "8BYy_V_hBNWN" | |
}, | |
"source": [ | |
"import talib\n", | |
"import yfinance as yf\n", | |
"import backtrader as bt\n", | |
"import requests\n", | |
"import numpy as np\n", | |
"import pandas as pd\n", | |
"import seaborn as sns\n", | |
"import matplotlib.pyplot as plt\n", | |
"import plotly.graph_objects as go\n", | |
"\n", | |
"from datetime import datetime" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "OPlSvliyCL-e" | |
}, | |
"source": [ | |
"# matplotlib configurations\n", | |
"%matplotlib inline\n", | |
"plt.style.use('ggplot')" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "dLlGY5geCFmL" | |
}, | |
"source": [ | |
"### Load stock prices" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "kUX7_23mfJHe" | |
}, | |
"source": [ | |
"def get_stock_data(symbol, start, end):\n", | |
" ticker = yf.Ticker(symbol)\n", | |
" df = ticker.history(start=start, end=end, auto_adjust=False, rounding=True, interval=\"15m\")\n", | |
" return df" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "YqH1AgdDKSXr" | |
}, | |
"source": [ | |
"def get_stock_data_old(symbol, from_date, end_date):\n", | |
" from_date_epoch = int(datetime.strptime(from_date, '%Y-%m-%d').timestamp())\n", | |
" end_date_epoch = int(datetime.strptime(end_date, '%Y-%m-%d').timestamp())\n", | |
" # print(from_date_epoch, end_date_epoch)\n", | |
" data = pd.read_json(f'https://query1.finance.yahoo.com/v8/finance/chart/{symbol}.NS?period1={from_date_epoch}&period2={end_date_epoch}&interval=1d&frequency=1d&filter=history')\n", | |
" result = data['chart']['result'][0]\n", | |
" quotes = result['indicators']['quote'][0]\n", | |
" df = pd.DataFrame(quotes)\n", | |
" df['datetime'] = pd.to_datetime(result['timestamp'], unit='s') # convert epoch to datetime\n", | |
" df['date'] = df['datetime'].dt.strftime('%d-%m-%Y') # convert datetime to dd-mm-yyyy format\n", | |
" df.set_index('datetime', inplace=True)\n", | |
" df = df.dropna()\n", | |
" return df" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 238 | |
}, | |
"id": "JaIus-LyLOfS", | |
"outputId": "50099247-a382-4a8a-de48-c691e1a43c61" | |
}, | |
"source": [ | |
"stock_data = get_stock_data('TCS.NS', '2022-01-01', '2022-02-15')\n", | |
"stock_data.head()" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div id=\"df-ad739ae1-26e8-46b4-b6e0-e26f12a362d1\">\n", | |
" <div class=\"colab-df-container\">\n", | |
" <div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>Open</th>\n", | |
" <th>High</th>\n", | |
" <th>Low</th>\n", | |
" <th>Close</th>\n", | |
" <th>Adj Close</th>\n", | |
" <th>Volume</th>\n", | |
" <th>Dividends</th>\n", | |
" <th>Stock Splits</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Datetime</th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>2022-01-03 09:15:00+05:30</th>\n", | |
" <td>3748.35</td>\n", | |
" <td>3785.00</td>\n", | |
" <td>3745.45</td>\n", | |
" <td>3783.50</td>\n", | |
" <td>3783.50</td>\n", | |
" <td>187329</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2022-01-03 09:30:00+05:30</th>\n", | |
" <td>3782.90</td>\n", | |
" <td>3809.85</td>\n", | |
" <td>3782.90</td>\n", | |
" <td>3804.00</td>\n", | |
" <td>3804.00</td>\n", | |
" <td>281740</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2022-01-03 09:45:00+05:30</th>\n", | |
" <td>3804.10</td>\n", | |
" <td>3808.35</td>\n", | |
" <td>3793.10</td>\n", | |
" <td>3802.05</td>\n", | |
" <td>3802.05</td>\n", | |
" <td>117013</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2022-01-03 10:00:00+05:30</th>\n", | |
" <td>3802.40</td>\n", | |
" <td>3803.95</td>\n", | |
" <td>3796.00</td>\n", | |
" <td>3800.15</td>\n", | |
" <td>3800.15</td>\n", | |
" <td>81673</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2022-01-03 10:15:00+05:30</th>\n", | |
" <td>3801.45</td>\n", | |
" <td>3815.90</td>\n", | |
" <td>3799.00</td>\n", | |
" <td>3814.00</td>\n", | |
" <td>3814.00</td>\n", | |
" <td>169139</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-ad739ae1-26e8-46b4-b6e0-e26f12a362d1')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
" \n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-ad739ae1-26e8-46b4-b6e0-e26f12a362d1 button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-ad739ae1-26e8-46b4-b6e0-e26f12a362d1');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
" Open High ... Dividends Stock Splits\n", | |
"Datetime ... \n", | |
"2022-01-03 09:15:00+05:30 3748.35 3785.00 ... 0.0 0\n", | |
"2022-01-03 09:30:00+05:30 3782.90 3809.85 ... 0.0 0\n", | |
"2022-01-03 09:45:00+05:30 3804.10 3808.35 ... 0.0 0\n", | |
"2022-01-03 10:00:00+05:30 3802.40 3803.95 ... 0.0 0\n", | |
"2022-01-03 10:15:00+05:30 3801.45 3815.90 ... 0.0 0\n", | |
"\n", | |
"[5 rows x 8 columns]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 50 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "kFymZMQtVrFG" | |
}, | |
"source": [ | |
"### View charts" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "LrhJpJAONJGW" | |
}, | |
"source": [ | |
"import plotly.express as px\n", | |
"\n", | |
"def display_line_chart(data):\n", | |
" fig = px.line(data, x=data.index, y=\"Close\")\n", | |
" fig.show()" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "PyuYyMZbU2L0" | |
}, | |
"source": [ | |
"def display_candlestick_chart(data):\n", | |
" candlestick_data = go.Candlestick(x=data.index,\n", | |
" open=data['Open'],\n", | |
" high=data['High'],\n", | |
" low=data['Low'],\n", | |
" close=data['Close'])\n", | |
" fig = go.Figure(data=[candlestick_data])\n", | |
" fig.show()" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "S3Us6JD2M6Ty" | |
}, | |
"source": [ | |
"### Strategies" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "gKta70YRdknO" | |
}, | |
"source": [ | |
"#### Base Strategy\n", | |
"Base strategy class which implements core functionalities which child classes may override if required" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "7bxKpvwzcdKW" | |
}, | |
"source": [ | |
"class MyStrategy(bt.Strategy):\n", | |
" \"\"\"\n", | |
" Overridden form of Backtrader Strategy to implement common functionalities\n", | |
" \"\"\"\n", | |
" def __init__(self):\n", | |
" # datas\n", | |
" self.data_high = self.datas[0].high\n", | |
" self.data_low = self.datas[0].low\n", | |
" self.data_open = self.datas[0].open\n", | |
" self.data_close = self.datas[0].close\n", | |
"\n", | |
" # ongoing order details\n", | |
" self.order = None\n", | |
" self.orefs = []\n", | |
"\n", | |
" def log(self, txt, dt=None):\n", | |
" dt = dt or self.datas[0].datetime.date(0)\n", | |
" print(f'{dt.isoformat()} {txt}')\n", | |
"\n", | |
" def notify_trade(self, trade):\n", | |
" if not trade.isclosed:\n", | |
" return\n", | |
" self.log(\"Trade Summary, gross: %.2f, net: %.2f, duration: %d\\n\" % (trade.pnl, trade.pnlcomm, trade.barlen))\n", | |
"\n", | |
" def notify_order(self, order):\n", | |
" if order.status in [order.Submitted, order.Accepted]:\n", | |
" return\n", | |
"\n", | |
" if order.status in [order.Completed]:\n", | |
" if order.isbuy():\n", | |
" # self.log(f'BUY EXECUTED, {order.executed.price:.2f}')\n", | |
" pass\n", | |
" elif order.issell():\n", | |
" # self.log(f'SELL EXECUTED, {order.executed.price:.2f}')\n", | |
" pass\n", | |
"\n", | |
" elif order.status in [order.Margin, order.Rejected]:\n", | |
" self.log(f'Order failed({order.getstatusname()})')" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "Kh-3Ju9V32ra" | |
}, | |
"source": [ | |
"#### Sample Strategy to print close price" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "lJA6l9H8p5Ch" | |
}, | |
"source": [ | |
"class PrintClose(bt.Strategy):\n", | |
" def __init__(self):\n", | |
" #Keep a reference to the \"close\" line in the data[0] dataseries\n", | |
" self.dataclose = self.datas[0].close\n", | |
" self.datadate = self.datas[0].datetime\n", | |
"\n", | |
" def log(self, txt, close, dt):\n", | |
" print(f'{txt} {dt.isoformat()} {close:.2f}') #Print date and close\n", | |
"\n", | |
" def next(self):\n", | |
" # print(self.datas[0].datetime.date(0), end=\" \")\n", | |
" self.log('Close: ', self.dataclose[0], self.datadate.date(0))\n" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "X0WZa_Wv38Dc" | |
}, | |
"source": [ | |
"#### Moving average crossover strategy" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "QPF8gDdv3-z3" | |
}, | |
"source": [ | |
"class MACrossover(bt.Strategy):\n", | |
" # moving average params\n", | |
" params = (('pfast', 10), ('pslow', 20))\n", | |
"\n", | |
" def log(self, txt, dt=None):\n", | |
" dt = dt or self.datas[0].datetime.date(0)\n", | |
" # print(f'{dt.isoformat()} {txt}')\n", | |
"\n", | |
" def __init__(self):\n", | |
" self.dataclose = self.datas[0].close\n", | |
"\n", | |
" # ongoing order details\n", | |
" self.order = None\n", | |
"\n", | |
" self.slow_sma = bt.indicators.MovingAverageSimple(self.datas[0], period=self.params.pslow)\n", | |
" self.fast_sma = bt.indicators.MovingAverageSimple(self.datas[0], period=self.params.pfast)\n", | |
"\n", | |
" def notify_order(self, order):\n", | |
" if order.status in [order.Submitted, order.Accepted]:\n", | |
" return\n", | |
"\n", | |
" if order.status in [order.Completed]:\n", | |
" if order.isbuy():\n", | |
" self.log(f'BUY EXECUTED, {order.executed.price:.2f}')\n", | |
" elif order.issell():\n", | |
" self.log(f'SELL EXECUTED, {order.executed.price:.2f}')\n", | |
" self.bar_executed = len(self)\n", | |
"\n", | |
" elif order.status in [order.Canceled, order.Margin, order.Rejected]:\n", | |
" self.log('Order Canceled/Margin/Rejected')\n", | |
"\n", | |
" # Reset orders\n", | |
" self.order = None\n", | |
"\n", | |
" def next(self):\n", | |
" # Check for open orders\n", | |
" if self.order:\n", | |
" return\n", | |
"\n", | |
" # Check if we are in the market\n", | |
" if not self.position:\n", | |
" # We are not in the market, look for a signal to OPEN trades\n", | |
"\n", | |
" #If the 20 SMA is above the 50 SMA\n", | |
" if self.fast_sma[0] > self.slow_sma[0] and self.fast_sma[-1] < self.slow_sma[-1]:\n", | |
" self.log(f'BUY Triggered, {self.dataclose[0]:2f}')\n", | |
" # Keep track of the created order to avoid a 2nd order\n", | |
" self.order = self.buy()\n", | |
" #Otherwise if the 20 SMA is below the 50 SMA\n", | |
" elif self.fast_sma[0] < self.slow_sma[0] and self.fast_sma[-1] > self.slow_sma[-1]:\n", | |
" self.log(f'SELL Triggered, {self.dataclose[0]:2f}')\n", | |
" # Keep track of the created order to avoid a 2nd order\n", | |
" self.order = self.sell()\n", | |
" else:\n", | |
" # We are already in the market, look for a signal to CLOSE trades\n", | |
" if len(self) >= (self.bar_executed + 5):\n", | |
" self.log(f'CLOSE CREATE {self.dataclose[0]:2f}')\n", | |
" self.order = self.close()\n" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "0s_zX5stN50b" | |
}, | |
"source": [ | |
"#### Test Strategy" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "4iSCSkDRuL6P" | |
}, | |
"source": [ | |
"class TestStrategy(bt.Strategy):\n", | |
"\n", | |
" def log(self, txt, dt=None):\n", | |
" ''' Logging function fot this strategy'''\n", | |
" dt = dt or self.datas[0].datetime.date(0)\n", | |
" print('%s, %s' % (dt.isoformat(), txt))\n", | |
"\n", | |
" def __init__(self):\n", | |
" # Keep a reference to the \"close\" line in the data[0] dataseries\n", | |
" self.dataclose = self.datas[0].close\n", | |
"\n", | |
" def next(self):\n", | |
" # Simply log the closing price of the series from the reference\n", | |
" self.log('Close, %.2f' % self.dataclose[0])\n", | |
"\n", | |
" if self.dataclose[0] < self.dataclose[-1]:\n", | |
" # current close less than previous close\n", | |
"\n", | |
" if self.dataclose[-1] < self.dataclose[-2]:\n", | |
" # previous close less than the previous close\n", | |
"\n", | |
" # BUY, BUY, BUY!!! (with all possible default parameters)\n", | |
" self.log('BUY CREATE, %.2f' % self.dataclose[0])\n", | |
" self.buy()" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "2u7XPCRsN_e9" | |
}, | |
"source": [ | |
"#### Buy And Hold Strategy" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "C8pbzJ-TvYMe" | |
}, | |
"source": [ | |
"class BuyAndHold(bt.Strategy):\n", | |
" def start(self):\n", | |
" self.val_start = self.broker.get_cash() # keep the starting cash\n", | |
"\n", | |
" def nextstart(self):\n", | |
" # Buy all the available cash\n", | |
" size = int(self.broker.get_cash() / self.data)\n", | |
" self.buy(size=size)\n", | |
"\n", | |
" def stop(self):\n", | |
" # calculate the actual returns\n", | |
" self.roi = (self.broker.get_value() / self.val_start) - 1.0\n", | |
" print('ROI: {:.2f}%'.format(100.0 * self.roi))" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "_9Tz2aGmUKde" | |
}, | |
"source": [ | |
"#### Marubozu Strategy\n", | |
"\n", | |
"This strategy works on Marubozu candlestick pattern. A marubozu pattern is formed when candle is formed with only body and no shadow. It represents strong directional momentum in market.\n", | |
"\n", | |
"* Result: Fails\n", | |
"* Strike rate: 26%\n", | |
"* ROI: -6.08%" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "w3bYkOMEUPHx" | |
}, | |
"source": [ | |
"from datetime import timedelta\n", | |
"\n", | |
"class MarubozuStrategy(MyStrategy):\n", | |
" params = (\n", | |
" ('rrr', 2), # risk reward ratio\n", | |
" )\n", | |
" def __init__(self):\n", | |
" super().__init__()\n", | |
"\n", | |
" # indicators\n", | |
" self.marubozu = bt.talib.CDLMARUBOZU(self.data.open, self.data.high, self.data.low, self.data.close)\n", | |
"\n", | |
" def notify_order(self, order):\n", | |
" super().notify_order(order)\n", | |
" if order.status in [order.Submitted, order.Accepted]:\n", | |
" return\n", | |
"\n", | |
" if order.status == order.Completed:\n", | |
" self.holdstart = len(self)\n", | |
"\n", | |
" if not order.alive() and order.ref in self.orefs:\n", | |
" self.orefs.remove(order.ref)\n", | |
"\n", | |
" def next(self):\n", | |
" if self.orefs:\n", | |
" return #pending orders do nothing\n", | |
"\n", | |
" # Check if we are in the market\n", | |
" if not self.position:\n", | |
" # We are not in the market, look for a signal to OPEN trades\n", | |
" if self.marubozu[0] == 100:\n", | |
" # strong buy momentum, open long position\n", | |
" stoploss = self.data_low[0] # Low of marubozu will act as stoploss\n", | |
" target = (self.params.rrr * (self.data[0] - stoploss)) + self.data[0]\n", | |
" self.log(f'Long : {self.data[0]:.2f}, Target: {target:.2f}, Stoploss: {stoploss:.2f}', self.datas[0].datetime.datetime(0) + timedelta(hours=5, minutes=30))\n", | |
" os = self.buy_bracket(price=self.data[0], limitprice=target, stopprice=stoploss)\n", | |
" self.orefs = [o.ref for o in os]\n", | |
" elif self.marubozu[0] == -100:\n", | |
" # strong buy momentum, open long position\n", | |
" stoploss = self.data_high[0] # High of marubozu will act as stoploss\n", | |
" target = self.data[0] - (self.params.rrr * (stoploss - self.data[0]))\n", | |
" self.log(f'Short : {self.data[0]:.2f}, Target: {target:.2f}, Stoploss: {stoploss:.2f}', self.datas[0].datetime.datetime(0) + timedelta(hours=5, minutes=30))\n", | |
" os = self.sell_bracket(price=self.data[0], limitprice=target, stopprice=stoploss)\n", | |
" self.orefs = [o.ref for o in os]" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "o4hqpkzTnQtc" | |
}, | |
"source": [ | |
"#### Hammer / Hanging Man strategy\n", | |
"This strategy is based on candlestick pattern formed with long lower shadow representing trend reversal.\n", | |
"\n", | |
"* Result: Successful\n", | |
"* Strike Rate: 70.83%\n", | |
"* ROI: 11.44%" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "1gvn3jACnhjt" | |
}, | |
"source": [ | |
"class HammerStrategy(MyStrategy):\n", | |
" params = (\n", | |
" ('rrr', 1.5), # risk reward ratio\n", | |
" )\n", | |
" def __init__(self):\n", | |
" super().__init__()\n", | |
"\n", | |
" # indicators\n", | |
" self.hammer = bt.talib.CDLHAMMER(self.data.open, self.data.high, self.data.low, self.data.close)\n", | |
" self.hangingman = bt.talib.CDLHANGINGMAN(self.data.open, self.data.high, self.data.low, self.data.close)\n", | |
"\n", | |
" def notify_order(self, order):\n", | |
" super().notify_order(order)\n", | |
" if order.status in [order.Submitted, order.Accepted]:\n", | |
" return\n", | |
"\n", | |
" if order.status == order.Completed:\n", | |
" self.holdstart = len(self)\n", | |
"\n", | |
" if not order.alive() and order.ref in self.orefs:\n", | |
" self.orefs.remove(order.ref)\n", | |
"\n", | |
" def get_support(self, price):\n", | |
" return levels.loc[levels < price].max()\n", | |
"\n", | |
" def get_resistance(self, price):\n", | |
" return levels.loc[levels > price].min()\n", | |
"\n", | |
" def is_close(self, price, level, range=5):\n", | |
" return abs(price - level) < range\n", | |
"\n", | |
"\n", | |
" def next(self):\n", | |
" if self.orefs:\n", | |
" return #pending orders do nothing\n", | |
"\n", | |
" # Check if we are in the market\n", | |
" if not self.position:\n", | |
" # We are not in the market, look for a signal to OPEN trades\n", | |
" if self.hammer[0] == 100 or self.hangingman[0] == 100:\n", | |
" # trend reversal marking entry of bulls, open long position\n", | |
" sp = self.get_support(self.data[0])\n", | |
" rs = self.get_resistance(self.data[0])\n", | |
" if self.is_close(self.data[0], sp):\n", | |
" stoploss = min(self.data_low[0], sp) # Low of hammer or support will act as stoploss\n", | |
" target = rs # (self.params.rrr * (self.data[0] - stoploss)) + self.data[0]\n", | |
" self.log(f'Long : {self.data[0]:.2f}, Target: {target:.2f}, Stoploss: {stoploss:.2f}')\n", | |
" os = self.buy_bracket(exectype=bt.Order.Market, price=self.data[0], limitprice=target, stopprice=stoploss)\n", | |
" self.orefs = [o.ref for o in os]\n", | |
"\n", | |
" elif self.hammer[0] == -100 or self.hangingman[0] == -100:\n", | |
" # trend reversal marking entry of bears, open short position\n", | |
" sp = self.get_support(self.data[0])\n", | |
" rs = self.get_resistance(self.data[0])\n", | |
" if self.is_close(self.data[0], rs):\n", | |
" stoploss = max(self.data_high[0], rs) # High of hanging man will act as stoploss\n", | |
" target = sp # self.data[0] - (self.params.rrr * (stoploss - self.data[0]))\n", | |
" self.log(f'Short : {self.data[0]:.2f}, Target: {target:.2f}, Stoploss: {stoploss:.2f}')\n", | |
" os = self.sell_bracket(price=self.data[0], limitprice=target, stopprice=stoploss)\n", | |
" self.orefs = [o.ref for o in os]" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "JWOHawiFjV0G" | |
}, | |
"source": [ | |
"#### Engulfing Pattern\n", | |
"This candle is a trend reversal pattern.\n", | |
"1. Stock is in downtrend.\n", | |
"2. P1 candle is another red candle.\n", | |
"3. P2 candle is blue candle such that it completely engulfs previous candle.\n", | |
"\n", | |
"Vice-versa for bearish engulfing pattern." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "1GLgOfrakFNW" | |
}, | |
"source": [ | |
"class EngulfingStrategy(MyStrategy):\n", | |
" params = (\n", | |
" ('rrr', 1.5), # risk reward ratio\n", | |
" ('trend_period', 14),\n", | |
" ('strength_threshold', 25)\n", | |
" )\n", | |
" def __init__(self):\n", | |
" super().__init__()\n", | |
"\n", | |
" # indicators\n", | |
" self.engulfing = bt.talib.CDLENGULFING(self.data.open, self.data.high, self.data.low, self.data.close)\n", | |
" # Add directional indicator to identify trend\n", | |
" self.plus_di = bt.talib.PLUS_DI(self.data.high, self.data.low, self.data_close, timeperiod=self.params.trend_period)\n", | |
" self.minus_di = bt.talib.MINUS_DI(self.data.high, self.data.low, self.data_close, timeperiod=self.params.trend_period)\n", | |
" self.trend_strength = bt.talib.ADX(self.data_high, self.data_low, self.data_close, timeperiod=self.params.trend_period)\n", | |
"\n", | |
" def notify_order(self, order):\n", | |
" super().notify_order(order)\n", | |
" if order.status in [order.Submitted, order.Accepted]:\n", | |
" return\n", | |
"\n", | |
" if order.status == order.Completed:\n", | |
" self.holdstart = len(self)\n", | |
"\n", | |
" if not order.alive() and order.ref in self.orefs:\n", | |
" self.orefs.remove(order.ref)\n", | |
"\n", | |
" def next(self):\n", | |
" if self.orefs:\n", | |
" return #pending orders do nothing\n", | |
"\n", | |
" # Check if we are in the market\n", | |
"\n", | |
" if self.engulfing[0] == 100:\n", | |
" self.log(f'bullish minus_di{self.minus_di[0]:.2f}, plus_di{self.plus_di[0]:.2f}, trend_strength{self.trend_strength[0]:.2f}')\n", | |
" if self.engulfing[0] == -100:\n", | |
" self.log(f'bearish minus_di{self.minus_di[0]:.2f}, plus_di{self.plus_di[0]:.2f}, trend_strength{self.trend_strength[0]:.2f}')\n", | |
" if not self.position:\n", | |
" # We are not in the market, look for a signal to OPEN trades\n", | |
" if self.minus_di[0] > self.plus_di[0] and self.trend_strength > self.params.strength_threshold and self.engulfing[0] == 100:\n", | |
" # trend reversal marking entry of bulls, open long position\n", | |
" stoploss = min(self.data_low[0], self.data_low[-1]) # Minumum low of p1 or p2 will act as stoploss\n", | |
" target = (self.params.rrr * (self.data[0] - stoploss)) + self.data[0]\n", | |
" self.log(f'Long : {self.data[0]:.2f}, Target: {target:.2f}, Stoploss: {stoploss:.2f}')\n", | |
" os = self.buy_bracket(exectype=bt.Order.Market, price=self.data[0], limitprice=target, stopprice=stoploss)\n", | |
" self.orefs = [o.ref for o in os]\n", | |
"\n", | |
" elif self.plus_di[0] > self.minus_di[0] and self.trend_strength > self.params.strength_threshold and self.engulfing[0] == -100:\n", | |
" # trend reversal marking entry of bears, open short position\n", | |
" stoploss = max(self.data_high[0], self.data_high[-1]) # Max High of p1 or p2 man will act as stoploss\n", | |
" target = self.data[0] - (self.params.rrr * (stoploss - self.data[0]))\n", | |
" self.log(f'Short : {self.data[0]:.2f}, Target: {target:.2f}, Stoploss: {stoploss:.2f}')\n", | |
" os = self.sell_bracket(price=self.data[0], limitprice=target, stopprice=stoploss)\n", | |
" self.orefs = [o.ref for o in os]" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "Mwvf1Spmq2zl" | |
}, | |
"source": [ | |
"#### Morning Star Pattern\n", | |
"This candle is a trend reversal pattern.\n", | |
"1. Stock is in downtrend.\n", | |
"2. P1 candle is another red candle.\n", | |
"3. P2 candle is gap down opening forming doji or spinning top.\n", | |
"3. P3 candle has gap up opening forming blue candle.\n", | |
"\n", | |
"Vice-versa for evening star pattern." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "qpQcb584rYws" | |
}, | |
"source": [ | |
"class MorningStarPattern(MyStrategy):\n", | |
" params = (\n", | |
" ('rrr', 1.5), # risk reward ratio\n", | |
" ('trend_period', 7),\n", | |
" ('strength_threshold', 25)\n", | |
" )\n", | |
" def __init__(self):\n", | |
" super().__init__()\n", | |
"\n", | |
" # indicators\n", | |
" self.morning_star = bt.talib.CDLMORNINGSTAR(self.data.open, self.data.high, self.data.low, self.data.close)\n", | |
" self.evening_star = bt.talib.CDLEVENINGSTAR(self.data.open, self.data.high, self.data.low, self.data.close)\n", | |
" # Add directional indicator to identify trend\n", | |
" self.plus_di = bt.talib.PLUS_DI(self.data.high, self.data.low, self.data_close, timeperiod=self.params.trend_period)\n", | |
" self.minus_di = bt.talib.MINUS_DI(self.data.high, self.data.low, self.data_close, timeperiod=self.params.trend_period)\n", | |
" self.trend_strength = bt.talib.ADX(self.data_high, self.data_low, self.data_close, timeperiod=self.params.trend_period)\n", | |
"\n", | |
" def notify_order(self, order):\n", | |
" super().notify_order(order)\n", | |
" if order.status in [order.Submitted, order.Accepted]:\n", | |
" return\n", | |
"\n", | |
" if order.status == order.Completed:\n", | |
" self.holdstart = len(self)\n", | |
"\n", | |
" if not order.alive() and order.ref in self.orefs:\n", | |
" self.orefs.remove(order.ref)\n", | |
"\n", | |
" def next(self):\n", | |
" if self.orefs:\n", | |
" return #pending orders do nothing\n", | |
"\n", | |
" # Check if we are in the market\n", | |
" if not self.position:\n", | |
" if self.morning_star[0] == 100 or self.morning_star[0] == -100:\n", | |
" self.log(f'morning star formed minus_di{self.minus_di[0]:.2f}, plus_di{self.plus_di[0]:.2f}, trend_strength{self.trend_strength[0]}')\n", | |
" if self.evening_star[0] == 100 or self.evening_star[0] == -100:\n", | |
" self.log(f'evening_star {self.evening_star[0]} formed minus_di{self.minus_di[0]:.2f}, plus_di{self.plus_di[0]:.2f}, trend_strength{self.trend_strength[0]}')\n", | |
" # We are not in the market, look for a signal to OPEN trades\n", | |
" if self.minus_di[0] > self.plus_di[0] and self.trend_strength[0] > self.params.strength_threshold and self.morning_star[0] == 100:\n", | |
" # trend reversal marking entry of bulls, open long position\n", | |
" stoploss = min(self.data_low[0], self.data_low[-1]) # Minumum low of p1 or p2 will act as stoploss\n", | |
" target = (self.params.rrr * (self.data[0] - stoploss)) + self.data[0]\n", | |
" self.log(f'Long : {self.data[0]:.2f}, Target: {target:.2f}, Stoploss: {stoploss:.2f}')\n", | |
" os = self.buy_bracket(exectype=bt.Order.Market, price=self.data[0], limitprice=target, stopprice=stoploss)\n", | |
" self.orefs = [o.ref for o in os]\n", | |
"\n", | |
" elif self.plus_di[0] > self.minus_di[0] and self.trend_strength[0] > self.params.strength_threshold and self.evening_star[0] == -100:\n", | |
" # trend reversal marking entry of bears, open short position\n", | |
" stoploss = max(self.data_high[0], self.data_high[-1]) # Max High of p1 or p2 man will act as stoploss\n", | |
" target = self.data[0] - (self.params.rrr * (stoploss - self.data[0]))\n", | |
" self.log(f'Short : {self.data[0]:.2f}, Target: {target:.2f}, Stoploss: {stoploss:.2f}')\n", | |
" os = self.sell_bracket(price=self.data[0], limitprice=target, stopprice=stoploss)\n", | |
" self.orefs = [o.ref for o in os]" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "voenrvQ82QWR" | |
}, | |
"source": [ | |
"#### 3 Soldiers" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "se0N8a4Y2S8S" | |
}, | |
"source": [ | |
"class ThreeSoldiers(MyStrategy):\n", | |
" params = (\n", | |
" ('rrr', 1.5), # risk reward ratio\n", | |
" ('trend_period', 7),\n", | |
" ('strength_threshold', 25)\n", | |
" )\n", | |
" def __init__(self):\n", | |
" super().__init__()\n", | |
" # indicators\n", | |
" self.white_soldiers = bt.talib.CDL3WHITESOLDIERS(self.data.open, self.data.high, self.data.low, self.data.close)\n", | |
" # Add directional indicator to identify trend\n", | |
" self.plus_di = bt.talib.PLUS_DI(self.data.high, self.data.low, self.data_close, timeperiod=self.params.trend_period)\n", | |
" self.minus_di = bt.talib.MINUS_DI(self.data.high, self.data.low, self.data_close, timeperiod=self.params.trend_period)\n", | |
" self.trend_strength = bt.talib.ADX(self.data_high, self.data_low, self.data_close, timeperiod=self.params.trend_period)\n", | |
"\n", | |
" def notify_order(self, order):\n", | |
" super().notify_order(order)\n", | |
" if order.status in [order.Submitted, order.Accepted]:\n", | |
" return\n", | |
"\n", | |
" if order.status == order.Completed:\n", | |
" self.holdstart = len(self)\n", | |
"\n", | |
" if not order.alive() and order.ref in self.orefs:\n", | |
" self.orefs.remove(order.ref)\n", | |
"\n", | |
" def next(self):\n", | |
" if self.orefs:\n", | |
" return #pending orders do nothing\n", | |
"\n", | |
" # Check if we are in the market\n", | |
" if not self.position:\n", | |
" # We are not in the market, look for a signal to OPEN trades\n", | |
" if self.white_soldiers[0] == 100:\n", | |
" # trend reversal marking entry of bulls, open long position\n", | |
" stoploss = min(self.data_low[0], self.data_low[-1]) # Minumum low of p1 or p2 will act as stoploss\n", | |
" target = (self.params.rrr * (self.data[0] - stoploss)) + self.data[0]\n", | |
" self.log(f'Long : {self.data[0]:.2f}, Target: {target:.2f}, Stoploss: {stoploss:.2f}')\n", | |
" os = self.buy_bracket(exectype=bt.Order.Market, price=self.data[0], limitprice=target, stopprice=stoploss)\n", | |
" self.orefs = [o.ref for o in os]\n", | |
"\n", | |
" elif self.white_soldiers[0] == -100:\n", | |
" # trend reversal marking entry of bears, open short position\n", | |
" stoploss = max(self.data_high[0], self.data_high[-1]) # Max High of p1 or p2 man will act as stoploss\n", | |
" target = self.data[0] - (self.params.rrr * (stoploss - self.data[0]))\n", | |
" self.log(f'Short : {self.data[0]:.2f}, Target: {target:.2f}, Stoploss: {stoploss:.2f}')\n", | |
" os = self.sell_bracket(price=self.data[0], limitprice=target, stopprice=stoploss)\n", | |
" self.orefs = [o.ref for o in os]" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "3jmTRgPtgH24" | |
}, | |
"source": [ | |
"# Support and resistance strategy\n", | |
"class SupportResistanceStrategy(MyStrategy):\n", | |
" params = (\n", | |
" ('rrr', 1.5), # risk reward ratio\n", | |
" ('trend_period', 7),\n", | |
" ('strength_threshold', 25)\n", | |
" )\n", | |
" def __init__(self):\n", | |
" super().__init__()\n", | |
"\n", | |
" def notify_order(self, order):\n", | |
" super().notify_order(order)\n", | |
" if order.status in [order.Submitted, order.Accepted]:\n", | |
" return\n", | |
"\n", | |
" if order.status == order.Completed:\n", | |
" self.holdstart = len(self)\n", | |
"\n", | |
" if not order.alive() and order.ref in self.orefs:\n", | |
" self.orefs.remove(order.ref)\n", | |
"\n", | |
" def get_support(self, price):\n", | |
" return levels.loc[levels < price].max()\n", | |
"\n", | |
" def get_resistance(self, price):\n", | |
" return levels.loc[levels > price].min()\n", | |
"\n", | |
" def is_close(self, price, level, range=2):\n", | |
" return abs(price - level) < range\n", | |
"\n", | |
" def next(self):\n", | |
" if self.orefs:\n", | |
" return #pending orders do nothing\n", | |
"\n", | |
" # Check if we are in the market\n", | |
" if not self.position:\n", | |
" # We are not in the market, look for a signal to OPEN trades\n", | |
" sp = self.get_support(self.data[0])\n", | |
" rs = self.get_resistance(self.data[0])\n", | |
" if self.is_close(self.data[0], sp):\n", | |
" # trend reversal marking entry of bulls, open long position\n", | |
" stoploss = sp # Minumum low of p1 or p2 will act as stoploss\n", | |
" target = rs\n", | |
" self.log(f'Long : {self.data[0]:.2f}, Target: {target:.2f}, Stoploss: {stoploss:.2f}')\n", | |
" os = self.buy_bracket(exectype=bt.Order.Market, price=self.data[0], limitprice=target, stopprice=stoploss)\n", | |
" self.orefs = [o.ref for o in os]\n", | |
"\n", | |
" elif self.is_close(self.data[0], rs):\n", | |
" # trend reversal marking entry of bears, open short position\n", | |
" stoploss = rs # Max High of p1 or p2 man will act as stoploss\n", | |
" target = sp # self.data[0] - (self.params.rrr * (stoploss - self.data[0]))\n", | |
" self.log(f'Short : {self.data[0]:.2f}, Target: {target:.2f}, Stoploss: {stoploss:.2f}')\n", | |
" os = self.sell_bracket(price=self.data[0], limitprice=target, stopprice=stoploss)\n", | |
" self.orefs = [o.ref for o in os]" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "P-fG-ovcu7wL" | |
}, | |
"source": [ | |
"#### Buy On Dip\n", | |
"Result with invest perc: [1,2,4,8,16,32,64,84,100]\n", | |
"Starting Portfolio Value: 2160000.00\n", | |
"Final Portfolio Value: 4538775.33\n", | |
"PnL: 2378775.33\n", | |
"ROI %: 110.13\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "wJyOOnerp55b" | |
}, | |
"source": [ | |
"class BuyOnDipStrategy(MyStrategy):\n", | |
" def __init__(self):\n", | |
" super().__init__()\n", | |
" self.last_max_price = 0\n", | |
" self.levels = [29,39,49,59,69,109,149,20,30]\n", | |
" self.is_trade_initiated = [False for i in range(len(self.levels))]\n", | |
" self.invest_amount = [5000, 10000, 15000, 25000, 40000, 65000, 105000, 170000, 275000]\n", | |
" self.invest_perc = [5,8,13,17,21,34,55,80,100]\n", | |
"\n", | |
" def _reset(self):\n", | |
" self.is_trade_initiated = [False for i in range(len(self.levels))]\n", | |
"\n", | |
" def notify_order(self, order):\n", | |
" super().notify_order(order)\n", | |
" if order.status in [order.Submitted, order.Accepted]:\n", | |
" return\n", | |
"\n", | |
" if order.status == order.Completed:\n", | |
" self.holdstart = len(self)\n", | |
"\n", | |
" if not order.alive() and order.ref in self.orefs:\n", | |
" self.orefs.remove(order.ref)\n", | |
"\n", | |
" def next(self):\n", | |
" self.last_max_price = max(self.last_max_price, self.data_close[0])\n", | |
" drawdown = ((self.last_max_price - self.data_close[0]) / self.last_max_price) * 100\n", | |
" if drawdown > 2:\n", | |
" for i in range(len(self.levels)):\n", | |
" if drawdown >= self.levels[i] and self.is_trade_initiated[i] is False:\n", | |
" # order = self.order_target_value(target=self.invest_amount[i] * 3)\n", | |
" # order = self.buy(size=1)\n", | |
" percent_of_portfolio_value = self.invest_perc[i] / 100\n", | |
" self.order_target_percent(target=percent_of_portfolio_value)\n", | |
" self.is_trade_initiated[i] = True\n", | |
" elif drawdown == 0 and self.is_trade_initiated[0] is True:\n", | |
" self.log(self.broker.get_cash())\n", | |
" self.close()\n", | |
" self._reset()\n" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "2tOceZ5IchOS" | |
}, | |
"source": [ | |
"#### SIP Strategy" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "sYDh8AA8cgfz" | |
}, | |
"source": [ | |
"class SIPStrategy(MyStrategy):\n", | |
" def __init__(self):\n", | |
" super().__init__()\n", | |
" self.salary = 16000\n", | |
" self.invest_amount = 16000\n", | |
"\n", | |
" def notify_order(self, order):\n", | |
" super().notify_order(order)\n", | |
"\n", | |
" def next(self):\n", | |
" dt = self.data.datetime.date()\n", | |
" if dt.day == 10:\n", | |
" self.broker.add_cash(self.salary)\n", | |
" if dt.day == 15:\n", | |
" self.buy(size=1)\n" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "jH_317l1NlIK" | |
}, | |
"source": [ | |
"### Backtest" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "kOKjqSuZQO8U" | |
}, | |
"source": [ | |
"def fetch_data(symbol, start_date, end_date):\n", | |
" \"\"\"\n", | |
" fetch stock data and display charts\n", | |
" \"\"\"\n", | |
" stock_data = get_stock_data(symbol, start_date, end_date)\n", | |
" stock_data.head()\n", | |
" display_line_chart(stock_data)\n", | |
" return stock_data" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "n66CuuM6Qp2S" | |
}, | |
"source": [ | |
"def init_stat():\n", | |
" # instantiate cerebero engine\n", | |
" cerebro = bt.Cerebro()\n", | |
"\n", | |
" # Default position size\n", | |
" cerebro.addsizer(bt.sizers.AllInSizerInt)\n", | |
"\n", | |
" # set broker commission as 11.16 per 10k (refer zerodha brokerage calculator)\n", | |
" # TODO: Add Rs. 15.93 (DP Charges on sell side)\n", | |
" # cerebro.broker.setcommission(commission=0.00116)\n", | |
"\n", | |
" # to allow short order with stoploss\n", | |
" cerebro.broker.set_checksubmit(checksubmit=False)\n", | |
"\n", | |
" # initial cash\n", | |
" cerebro.broker.setcash(50000)\n", | |
"\n", | |
" return cerebro" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "LJpxbr-0p8bq" | |
}, | |
"source": [ | |
"def run_stat(df, strategy):\n", | |
" cerebro = init_stat()\n", | |
"\n", | |
" # add data feeds to data engine\n", | |
" data = bt.feeds.PandasData(dataname=stock_data, openinterest=None)\n", | |
" cerebro.adddata(data)\n", | |
"\n", | |
" # add strategy to engine\n", | |
" cerebro.broker.set_fundmode(True)\n", | |
" cerebro.addstrategy(strategy)\n", | |
"\n", | |
" # initial cash stats\n", | |
" start_portfolio_value = cerebro.broker.getvalue()\n", | |
"\n", | |
" # add analyzer\n", | |
"# cerebro.addanalyzer(bt.analyzers.TradeAnalyzer, _name = \"ta\")\n", | |
" cerebro.addanalyzer(bt.analyzers.TimeReturn)\n", | |
"\n", | |
" # run engine\n", | |
" strats= cerebro.run()\n", | |
" cerebro.plot()\n", | |
"\n", | |
"# printTradeAnalysis(strats[0].analyzers.ta.get_analysis())\n", | |
"\n", | |
" # evaluating PnL\n", | |
" end_portfolio_value = cerebro.broker.getvalue()\n", | |
" pnl = end_portfolio_value - start_portfolio_value\n", | |
" print(f'Starting Portfolio Value: {start_portfolio_value:.2f}')\n", | |
" print(f'Final Portfolio Value: {end_portfolio_value:.2f}')\n", | |
" print(f'PnL: {pnl:.2f}')\n", | |
" print(f'ROI %: {((pnl / start_portfolio_value) * 100):.2f}')" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"run_stat(stock_data, MarubozuStrategy)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 1000 | |
}, | |
"id": "L7uMGOYafvcy", | |
"outputId": "a3a18e0f-0af4-4cb1-e2af-7defe5fa512c" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"2022-01-03T12:00:00 Short : 3803.05, Target: 3785.45, Stoploss: 3811.85\n", | |
"2022-01-03 Trade Summary, gross: -114.40, net: -114.40, duration: 1\n", | |
"\n", | |
"2022-01-03T13:15:00 Short : 3812.90, Target: 3799.30, Stoploss: 3819.70\n", | |
"2022-01-03 Trade Summary, gross: -78.65, net: -78.65, duration: 1\n", | |
"\n", | |
"2022-01-04T10:00:00 Long : 3848.00, Target: 3873.10, Stoploss: 3835.45\n", | |
"2022-01-04 Trade Summary, gross: -150.60, net: -150.60, duration: 1\n", | |
"\n", | |
"2022-01-05T11:30:00 Short : 3824.70, Target: 3808.10, Stoploss: 3833.00\n", | |
"2022-01-05 Trade Summary, gross: -125.40, net: -125.40, duration: 1\n", | |
"\n", | |
"2022-01-05T13:30:00 Long : 3854.15, Target: 3865.85, Stoploss: 3848.30\n", | |
"2022-01-05 Trade Summary, gross: 141.00, net: 141.00, duration: 2\n", | |
"\n", | |
"2022-01-05T14:45:00 Short : 3850.20, Target: 3832.70, Stoploss: 3858.95\n", | |
"2022-01-05 Trade Summary, gross: -129.60, net: -129.60, duration: 1\n", | |
"\n", | |
"2022-01-06T10:15:00 Short : 3811.15, Target: 3795.15, Stoploss: 3819.15\n", | |
"2022-01-06 Trade Summary, gross: 192.00, net: 192.00, duration: 4\n", | |
"\n", | |
"2022-01-06T12:00:00 Short : 3782.30, Target: 3760.50, Stoploss: 3793.20\n", | |
"2022-01-06 Trade Summary, gross: -140.40, net: -140.40, duration: 2\n", | |
"\n", | |
"2022-01-07T09:30:00 Long : 3834.60, Target: 3889.80, Stoploss: 3807.00\n", | |
"2022-01-10 Trade Summary, gross: 1631.40, net: 1631.40, duration: 23\n", | |
"\n", | |
"2022-01-11T10:30:00 Long : 3888.90, Target: 3904.70, Stoploss: 3881.00\n", | |
"2022-01-11 Trade Summary, gross: -102.70, net: -102.70, duration: 5\n", | |
"\n", | |
"2022-01-12T10:00:00 Short : 3877.10, Target: 3854.50, Stoploss: 3888.40\n", | |
"2022-01-12 Trade Summary, gross: -146.90, net: -146.90, duration: 1\n", | |
"\n", | |
"2022-01-12T12:15:00 Short : 3876.45, Target: 3860.35, Stoploss: 3884.50\n", | |
"2022-01-12 Trade Summary, gross: 209.30, net: 209.30, duration: 2\n", | |
"\n", | |
"2022-01-13T11:45:00 Long : 3883.05, Target: 3902.35, Stoploss: 3873.40\n", | |
"2022-01-13 Trade Summary, gross: 250.90, net: 250.90, duration: 4\n", | |
"\n", | |
"2022-01-13T13:15:00 Short : 3894.90, Target: 3880.70, Stoploss: 3902.00\n", | |
"2022-01-13 Trade Summary, gross: -55.25, net: -55.25, duration: 1\n", | |
"\n", | |
"2022-01-13T15:00:00 Long : 3898.60, Target: 3913.10, Stoploss: 3891.35\n", | |
"2022-01-14 Trade Summary, gross: -267.80, net: -267.80, duration: 1\n", | |
"\n", | |
"2022-01-14T12:00:00 Long : 3916.25, Target: 3932.75, Stoploss: 3908.00\n", | |
"2022-01-14 Trade Summary, gross: 215.15, net: 215.15, duration: 2\n", | |
"\n", | |
"2022-01-17T10:00:00 Long : 3998.10, Target: 4040.30, Stoploss: 3977.00\n", | |
"2022-01-17 Trade Summary, gross: 506.40, net: 506.40, duration: 4\n", | |
"\n", | |
"2022-01-20T12:45:00 Short : 3848.40, Target: 3820.50, Stoploss: 3862.35\n", | |
"2022-01-20 Trade Summary, gross: 362.70, net: 362.70, duration: 3\n", | |
"\n", | |
"2022-01-24T11:15:00 Short : 3798.45, Target: 3769.35, Stoploss: 3813.00\n", | |
"2022-01-24 Trade Summary, gross: 378.30, net: 378.30, duration: 8\n", | |
"\n", | |
"2022-01-25T14:15:00 Short : 3750.50, Target: 3739.50, Stoploss: 3756.00\n", | |
"2022-01-25 Trade Summary, gross: -77.00, net: -77.00, duration: 1\n", | |
"\n", | |
"2022-01-27T12:00:00 Short : 3646.05, Target: 3620.75, Stoploss: 3658.70\n", | |
"2022-01-27 Trade Summary, gross: -169.40, net: -169.40, duration: 8\n", | |
"\n", | |
"2022-01-27T14:15:00 Long : 3673.20, Target: 3711.60, Stoploss: 3654.00\n", | |
"2022-01-27 Trade Summary, gross: -266.00, net: -266.00, duration: 2\n", | |
"\n", | |
"2022-01-31T15:00:00 Short : 3730.90, Target: 3684.60, Stoploss: 3754.05\n", | |
"2022-02-01 Trade Summary, gross: -495.30, net: -495.30, duration: 1\n", | |
"\n", | |
"2022-02-01T11:15:00 Long : 3788.70, Target: 3815.10, Stoploss: 3775.50\n", | |
"2022-02-01 Trade Summary, gross: -171.60, net: -171.60, duration: 6\n", | |
"\n", | |
"2022-02-03T15:15:00 Short : 3817.20, Target: 3797.90, Stoploss: 3826.85\n", | |
"2022-02-04 Trade Summary, gross: 270.40, net: 270.40, duration: 1\n", | |
"\n", | |
"2022-02-04T11:30:00 Short : 3802.00, Target: 3780.70, Stoploss: 3812.65\n", | |
"2022-02-04 Trade Summary, gross: -124.80, net: -124.80, duration: 9\n", | |
"\n", | |
"2022-02-07T12:45:00 Short : 3795.05, Target: 3779.45, Stoploss: 3802.85\n", | |
"2022-02-07 Trade Summary, gross: 206.70, net: 206.70, duration: 2\n", | |
"\n", | |
"2022-02-07T14:15:00 Long : 3773.90, Target: 3790.20, Stoploss: 3765.75\n", | |
"2022-02-07 Trade Summary, gross: -141.70, net: -141.70, duration: 1\n", | |
"\n", | |
"2022-02-08T10:30:00 Short : 3727.90, Target: 3705.90, Stoploss: 3738.90\n", | |
"2022-02-08 Trade Summary, gross: -143.00, net: -143.00, duration: 2\n", | |
"\n", | |
"2022-02-08T13:00:00 Short : 3726.05, Target: 3700.15, Stoploss: 3739.00\n", | |
"2022-02-08 Trade Summary, gross: -168.35, net: -168.35, duration: 6\n", | |
"\n", | |
"2022-02-10T10:00:00 Long : 3773.90, Target: 3793.70, Stoploss: 3764.00\n", | |
"2022-02-10 Trade Summary, gross: -128.70, net: -128.70, duration: 4\n", | |
"\n", | |
"2022-02-11T12:45:00 Short : 3707.45, Target: 3691.05, Stoploss: 3715.65\n", | |
"2022-02-11 Trade Summary, gross: -106.60, net: -106.60, duration: 2\n", | |
"\n", | |
"2022-02-14T13:15:00 Long : 3752.60, Target: 3791.60, Stoploss: 3733.10\n", | |
"2022-02-14 Trade Summary, gross: -253.50, net: -253.50, duration: 2\n", | |
"\n", | |
"Starting Portfolio Value: 50000.00\n", | |
"Final Portfolio Value: 50806.60\n", | |
"PnL: 806.60\n", | |
"ROI %: 1.61\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "Nog8xcM9a76s" | |
}, | |
"source": [ | |
"### Analysis" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "QJbDV0SRa-Uk" | |
}, | |
"source": [ | |
"#### Trade Analysis" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "TBMbwPyLkMxE" | |
}, | |
"source": [ | |
"def printTradeAnalysis(analyzer):\n", | |
" try:\n", | |
" total_open = analyzer.total.open\n", | |
" total_closed = analyzer.total.closed\n", | |
" total_won = analyzer.won.total\n", | |
" total_lost = analyzer.lost.total\n", | |
" win_streak = analyzer.streak.won.longest\n", | |
" lost_streak = analyzer.streak.lost.longest\n", | |
" pnl_net = round(analyzer.pnl.net.total,2)\n", | |
" strike_rate = round((total_won/total_closed)*100, 2) if total_closed > 0 else 0\n", | |
"\n", | |
" h1 = [\"Total Open\", \"Total Closed\", \"Total Won\", \"Total Lost\"]\n", | |
" h2 = [\"Strike Rate\", \"Win Streak\", \"Losing Streak\", \"PnL Net\"]\n", | |
" r1 = [total_open, total_closed, total_won, total_lost]\n", | |
" r2 = [strike_rate, win_streak, lost_streak, pnl_net]\n", | |
" if len(h1) > len(h2):\n", | |
" header_length = len(h1)\n", | |
" else:\n", | |
" header_length = len(h2)\n", | |
"\n", | |
" print_list = [h1,r1,h2,r2]\n", | |
" row_format = \"{:<15}\" * (header_length+1)\n", | |
" print(\"Trade Analysis Results:\")\n", | |
" for row in print_list:\n", | |
" print(row_format.format(\"\", *row))\n", | |
" except KeyError as e:\n", | |
" print(\"No Analysis as no trade is taken\")\n" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "trOzy6WESQBE" | |
}, | |
"source": [ | |
"### Evaluate" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "CQWuy00jNnu_", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 542 | |
}, | |
"outputId": "34860661-46ab-4e93-bc94-aac0fa4c58e6" | |
}, | |
"source": [ | |
"# Enter various trade parameters\n", | |
"symbol = '^NSEI' # refer yahoo finance for symbol\n", | |
"start = '2010-01-01'\n", | |
"end = '2021-12-20'\n", | |
"\n", | |
"# fetch stock data from yahoo finance API\n", | |
"stock_data = fetch_data(symbol, start, end)" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"<html>\n", | |
"<head><meta charset=\"utf-8\" /></head>\n", | |
"<body>\n", | |
" <div>\n", | |
" <script src=\"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG\"></script><script type=\"text/javascript\">if (window.MathJax) {MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}</script>\n", | |
" <script type=\"text/javascript\">window.PlotlyConfig = {MathJaxConfig: 'local'};</script>\n", | |
" <script src=\"https://cdn.plot.ly/plotly-latest.min.js\"></script> \n", | |
" <div id=\"d5af6330-0af3-4ed4-a995-a20108841efc\" class=\"plotly-graph-div\" style=\"height:525px; width:100%;\"></div>\n", | |
" <script type=\"text/javascript\">\n", | |
" \n", | |
" window.PLOTLYENV=window.PLOTLYENV || {};\n", | |
" \n", | |
" if (document.getElementById(\"d5af6330-0af3-4ed4-a995-a20108841efc\")) {\n", | |
" Plotly.newPlot(\n", | |
" 'd5af6330-0af3-4ed4-a995-a20108841efc',\n", | |
" [{\"hoverlabel\": {\"namelength\": 0}, \"hovertemplate\": \"x=%{x}<br>Close=%{y}\", \"legendgroup\": \"\", \"line\": {\"color\": \"#636efa\", \"dash\": \"solid\"}, \"mode\": \"lines\", \"name\": \"\", \"showlegend\": false, \"type\": \"scattergl\", \"x\": [\"2010-01-04T00:00:00\", \"2010-01-05T00:00:00\", \"2010-01-06T00:00:00\", \"2010-01-07T00:00:00\", \"2010-01-08T00:00:00\", \"2010-01-11T00:00:00\", \"2010-01-12T00:00:00\", \"2010-01-13T00:00:00\", \"2010-01-14T00:00:00\", \"2010-01-15T00:00:00\", \"2010-01-18T00:00:00\", \"2010-01-19T00:00:00\", \"2010-01-20T00:00:00\", \"2010-01-21T00:00:00\", \"2010-01-22T00:00:00\", \"2010-01-25T00:00:00\", \"2010-01-27T00:00:00\", \"2010-01-28T00:00:00\", \"2010-01-29T00:00:00\", \"2010-02-01T00:00:00\", \"2010-02-02T00:00:00\", \"2010-02-03T00:00:00\", \"2010-02-04T00:00:00\", \"2010-02-05T00:00:00\", \"2010-02-08T00:00:00\", \"2010-02-09T00:00:00\", \"2010-02-10T00:00:00\", \"2010-02-11T00:00:00\", \"2010-02-15T00:00:00\", \"2010-02-16T00:00:00\", \"2010-02-17T00:00:00\", \"2010-02-18T00:00:00\", \"2010-02-19T00:00:00\", \"2010-02-22T00:00:00\", \"2010-02-23T00:00:00\", \"2010-02-24T00:00:00\", \"2010-02-25T00:00:00\", \"2010-02-26T00:00:00\", \"2010-03-02T00:00:00\", \"2010-03-03T00:00:00\", \"2010-03-04T00:00:00\", \"2010-03-05T00:00:00\", \"2010-03-08T00:00:00\", \"2010-03-09T00:00:00\", \"2010-03-10T00:00:00\", \"2010-03-11T00:00:00\", \"2010-03-12T00:00:00\", \"2010-03-15T00:00:00\", \"2010-03-16T00:00:00\", \"2010-03-17T00:00:00\", \"2010-03-18T00:00:00\", \"2010-03-19T00:00:00\", \"2010-03-22T00:00:00\", \"2010-03-23T00:00:00\", \"2010-03-25T00:00:00\", \"2010-03-26T00:00:00\", \"2010-03-29T00:00:00\", \"2010-03-30T00:00:00\", \"2010-03-31T00:00:00\", \"2010-04-01T00:00:00\", \"2010-04-05T00:00:00\", \"2010-04-06T00:00:00\", \"2010-04-07T00:00:00\", \"2010-04-08T00:00:00\", \"2010-04-09T00:00:00\", \"2010-04-12T00:00:00\", \"2010-04-13T00:00:00\", \"2010-04-15T00:00:00\", \"2010-04-16T00:00:00\", \"2010-04-19T00:00:00\", \"2010-04-20T00:00:00\", \"2010-04-21T00:00:00\", \"2010-04-22T00:00:00\", \"2010-04-23T00:00:00\", \"2010-04-26T00:00:00\", \"2010-04-27T00:00:00\", \"2010-04-28T00:00:00\", \"2010-04-29T00:00:00\", \"2010-04-30T00:00:00\", \"2010-05-03T00:00:00\", \"2010-05-04T00:00:00\", \"2010-05-05T00:00:00\", \"2010-05-06T00:00:00\", \"2010-05-07T00:00:00\", \"2010-05-10T00:00:00\", \"2010-05-11T00:00:00\", \"2010-05-12T00:00:00\", \"2010-05-13T00:00:00\", \"2010-05-14T00:00:00\", \"2010-05-17T00:00:00\", \"2010-05-18T00:00:00\", \"2010-05-19T00:00:00\", \"2010-05-20T00:00:00\", \"2010-05-21T00:00:00\", \"2010-05-24T00:00:00\", \"2010-05-25T00:00:00\", \"2010-05-26T00:00:00\", \"2010-05-27T00:00:00\", \"2010-05-28T00:00:00\", \"2010-05-31T00:00:00\", \"2010-06-01T00:00:00\", \"2010-06-02T00:00:00\", \"2010-06-03T00:00:00\", \"2010-06-04T00:00:00\", \"2010-06-07T00:00:00\", \"2010-06-08T00:00:00\", \"2010-06-09T00:00:00\", \"2010-06-10T00:00:00\", \"2010-06-11T00:00:00\", \"2010-06-14T00:00:00\", \"2010-06-15T00:00:00\", \"2010-06-16T00:00:00\", \"2010-06-17T00:00:00\", \"2010-06-18T00:00:00\", \"2010-06-21T00:00:00\", \"2010-06-22T00:00:00\", \"2010-06-23T00:00:00\", \"2010-06-24T00:00:00\", \"2010-06-25T00:00:00\", \"2010-06-28T00:00:00\", \"2010-06-29T00:00:00\", \"2010-06-30T00:00:00\", \"2010-07-01T00:00:00\", \"2010-07-02T00:00:00\", \"2010-07-05T00:00:00\", \"2010-07-06T00:00:00\", \"2010-07-07T00:00:00\", \"2010-07-08T00:00:00\", \"2010-07-09T00:00:00\", \"2010-07-12T00:00:00\", \"2010-07-13T00:00:00\", \"2010-07-14T00:00:00\", \"2010-07-15T00:00:00\", \"2010-07-16T00:00:00\", \"2010-07-19T00:00:00\", \"2010-07-20T00:00:00\", \"2010-07-21T00:00:00\", \"2010-07-22T00:00:00\", \"2010-07-23T00:00:00\", \"2010-07-26T00:00:00\", \"2010-07-27T00:00:00\", \"2010-07-28T00:00:00\", \"2010-07-29T00:00:00\", \"2010-07-30T00:00:00\", \"2010-08-02T00:00:00\", \"2010-08-03T00:00:00\", \"2010-08-04T00:00:00\", \"2010-08-05T00:00:00\", \"2010-08-06T00:00:00\", \"2010-08-09T00:00:00\", \"2010-08-10T00:00:00\", \"2010-08-11T00:00:00\", \"2010-08-12T00:00:00\", \"2010-08-13T00:00:00\", \"2010-08-16T00:00:00\", \"2010-08-17T00:00:00\", \"2010-08-18T00:00:00\", \"2010-08-19T00:00:00\", \"2010-08-20T00:00:00\", \"2010-08-23T00:00:00\", \"2010-08-24T00:00:00\", \"2010-08-25T00:00:00\", \"2010-08-26T00:00:00\", \"2010-08-27T00:00:00\", \"2010-08-30T00:00:00\", \"2010-08-31T00:00:00\", \"2010-09-01T00:00:00\", \"2010-09-02T00:00:00\", \"2010-09-03T00:00:00\", \"2010-09-06T00:00:00\", \"2010-09-07T00:00:00\", \"2010-09-08T00:00:00\", \"2010-09-09T00:00:00\", \"2010-09-13T00:00:00\", \"2010-09-14T00:00:00\", \"2010-09-15T00:00:00\", \"2010-09-16T00:00:00\", \"2010-09-17T00:00:00\", \"2010-09-20T00:00:00\", \"2010-09-21T00:00:00\", \"2010-09-22T00:00:00\", \"2010-09-23T00:00:00\", \"2010-09-24T00:00:00\", \"2010-09-27T00:00:00\", \"2010-09-28T00:00:00\", \"2010-09-29T00:00:00\", \"2010-09-30T00:00:00\", \"2010-10-01T00:00:00\", \"2010-10-04T00:00:00\", \"2010-10-05T00:00:00\", \"2010-10-06T00:00:00\", \"2010-10-07T00:00:00\", \"2010-10-08T00:00:00\", \"2010-10-11T00:00:00\", \"2010-10-12T00:00:00\", \"2010-10-13T00:00:00\", \"2010-10-14T00:00:00\", \"2010-10-15T00:00:00\", \"2010-10-18T00:00:00\", \"2010-10-19T00:00:00\", \"2010-10-20T00:00:00\", \"2010-10-21T00:00:00\", \"2010-10-22T00:00:00\", \"2010-10-25T00:00:00\", \"2010-10-26T00:00:00\", \"2010-10-27T00:00:00\", \"2010-10-28T00:00:00\", \"2010-10-29T00:00:00\", \"2010-11-01T00:00:00\", \"2010-11-02T00:00:00\", \"2010-11-03T00:00:00\", \"2010-11-04T00:00:00\", \"2010-11-08T00:00:00\", \"2010-11-09T00:00:00\", \"2010-11-10T00:00:00\", \"2010-11-11T00:00:00\", \"2010-11-12T00:00:00\", \"2010-11-15T00:00:00\", \"2010-11-16T00:00:00\", \"2010-11-18T00:00:00\", \"2010-11-19T00:00:00\", \"2010-11-22T00:00:00\", \"2010-11-23T00:00:00\", \"2010-11-24T00:00:00\", \"2010-11-25T00:00:00\", \"2010-11-26T00:00:00\", \"2010-11-29T00:00:00\", \"2010-11-30T00:00:00\", \"2010-12-01T00:00:00\", \"2010-12-02T00:00:00\", \"2010-12-03T00:00:00\", \"2010-12-06T00:00:00\", \"2010-12-07T00:00:00\", \"2010-12-08T00:00:00\", \"2010-12-09T00:00:00\", \"2010-12-10T00:00:00\", \"2010-12-13T00:00:00\", \"2010-12-14T00:00:00\", \"2010-12-15T00:00:00\", \"2010-12-16T00:00:00\", \"2010-12-20T00:00:00\", \"2010-12-21T00:00:00\", \"2010-12-22T00:00:00\", \"2010-12-23T00:00:00\", \"2010-12-24T00:00:00\", \"2010-12-27T00:00:00\", \"2010-12-28T00:00:00\", \"2010-12-29T00:00:00\", \"2010-12-30T00:00:00\", \"2010-12-31T00:00:00\", \"2011-01-03T00:00:00\", \"2011-01-04T00:00:00\", \"2011-01-05T00:00:00\", \"2011-01-06T00:00:00\", \"2011-01-07T00:00:00\", \"2011-01-10T00:00:00\", \"2011-01-11T00:00:00\", \"2011-01-12T00:00:00\", \"2011-01-13T00:00:00\", \"2011-01-14T00:00:00\", \"2011-01-17T00:00:00\", \"2011-01-18T00:00:00\", \"2011-01-19T00:00:00\", \"2011-01-20T00:00:00\", \"2011-01-21T00:00:00\", \"2011-01-24T00:00:00\", \"2011-01-25T00:00:00\", \"2011-01-27T00:00:00\", \"2011-01-28T00:00:00\", \"2011-01-31T00:00:00\", \"2011-02-01T00:00:00\", \"2011-02-02T00:00:00\", \"2011-02-03T00:00:00\", \"2011-02-04T00:00:00\", \"2011-02-07T00:00:00\", \"2011-02-08T00:00:00\", \"2011-02-09T00:00:00\", \"2011-02-10T00:00:00\", \"2011-02-11T00:00:00\", \"2011-02-14T00:00:00\", \"2011-02-15T00:00:00\", \"2011-02-16T00:00:00\", \"2011-02-17T00:00:00\", \"2011-02-18T00:00:00\", \"2011-02-21T00:00:00\", \"2011-02-22T00:00:00\", \"2011-02-23T00:00:00\", \"2011-02-24T00:00:00\", \"2011-02-25T00:00:00\", \"2011-02-28T00:00:00\", \"2011-03-01T00:00:00\", \"2011-03-03T00:00:00\", \"2011-03-04T00:00:00\", \"2011-03-07T00:00:00\", \"2011-03-08T00:00:00\", \"2011-03-09T00:00:00\", \"2011-03-10T00:00:00\", \"2011-03-11T00:00:00\", \"2011-03-14T00:00:00\", \"2011-03-15T00:00:00\", \"2011-03-16T00:00:00\", \"2011-03-17T00:00:00\", \"2011-03-18T00:00:00\", \"2011-03-21T00:00:00\", \"2011-03-22T00:00:00\", \"2011-03-23T00:00:00\", \"2011-03-24T00:00:00\", \"2011-03-25T00:00:00\", \"2011-03-28T00:00:00\", \"2011-03-29T00:00:00\", \"2011-03-30T00:00:00\", \"2011-03-31T00:00:00\", \"2011-04-01T00:00:00\", \"2011-04-04T00:00:00\", \"2011-04-05T00:00:00\", \"2011-04-06T00:00:00\", \"2011-04-07T00:00:00\", \"2011-04-08T00:00:00\", \"2011-04-11T00:00:00\", \"2011-04-13T00:00:00\", \"2011-04-15T00:00:00\", \"2011-04-18T00:00:00\", \"2011-04-19T00:00:00\", \"2011-04-20T00:00:00\", \"2011-04-21T00:00:00\", \"2011-04-25T00:00:00\", \"2011-04-26T00:00:00\", \"2011-04-27T00:00:00\", \"2011-04-28T00:00:00\", \"2011-04-29T00:00:00\", \"2011-05-02T00:00:00\", \"2011-05-03T00:00:00\", \"2011-05-04T00:00:00\", \"2011-05-05T00:00:00\", \"2011-05-06T00:00:00\", \"2011-05-09T00:00:00\", \"2011-05-10T00:00:00\", \"2011-05-11T00:00:00\", \"2011-05-12T00:00:00\", \"2011-05-13T00:00:00\", \"2011-05-16T00:00:00\", \"2011-05-17T00:00:00\", \"2011-05-18T00:00:00\", \"2011-05-19T00:00:00\", \"2011-05-20T00:00:00\", \"2011-05-23T00:00:00\", \"2011-05-24T00:00:00\", \"2011-05-25T00:00:00\", \"2011-05-26T00:00:00\", \"2011-05-27T00:00:00\", \"2011-05-30T00:00:00\", \"2011-06-01T00:00:00\", \"2011-06-02T00:00:00\", \"2011-06-03T00:00:00\", \"2011-06-06T00:00:00\", \"2011-06-07T00:00:00\", \"2011-06-08T00:00:00\", \"2011-06-09T00:00:00\", \"2011-06-10T00:00:00\", \"2011-06-13T00:00:00\", \"2011-06-14T00:00:00\", \"2011-06-15T00:00:00\", \"2011-06-16T00:00:00\", \"2011-06-17T00:00:00\", \"2011-06-20T00:00:00\", \"2011-06-21T00:00:00\", \"2011-06-22T00:00:00\", \"2011-06-23T00:00:00\", \"2011-06-24T00:00:00\", \"2011-06-27T00:00:00\", \"2011-06-28T00:00:00\", \"2011-06-29T00:00:00\", \"2011-06-30T00:00:00\", \"2011-07-01T00:00:00\", \"2011-07-04T00:00:00\", \"2011-07-05T00:00:00\", \"2011-07-06T00:00:00\", \"2011-07-07T00:00:00\", \"2011-07-08T00:00:00\", \"2011-07-11T00:00:00\", \"2011-07-12T00:00:00\", \"2011-07-13T00:00:00\", \"2011-07-15T00:00:00\", \"2011-07-18T00:00:00\", \"2011-07-19T00:00:00\", \"2011-07-20T00:00:00\", \"2011-07-21T00:00:00\", \"2011-07-22T00:00:00\", \"2011-07-25T00:00:00\", \"2011-07-26T00:00:00\", \"2011-07-27T00:00:00\", \"2011-07-28T00:00:00\", \"2011-07-29T00:00:00\", \"2011-08-01T00:00:00\", \"2011-08-02T00:00:00\", \"2011-08-03T00:00:00\", \"2011-08-04T00:00:00\", \"2011-08-05T00:00:00\", \"2011-08-08T00:00:00\", \"2011-08-09T00:00:00\", \"2011-08-10T00:00:00\", \"2011-08-11T00:00:00\", \"2011-08-12T00:00:00\", \"2011-08-16T00:00:00\", \"2011-08-17T00:00:00\", \"2011-08-18T00:00:00\", \"2011-08-19T00:00:00\", \"2011-08-22T00:00:00\", \"2011-08-23T00:00:00\", \"2011-08-24T00:00:00\", \"2011-08-25T00:00:00\", \"2011-08-26T00:00:00\", \"2011-08-29T00:00:00\", \"2011-08-30T00:00:00\", \"2011-09-02T00:00:00\", \"2011-09-05T00:00:00\", \"2011-09-06T00:00:00\", \"2011-09-07T00:00:00\", \"2011-09-08T00:00:00\", \"2011-09-09T00:00:00\", \"2011-09-12T00:00:00\", \"2011-09-13T00:00:00\", \"2011-09-14T00:00:00\", \"2011-09-15T00:00:00\", \"2011-09-16T00:00:00\", \"2011-09-19T00:00:00\", \"2011-09-20T00:00:00\", \"2011-09-21T00:00:00\", \"2011-09-22T00:00:00\", \"2011-09-23T00:00:00\", \"2011-09-26T00:00:00\", \"2011-09-27T00:00:00\", \"2011-09-28T00:00:00\", \"2011-09-29T00:00:00\", \"2011-09-30T00:00:00\", \"2011-10-03T00:00:00\", \"2011-10-04T00:00:00\", \"2011-10-05T00:00:00\", \"2011-10-07T00:00:00\", \"2011-10-10T00:00:00\", \"2011-10-11T00:00:00\", \"2011-10-12T00:00:00\", \"2011-10-13T00:00:00\", \"2011-10-14T00:00:00\", \"2011-10-17T00:00:00\", \"2011-10-18T00:00:00\", \"2011-10-19T00:00:00\", \"2011-10-20T00:00:00\", \"2011-10-21T00:00:00\", \"2011-10-24T00:00:00\", \"2011-10-25T00:00:00\", \"2011-10-28T00:00:00\", \"2011-10-31T00:00:00\", \"2011-11-01T00:00:00\", \"2011-11-02T00:00:00\", \"2011-11-03T00:00:00\", \"2011-11-04T00:00:00\", \"2011-11-08T00:00:00\", \"2011-11-09T00:00:00\", \"2011-11-11T00:00:00\", \"2011-11-14T00:00:00\", \"2011-11-15T00:00:00\", \"2011-11-16T00:00:00\", \"2011-11-17T00:00:00\", \"2011-11-18T00:00:00\", \"2011-11-21T00:00:00\", \"2011-11-22T00:00:00\", \"2011-11-23T00:00:00\", \"2011-11-25T00:00:00\", \"2011-11-28T00:00:00\", \"2011-11-29T00:00:00\", \"2011-11-30T00:00:00\", \"2011-12-01T00:00:00\", \"2011-12-02T00:00:00\", \"2011-12-05T00:00:00\", \"2011-12-07T00:00:00\", \"2011-12-08T00:00:00\", \"2011-12-09T00:00:00\", \"2011-12-12T00:00:00\", \"2011-12-13T00:00:00\", \"2011-12-14T00:00:00\", \"2011-12-15T00:00:00\", \"2011-12-16T00:00:00\", \"2011-12-19T00:00:00\", \"2011-12-20T00:00:00\", \"2011-12-21T00:00:00\", \"2011-12-22T00:00:00\", \"2011-12-23T00:00:00\", \"2011-12-27T00:00:00\", \"2011-12-28T00:00:00\", \"2011-12-29T00:00:00\", \"2011-12-30T00:00:00\", \"2012-01-03T00:00:00\", \"2012-01-04T00:00:00\", \"2012-01-05T00:00:00\", \"2012-01-06T00:00:00\", \"2012-01-09T00:00:00\", \"2012-01-10T00:00:00\", \"2012-01-11T00:00:00\", \"2012-01-12T00:00:00\", \"2012-01-13T00:00:00\", \"2012-01-16T00:00:00\", \"2012-01-17T00:00:00\", \"2012-01-18T00:00:00\", \"2012-01-19T00:00:00\", \"2012-01-20T00:00:00\", \"2012-01-23T00:00:00\", \"2012-01-24T00:00:00\", \"2012-01-25T00:00:00\", \"2012-01-27T00:00:00\", \"2012-01-30T00:00:00\", \"2012-01-31T00:00:00\", \"2012-02-01T00:00:00\", \"2012-02-02T00:00:00\", \"2012-02-03T00:00:00\", \"2012-02-06T00:00:00\", \"2012-02-07T00:00:00\", \"2012-02-08T00:00:00\", \"2012-02-09T00:00:00\", \"2012-02-10T00:00:00\", \"2012-02-13T00:00:00\", \"2012-02-14T00:00:00\", \"2012-02-15T00:00:00\", \"2012-02-16T00:00:00\", \"2012-02-17T00:00:00\", \"2012-02-21T00:00:00\", \"2012-02-22T00:00:00\", \"2012-02-23T00:00:00\", \"2012-02-24T00:00:00\", \"2012-02-27T00:00:00\", \"2012-02-28T00:00:00\", \"2012-02-29T00:00:00\", \"2012-03-01T00:00:00\", \"2012-03-02T00:00:00\", \"2012-03-05T00:00:00\", \"2012-03-06T00:00:00\", \"2012-03-07T00:00:00\", \"2012-03-09T00:00:00\", \"2012-03-12T00:00:00\", \"2012-03-13T00:00:00\", \"2012-03-14T00:00:00\", \"2012-03-15T00:00:00\", \"2012-03-16T00:00:00\", \"2012-03-19T00:00:00\", \"2012-03-20T00:00:00\", \"2012-03-21T00:00:00\", \"2012-03-22T00:00:00\", \"2012-03-23T00:00:00\", \"2012-03-26T00:00:00\", \"2012-03-27T00:00:00\", \"2012-03-28T00:00:00\", \"2012-03-29T00:00:00\", \"2012-03-30T00:00:00\", \"2012-04-02T00:00:00\", \"2012-04-03T00:00:00\", \"2012-04-04T00:00:00\", \"2012-04-09T00:00:00\", \"2012-04-10T00:00:00\", \"2012-04-11T00:00:00\", \"2012-04-12T00:00:00\", \"2012-04-13T00:00:00\", \"2012-04-16T00:00:00\", \"2012-04-17T00:00:00\", \"2012-04-18T00:00:00\", \"2012-04-19T00:00:00\", \"2012-04-20T00:00:00\", \"2012-04-23T00:00:00\", \"2012-04-24T00:00:00\", \"2012-04-25T00:00:00\", \"2012-04-26T00:00:00\", \"2012-04-27T00:00:00\", \"2012-04-30T00:00:00\", \"2012-05-02T00:00:00\", \"2012-05-03T00:00:00\", \"2012-05-04T00:00:00\", \"2012-05-07T00:00:00\", \"2012-05-08T00:00:00\", \"2012-05-09T00:00:00\", \"2012-05-10T00:00:00\", \"2012-05-11T00:00:00\", \"2012-05-14T00:00:00\", \"2012-05-15T00:00:00\", \"2012-05-16T00:00:00\", \"2012-05-17T00:00:00\", \"2012-05-18T00:00:00\", \"2012-05-22T00:00:00\", \"2012-05-23T00:00:00\", \"2012-05-24T00:00:00\", \"2012-05-25T00:00:00\", \"2012-05-28T00:00:00\", \"2012-05-29T00:00:00\", \"2012-05-30T00:00:00\", \"2012-05-31T00:00:00\", \"2012-06-01T00:00:00\", \"2012-06-04T00:00:00\", \"2012-06-05T00:00:00\", \"2012-06-06T00:00:00\", \"2012-06-07T00:00:00\", \"2012-06-08T00:00:00\", \"2012-06-11T00:00:00\", \"2012-06-12T00:00:00\", \"2012-06-13T00:00:00\", \"2012-06-14T00:00:00\", \"2012-06-15T00:00:00\", \"2012-06-18T00:00:00\", \"2012-06-19T00:00:00\", \"2012-06-20T00:00:00\", \"2012-06-21T00:00:00\", \"2012-06-22T00:00:00\", \"2012-06-25T00:00:00\", \"2012-06-26T00:00:00\", \"2012-06-27T00:00:00\", \"2012-06-28T00:00:00\", \"2012-06-29T00:00:00\", \"2012-07-02T00:00:00\", \"2012-07-03T00:00:00\", \"2012-07-04T00:00:00\", \"2012-07-05T00:00:00\", \"2012-07-06T00:00:00\", \"2012-07-09T00:00:00\", \"2012-07-10T00:00:00\", \"2012-07-11T00:00:00\", \"2012-07-12T00:00:00\", \"2012-07-13T00:00:00\", \"2012-07-16T00:00:00\", \"2012-07-17T00:00:00\", \"2012-07-18T00:00:00\", \"2012-07-19T00:00:00\", \"2012-07-20T00:00:00\", \"2012-07-23T00:00:00\", \"2012-07-24T00:00:00\", \"2012-07-25T00:00:00\", \"2012-07-26T00:00:00\", \"2012-07-27T00:00:00\", \"2012-07-30T00:00:00\", \"2012-07-31T00:00:00\", \"2012-08-01T00:00:00\", \"2012-08-02T00:00:00\", \"2012-08-03T00:00:00\", \"2012-08-06T00:00:00\", \"2012-08-07T00:00:00\", \"2012-08-08T00:00:00\", \"2012-08-09T00:00:00\", \"2012-08-10T00:00:00\", \"2012-08-13T00:00:00\", \"2012-08-14T00:00:00\", \"2012-08-16T00:00:00\", \"2012-08-17T00:00:00\", \"2012-08-21T00:00:00\", \"2012-08-22T00:00:00\", \"2012-08-23T00:00:00\", \"2012-08-24T00:00:00\", \"2012-08-27T00:00:00\", \"2012-08-29T00:00:00\", \"2012-08-30T00:00:00\", \"2012-08-31T00:00:00\", \"2012-09-03T00:00:00\", \"2012-09-04T00:00:00\", \"2012-09-05T00:00:00\", \"2012-09-06T00:00:00\", \"2012-09-07T00:00:00\", \"2012-09-10T00:00:00\", \"2012-09-11T00:00:00\", \"2012-09-12T00:00:00\", \"2012-09-13T00:00:00\", \"2012-09-14T00:00:00\", \"2012-09-17T00:00:00\", \"2012-09-18T00:00:00\", \"2012-09-20T00:00:00\", \"2012-09-21T00:00:00\", \"2012-09-24T00:00:00\", \"2012-09-25T00:00:00\", \"2012-09-26T00:00:00\", \"2012-09-27T00:00:00\", \"2012-09-28T00:00:00\", \"2012-10-01T00:00:00\", \"2012-10-03T00:00:00\", \"2012-10-04T00:00:00\", \"2012-10-05T00:00:00\", \"2012-10-08T00:00:00\", \"2012-10-09T00:00:00\", \"2012-10-10T00:00:00\", \"2012-10-11T00:00:00\", \"2012-10-12T00:00:00\", \"2012-10-15T00:00:00\", \"2012-10-16T00:00:00\", \"2012-10-17T00:00:00\", \"2012-10-18T00:00:00\", \"2012-10-19T00:00:00\", \"2012-10-22T00:00:00\", \"2012-10-23T00:00:00\", \"2012-10-25T00:00:00\", \"2012-10-29T00:00:00\", \"2012-10-30T00:00:00\", \"2012-10-31T00:00:00\", \"2012-11-01T00:00:00\", \"2012-11-02T00:00:00\", \"2012-11-05T00:00:00\", \"2012-11-06T00:00:00\", \"2012-11-07T00:00:00\", \"2012-11-08T00:00:00\", \"2012-11-09T00:00:00\", \"2012-11-12T00:00:00\", \"2012-11-15T00:00:00\", \"2012-11-16T00:00:00\", \"2012-11-19T00:00:00\", \"2012-11-20T00:00:00\", \"2012-11-21T00:00:00\", \"2012-11-22T00:00:00\", \"2012-11-23T00:00:00\", \"2012-11-26T00:00:00\", \"2012-11-27T00:00:00\", \"2012-11-29T00:00:00\", \"2012-11-30T00:00:00\", \"2012-12-03T00:00:00\", \"2012-12-04T00:00:00\", \"2012-12-05T00:00:00\", \"2012-12-06T00:00:00\", \"2012-12-07T00:00:00\", \"2012-12-10T00:00:00\", \"2012-12-11T00:00:00\", \"2012-12-12T00:00:00\", \"2012-12-13T00:00:00\", \"2012-12-14T00:00:00\", \"2012-12-17T00:00:00\", \"2012-12-18T00:00:00\", \"2012-12-19T00:00:00\", \"2012-12-20T00:00:00\", \"2012-12-21T00:00:00\", \"2012-12-24T00:00:00\", \"2012-12-26T00:00:00\", \"2012-12-27T00:00:00\", \"2012-12-28T00:00:00\", \"2012-12-31T00:00:00\", \"2013-01-02T00:00:00\", \"2013-01-03T00:00:00\", \"2013-01-04T00:00:00\", \"2013-01-07T00:00:00\", \"2013-01-08T00:00:00\", \"2013-01-09T00:00:00\", \"2013-01-10T00:00:00\", \"2013-01-11T00:00:00\", \"2013-01-14T00:00:00\", \"2013-01-15T00:00:00\", \"2013-01-16T00:00:00\", \"2013-01-17T00:00:00\", \"2013-01-18T00:00:00\", \"2013-01-21T00:00:00\", \"2013-01-22T00:00:00\", \"2013-01-23T00:00:00\", \"2013-01-24T00:00:00\", \"2013-01-25T00:00:00\", \"2013-01-28T00:00:00\", \"2013-01-29T00:00:00\", \"2013-01-30T00:00:00\", \"2013-01-31T00:00:00\", \"2013-02-01T00:00:00\", \"2013-02-04T00:00:00\", \"2013-02-05T00:00:00\", \"2013-02-06T00:00:00\", \"2013-02-07T00:00:00\", \"2013-02-08T00:00:00\", \"2013-02-11T00:00:00\", \"2013-02-12T00:00:00\", \"2013-02-13T00:00:00\", \"2013-02-14T00:00:00\", \"2013-02-15T00:00:00\", \"2013-02-18T00:00:00\", \"2013-02-19T00:00:00\", \"2013-02-20T00:00:00\", \"2013-02-21T00:00:00\", \"2013-02-22T00:00:00\", \"2013-02-25T00:00:00\", \"2013-02-26T00:00:00\", \"2013-02-27T00:00:00\", \"2013-02-28T00:00:00\", \"2013-03-01T00:00:00\", \"2013-03-04T00:00:00\", \"2013-03-05T00:00:00\", \"2013-03-06T00:00:00\", \"2013-03-07T00:00:00\", \"2013-03-08T00:00:00\", \"2013-03-11T00:00:00\", \"2013-03-12T00:00:00\", \"2013-03-13T00:00:00\", \"2013-03-14T00:00:00\", \"2013-03-15T00:00:00\", \"2013-03-18T00:00:00\", \"2013-03-19T00:00:00\", \"2013-03-20T00:00:00\", \"2013-03-21T00:00:00\", \"2013-03-22T00:00:00\", \"2013-03-25T00:00:00\", \"2013-03-26T00:00:00\", \"2013-03-28T00:00:00\", \"2013-04-01T00:00:00\", \"2013-04-02T00:00:00\", \"2013-04-03T00:00:00\", \"2013-04-04T00:00:00\", \"2013-04-05T00:00:00\", \"2013-04-08T00:00:00\", \"2013-04-09T00:00:00\", \"2013-04-10T00:00:00\", \"2013-04-11T00:00:00\", \"2013-04-12T00:00:00\", \"2013-04-15T00:00:00\", \"2013-04-16T00:00:00\", \"2013-04-17T00:00:00\", \"2013-04-18T00:00:00\", \"2013-04-22T00:00:00\", \"2013-04-23T00:00:00\", \"2013-04-25T00:00:00\", \"2013-04-26T00:00:00\", \"2013-04-29T00:00:00\", \"2013-04-30T00:00:00\", \"2013-05-02T00:00:00\", \"2013-05-03T00:00:00\", \"2013-05-06T00:00:00\", \"2013-05-07T00:00:00\", \"2013-05-08T00:00:00\", \"2013-05-09T00:00:00\", \"2013-05-10T00:00:00\", \"2013-05-13T00:00:00\", \"2013-05-14T00:00:00\", \"2013-05-15T00:00:00\", \"2013-05-16T00:00:00\", \"2013-05-17T00:00:00\", \"2013-05-20T00:00:00\", \"2013-05-21T00:00:00\", \"2013-05-22T00:00:00\", \"2013-05-23T00:00:00\", \"2013-05-24T00:00:00\", \"2013-05-27T00:00:00\", \"2013-05-28T00:00:00\", \"2013-05-29T00:00:00\", \"2013-05-30T00:00:00\", \"2013-05-31T00:00:00\", \"2013-06-03T00:00:00\", \"2013-06-04T00:00:00\", \"2013-06-05T00:00:00\", \"2013-06-06T00:00:00\", \"2013-06-07T00:00:00\", \"2013-06-10T00:00:00\", \"2013-06-11T00:00:00\", \"2013-06-12T00:00:00\", \"2013-06-13T00:00:00\", \"2013-06-14T00:00:00\", \"2013-06-17T00:00:00\", \"2013-06-18T00:00:00\", \"2013-06-19T00:00:00\", \"2013-06-20T00:00:00\", \"2013-06-21T00:00:00\", \"2013-06-24T00:00:00\", \"2013-06-25T00:00:00\", \"2013-06-26T00:00:00\", \"2013-06-27T00:00:00\", \"2013-06-28T00:00:00\", \"2013-07-01T00:00:00\", \"2013-07-02T00:00:00\", \"2013-07-03T00:00:00\", \"2013-07-04T00:00:00\", \"2013-07-05T00:00:00\", \"2013-07-08T00:00:00\", \"2013-07-09T00:00:00\", \"2013-07-10T00:00:00\", \"2013-07-11T00:00:00\", \"2013-07-12T00:00:00\", \"2013-07-15T00:00:00\", \"2013-07-16T00:00:00\", \"2013-07-17T00:00:00\", \"2013-07-18T00:00:00\", \"2013-07-19T00:00:00\", \"2013-07-22T00:00:00\", \"2013-07-23T00:00:00\", \"2013-07-24T00:00:00\", \"2013-07-25T00:00:00\", \"2013-07-26T00:00:00\", \"2013-07-29T00:00:00\", \"2013-07-30T00:00:00\", \"2013-07-31T00:00:00\", \"2013-08-01T00:00:00\", \"2013-08-02T00:00:00\", \"2013-08-05T00:00:00\", \"2013-08-06T00:00:00\", \"2013-08-07T00:00:00\", \"2013-08-08T00:00:00\", \"2013-08-12T00:00:00\", \"2013-08-13T00:00:00\", \"2013-08-14T00:00:00\", \"2013-08-16T00:00:00\", \"2013-08-19T00:00:00\", \"2013-08-20T00:00:00\", \"2013-08-21T00:00:00\", \"2013-08-22T00:00:00\", \"2013-08-23T00:00:00\", \"2013-08-26T00:00:00\", \"2013-08-27T00:00:00\", \"2013-08-28T00:00:00\", \"2013-08-29T00:00:00\", \"2013-08-30T00:00:00\", \"2013-09-02T00:00:00\", \"2013-09-03T00:00:00\", \"2013-09-04T00:00:00\", \"2013-09-05T00:00:00\", \"2013-09-06T00:00:00\", \"2013-09-10T00:00:00\", \"2013-09-11T00:00:00\", \"2013-09-12T00:00:00\", \"2013-09-13T00:00:00\", \"2013-09-16T00:00:00\", \"2013-09-17T00:00:00\", \"2013-09-18T00:00:00\", \"2013-09-19T00:00:00\", \"2013-09-20T00:00:00\", \"2013-09-23T00:00:00\", \"2013-09-24T00:00:00\", \"2013-09-25T00:00:00\", \"2013-09-26T00:00:00\", \"2013-09-27T00:00:00\", \"2013-09-30T00:00:00\", \"2013-10-01T00:00:00\", \"2013-10-03T00:00:00\", \"2013-10-04T00:00:00\", \"2013-10-07T00:00:00\", \"2013-10-08T00:00:00\", \"2013-10-09T00:00:00\", \"2013-10-10T00:00:00\", \"2013-10-11T00:00:00\", \"2013-10-14T00:00:00\", \"2013-10-15T00:00:00\", \"2013-10-17T00:00:00\", \"2013-10-18T00:00:00\", \"2013-10-21T00:00:00\", \"2013-10-22T00:00:00\", \"2013-10-23T00:00:00\", \"2013-10-24T00:00:00\", \"2013-10-25T00:00:00\", \"2013-10-28T00:00:00\", \"2013-10-29T00:00:00\", \"2013-10-30T00:00:00\", \"2013-10-31T00:00:00\", \"2013-11-01T00:00:00\", \"2013-11-05T00:00:00\", \"2013-11-06T00:00:00\", \"2013-11-07T00:00:00\", \"2013-11-08T00:00:00\", \"2013-11-11T00:00:00\", \"2013-11-12T00:00:00\", \"2013-11-13T00:00:00\", \"2013-11-14T00:00:00\", \"2013-11-18T00:00:00\", \"2013-11-19T00:00:00\", \"2013-11-20T00:00:00\", \"2013-11-21T00:00:00\", \"2013-11-22T00:00:00\", \"2013-11-25T00:00:00\", \"2013-11-26T00:00:00\", \"2013-11-27T00:00:00\", \"2013-11-28T00:00:00\", \"2013-11-29T00:00:00\", \"2013-12-02T00:00:00\", \"2013-12-03T00:00:00\", \"2013-12-04T00:00:00\", \"2013-12-05T00:00:00\", \"2013-12-06T00:00:00\", \"2013-12-09T00:00:00\", \"2013-12-10T00:00:00\", \"2013-12-11T00:00:00\", \"2013-12-12T00:00:00\", \"2013-12-13T00:00:00\", \"2013-12-16T00:00:00\", \"2013-12-17T00:00:00\", \"2013-12-18T00:00:00\", \"2013-12-19T00:00:00\", \"2013-12-20T00:00:00\", \"2013-12-23T00:00:00\", \"2013-12-24T00:00:00\", \"2013-12-26T00:00:00\", \"2013-12-27T00:00:00\", \"2013-12-30T00:00:00\", \"2013-12-31T00:00:00\", \"2014-01-02T00:00:00\", \"2014-01-03T00:00:00\", \"2014-01-06T00:00:00\", \"2014-01-07T00:00:00\", \"2014-01-08T00:00:00\", \"2014-01-09T00:00:00\", \"2014-01-10T00:00:00\", \"2014-01-13T00:00:00\", \"2014-01-14T00:00:00\", \"2014-01-15T00:00:00\", \"2014-01-16T00:00:00\", \"2014-01-17T00:00:00\", \"2014-01-20T00:00:00\", \"2014-01-21T00:00:00\", \"2014-01-22T00:00:00\", \"2014-01-23T00:00:00\", \"2014-01-24T00:00:00\", \"2014-01-27T00:00:00\", \"2014-01-28T00:00:00\", \"2014-01-29T00:00:00\", \"2014-01-30T00:00:00\", \"2014-01-31T00:00:00\", \"2014-02-03T00:00:00\", \"2014-02-04T00:00:00\", \"2014-02-05T00:00:00\", \"2014-02-06T00:00:00\", \"2014-02-07T00:00:00\", \"2014-02-10T00:00:00\", \"2014-02-11T00:00:00\", \"2014-02-12T00:00:00\", \"2014-02-13T00:00:00\", \"2014-02-14T00:00:00\", \"2014-02-18T00:00:00\", \"2014-02-19T00:00:00\", \"2014-02-20T00:00:00\", \"2014-02-21T00:00:00\", \"2014-02-24T00:00:00\", \"2014-02-25T00:00:00\", \"2014-02-26T00:00:00\", \"2014-02-28T00:00:00\", \"2014-03-03T00:00:00\", \"2014-03-04T00:00:00\", \"2014-03-05T00:00:00\", \"2014-03-06T00:00:00\", \"2014-03-07T00:00:00\", \"2014-03-10T00:00:00\", \"2014-03-11T00:00:00\", \"2014-03-12T00:00:00\", \"2014-03-13T00:00:00\", \"2014-03-14T00:00:00\", \"2014-03-18T00:00:00\", \"2014-03-19T00:00:00\", \"2014-03-20T00:00:00\", \"2014-03-21T00:00:00\", \"2014-03-24T00:00:00\", \"2014-03-25T00:00:00\", \"2014-03-26T00:00:00\", \"2014-03-27T00:00:00\", \"2014-03-28T00:00:00\", \"2014-03-31T00:00:00\", \"2014-04-01T00:00:00\", \"2014-04-02T00:00:00\", \"2014-04-03T00:00:00\", \"2014-04-04T00:00:00\", \"2014-04-07T00:00:00\", \"2014-04-09T00:00:00\", \"2014-04-10T00:00:00\", \"2014-04-11T00:00:00\", \"2014-04-15T00:00:00\", \"2014-04-16T00:00:00\", \"2014-04-17T00:00:00\", \"2014-04-21T00:00:00\", \"2014-04-22T00:00:00\", \"2014-04-23T00:00:00\", \"2014-04-25T00:00:00\", \"2014-04-28T00:00:00\", \"2014-04-29T00:00:00\", \"2014-04-30T00:00:00\", \"2014-05-02T00:00:00\", \"2014-05-05T00:00:00\", \"2014-05-06T00:00:00\", \"2014-05-07T00:00:00\", \"2014-05-08T00:00:00\", \"2014-05-09T00:00:00\", \"2014-05-12T00:00:00\", \"2014-05-13T00:00:00\", \"2014-05-14T00:00:00\", \"2014-05-15T00:00:00\", \"2014-05-16T00:00:00\", \"2014-05-19T00:00:00\", \"2014-05-20T00:00:00\", \"2014-05-21T00:00:00\", \"2014-05-22T00:00:00\", \"2014-05-23T00:00:00\", \"2014-05-26T00:00:00\", \"2014-05-27T00:00:00\", \"2014-05-28T00:00:00\", \"2014-05-29T00:00:00\", \"2014-05-30T00:00:00\", \"2014-06-02T00:00:00\", \"2014-06-03T00:00:00\", \"2014-06-04T00:00:00\", \"2014-06-05T00:00:00\", \"2014-06-06T00:00:00\", \"2014-06-09T00:00:00\", \"2014-06-10T00:00:00\", \"2014-06-11T00:00:00\", \"2014-06-12T00:00:00\", \"2014-06-13T00:00:00\", \"2014-06-16T00:00:00\", \"2014-06-17T00:00:00\", \"2014-06-18T00:00:00\", \"2014-06-19T00:00:00\", \"2014-06-20T00:00:00\", \"2014-06-23T00:00:00\", \"2014-06-24T00:00:00\", \"2014-06-25T00:00:00\", \"2014-06-26T00:00:00\", \"2014-06-27T00:00:00\", \"2014-06-30T00:00:00\", \"2014-07-01T00:00:00\", \"2014-07-02T00:00:00\", \"2014-07-03T00:00:00\", \"2014-07-04T00:00:00\", \"2014-07-07T00:00:00\", \"2014-07-08T00:00:00\", \"2014-07-09T00:00:00\", \"2014-07-10T00:00:00\", \"2014-07-11T00:00:00\", \"2014-07-14T00:00:00\", \"2014-07-15T00:00:00\", \"2014-07-16T00:00:00\", \"2014-07-17T00:00:00\", \"2014-07-18T00:00:00\", \"2014-07-21T00:00:00\", \"2014-07-22T00:00:00\", \"2014-07-23T00:00:00\", \"2014-07-24T00:00:00\", \"2014-07-25T00:00:00\", \"2014-07-28T00:00:00\", \"2014-07-30T00:00:00\", \"2014-07-31T00:00:00\", \"2014-08-01T00:00:00\", \"2014-08-04T00:00:00\", \"2014-08-05T00:00:00\", \"2014-08-06T00:00:00\", \"2014-08-07T00:00:00\", \"2014-08-08T00:00:00\", \"2014-08-11T00:00:00\", \"2014-08-12T00:00:00\", \"2014-08-13T00:00:00\", \"2014-08-14T00:00:00\", \"2014-08-18T00:00:00\", \"2014-08-19T00:00:00\", \"2014-08-20T00:00:00\", \"2014-08-21T00:00:00\", \"2014-08-22T00:00:00\", \"2014-08-25T00:00:00\", \"2014-08-26T00:00:00\", \"2014-08-27T00:00:00\", \"2014-08-28T00:00:00\", \"2014-09-01T00:00:00\", \"2014-09-02T00:00:00\", \"2014-09-03T00:00:00\", \"2014-09-04T00:00:00\", \"2014-09-05T00:00:00\", \"2014-09-08T00:00:00\", \"2014-09-09T00:00:00\", \"2014-09-10T00:00:00\", \"2014-09-11T00:00:00\", \"2014-09-12T00:00:00\", \"2014-09-15T00:00:00\", \"2014-09-16T00:00:00\", \"2014-09-17T00:00:00\", \"2014-09-18T00:00:00\", \"2014-09-19T00:00:00\", \"2014-09-22T00:00:00\", \"2014-09-23T00:00:00\", \"2014-09-24T00:00:00\", \"2014-09-25T00:00:00\", \"2014-09-26T00:00:00\", \"2014-09-29T00:00:00\", \"2014-09-30T00:00:00\", \"2014-10-01T00:00:00\", \"2014-10-07T00:00:00\", \"2014-10-08T00:00:00\", \"2014-10-09T00:00:00\", \"2014-10-10T00:00:00\", \"2014-10-13T00:00:00\", \"2014-10-14T00:00:00\", \"2014-10-16T00:00:00\", \"2014-10-17T00:00:00\", \"2014-10-20T00:00:00\", \"2014-10-21T00:00:00\", \"2014-10-22T00:00:00\", \"2014-10-27T00:00:00\", \"2014-10-28T00:00:00\", \"2014-10-29T00:00:00\", \"2014-10-30T00:00:00\", \"2014-10-31T00:00:00\", \"2014-11-03T00:00:00\", \"2014-11-05T00:00:00\", \"2014-11-07T00:00:00\", \"2014-11-10T00:00:00\", \"2014-11-11T00:00:00\", \"2014-11-12T00:00:00\", \"2014-11-13T00:00:00\", \"2014-11-14T00:00:00\", \"2014-11-17T00:00:00\", \"2014-11-18T00:00:00\", \"2014-11-19T00:00:00\", \"2014-11-20T00:00:00\", \"2014-11-21T00:00:00\", \"2014-11-24T00:00:00\", \"2014-11-25T00:00:00\", \"2014-11-26T00:00:00\", \"2014-11-27T00:00:00\", \"2014-11-28T00:00:00\", \"2014-12-01T00:00:00\", \"2014-12-02T00:00:00\", \"2014-12-03T00:00:00\", \"2014-12-04T00:00:00\", \"2014-12-05T00:00:00\", \"2014-12-08T00:00:00\", \"2014-12-09T00:00:00\", \"2014-12-10T00:00:00\", \"2014-12-11T00:00:00\", \"2014-12-12T00:00:00\", \"2014-12-15T00:00:00\", \"2014-12-16T00:00:00\", \"2014-12-17T00:00:00\", \"2014-12-18T00:00:00\", \"2014-12-19T00:00:00\", \"2014-12-22T00:00:00\", \"2014-12-23T00:00:00\", \"2014-12-24T00:00:00\", \"2014-12-26T00:00:00\", \"2014-12-29T00:00:00\", \"2014-12-30T00:00:00\", \"2014-12-31T00:00:00\", \"2015-01-02T00:00:00\", \"2015-01-05T00:00:00\", \"2015-01-06T00:00:00\", \"2015-01-07T00:00:00\", \"2015-01-08T00:00:00\", \"2015-01-09T00:00:00\", \"2015-01-12T00:00:00\", \"2015-01-13T00:00:00\", \"2015-01-14T00:00:00\", \"2015-01-15T00:00:00\", \"2015-01-16T00:00:00\", \"2015-01-19T00:00:00\", \"2015-01-20T00:00:00\", \"2015-01-21T00:00:00\", \"2015-01-22T00:00:00\", \"2015-01-23T00:00:00\", \"2015-01-27T00:00:00\", \"2015-01-28T00:00:00\", \"2015-01-29T00:00:00\", \"2015-01-30T00:00:00\", \"2015-02-02T00:00:00\", \"2015-02-03T00:00:00\", \"2015-02-04T00:00:00\", \"2015-02-05T00:00:00\", \"2015-02-06T00:00:00\", \"2015-02-09T00:00:00\", \"2015-02-10T00:00:00\", \"2015-02-11T00:00:00\", \"2015-02-12T00:00:00\", \"2015-02-13T00:00:00\", \"2015-02-16T00:00:00\", \"2015-02-18T00:00:00\", \"2015-02-19T00:00:00\", \"2015-02-20T00:00:00\", \"2015-02-23T00:00:00\", \"2015-02-24T00:00:00\", \"2015-02-25T00:00:00\", \"2015-02-26T00:00:00\", \"2015-02-27T00:00:00\", \"2015-03-02T00:00:00\", \"2015-03-03T00:00:00\", \"2015-03-04T00:00:00\", \"2015-03-05T00:00:00\", \"2015-03-09T00:00:00\", \"2015-03-10T00:00:00\", \"2015-03-11T00:00:00\", \"2015-03-12T00:00:00\", \"2015-03-13T00:00:00\", \"2015-03-16T00:00:00\", \"2015-03-17T00:00:00\", \"2015-03-18T00:00:00\", \"2015-03-19T00:00:00\", \"2015-03-20T00:00:00\", \"2015-03-23T00:00:00\", \"2015-03-24T00:00:00\", \"2015-03-25T00:00:00\", \"2015-03-26T00:00:00\", \"2015-03-27T00:00:00\", \"2015-03-30T00:00:00\", \"2015-03-31T00:00:00\", \"2015-04-01T00:00:00\", \"2015-04-06T00:00:00\", \"2015-04-07T00:00:00\", \"2015-04-08T00:00:00\", \"2015-04-09T00:00:00\", \"2015-04-10T00:00:00\", \"2015-04-13T00:00:00\", \"2015-04-16T00:00:00\", \"2015-04-17T00:00:00\", \"2015-04-20T00:00:00\", \"2015-04-21T00:00:00\", \"2015-04-22T00:00:00\", \"2015-04-23T00:00:00\", \"2015-04-24T00:00:00\", \"2015-04-27T00:00:00\", \"2015-04-28T00:00:00\", \"2015-04-29T00:00:00\", \"2015-04-30T00:00:00\", \"2015-05-04T00:00:00\", \"2015-05-05T00:00:00\", \"2015-05-06T00:00:00\", \"2015-05-07T00:00:00\", \"2015-05-08T00:00:00\", \"2015-05-11T00:00:00\", \"2015-05-12T00:00:00\", \"2015-05-13T00:00:00\", \"2015-05-14T00:00:00\", \"2015-05-15T00:00:00\", \"2015-05-18T00:00:00\", \"2015-05-19T00:00:00\", \"2015-05-20T00:00:00\", \"2015-05-21T00:00:00\", \"2015-05-22T00:00:00\", \"2015-05-25T00:00:00\", \"2015-05-26T00:00:00\", \"2015-05-27T00:00:00\", \"2015-05-28T00:00:00\", \"2015-05-29T00:00:00\", \"2015-06-01T00:00:00\", \"2015-06-02T00:00:00\", \"2015-06-03T00:00:00\", \"2015-06-04T00:00:00\", \"2015-06-05T00:00:00\", \"2015-06-08T00:00:00\", \"2015-06-09T00:00:00\", \"2015-06-10T00:00:00\", \"2015-06-11T00:00:00\", \"2015-06-12T00:00:00\", \"2015-06-15T00:00:00\", \"2015-06-16T00:00:00\", \"2015-06-17T00:00:00\", \"2015-06-18T00:00:00\", \"2015-06-19T00:00:00\", \"2015-06-22T00:00:00\", \"2015-06-23T00:00:00\", \"2015-06-24T00:00:00\", \"2015-06-25T00:00:00\", \"2015-06-26T00:00:00\", \"2015-06-29T00:00:00\", \"2015-06-30T00:00:00\", \"2015-07-01T00:00:00\", \"2015-07-02T00:00:00\", \"2015-07-03T00:00:00\", \"2015-07-06T00:00:00\", \"2015-07-07T00:00:00\", \"2015-07-08T00:00:00\", \"2015-07-09T00:00:00\", \"2015-07-10T00:00:00\", \"2015-07-13T00:00:00\", \"2015-07-14T00:00:00\", \"2015-07-15T00:00:00\", \"2015-07-16T00:00:00\", \"2015-07-17T00:00:00\", \"2015-07-20T00:00:00\", \"2015-07-21T00:00:00\", \"2015-07-22T00:00:00\", \"2015-07-23T00:00:00\", \"2015-07-24T00:00:00\", \"2015-07-27T00:00:00\", \"2015-07-28T00:00:00\", \"2015-07-29T00:00:00\", \"2015-07-30T00:00:00\", \"2015-07-31T00:00:00\", \"2015-08-03T00:00:00\", \"2015-08-04T00:00:00\", \"2015-08-05T00:00:00\", \"2015-08-06T00:00:00\", \"2015-08-07T00:00:00\", \"2015-08-10T00:00:00\", \"2015-08-11T00:00:00\", \"2015-08-12T00:00:00\", \"2015-08-13T00:00:00\", \"2015-08-14T00:00:00\", \"2015-08-17T00:00:00\", \"2015-08-18T00:00:00\", \"2015-08-19T00:00:00\", \"2015-08-20T00:00:00\", \"2015-08-21T00:00:00\", \"2015-08-24T00:00:00\", \"2015-08-25T00:00:00\", \"2015-08-26T00:00:00\", \"2015-08-27T00:00:00\", \"2015-08-28T00:00:00\", \"2015-08-31T00:00:00\", \"2015-09-01T00:00:00\", \"2015-09-02T00:00:00\", \"2015-09-03T00:00:00\", \"2015-09-04T00:00:00\", \"2015-09-07T00:00:00\", \"2015-09-08T00:00:00\", \"2015-09-09T00:00:00\", \"2015-09-10T00:00:00\", \"2015-09-11T00:00:00\", \"2015-09-14T00:00:00\", \"2015-09-15T00:00:00\", \"2015-09-16T00:00:00\", \"2015-09-18T00:00:00\", \"2015-09-21T00:00:00\", \"2015-09-22T00:00:00\", \"2015-09-23T00:00:00\", \"2015-09-24T00:00:00\", \"2015-09-28T00:00:00\", \"2015-09-29T00:00:00\", \"2015-09-30T00:00:00\", \"2015-10-01T00:00:00\", \"2015-10-05T00:00:00\", \"2015-10-06T00:00:00\", \"2015-10-07T00:00:00\", \"2015-10-08T00:00:00\", \"2015-10-09T00:00:00\", \"2015-10-12T00:00:00\", \"2015-10-13T00:00:00\", \"2015-10-14T00:00:00\", \"2015-10-15T00:00:00\", \"2015-10-16T00:00:00\", \"2015-10-19T00:00:00\", \"2015-10-20T00:00:00\", \"2015-10-21T00:00:00\", \"2015-10-23T00:00:00\", \"2015-10-26T00:00:00\", \"2015-10-27T00:00:00\", \"2015-10-28T00:00:00\", \"2015-10-29T00:00:00\", \"2015-10-30T00:00:00\", \"2015-11-02T00:00:00\", \"2015-11-03T00:00:00\", \"2015-11-04T00:00:00\", \"2015-11-05T00:00:00\", \"2015-11-06T00:00:00\", \"2015-11-09T00:00:00\", \"2015-11-10T00:00:00\", \"2015-11-13T00:00:00\", \"2015-11-16T00:00:00\", \"2015-11-17T00:00:00\", \"2015-11-18T00:00:00\", \"2015-11-19T00:00:00\", \"2015-11-20T00:00:00\", \"2015-11-23T00:00:00\", \"2015-11-24T00:00:00\", \"2015-11-26T00:00:00\", \"2015-11-27T00:00:00\", \"2015-11-30T00:00:00\", \"2015-12-01T00:00:00\", \"2015-12-02T00:00:00\", \"2015-12-03T00:00:00\", \"2015-12-04T00:00:00\", \"2015-12-07T00:00:00\", \"2015-12-08T00:00:00\", \"2015-12-09T00:00:00\", \"2015-12-10T00:00:00\", \"2015-12-11T00:00:00\", \"2015-12-14T00:00:00\", \"2015-12-15T00:00:00\", \"2015-12-16T00:00:00\", \"2015-12-17T00:00:00\", \"2015-12-18T00:00:00\", \"2015-12-21T00:00:00\", \"2015-12-22T00:00:00\", \"2015-12-23T00:00:00\", \"2015-12-24T00:00:00\", \"2015-12-28T00:00:00\", \"2015-12-29T00:00:00\", \"2015-12-30T00:00:00\", \"2015-12-31T00:00:00\", \"2016-01-04T00:00:00\", \"2016-01-05T00:00:00\", \"2016-01-06T00:00:00\", \"2016-01-07T00:00:00\", \"2016-01-08T00:00:00\", \"2016-01-11T00:00:00\", \"2016-01-12T00:00:00\", \"2016-01-13T00:00:00\", \"2016-01-14T00:00:00\", \"2016-01-15T00:00:00\", \"2016-01-18T00:00:00\", \"2016-01-19T00:00:00\", \"2016-01-20T00:00:00\", \"2016-01-21T00:00:00\", \"2016-01-22T00:00:00\", \"2016-01-25T00:00:00\", \"2016-01-27T00:00:00\", \"2016-01-28T00:00:00\", \"2016-01-29T00:00:00\", \"2016-02-01T00:00:00\", \"2016-02-02T00:00:00\", \"2016-02-03T00:00:00\", \"2016-02-04T00:00:00\", \"2016-02-05T00:00:00\", \"2016-02-08T00:00:00\", \"2016-02-09T00:00:00\", \"2016-02-10T00:00:00\", \"2016-02-11T00:00:00\", \"2016-02-12T00:00:00\", \"2016-02-15T00:00:00\", \"2016-02-16T00:00:00\", \"2016-02-17T00:00:00\", \"2016-02-18T00:00:00\", \"2016-02-19T00:00:00\", \"2016-02-22T00:00:00\", \"2016-02-23T00:00:00\", \"2016-02-24T00:00:00\", \"2016-02-25T00:00:00\", \"2016-02-26T00:00:00\", \"2016-02-29T00:00:00\", \"2016-03-01T00:00:00\", \"2016-03-02T00:00:00\", \"2016-03-03T00:00:00\", \"2016-03-04T00:00:00\", \"2016-03-08T00:00:00\", \"2016-03-09T00:00:00\", \"2016-03-10T00:00:00\", \"2016-03-11T00:00:00\", \"2016-03-14T00:00:00\", \"2016-03-15T00:00:00\", \"2016-03-16T00:00:00\", \"2016-03-17T00:00:00\", \"2016-03-18T00:00:00\", \"2016-03-21T00:00:00\", \"2016-03-22T00:00:00\", \"2016-03-23T00:00:00\", \"2016-03-28T00:00:00\", \"2016-03-29T00:00:00\", \"2016-03-30T00:00:00\", \"2016-03-31T00:00:00\", \"2016-04-01T00:00:00\", \"2016-04-04T00:00:00\", \"2016-04-05T00:00:00\", \"2016-04-06T00:00:00\", \"2016-04-07T00:00:00\", \"2016-04-08T00:00:00\", \"2016-04-11T00:00:00\", \"2016-04-12T00:00:00\", \"2016-04-13T00:00:00\", \"2016-04-18T00:00:00\", \"2016-04-20T00:00:00\", \"2016-04-21T00:00:00\", \"2016-04-22T00:00:00\", \"2016-04-25T00:00:00\", \"2016-04-26T00:00:00\", \"2016-04-27T00:00:00\", \"2016-04-28T00:00:00\", \"2016-04-29T00:00:00\", \"2016-05-02T00:00:00\", \"2016-05-03T00:00:00\", \"2016-05-04T00:00:00\", \"2016-05-05T00:00:00\", \"2016-05-06T00:00:00\", \"2016-05-09T00:00:00\", \"2016-05-10T00:00:00\", \"2016-05-11T00:00:00\", \"2016-05-12T00:00:00\", \"2016-05-13T00:00:00\", \"2016-05-16T00:00:00\", \"2016-05-17T00:00:00\", \"2016-05-18T00:00:00\", \"2016-05-19T00:00:00\", \"2016-05-20T00:00:00\", \"2016-05-23T00:00:00\", \"2016-05-24T00:00:00\", \"2016-05-25T00:00:00\", \"2016-05-26T00:00:00\", \"2016-05-27T00:00:00\", \"2016-05-30T00:00:00\", \"2016-05-31T00:00:00\", \"2016-06-01T00:00:00\", \"2016-06-02T00:00:00\", \"2016-06-03T00:00:00\", \"2016-06-06T00:00:00\", \"2016-06-07T00:00:00\", \"2016-06-08T00:00:00\", \"2016-06-09T00:00:00\", \"2016-06-10T00:00:00\", \"2016-06-13T00:00:00\", \"2016-06-14T00:00:00\", \"2016-06-15T00:00:00\", \"2016-06-16T00:00:00\", \"2016-06-17T00:00:00\", \"2016-06-20T00:00:00\", \"2016-06-21T00:00:00\", \"2016-06-22T00:00:00\", \"2016-06-23T00:00:00\", \"2016-06-24T00:00:00\", \"2016-06-27T00:00:00\", \"2016-06-28T00:00:00\", \"2016-06-29T00:00:00\", \"2016-06-30T00:00:00\", \"2016-07-01T00:00:00\", \"2016-07-04T00:00:00\", \"2016-07-05T00:00:00\", \"2016-07-07T00:00:00\", \"2016-07-08T00:00:00\", \"2016-07-11T00:00:00\", \"2016-07-12T00:00:00\", \"2016-07-13T00:00:00\", \"2016-07-14T00:00:00\", \"2016-07-15T00:00:00\", \"2016-07-18T00:00:00\", \"2016-07-19T00:00:00\", \"2016-07-20T00:00:00\", \"2016-07-21T00:00:00\", \"2016-07-22T00:00:00\", \"2016-07-25T00:00:00\", \"2016-07-26T00:00:00\", \"2016-07-27T00:00:00\", \"2016-07-28T00:00:00\", \"2016-07-29T00:00:00\", \"2016-08-01T00:00:00\", \"2016-08-02T00:00:00\", \"2016-08-03T00:00:00\", \"2016-08-04T00:00:00\", \"2016-08-05T00:00:00\", \"2016-08-08T00:00:00\", \"2016-08-09T00:00:00\", \"2016-08-10T00:00:00\", \"2016-08-11T00:00:00\", \"2016-08-16T00:00:00\", \"2016-08-17T00:00:00\", \"2016-08-18T00:00:00\", \"2016-08-19T00:00:00\", \"2016-08-22T00:00:00\", \"2016-08-23T00:00:00\", \"2016-08-24T00:00:00\", \"2016-08-25T00:00:00\", \"2016-08-26T00:00:00\", \"2016-08-29T00:00:00\", \"2016-08-30T00:00:00\", \"2016-08-31T00:00:00\", \"2016-09-01T00:00:00\", \"2016-09-02T00:00:00\", \"2016-09-06T00:00:00\", \"2016-09-07T00:00:00\", \"2016-09-08T00:00:00\", \"2016-09-09T00:00:00\", \"2016-09-12T00:00:00\", \"2016-09-14T00:00:00\", \"2016-09-15T00:00:00\", \"2016-09-16T00:00:00\", \"2016-09-19T00:00:00\", \"2016-09-20T00:00:00\", \"2016-09-21T00:00:00\", \"2016-09-22T00:00:00\", \"2016-09-23T00:00:00\", \"2016-09-26T00:00:00\", \"2016-09-27T00:00:00\", \"2016-09-28T00:00:00\", \"2016-09-29T00:00:00\", \"2016-09-30T00:00:00\", \"2016-10-03T00:00:00\", \"2016-10-04T00:00:00\", \"2016-10-05T00:00:00\", \"2016-10-06T00:00:00\", \"2016-10-07T00:00:00\", \"2016-10-10T00:00:00\", \"2016-10-13T00:00:00\", \"2016-10-14T00:00:00\", \"2016-10-17T00:00:00\", \"2016-10-18T00:00:00\", \"2016-10-19T00:00:00\", \"2016-10-20T00:00:00\", \"2016-10-21T00:00:00\", \"2016-10-24T00:00:00\", \"2016-10-25T00:00:00\", \"2016-10-26T00:00:00\", \"2016-10-27T00:00:00\", \"2016-10-28T00:00:00\", \"2016-11-01T00:00:00\", \"2016-11-02T00:00:00\", \"2016-11-03T00:00:00\", \"2016-11-04T00:00:00\", \"2016-11-07T00:00:00\", \"2016-11-08T00:00:00\", \"2016-11-09T00:00:00\", \"2016-11-10T00:00:00\", \"2016-11-11T00:00:00\", \"2016-11-15T00:00:00\", \"2016-11-16T00:00:00\", \"2016-11-17T00:00:00\", \"2016-11-18T00:00:00\", \"2016-11-21T00:00:00\", \"2016-11-22T00:00:00\", \"2016-11-23T00:00:00\", \"2016-11-24T00:00:00\", \"2016-11-25T00:00:00\", \"2016-11-28T00:00:00\", \"2016-11-29T00:00:00\", \"2016-11-30T00:00:00\", \"2016-12-01T00:00:00\", \"2016-12-02T00:00:00\", \"2016-12-05T00:00:00\", \"2016-12-06T00:00:00\", \"2016-12-07T00:00:00\", \"2016-12-08T00:00:00\", \"2016-12-09T00:00:00\", \"2016-12-12T00:00:00\", \"2016-12-13T00:00:00\", \"2016-12-14T00:00:00\", \"2016-12-15T00:00:00\", \"2016-12-16T00:00:00\", \"2016-12-19T00:00:00\", \"2016-12-20T00:00:00\", \"2016-12-21T00:00:00\", \"2016-12-22T00:00:00\", \"2016-12-23T00:00:00\", \"2016-12-26T00:00:00\", \"2016-12-27T00:00:00\", \"2016-12-28T00:00:00\", \"2016-12-29T00:00:00\", \"2016-12-30T00:00:00\", \"2017-01-02T00:00:00\", \"2017-01-03T00:00:00\", \"2017-01-04T00:00:00\", \"2017-01-05T00:00:00\", \"2017-01-06T00:00:00\", \"2017-01-09T00:00:00\", \"2017-01-10T00:00:00\", \"2017-01-11T00:00:00\", \"2017-01-12T00:00:00\", \"2017-01-13T00:00:00\", \"2017-01-16T00:00:00\", \"2017-01-17T00:00:00\", \"2017-01-18T00:00:00\", \"2017-01-19T00:00:00\", \"2017-01-20T00:00:00\", \"2017-01-23T00:00:00\", \"2017-01-24T00:00:00\", \"2017-01-25T00:00:00\", \"2017-01-27T00:00:00\", \"2017-01-30T00:00:00\", \"2017-01-31T00:00:00\", \"2017-02-01T00:00:00\", \"2017-02-02T00:00:00\", \"2017-02-03T00:00:00\", \"2017-02-06T00:00:00\", \"2017-02-07T00:00:00\", \"2017-02-08T00:00:00\", \"2017-02-09T00:00:00\", \"2017-02-10T00:00:00\", \"2017-02-13T00:00:00\", \"2017-02-14T00:00:00\", \"2017-02-15T00:00:00\", \"2017-02-16T00:00:00\", \"2017-02-17T00:00:00\", \"2017-02-20T00:00:00\", \"2017-02-21T00:00:00\", \"2017-02-22T00:00:00\", \"2017-02-23T00:00:00\", \"2017-02-27T00:00:00\", \"2017-02-28T00:00:00\", \"2017-03-01T00:00:00\", \"2017-03-02T00:00:00\", \"2017-03-03T00:00:00\", \"2017-03-06T00:00:00\", \"2017-03-07T00:00:00\", \"2017-03-08T00:00:00\", \"2017-03-09T00:00:00\", \"2017-03-10T00:00:00\", \"2017-03-14T00:00:00\", \"2017-03-15T00:00:00\", \"2017-03-16T00:00:00\", \"2017-03-17T00:00:00\", \"2017-03-20T00:00:00\", \"2017-03-21T00:00:00\", \"2017-03-22T00:00:00\", \"2017-03-23T00:00:00\", \"2017-03-24T00:00:00\", \"2017-03-27T00:00:00\", \"2017-03-28T00:00:00\", \"2017-03-29T00:00:00\", \"2017-03-30T00:00:00\", \"2017-03-31T00:00:00\", \"2017-04-03T00:00:00\", \"2017-04-05T00:00:00\", \"2017-04-06T00:00:00\", \"2017-04-07T00:00:00\", \"2017-04-10T00:00:00\", \"2017-04-11T00:00:00\", \"2017-04-12T00:00:00\", \"2017-04-13T00:00:00\", \"2017-04-17T00:00:00\", \"2017-04-18T00:00:00\", \"2017-04-19T00:00:00\", \"2017-04-20T00:00:00\", \"2017-04-21T00:00:00\", \"2017-04-24T00:00:00\", \"2017-04-25T00:00:00\", \"2017-04-26T00:00:00\", \"2017-04-27T00:00:00\", \"2017-04-28T00:00:00\", \"2017-05-02T00:00:00\", \"2017-05-03T00:00:00\", \"2017-05-04T00:00:00\", \"2017-05-05T00:00:00\", \"2017-05-08T00:00:00\", \"2017-05-09T00:00:00\", \"2017-05-10T00:00:00\", \"2017-05-11T00:00:00\", \"2017-05-12T00:00:00\", \"2017-05-15T00:00:00\", \"2017-05-16T00:00:00\", \"2017-05-17T00:00:00\", \"2017-05-18T00:00:00\", \"2017-05-19T00:00:00\", \"2017-05-22T00:00:00\", \"2017-05-23T00:00:00\", \"2017-05-24T00:00:00\", \"2017-05-25T00:00:00\", \"2017-05-26T00:00:00\", \"2017-05-29T00:00:00\", \"2017-05-30T00:00:00\", \"2017-05-31T00:00:00\", \"2017-06-01T00:00:00\", \"2017-06-02T00:00:00\", \"2017-06-05T00:00:00\", \"2017-06-06T00:00:00\", \"2017-06-07T00:00:00\", \"2017-06-08T00:00:00\", \"2017-06-09T00:00:00\", \"2017-06-12T00:00:00\", \"2017-06-13T00:00:00\", \"2017-06-14T00:00:00\", \"2017-06-15T00:00:00\", \"2017-06-16T00:00:00\", \"2017-06-19T00:00:00\", \"2017-06-20T00:00:00\", \"2017-06-21T00:00:00\", \"2017-06-22T00:00:00\", \"2017-06-23T00:00:00\", \"2017-06-27T00:00:00\", \"2017-06-28T00:00:00\", \"2017-06-29T00:00:00\", \"2017-06-30T00:00:00\", \"2017-07-03T00:00:00\", \"2017-07-04T00:00:00\", \"2017-07-05T00:00:00\", \"2017-07-06T00:00:00\", \"2017-07-07T00:00:00\", \"2017-07-10T00:00:00\", \"2017-07-11T00:00:00\", \"2017-07-12T00:00:00\", \"2017-07-13T00:00:00\", \"2017-07-14T00:00:00\", \"2017-07-17T00:00:00\", \"2017-07-18T00:00:00\", \"2017-07-19T00:00:00\", \"2017-07-20T00:00:00\", \"2017-07-21T00:00:00\", \"2017-07-24T00:00:00\", \"2017-07-25T00:00:00\", \"2017-07-26T00:00:00\", \"2017-07-27T00:00:00\", \"2017-07-28T00:00:00\", \"2017-07-31T00:00:00\", \"2017-08-01T00:00:00\", \"2017-08-02T00:00:00\", \"2017-08-03T00:00:00\", \"2017-08-04T00:00:00\", \"2017-08-07T00:00:00\", \"2017-08-08T00:00:00\", \"2017-08-09T00:00:00\", \"2017-08-10T00:00:00\", \"2017-08-11T00:00:00\", \"2017-08-14T00:00:00\", \"2017-08-16T00:00:00\", \"2017-08-17T00:00:00\", \"2017-08-18T00:00:00\", \"2017-08-21T00:00:00\", \"2017-08-22T00:00:00\", \"2017-08-23T00:00:00\", \"2017-08-24T00:00:00\", \"2017-08-28T00:00:00\", \"2017-08-29T00:00:00\", \"2017-08-30T00:00:00\", \"2017-08-31T00:00:00\", \"2017-09-01T00:00:00\", \"2017-09-04T00:00:00\", \"2017-09-05T00:00:00\", \"2017-09-06T00:00:00\", \"2017-09-07T00:00:00\", \"2017-09-08T00:00:00\", \"2017-09-11T00:00:00\", \"2017-09-12T00:00:00\", \"2017-09-13T00:00:00\", \"2017-09-14T00:00:00\", \"2017-09-15T00:00:00\", \"2017-09-18T00:00:00\", \"2017-09-19T00:00:00\", \"2017-09-20T00:00:00\", \"2017-09-21T00:00:00\", \"2017-09-22T00:00:00\", \"2017-09-25T00:00:00\", \"2017-09-26T00:00:00\", \"2017-09-27T00:00:00\", \"2017-09-28T00:00:00\", \"2017-09-29T00:00:00\", \"2017-10-03T00:00:00\", \"2017-10-04T00:00:00\", \"2017-10-05T00:00:00\", \"2017-10-06T00:00:00\", \"2017-10-09T00:00:00\", \"2017-10-10T00:00:00\", \"2017-10-11T00:00:00\", \"2017-10-12T00:00:00\", \"2017-10-13T00:00:00\", \"2017-10-16T00:00:00\", \"2017-10-17T00:00:00\", \"2017-10-18T00:00:00\", \"2017-10-19T00:00:00\", \"2017-10-23T00:00:00\", \"2017-10-24T00:00:00\", \"2017-10-25T00:00:00\", \"2017-10-26T00:00:00\", \"2017-10-27T00:00:00\", \"2017-10-30T00:00:00\", \"2017-10-31T00:00:00\", \"2017-11-01T00:00:00\", \"2017-11-02T00:00:00\", \"2017-11-03T00:00:00\", \"2017-11-06T00:00:00\", \"2017-11-07T00:00:00\", \"2017-11-08T00:00:00\", \"2017-11-09T00:00:00\", \"2017-11-10T00:00:00\", \"2017-11-13T00:00:00\", \"2017-11-14T00:00:00\", \"2017-11-15T00:00:00\", \"2017-11-16T00:00:00\", \"2017-11-17T00:00:00\", \"2017-11-20T00:00:00\", \"2017-11-21T00:00:00\", \"2017-11-22T00:00:00\", \"2017-11-23T00:00:00\", \"2017-11-24T00:00:00\", \"2017-11-27T00:00:00\", \"2017-11-28T00:00:00\", \"2017-11-29T00:00:00\", \"2017-11-30T00:00:00\", \"2017-12-01T00:00:00\", \"2017-12-04T00:00:00\", \"2017-12-05T00:00:00\", \"2017-12-06T00:00:00\", \"2017-12-07T00:00:00\", \"2017-12-08T00:00:00\", \"2017-12-11T00:00:00\", \"2017-12-12T00:00:00\", \"2017-12-13T00:00:00\", \"2017-12-14T00:00:00\", \"2017-12-15T00:00:00\", \"2017-12-18T00:00:00\", \"2017-12-19T00:00:00\", \"2017-12-20T00:00:00\", \"2017-12-21T00:00:00\", \"2017-12-22T00:00:00\", \"2017-12-26T00:00:00\", \"2017-12-27T00:00:00\", \"2017-12-28T00:00:00\", \"2017-12-29T00:00:00\", \"2018-01-02T00:00:00\", \"2018-01-03T00:00:00\", \"2018-01-04T00:00:00\", \"2018-01-05T00:00:00\", \"2018-01-08T00:00:00\", \"2018-01-09T00:00:00\", \"2018-01-10T00:00:00\", \"2018-01-11T00:00:00\", \"2018-01-12T00:00:00\", \"2018-01-15T00:00:00\", \"2018-01-16T00:00:00\", \"2018-01-17T00:00:00\", \"2018-01-18T00:00:00\", \"2018-01-19T00:00:00\", \"2018-01-22T00:00:00\", \"2018-01-23T00:00:00\", \"2018-01-24T00:00:00\", \"2018-01-25T00:00:00\", \"2018-01-29T00:00:00\", \"2018-01-30T00:00:00\", \"2018-01-31T00:00:00\", \"2018-02-01T00:00:00\", \"2018-02-02T00:00:00\", \"2018-02-05T00:00:00\", \"2018-02-06T00:00:00\", \"2018-02-07T00:00:00\", \"2018-02-08T00:00:00\", \"2018-02-09T00:00:00\", \"2018-02-12T00:00:00\", \"2018-02-14T00:00:00\", \"2018-02-15T00:00:00\", \"2018-02-16T00:00:00\", \"2018-02-19T00:00:00\", \"2018-02-20T00:00:00\", \"2018-02-21T00:00:00\", \"2018-02-22T00:00:00\", \"2018-02-23T00:00:00\", \"2018-02-26T00:00:00\", \"2018-02-27T00:00:00\", \"2018-02-28T00:00:00\", \"2018-03-01T00:00:00\", \"2018-03-05T00:00:00\", \"2018-03-06T00:00:00\", \"2018-03-07T00:00:00\", \"2018-03-08T00:00:00\", \"2018-03-09T00:00:00\", \"2018-03-12T00:00:00\", \"2018-03-13T00:00:00\", \"2018-03-14T00:00:00\", \"2018-03-15T00:00:00\", \"2018-03-16T00:00:00\", \"2018-03-19T00:00:00\", \"2018-03-20T00:00:00\", \"2018-03-21T00:00:00\", \"2018-03-22T00:00:00\", \"2018-03-23T00:00:00\", \"2018-03-26T00:00:00\", \"2018-03-27T00:00:00\", \"2018-03-28T00:00:00\", \"2018-04-02T00:00:00\", \"2018-04-03T00:00:00\", \"2018-04-04T00:00:00\", \"2018-04-05T00:00:00\", \"2018-04-06T00:00:00\", \"2018-04-09T00:00:00\", \"2018-04-10T00:00:00\", \"2018-04-11T00:00:00\", \"2018-04-12T00:00:00\", \"2018-04-13T00:00:00\", \"2018-04-16T00:00:00\", \"2018-04-17T00:00:00\", \"2018-04-18T00:00:00\", \"2018-04-19T00:00:00\", \"2018-04-20T00:00:00\", \"2018-04-23T00:00:00\", \"2018-04-24T00:00:00\", \"2018-04-25T00:00:00\", \"2018-04-26T00:00:00\", \"2018-04-27T00:00:00\", \"2018-04-30T00:00:00\", \"2018-05-02T00:00:00\", \"2018-05-03T00:00:00\", \"2018-05-04T00:00:00\", \"2018-05-07T00:00:00\", \"2018-05-08T00:00:00\", \"2018-05-09T00:00:00\", \"2018-05-10T00:00:00\", \"2018-05-11T00:00:00\", \"2018-05-14T00:00:00\", \"2018-05-15T00:00:00\", \"2018-05-16T00:00:00\", \"2018-05-17T00:00:00\", \"2018-05-18T00:00:00\", \"2018-05-21T00:00:00\", \"2018-05-22T00:00:00\", \"2018-05-23T00:00:00\", \"2018-05-24T00:00:00\", \"2018-05-25T00:00:00\", \"2018-05-28T00:00:00\", \"2018-05-29T00:00:00\", \"2018-05-30T00:00:00\", \"2018-05-31T00:00:00\", \"2018-06-01T00:00:00\", \"2018-06-04T00:00:00\", \"2018-06-05T00:00:00\", \"2018-06-06T00:00:00\", \"2018-06-07T00:00:00\", \"2018-06-08T00:00:00\", \"2018-06-11T00:00:00\", \"2018-06-12T00:00:00\", \"2018-06-13T00:00:00\", \"2018-06-14T00:00:00\", \"2018-06-15T00:00:00\", \"2018-06-18T00:00:00\", \"2018-06-19T00:00:00\", \"2018-06-20T00:00:00\", \"2018-06-21T00:00:00\", \"2018-06-22T00:00:00\", \"2018-06-25T00:00:00\", \"2018-06-26T00:00:00\", \"2018-06-27T00:00:00\", \"2018-06-28T00:00:00\", \"2018-06-29T00:00:00\", \"2018-07-02T00:00:00\", \"2018-07-03T00:00:00\", \"2018-07-04T00:00:00\", \"2018-07-05T00:00:00\", \"2018-07-06T00:00:00\", \"2018-07-09T00:00:00\", \"2018-07-10T00:00:00\", \"2018-07-11T00:00:00\", \"2018-07-12T00:00:00\", \"2018-07-13T00:00:00\", \"2018-07-16T00:00:00\", \"2018-07-17T00:00:00\", \"2018-07-18T00:00:00\", \"2018-07-19T00:00:00\", \"2018-07-20T00:00:00\", \"2018-07-23T00:00:00\", \"2018-07-24T00:00:00\", \"2018-07-25T00:00:00\", \"2018-07-26T00:00:00\", \"2018-07-27T00:00:00\", \"2018-07-30T00:00:00\", \"2018-07-31T00:00:00\", \"2018-08-01T00:00:00\", \"2018-08-02T00:00:00\", \"2018-08-03T00:00:00\", \"2018-08-06T00:00:00\", \"2018-08-07T00:00:00\", \"2018-08-08T00:00:00\", \"2018-08-09T00:00:00\", \"2018-08-10T00:00:00\", \"2018-08-13T00:00:00\", \"2018-08-14T00:00:00\", \"2018-08-16T00:00:00\", \"2018-08-17T00:00:00\", \"2018-08-20T00:00:00\", \"2018-08-21T00:00:00\", \"2018-08-23T00:00:00\", \"2018-08-24T00:00:00\", \"2018-08-27T00:00:00\", \"2018-08-28T00:00:00\", \"2018-08-29T00:00:00\", \"2018-08-30T00:00:00\", \"2018-08-31T00:00:00\", \"2018-09-03T00:00:00\", \"2018-09-04T00:00:00\", \"2018-09-05T00:00:00\", \"2018-09-06T00:00:00\", \"2018-09-07T00:00:00\", \"2018-09-10T00:00:00\", \"2018-09-11T00:00:00\", \"2018-09-12T00:00:00\", \"2018-09-14T00:00:00\", \"2018-09-17T00:00:00\", \"2018-09-18T00:00:00\", \"2018-09-19T00:00:00\", \"2018-09-21T00:00:00\", \"2018-09-24T00:00:00\", \"2018-09-25T00:00:00\", \"2018-09-26T00:00:00\", \"2018-09-27T00:00:00\", \"2018-09-28T00:00:00\", \"2018-10-01T00:00:00\", \"2018-10-03T00:00:00\", \"2018-10-04T00:00:00\", \"2018-10-05T00:00:00\", \"2018-10-08T00:00:00\", \"2018-10-09T00:00:00\", \"2018-10-10T00:00:00\", \"2018-10-11T00:00:00\", \"2018-10-12T00:00:00\", \"2018-10-15T00:00:00\", \"2018-10-16T00:00:00\", \"2018-10-17T00:00:00\", \"2018-10-19T00:00:00\", \"2018-10-22T00:00:00\", \"2018-10-23T00:00:00\", \"2018-10-24T00:00:00\", \"2018-10-25T00:00:00\", \"2018-10-26T00:00:00\", \"2018-10-29T00:00:00\", \"2018-10-30T00:00:00\", \"2018-10-31T00:00:00\", \"2018-11-01T00:00:00\", \"2018-11-02T00:00:00\", \"2018-11-05T00:00:00\", \"2018-11-06T00:00:00\", \"2018-11-07T00:00:00\", \"2018-11-09T00:00:00\", \"2018-11-12T00:00:00\", \"2018-11-13T00:00:00\", \"2018-11-14T00:00:00\", \"2018-11-15T00:00:00\", \"2018-11-16T00:00:00\", \"2018-11-19T00:00:00\", \"2018-11-20T00:00:00\", \"2018-11-21T00:00:00\", \"2018-11-22T00:00:00\", \"2018-11-26T00:00:00\", \"2018-11-27T00:00:00\", \"2018-11-28T00:00:00\", \"2018-11-29T00:00:00\", \"2018-11-30T00:00:00\", \"2018-12-03T00:00:00\", \"2018-12-04T00:00:00\", \"2018-12-05T00:00:00\", \"2018-12-06T00:00:00\", \"2018-12-07T00:00:00\", \"2018-12-10T00:00:00\", \"2018-12-11T00:00:00\", \"2018-12-12T00:00:00\", \"2018-12-13T00:00:00\", \"2018-12-14T00:00:00\", \"2018-12-17T00:00:00\", \"2018-12-18T00:00:00\", \"2018-12-19T00:00:00\", \"2018-12-20T00:00:00\", \"2018-12-21T00:00:00\", \"2018-12-24T00:00:00\", \"2018-12-26T00:00:00\", \"2018-12-27T00:00:00\", \"2018-12-28T00:00:00\", \"2018-12-31T00:00:00\", \"2019-01-02T00:00:00\", \"2019-01-03T00:00:00\", \"2019-01-04T00:00:00\", \"2019-01-07T00:00:00\", \"2019-01-08T00:00:00\", \"2019-01-09T00:00:00\", \"2019-01-10T00:00:00\", \"2019-01-11T00:00:00\", \"2019-01-14T00:00:00\", \"2019-01-15T00:00:00\", \"2019-01-16T00:00:00\", \"2019-01-17T00:00:00\", \"2019-01-18T00:00:00\", \"2019-01-21T00:00:00\", \"2019-01-22T00:00:00\", \"2019-01-23T00:00:00\", \"2019-01-24T00:00:00\", \"2019-01-25T00:00:00\", \"2019-01-28T00:00:00\", \"2019-01-29T00:00:00\", \"2019-01-30T00:00:00\", \"2019-01-31T00:00:00\", \"2019-02-01T00:00:00\", \"2019-02-04T00:00:00\", \"2019-02-05T00:00:00\", \"2019-02-06T00:00:00\", \"2019-02-07T00:00:00\", \"2019-02-08T00:00:00\", \"2019-02-11T00:00:00\", \"2019-02-12T00:00:00\", \"2019-02-14T00:00:00\", \"2019-02-15T00:00:00\", \"2019-02-18T00:00:00\", \"2019-02-19T00:00:00\", \"2019-02-20T00:00:00\", \"2019-02-21T00:00:00\", \"2019-02-22T00:00:00\", \"2019-02-25T00:00:00\", \"2019-02-26T00:00:00\", \"2019-02-27T00:00:00\", \"2019-02-28T00:00:00\", \"2019-03-01T00:00:00\", \"2019-03-05T00:00:00\", \"2019-03-06T00:00:00\", \"2019-03-07T00:00:00\", \"2019-03-08T00:00:00\", \"2019-03-11T00:00:00\", \"2019-03-12T00:00:00\", \"2019-03-13T00:00:00\", \"2019-03-14T00:00:00\", \"2019-03-15T00:00:00\", \"2019-03-18T00:00:00\", \"2019-03-19T00:00:00\", \"2019-03-20T00:00:00\", \"2019-03-22T00:00:00\", \"2019-03-25T00:00:00\", \"2019-03-26T00:00:00\", \"2019-03-27T00:00:00\", \"2019-03-28T00:00:00\", \"2019-04-01T00:00:00\", \"2019-04-02T00:00:00\", \"2019-04-03T00:00:00\", \"2019-04-04T00:00:00\", \"2019-04-05T00:00:00\", \"2019-04-08T00:00:00\", \"2019-04-09T00:00:00\", \"2019-04-10T00:00:00\", \"2019-04-11T00:00:00\", \"2019-04-12T00:00:00\", \"2019-04-15T00:00:00\", \"2019-04-16T00:00:00\", \"2019-04-18T00:00:00\", \"2019-04-22T00:00:00\", \"2019-04-23T00:00:00\", \"2019-04-24T00:00:00\", \"2019-04-25T00:00:00\", \"2019-04-26T00:00:00\", \"2019-04-30T00:00:00\", \"2019-05-02T00:00:00\", \"2019-05-03T00:00:00\", \"2019-05-06T00:00:00\", \"2019-05-07T00:00:00\", \"2019-05-08T00:00:00\", \"2019-05-09T00:00:00\", \"2019-05-10T00:00:00\", \"2019-05-13T00:00:00\", \"2019-05-14T00:00:00\", \"2019-05-15T00:00:00\", \"2019-05-16T00:00:00\", \"2019-05-17T00:00:00\", \"2019-05-20T00:00:00\", \"2019-05-21T00:00:00\", \"2019-05-22T00:00:00\", \"2019-05-23T00:00:00\", \"2019-05-24T00:00:00\", \"2019-05-27T00:00:00\", \"2019-05-28T00:00:00\", \"2019-05-29T00:00:00\", \"2019-05-30T00:00:00\", \"2019-05-31T00:00:00\", \"2019-06-03T00:00:00\", \"2019-06-04T00:00:00\", \"2019-06-06T00:00:00\", \"2019-06-07T00:00:00\", \"2019-06-10T00:00:00\", \"2019-06-11T00:00:00\", \"2019-06-12T00:00:00\", \"2019-06-13T00:00:00\", \"2019-06-14T00:00:00\", \"2019-06-17T00:00:00\", \"2019-06-18T00:00:00\", \"2019-06-19T00:00:00\", \"2019-06-20T00:00:00\", \"2019-06-21T00:00:00\", \"2019-06-24T00:00:00\", \"2019-06-25T00:00:00\", \"2019-06-26T00:00:00\", \"2019-06-27T00:00:00\", \"2019-06-28T00:00:00\", \"2019-07-01T00:00:00\", \"2019-07-02T00:00:00\", \"2019-07-03T00:00:00\", \"2019-07-04T00:00:00\", \"2019-07-05T00:00:00\", \"2019-07-08T00:00:00\", \"2019-07-09T00:00:00\", \"2019-07-10T00:00:00\", \"2019-07-11T00:00:00\", \"2019-07-12T00:00:00\", \"2019-07-15T00:00:00\", \"2019-07-16T00:00:00\", \"2019-07-17T00:00:00\", \"2019-07-18T00:00:00\", \"2019-07-19T00:00:00\", \"2019-07-22T00:00:00\", \"2019-07-23T00:00:00\", \"2019-07-24T00:00:00\", \"2019-07-25T00:00:00\", \"2019-07-26T00:00:00\", \"2019-07-29T00:00:00\", \"2019-07-30T00:00:00\", \"2019-07-31T00:00:00\", \"2019-08-01T00:00:00\", \"2019-08-02T00:00:00\", \"2019-08-05T00:00:00\", \"2019-08-06T00:00:00\", \"2019-08-07T00:00:00\", \"2019-08-08T00:00:00\", \"2019-08-09T00:00:00\", \"2019-08-13T00:00:00\", \"2019-08-14T00:00:00\", \"2019-08-16T00:00:00\", \"2019-08-19T00:00:00\", \"2019-08-20T00:00:00\", \"2019-08-21T00:00:00\", \"2019-08-22T00:00:00\", \"2019-08-23T00:00:00\", \"2019-08-26T00:00:00\", \"2019-08-27T00:00:00\", \"2019-08-28T00:00:00\", \"2019-08-29T00:00:00\", \"2019-08-30T00:00:00\", \"2019-09-03T00:00:00\", \"2019-09-04T00:00:00\", \"2019-09-05T00:00:00\", \"2019-09-06T00:00:00\", \"2019-09-09T00:00:00\", \"2019-09-11T00:00:00\", \"2019-09-12T00:00:00\", \"2019-09-13T00:00:00\", \"2019-09-16T00:00:00\", \"2019-09-17T00:00:00\", \"2019-09-18T00:00:00\", \"2019-09-19T00:00:00\", \"2019-09-20T00:00:00\", \"2019-09-23T00:00:00\", \"2019-09-24T00:00:00\", \"2019-09-25T00:00:00\", \"2019-09-26T00:00:00\", \"2019-09-27T00:00:00\", \"2019-09-30T00:00:00\", \"2019-10-01T00:00:00\", \"2019-10-03T00:00:00\", \"2019-10-04T00:00:00\", \"2019-10-07T00:00:00\", \"2019-10-09T00:00:00\", \"2019-10-10T00:00:00\", \"2019-10-11T00:00:00\", \"2019-10-14T00:00:00\", \"2019-10-15T00:00:00\", \"2019-10-16T00:00:00\", \"2019-10-17T00:00:00\", \"2019-10-18T00:00:00\", \"2019-10-22T00:00:00\", \"2019-10-23T00:00:00\", \"2019-10-24T00:00:00\", \"2019-10-25T00:00:00\", \"2019-10-29T00:00:00\", \"2019-10-30T00:00:00\", \"2019-10-31T00:00:00\", \"2019-11-01T00:00:00\", \"2019-11-04T00:00:00\", \"2019-11-05T00:00:00\", \"2019-11-06T00:00:00\", \"2019-11-07T00:00:00\", \"2019-11-08T00:00:00\", \"2019-11-11T00:00:00\", \"2019-11-13T00:00:00\", \"2019-11-14T00:00:00\", \"2019-11-15T00:00:00\", \"2019-11-18T00:00:00\", \"2019-11-19T00:00:00\", \"2019-11-20T00:00:00\", \"2019-11-21T00:00:00\", \"2019-11-22T00:00:00\", \"2019-11-25T00:00:00\", \"2019-11-26T00:00:00\", \"2019-11-27T00:00:00\", \"2019-11-28T00:00:00\", \"2019-11-29T00:00:00\", \"2019-12-02T00:00:00\", \"2019-12-03T00:00:00\", \"2019-12-04T00:00:00\", \"2019-12-05T00:00:00\", \"2019-12-06T00:00:00\", \"2019-12-09T00:00:00\", \"2019-12-10T00:00:00\", \"2019-12-11T00:00:00\", \"2019-12-12T00:00:00\", \"2019-12-13T00:00:00\", \"2019-12-16T00:00:00\", \"2019-12-17T00:00:00\", \"2019-12-18T00:00:00\", \"2019-12-19T00:00:00\", \"2019-12-20T00:00:00\", \"2019-12-23T00:00:00\", \"2019-12-24T00:00:00\", \"2019-12-26T00:00:00\", \"2019-12-27T00:00:00\", \"2019-12-30T00:00:00\", \"2019-12-31T00:00:00\", \"2020-01-01T00:00:00\", \"2020-01-02T00:00:00\", \"2020-01-03T00:00:00\", \"2020-01-06T00:00:00\", \"2020-01-07T00:00:00\", \"2020-01-08T00:00:00\", \"2020-01-09T00:00:00\", \"2020-01-10T00:00:00\", \"2020-01-13T00:00:00\", \"2020-01-14T00:00:00\", \"2020-01-15T00:00:00\", \"2020-01-16T00:00:00\", \"2020-01-17T00:00:00\", \"2020-01-20T00:00:00\", \"2020-01-21T00:00:00\", \"2020-01-22T00:00:00\", \"2020-01-23T00:00:00\", \"2020-01-24T00:00:00\", \"2020-01-27T00:00:00\", \"2020-01-28T00:00:00\", \"2020-01-29T00:00:00\", \"2020-01-30T00:00:00\", \"2020-01-31T00:00:00\", \"2020-02-03T00:00:00\", \"2020-02-04T00:00:00\", \"2020-02-05T00:00:00\", \"2020-02-06T00:00:00\", \"2020-02-07T00:00:00\", \"2020-02-10T00:00:00\", \"2020-02-11T00:00:00\", \"2020-02-12T00:00:00\", \"2020-02-13T00:00:00\", \"2020-02-14T00:00:00\", \"2020-02-17T00:00:00\", \"2020-02-18T00:00:00\", \"2020-02-19T00:00:00\", \"2020-02-20T00:00:00\", \"2020-02-24T00:00:00\", \"2020-02-25T00:00:00\", \"2020-02-26T00:00:00\", \"2020-02-27T00:00:00\", \"2020-02-28T00:00:00\", \"2020-03-02T00:00:00\", \"2020-03-03T00:00:00\", \"2020-03-04T00:00:00\", \"2020-03-05T00:00:00\", \"2020-03-06T00:00:00\", \"2020-03-09T00:00:00\", \"2020-03-11T00:00:00\", \"2020-03-12T00:00:00\", \"2020-03-13T00:00:00\", \"2020-03-16T00:00:00\", \"2020-03-17T00:00:00\", \"2020-03-18T00:00:00\", \"2020-03-19T00:00:00\", \"2020-03-20T00:00:00\", \"2020-03-23T00:00:00\", \"2020-03-24T00:00:00\", \"2020-03-25T00:00:00\", \"2020-03-26T00:00:00\", \"2020-03-27T00:00:00\", \"2020-03-30T00:00:00\", \"2020-03-31T00:00:00\", \"2020-04-01T00:00:00\", \"2020-04-03T00:00:00\", \"2020-04-07T00:00:00\", \"2020-04-08T00:00:00\", \"2020-04-09T00:00:00\", \"2020-04-13T00:00:00\", \"2020-04-15T00:00:00\", \"2020-04-16T00:00:00\", \"2020-04-17T00:00:00\", \"2020-04-20T00:00:00\", \"2020-04-21T00:00:00\", \"2020-04-22T00:00:00\", \"2020-04-23T00:00:00\", \"2020-04-24T00:00:00\", \"2020-04-27T00:00:00\", \"2020-04-28T00:00:00\", \"2020-04-29T00:00:00\", \"2020-04-30T00:00:00\", \"2020-05-04T00:00:00\", \"2020-05-05T00:00:00\", \"2020-05-06T00:00:00\", \"2020-05-07T00:00:00\", \"2020-05-08T00:00:00\", \"2020-05-11T00:00:00\", \"2020-05-12T00:00:00\", \"2020-05-13T00:00:00\", \"2020-05-14T00:00:00\", \"2020-05-15T00:00:00\", \"2020-05-18T00:00:00\", \"2020-05-19T00:00:00\", \"2020-05-20T00:00:00\", \"2020-05-21T00:00:00\", \"2020-05-22T00:00:00\", \"2020-05-26T00:00:00\", \"2020-05-27T00:00:00\", \"2020-05-28T00:00:00\", \"2020-05-29T00:00:00\", \"2020-06-01T00:00:00\", \"2020-06-02T00:00:00\", \"2020-06-03T00:00:00\", \"2020-06-04T00:00:00\", \"2020-06-05T00:00:00\", \"2020-06-08T00:00:00\", \"2020-06-09T00:00:00\", \"2020-06-10T00:00:00\", \"2020-06-11T00:00:00\", \"2020-06-12T00:00:00\", \"2020-06-15T00:00:00\", \"2020-06-16T00:00:00\", \"2020-06-17T00:00:00\", \"2020-06-18T00:00:00\", \"2020-06-19T00:00:00\", \"2020-06-22T00:00:00\", \"2020-06-23T00:00:00\", \"2020-06-24T00:00:00\", \"2020-06-25T00:00:00\", \"2020-06-26T00:00:00\", \"2020-06-29T00:00:00\", \"2020-06-30T00:00:00\", \"2020-07-01T00:00:00\", \"2020-07-02T00:00:00\", \"2020-07-03T00:00:00\", \"2020-07-06T00:00:00\", \"2020-07-07T00:00:00\", \"2020-07-08T00:00:00\", \"2020-07-09T00:00:00\", \"2020-07-10T00:00:00\", \"2020-07-13T00:00:00\", \"2020-07-14T00:00:00\", \"2020-07-15T00:00:00\", \"2020-07-16T00:00:00\", \"2020-07-17T00:00:00\", \"2020-07-20T00:00:00\", \"2020-07-21T00:00:00\", \"2020-07-22T00:00:00\", \"2020-07-23T00:00:00\", \"2020-07-24T00:00:00\", \"2020-07-27T00:00:00\", \"2020-07-28T00:00:00\", \"2020-07-29T00:00:00\", \"2020-07-30T00:00:00\", \"2020-07-31T00:00:00\", \"2020-08-03T00:00:00\", \"2020-08-04T00:00:00\", \"2020-08-05T00:00:00\", \"2020-08-06T00:00:00\", \"2020-08-07T00:00:00\", \"2020-08-10T00:00:00\", \"2020-08-11T00:00:00\", \"2020-08-12T00:00:00\", \"2020-08-13T00:00:00\", \"2020-08-14T00:00:00\", \"2020-08-17T00:00:00\", \"2020-08-18T00:00:00\", \"2020-08-19T00:00:00\", \"2020-08-20T00:00:00\", \"2020-08-21T00:00:00\", \"2020-08-24T00:00:00\", \"2020-08-25T00:00:00\", \"2020-08-26T00:00:00\", \"2020-08-27T00:00:00\", \"2020-08-28T00:00:00\", \"2020-08-31T00:00:00\", \"2020-09-01T00:00:00\", \"2020-09-02T00:00:00\", \"2020-09-03T00:00:00\", \"2020-09-04T00:00:00\", \"2020-09-07T00:00:00\", \"2020-09-08T00:00:00\", \"2020-09-09T00:00:00\", \"2020-09-10T00:00:00\", \"2020-09-11T00:00:00\", \"2020-09-14T00:00:00\", \"2020-09-15T00:00:00\", \"2020-09-16T00:00:00\", \"2020-09-17T00:00:00\", \"2020-09-18T00:00:00\", \"2020-09-21T00:00:00\", \"2020-09-22T00:00:00\", \"2020-09-23T00:00:00\", \"2020-09-24T00:00:00\", \"2020-09-25T00:00:00\", \"2020-09-28T00:00:00\", \"2020-09-29T00:00:00\", \"2020-09-30T00:00:00\", \"2020-10-01T00:00:00\", \"2020-10-05T00:00:00\", \"2020-10-06T00:00:00\", \"2020-10-07T00:00:00\", \"2020-10-08T00:00:00\", \"2020-10-09T00:00:00\", \"2020-10-12T00:00:00\", \"2020-10-13T00:00:00\", \"2020-10-14T00:00:00\", \"2020-10-15T00:00:00\", \"2020-10-16T00:00:00\", \"2020-10-19T00:00:00\", \"2020-10-20T00:00:00\", \"2020-10-21T00:00:00\", \"2020-10-22T00:00:00\", \"2020-10-23T00:00:00\", \"2020-10-26T00:00:00\", \"2020-10-27T00:00:00\", \"2020-10-28T00:00:00\", \"2020-10-29T00:00:00\", \"2020-10-30T00:00:00\", \"2020-11-02T00:00:00\", \"2020-11-03T00:00:00\", \"2020-11-04T00:00:00\", \"2020-11-05T00:00:00\", \"2020-11-06T00:00:00\", \"2020-11-09T00:00:00\", \"2020-11-10T00:00:00\", \"2020-11-11T00:00:00\", \"2020-11-12T00:00:00\", \"2020-11-13T00:00:00\", \"2020-11-17T00:00:00\", \"2020-11-18T00:00:00\", \"2020-11-19T00:00:00\", \"2020-11-20T00:00:00\", \"2020-11-23T00:00:00\", \"2020-11-24T00:00:00\", \"2020-11-25T00:00:00\", \"2020-11-26T00:00:00\", \"2020-11-27T00:00:00\", \"2020-12-01T00:00:00\", \"2020-12-02T00:00:00\", \"2020-12-03T00:00:00\", \"2020-12-04T00:00:00\", \"2020-12-07T00:00:00\", \"2020-12-08T00:00:00\", \"2020-12-09T00:00:00\", \"2020-12-10T00:00:00\", \"2020-12-11T00:00:00\", \"2020-12-14T00:00:00\", \"2020-12-15T00:00:00\", \"2020-12-16T00:00:00\", \"2020-12-17T00:00:00\", \"2020-12-18T00:00:00\", \"2020-12-21T00:00:00\", \"2020-12-22T00:00:00\", \"2020-12-23T00:00:00\", \"2020-12-24T00:00:00\", \"2020-12-28T00:00:00\", \"2020-12-29T00:00:00\", \"2020-12-30T00:00:00\", \"2020-12-31T00:00:00\", \"2021-01-04T00:00:00\", \"2021-01-05T00:00:00\", \"2021-01-06T00:00:00\", \"2021-01-07T00:00:00\", \"2021-01-08T00:00:00\", \"2021-01-11T00:00:00\", \"2021-01-12T00:00:00\", \"2021-01-13T00:00:00\", \"2021-01-14T00:00:00\", \"2021-01-15T00:00:00\", \"2021-01-18T00:00:00\", \"2021-01-19T00:00:00\", \"2021-01-20T00:00:00\", \"2021-01-21T00:00:00\", \"2021-01-22T00:00:00\", \"2021-01-25T00:00:00\", \"2021-01-27T00:00:00\", \"2021-01-28T00:00:00\", \"2021-01-29T00:00:00\", \"2021-02-01T00:00:00\", \"2021-02-02T00:00:00\", \"2021-02-03T00:00:00\", \"2021-02-04T00:00:00\", \"2021-02-05T00:00:00\", \"2021-02-08T00:00:00\", \"2021-02-09T00:00:00\", \"2021-02-10T00:00:00\", \"2021-02-11T00:00:00\", \"2021-02-12T00:00:00\", \"2021-02-15T00:00:00\", \"2021-02-16T00:00:00\", \"2021-02-17T00:00:00\", \"2021-02-18T00:00:00\", \"2021-02-19T00:00:00\", \"2021-02-22T00:00:00\", \"2021-02-23T00:00:00\", \"2021-02-24T00:00:00\", \"2021-02-25T00:00:00\", \"2021-02-26T00:00:00\", \"2021-03-01T00:00:00\", \"2021-03-02T00:00:00\", \"2021-03-03T00:00:00\", \"2021-03-04T00:00:00\", \"2021-03-05T00:00:00\", \"2021-03-08T00:00:00\", \"2021-03-09T00:00:00\", \"2021-03-10T00:00:00\", \"2021-03-12T00:00:00\", \"2021-03-15T00:00:00\", \"2021-03-16T00:00:00\", \"2021-03-17T00:00:00\", \"2021-03-18T00:00:00\", \"2021-03-19T00:00:00\", \"2021-03-22T00:00:00\", \"2021-03-23T00:00:00\", \"2021-03-24T00:00:00\", \"2021-03-25T00:00:00\", \"2021-03-26T00:00:00\", \"2021-03-30T00:00:00\", \"2021-03-31T00:00:00\", \"2021-04-01T00:00:00\", \"2021-04-05T00:00:00\", \"2021-04-06T00:00:00\", \"2021-04-07T00:00:00\", \"2021-04-08T00:00:00\", \"2021-04-09T00:00:00\", \"2021-04-12T00:00:00\", \"2021-04-13T00:00:00\", \"2021-04-15T00:00:00\", \"2021-04-16T00:00:00\", \"2021-04-19T00:00:00\", \"2021-04-20T00:00:00\", \"2021-04-22T00:00:00\", \"2021-04-23T00:00:00\", \"2021-04-26T00:00:00\", \"2021-04-27T00:00:00\", \"2021-04-28T00:00:00\", \"2021-04-29T00:00:00\", \"2021-04-30T00:00:00\", \"2021-05-03T00:00:00\", \"2021-05-04T00:00:00\", \"2021-05-05T00:00:00\", \"2021-05-06T00:00:00\", \"2021-05-07T00:00:00\", \"2021-05-10T00:00:00\", \"2021-05-11T00:00:00\", \"2021-05-12T00:00:00\", \"2021-05-14T00:00:00\", \"2021-05-17T00:00:00\", \"2021-05-18T00:00:00\", \"2021-05-19T00:00:00\", \"2021-05-20T00:00:00\", \"2021-05-21T00:00:00\", \"2021-05-24T00:00:00\", \"2021-05-25T00:00:00\", \"2021-05-26T00:00:00\", \"2021-05-27T00:00:00\", \"2021-05-28T00:00:00\", \"2021-05-31T00:00:00\", \"2021-06-01T00:00:00\", \"2021-06-02T00:00:00\", \"2021-06-03T00:00:00\", \"2021-06-04T00:00:00\", \"2021-06-07T00:00:00\", \"2021-06-08T00:00:00\", \"2021-06-09T00:00:00\", \"2021-06-10T00:00:00\", \"2021-06-11T00:00:00\", \"2021-06-14T00:00:00\", \"2021-06-15T00:00:00\", \"2021-06-16T00:00:00\", \"2021-06-17T00:00:00\", \"2021-06-18T00:00:00\", \"2021-06-21T00:00:00\", \"2021-06-22T00:00:00\", \"2021-06-23T00:00:00\", \"2021-06-24T00:00:00\", \"2021-06-25T00:00:00\", \"2021-06-28T00:00:00\", \"2021-06-29T00:00:00\", \"2021-06-30T00:00:00\", \"2021-07-01T00:00:00\", \"2021-07-02T00:00:00\", \"2021-07-05T00:00:00\", \"2021-07-06T00:00:00\", \"2021-07-07T00:00:00\", \"2021-07-08T00:00:00\", \"2021-07-09T00:00:00\", \"2021-07-12T00:00:00\", \"2021-07-13T00:00:00\", \"2021-07-14T00:00:00\", \"2021-07-15T00:00:00\", \"2021-07-16T00:00:00\", \"2021-07-19T00:00:00\", \"2021-07-20T00:00:00\", \"2021-07-22T00:00:00\", \"2021-07-23T00:00:00\", \"2021-07-26T00:00:00\", \"2021-07-27T00:00:00\", \"2021-07-28T00:00:00\", \"2021-07-29T00:00:00\", \"2021-07-30T00:00:00\", \"2021-08-02T00:00:00\", \"2021-08-03T00:00:00\", \"2021-08-04T00:00:00\", \"2021-08-05T00:00:00\", \"2021-08-06T00:00:00\", \"2021-08-09T00:00:00\", \"2021-08-10T00:00:00\", \"2021-08-11T00:00:00\", \"2021-08-12T00:00:00\", \"2021-08-13T00:00:00\", \"2021-08-16T00:00:00\", \"2021-08-17T00:00:00\", \"2021-08-18T00:00:00\", \"2021-08-20T00:00:00\", \"2021-08-23T00:00:00\", \"2021-08-24T00:00:00\", \"2021-08-25T00:00:00\", \"2021-08-26T00:00:00\", \"2021-08-27T00:00:00\", \"2021-08-30T00:00:00\", \"2021-08-31T00:00:00\", \"2021-09-01T00:00:00\", \"2021-09-02T00:00:00\", \"2021-09-03T00:00:00\", \"2021-09-06T00:00:00\", \"2021-09-07T00:00:00\", \"2021-09-08T00:00:00\", \"2021-09-09T00:00:00\", \"2021-09-13T00:00:00\", \"2021-09-14T00:00:00\", \"2021-09-15T00:00:00\", \"2021-09-16T00:00:00\", \"2021-09-17T00:00:00\", \"2021-09-20T00:00:00\", \"2021-09-21T00:00:00\", \"2021-09-22T00:00:00\", \"2021-09-23T00:00:00\", \"2021-09-24T00:00:00\", \"2021-09-27T00:00:00\", \"2021-09-28T00:00:00\", \"2021-09-29T00:00:00\", \"2021-09-30T00:00:00\", \"2021-10-01T00:00:00\", \"2021-10-04T00:00:00\", \"2021-10-05T00:00:00\", \"2021-10-06T00:00:00\", \"2021-10-07T00:00:00\", \"2021-10-08T00:00:00\", \"2021-10-11T00:00:00\", \"2021-10-12T00:00:00\", \"2021-10-13T00:00:00\", \"2021-10-14T00:00:00\", \"2021-10-18T00:00:00\", \"2021-10-19T00:00:00\", \"2021-10-20T00:00:00\", \"2021-10-21T00:00:00\", \"2021-10-22T00:00:00\", \"2021-10-25T00:00:00\", \"2021-10-26T00:00:00\", \"2021-10-27T00:00:00\", \"2021-10-28T00:00:00\", \"2021-10-29T00:00:00\", \"2021-11-01T00:00:00\", \"2021-11-02T00:00:00\", \"2021-11-03T00:00:00\", \"2021-11-04T00:00:00\", \"2021-11-08T00:00:00\", \"2021-11-09T00:00:00\", \"2021-11-10T00:00:00\", \"2021-11-11T00:00:00\", \"2021-11-12T00:00:00\", \"2021-11-15T00:00:00\", \"2021-11-16T00:00:00\", \"2021-11-17T00:00:00\", \"2021-11-18T00:00:00\", \"2021-11-22T00:00:00\", \"2021-11-23T00:00:00\", \"2021-11-24T00:00:00\", \"2021-11-25T00:00:00\", \"2021-11-26T00:00:00\", \"2021-11-29T00:00:00\", \"2021-11-30T00:00:00\", \"2021-12-01T00:00:00\", \"2021-12-02T00:00:00\", \"2021-12-03T00:00:00\"], \"xaxis\": \"x\", \"y\": [5232.2, 5277.9, 5281.8, 5263.1, 5244.75, 5249.4, 5210.4, 5233.95, 5259.9, 5252.2, 5274.85, 5225.65, 5221.7, 5094.15, 5036.0, 5007.9, 4853.1, 4867.25, 4882.05, 4899.7, 4830.1, 4931.85, 4845.35, 4718.65, 4760.4, 4792.65, 4757.2, 4826.85, 4801.95, 4855.75, 4914.0, 4887.75, 4844.9, 4856.4, 4870.05, 4858.6, 4859.75, 4922.3, 5017.0, 5088.1, 5080.25, 5088.7, 5124.0, 5101.5, 5116.25, 5133.4, 5137.0, 5128.9, 5198.1, 5231.9, 5245.9, 5262.8, 5205.2, 5225.3, 5260.4, 5282.0, 5302.85, 5262.45, 5249.1, 5290.5, 5368.4, 5366.0, 5374.65, 5304.45, 5361.75, 5339.7, 5322.95, 5273.6, 5262.6, 5203.65, 5230.1, 5244.9, 5269.35, 5304.1, 5322.45, 5308.35, 5215.45, 5254.15, 5278.0, 5222.75, 5148.5, 5124.9, 5090.85, 5018.05, 5193.6, 5136.15, 5156.65, 5178.9, 5093.5, 5059.9, 5066.2, 4919.65, 4947.6, 4931.15, 4943.95, 4806.75, 4917.4, 5003.1, 5066.55, 5086.3, 4970.2, 5019.85, 5110.5, 5135.5, 5034.0, 4987.1, 5000.3, 5078.6, 5119.35, 5197.7, 5222.35, 5233.35, 5274.85, 5262.6, 5353.3, 5316.55, 5323.15, 5320.6, 5269.05, 5333.5, 5256.15, 5312.5, 5251.4, 5237.1, 5235.9, 5289.05, 5241.1, 5296.85, 5352.45, 5383.0, 5400.65, 5386.15, 5378.75, 5393.9, 5386.45, 5368.0, 5399.35, 5441.95, 5449.1, 5418.6, 5430.6, 5397.55, 5408.9, 5367.6, 5431.65, 5439.55, 5467.85, 5447.1, 5439.25, 5486.15, 5460.7, 5420.6, 5416.45, 5452.1, 5418.3, 5414.15, 5479.15, 5540.2, 5530.65, 5543.5, 5505.1, 5462.35, 5477.9, 5408.7, 5415.45, 5402.4, 5471.85, 5486.15, 5479.4, 5576.95, 5604.0, 5607.85, 5640.05, 5760.0, 5795.55, 5860.95, 5828.7, 5884.95, 5980.45, 6009.05, 5991.0, 5959.55, 6018.3, 6035.65, 6029.5, 5991.3, 6029.95, 6143.4, 6159.45, 6145.8, 6186.45, 6120.3, 6103.45, 6135.85, 6090.9, 6233.9, 6177.35, 6062.65, 6075.95, 6027.3, 5982.1, 6101.5, 6066.05, 6105.8, 6082.0, 6012.65, 5987.7, 6017.7, 6117.55, 6119.0, 6160.5, 6281.8, 6273.2, 6301.55, 6275.7, 6194.25, 6071.65, 6121.6, 5988.7, 5998.8, 5890.3, 6010.0, 5934.75, 5865.75, 5799.75, 5751.95, 5830.0, 5862.7, 5960.9, 6011.7, 5992.8, 5992.25, 5976.55, 5903.7, 5766.5, 5857.35, 5907.65, 5944.1, 5892.3, 5948.75, 5947.05, 6000.65, 5984.4, 5980.0, 6011.6, 5998.1, 5996.0, 6060.35, 6101.85, 6134.5, 6157.6, 6146.35, 6079.8, 6048.25, 5904.6, 5762.85, 5754.1, 5863.25, 5751.9, 5654.55, 5654.75, 5724.05, 5691.05, 5711.6, 5696.5, 5743.25, 5687.4, 5604.3, 5512.15, 5505.9, 5417.2, 5432.0, 5526.75, 5395.75, 5396.0, 5312.55, 5253.55, 5225.8, 5310.0, 5456.0, 5481.0, 5481.7, 5546.45, 5458.95, 5518.6, 5469.2, 5437.35, 5262.7, 5303.55, 5333.25, 5522.3, 5536.2, 5538.75, 5463.15, 5520.8, 5531.0, 5494.4, 5445.45, 5531.5, 5449.65, 5511.15, 5446.65, 5373.7, 5364.75, 5413.85, 5480.25, 5522.4, 5654.25, 5687.25, 5736.35, 5787.65, 5833.75, 5826.05, 5908.45, 5910.05, 5891.75, 5885.7, 5842.0, 5785.7, 5911.5, 5824.55, 5729.1, 5740.75, 5851.65, 5884.7, 5874.5, 5868.4, 5833.9, 5785.45, 5749.5, 5701.3, 5565.25, 5537.15, 5459.85, 5551.45, 5551.1, 5541.25, 5565.05, 5486.15, 5544.75, 5499.0, 5438.95, 5420.6, 5428.1, 5486.35, 5386.55, 5394.85, 5348.95, 5412.35, 5476.1, 5473.1, 5592.0, 5550.35, 5516.75, 5532.05, 5556.15, 5526.85, 5521.05, 5485.8, 5482.8, 5500.5, 5447.5, 5396.75, 5366.4, 5257.9, 5275.85, 5278.3, 5320.0, 5471.25, 5526.6, 5545.3, 5600.45, 5647.4, 5627.2, 5650.5, 5632.1, 5625.45, 5728.95, 5660.65, 5616.1, 5526.15, 5585.45, 5581.1, 5567.05, 5613.55, 5567.05, 5541.6, 5633.95, 5680.3, 5574.85, 5546.8, 5487.75, 5482.0, 5516.8, 5456.55, 5404.8, 5331.8, 5211.25, 5118.5, 5072.85, 5161.0, 5138.3, 5072.95, 5035.8, 5056.6, 4944.15, 4845.65, 4898.8, 4948.9, 4888.9, 4839.6, 4747.8, 4919.6, 5001.0, 5040.0, 5017.2, 5064.3, 5124.65, 5153.25, 5059.45, 4946.8, 4940.95, 5012.55, 5075.7, 5084.25, 5031.95, 5140.2, 5133.25, 4923.65, 4867.75, 4835.4, 4971.25, 4945.9, 5015.45, 4943.25, 4849.5, 4772.15, 4751.3, 4888.05, 4979.6, 4974.35, 5099.4, 5077.85, 5132.3, 5118.25, 5037.5, 5139.15, 5091.9, 5049.95, 5098.35, 5191.6, 5360.7, 5326.6, 5257.95, 5258.45, 5265.75, 5284.2, 5289.35, 5221.05, 5168.85, 5148.35, 5068.5, 5030.45, 4934.75, 4905.8, 4778.35, 4812.35, 4706.45, 4710.05, 4851.3, 4805.1, 4832.05, 4936.85, 5050.15, 5039.15, 5062.6, 4943.65, 4866.7, 4764.6, 4800.6, 4763.25, 4746.35, 4651.6, 4613.1, 4544.2, 4693.15, 4733.85, 4714.0, 4750.5, 4705.8, 4646.25, 4624.3, 4765.3, 4749.65, 4749.95, 4754.1, 4742.8, 4849.55, 4860.95, 4831.25, 4866.0, 4873.9, 4967.3, 4955.8, 5018.4, 5048.6, 5046.25, 5127.35, 5158.3, 5204.7, 5087.3, 5199.25, 5235.7, 5269.9, 5325.85, 5361.65, 5335.15, 5368.15, 5412.35, 5381.6, 5390.2, 5416.05, 5531.95, 5521.95, 5564.3, 5607.15, 5505.35, 5483.3, 5429.3, 5281.2, 5375.5, 5385.2, 5339.75, 5359.35, 5280.35, 5222.4, 5220.45, 5333.55, 5359.55, 5429.5, 5463.9, 5380.5, 5317.9, 5257.05, 5274.85, 5364.95, 5228.45, 5278.2, 5184.25, 5243.15, 5194.75, 5178.85, 5295.55, 5317.9, 5358.5, 5322.9, 5234.4, 5243.6, 5226.85, 5276.85, 5207.45, 5226.2, 5289.7, 5300.0, 5332.4, 5290.85, 5200.6, 5222.65, 5202.0, 5189.0, 5190.6, 5248.15, 5239.15, 5188.4, 5086.85, 5114.15, 4999.95, 4974.8, 4965.7, 4928.9, 4907.8, 4942.8, 4858.25, 4870.2, 4891.45, 4860.5, 4835.65, 4921.4, 4920.4, 4985.65, 4990.1, 4950.75, 4924.25, 4841.6, 4848.15, 4863.3, 4997.1, 5049.65, 5068.35, 5054.1, 5115.9, 5121.45, 5054.75, 5139.05, 5064.25, 5103.85, 5120.55, 5165.0, 5146.05, 5114.65, 5120.8, 5141.9, 5149.15, 5278.9, 5278.6, 5287.95, 5302.55, 5327.3, 5316.95, 5275.15, 5345.35, 5306.3, 5235.25, 5227.25, 5197.25, 5192.85, 5216.3, 5242.7, 5205.1, 5117.95, 5128.2, 5109.6, 5043.0, 5099.85, 5199.8, 5229.0, 5240.5, 5227.75, 5215.7, 5282.55, 5336.7, 5338.0, 5322.95, 5320.4, 5347.9, 5380.35, 5362.95, 5366.3, 5421.0, 5412.85, 5415.35, 5386.7, 5350.25, 5287.8, 5315.05, 5258.5, 5253.75, 5274.0, 5225.7, 5238.4, 5342.1, 5363.45, 5390.0, 5431.0, 5435.35, 5577.65, 5610.0, 5600.05, 5554.25, 5691.15, 5669.6, 5673.9, 5663.45, 5649.5, 5703.3, 5718.8, 5731.25, 5787.6, 5746.95, 5676.0, 5704.6, 5652.15, 5708.05, 5676.05, 5687.25, 5648.0, 5660.25, 5718.7, 5684.25, 5717.15, 5691.4, 5705.3, 5665.6, 5597.9, 5619.7, 5645.05, 5697.7, 5704.2, 5724.4, 5760.1, 5738.75, 5686.25, 5683.7, 5631.0, 5574.05, 5571.4, 5571.55, 5614.8, 5627.75, 5626.6, 5635.9, 5727.45, 5825.0, 5879.85, 5870.95, 5889.25, 5900.5, 5930.9, 5907.4, 5908.9, 5898.8, 5888.0, 5851.5, 5879.6, 5857.9, 5896.8, 5929.6, 5916.4, 5847.7, 5855.75, 5905.6, 5870.1, 5908.35, 5905.1, 5993.25, 6009.5, 6016.15, 5988.4, 6001.7, 5971.5, 5968.65, 5951.3, 6024.05, 6056.6, 6001.85, 6039.2, 6064.4, 6082.3, 6048.5, 6054.3, 6019.35, 6074.65, 6074.8, 6049.9, 6055.75, 6034.75, 5998.9, 5987.25, 5956.9, 5959.2, 5938.8, 5903.5, 5897.85, 5922.5, 5932.95, 5896.95, 5887.4, 5898.2, 5939.7, 5943.05, 5852.25, 5850.3, 5854.75, 5761.35, 5796.9, 5693.05, 5719.7, 5698.5, 5784.25, 5818.6, 5863.3, 5945.7, 5942.35, 5914.1, 5851.2, 5908.95, 5872.6, 5835.25, 5745.95, 5694.4, 5658.75, 5651.35, 5633.85, 5641.6, 5682.55, 5704.4, 5748.1, 5672.9, 5574.75, 5553.25, 5542.95, 5495.1, 5558.7, 5594.0, 5528.55, 5568.4, 5688.95, 5688.7, 5783.1, 5834.4, 5836.9, 5916.3, 5871.45, 5904.1, 5930.2, 5999.35, 5944.0, 5971.05, 6043.55, 6069.3, 6050.15, 6094.75, 5980.45, 5995.4, 6146.75, 6169.9, 6187.3, 6156.9, 6114.1, 6094.5, 5967.05, 5983.55, 6083.15, 6111.25, 6104.3, 6124.05, 5985.95, 5939.3, 5919.45, 5923.85, 5921.4, 5881.0, 5878.0, 5788.8, 5760.2, 5699.1, 5808.4, 5850.05, 5813.6, 5822.25, 5655.9, 5667.65, 5590.25, 5609.1, 5588.7, 5682.35, 5842.2, 5898.85, 5857.55, 5770.9, 5836.95, 5867.9, 5811.55, 5859.0, 5816.7, 5935.1, 6009.0, 6030.8, 5955.25, 5973.3, 6038.05, 6029.2, 6031.8, 6077.8, 5990.5, 5907.5, 5886.2, 5831.65, 5755.05, 5742.0, 5727.85, 5677.9, 5685.4, 5542.25, 5519.1, 5565.65, 5612.4, 5699.3, 5742.3, 5507.85, 5414.75, 5401.45, 5302.55, 5408.45, 5471.75, 5476.5, 5287.45, 5285.0, 5409.05, 5471.8, 5550.75, 5341.45, 5448.1, 5592.95, 5680.4, 5896.75, 5913.15, 5850.7, 5850.6, 5840.55, 5850.2, 5899.45, 6115.55, 6012.1, 5889.75, 5892.45, 5873.85, 5882.25, 5833.2, 5735.3, 5780.05, 5909.7, 5907.3, 5906.15, 5928.4, 6007.45, 6020.95, 6096.2, 6112.7, 6089.05, 6045.85, 6189.35, 6204.95, 6202.8, 6178.35, 6164.35, 6144.9, 6101.1, 6220.9, 6251.7, 6299.15, 6307.2, 6253.15, 6215.15, 6187.25, 6140.75, 6078.8, 6018.05, 5989.6, 6056.15, 6189.0, 6203.35, 6122.9, 5999.05, 5995.45, 6115.35, 6059.1, 6057.1, 6091.85, 6176.1, 6217.85, 6201.85, 6160.95, 6241.1, 6259.9, 6363.9, 6332.85, 6307.9, 6237.05, 6168.4, 6154.7, 6139.05, 6217.15, 6166.65, 6274.25, 6284.5, 6268.4, 6278.9, 6313.8, 6291.1, 6304.0, 6221.15, 6211.15, 6191.45, 6162.25, 6174.6, 6168.35, 6171.45, 6272.75, 6241.85, 6320.9, 6318.9, 6261.65, 6303.95, 6313.8, 6338.95, 6345.65, 6266.75, 6135.85, 6126.25, 6120.25, 6073.7, 6089.5, 6001.8, 6000.9, 6022.4, 6036.3, 6063.2, 6053.45, 6062.7, 6084.0, 6001.1, 6048.35, 6127.1, 6152.75, 6091.45, 6155.45, 6186.1, 6200.05, 6238.8, 6276.95, 6221.45, 6297.95, 6328.65, 6401.15, 6526.65, 6537.25, 6511.9, 6516.9, 6493.1, 6504.2, 6516.65, 6524.05, 6483.1, 6493.2, 6583.5, 6589.75, 6601.4, 6641.75, 6695.9, 6704.2, 6721.05, 6752.55, 6736.1, 6694.35, 6695.05, 6796.2, 6796.4, 6776.3, 6733.1, 6675.3, 6779.4, 6817.65, 6815.35, 6840.8, 6782.75, 6761.25, 6715.25, 6696.4, 6694.8, 6699.35, 6715.3, 6652.55, 6659.85, 6858.8, 7014.25, 7108.75, 7108.75, 7123.15, 7203.0, 7263.55, 7275.5, 7252.9, 7276.4, 7367.1, 7359.05, 7318.0, 7329.65, 7235.65, 7229.95, 7362.5, 7415.85, 7402.25, 7474.1, 7583.4, 7654.6, 7656.4, 7626.85, 7649.9, 7542.1, 7533.55, 7631.7, 7558.2, 7540.7, 7511.45, 7493.35, 7580.2, 7569.25, 7493.2, 7508.8, 7611.35, 7634.7, 7725.15, 7714.8, 7751.6, 7787.15, 7623.2, 7585.0, 7567.75, 7459.6, 7454.15, 7526.65, 7624.4, 7640.45, 7663.9, 7684.2, 7767.85, 7795.75, 7830.6, 7790.45, 7748.7, 7791.4, 7721.3, 7602.6, 7683.65, 7746.55, 7672.05, 7649.25, 7568.55, 7625.95, 7727.05, 7739.55, 7791.7, 7874.25, 7897.5, 7875.3, 7891.1, 7913.2, 7906.3, 7904.75, 7936.05, 7954.35, 8027.7, 8083.05, 8114.6, 8095.95, 8086.85, 8173.9, 8152.95, 8094.1, 8085.7, 8105.5, 8042.0, 7932.9, 7975.5, 8114.75, 8121.45, 8146.3, 8017.55, 8002.4, 7911.85, 7968.85, 7958.9, 7964.8, 7945.55, 7852.4, 7842.7, 7960.55, 7859.95, 7884.25, 7864.0, 7748.2, 7779.7, 7879.4, 7927.75, 7995.9, 7991.7, 8027.6, 8090.45, 8169.2, 8322.2, 8324.15, 8338.3, 8337.0, 8344.25, 8362.65, 8383.3, 8357.85, 8389.9, 8430.75, 8425.9, 8382.3, 8401.9, 8477.35, 8530.15, 8463.1, 8475.75, 8494.2, 8588.25, 8555.9, 8524.7, 8537.65, 8564.4, 8538.3, 8438.25, 8340.7, 8355.65, 8292.9, 8224.1, 8219.6, 8067.6, 8029.8, 8159.3, 8225.2, 8324.0, 8267.0, 8174.1, 8200.7, 8246.3, 8248.25, 8282.7, 8395.45, 8378.4, 8127.35, 8102.1, 8234.6, 8284.5, 8323.0, 8299.4, 8277.55, 8494.15, 8513.8, 8550.7, 8695.6, 8729.5, 8761.4, 8835.6, 8910.5, 8914.3, 8952.35, 8808.9, 8797.4, 8756.55, 8723.7, 8711.7, 8661.05, 8526.35, 8565.55, 8627.4, 8711.55, 8805.5, 8809.35, 8869.1, 8895.3, 8833.6, 8754.95, 8762.1, 8767.25, 8683.85, 8844.6, 8956.75, 8996.25, 8922.65, 8937.75, 8756.75, 8712.05, 8699.95, 8776.0, 8647.75, 8633.15, 8723.3, 8685.9, 8634.65, 8570.9, 8550.9, 8542.95, 8530.8, 8342.15, 8341.4, 8492.3, 8491.0, 8586.25, 8659.9, 8660.3, 8714.4, 8778.3, 8780.35, 8834.0, 8706.7, 8606.0, 8448.1, 8377.75, 8429.7, 8398.3, 8305.25, 8213.8, 8285.6, 8239.75, 8181.5, 8331.95, 8324.8, 8097.0, 8057.3, 8191.5, 8325.25, 8126.95, 8235.45, 8224.2, 8262.35, 8373.65, 8365.65, 8423.25, 8421.0, 8458.95, 8370.25, 8339.35, 8334.6, 8319.0, 8433.65, 8433.4, 8236.45, 8135.1, 8130.65, 8114.7, 8044.15, 8022.4, 8124.45, 7965.35, 7982.9, 8013.9, 8047.3, 8091.55, 8174.6, 8224.95, 8353.1, 8381.55, 8360.85, 8398.0, 8381.1, 8318.4, 8368.5, 8453.05, 8444.9, 8484.9, 8522.15, 8510.8, 8363.05, 8328.55, 8360.55, 8459.65, 8454.1, 8523.8, 8608.05, 8609.85, 8603.45, 8529.45, 8633.5, 8589.8, 8521.55, 8361.0, 8337.0, 8375.05, 8421.8, 8532.85, 8543.05, 8516.9, 8567.95, 8588.65, 8564.6, 8525.6, 8462.35, 8349.45, 8355.85, 8518.55, 8477.3, 8466.55, 8495.15, 8372.75, 8299.95, 7809.0, 7880.7, 7791.85, 7948.95, 8001.95, 7971.3, 7785.85, 7717.0, 7823.0, 7655.05, 7558.8, 7688.25, 7818.6, 7788.1, 7789.3, 7872.25, 7829.1, 7899.15, 7981.9, 7977.1, 7812.0, 7845.95, 7868.5, 7795.7, 7843.3, 7948.9, 7950.9, 8119.3, 8152.9, 8177.4, 8129.35, 8189.7, 8143.6, 8131.7, 8107.9, 8179.5, 8238.15, 8275.05, 8261.65, 8251.7, 8295.45, 8260.55, 8232.9, 8171.2, 8111.75, 8065.8, 8050.8, 8060.7, 8040.2, 7955.45, 7954.3, 7915.2, 7783.35, 7762.25, 7806.6, 7837.55, 7731.8, 7842.75, 7856.55, 7849.25, 7831.6, 7883.8, 7942.7, 7935.25, 7954.9, 7931.35, 7864.15, 7781.9, 7765.4, 7701.7, 7612.5, 7683.3, 7610.45, 7650.05, 7700.9, 7750.9, 7844.35, 7761.95, 7834.45, 7786.1, 7865.95, 7861.05, 7925.15, 7928.95, 7896.25, 7946.35, 7791.3, 7784.65, 7741.0, 7568.3, 7601.35, 7563.85, 7510.3, 7562.4, 7536.8, 7437.8, 7351.0, 7435.1, 7309.3, 7276.8, 7422.45, 7436.15, 7437.75, 7424.65, 7563.55, 7555.95, 7455.55, 7361.8, 7404.0, 7489.1, 7387.25, 7298.2, 7215.7, 6976.35, 6980.95, 7162.95, 7048.25, 7108.45, 7191.75, 7210.75, 7234.55, 7109.55, 7018.7, 6970.6, 7029.75, 6987.05, 7222.3, 7368.85, 7475.6, 7485.35, 7485.3, 7531.8, 7486.15, 7510.2, 7538.75, 7460.6, 7498.75, 7512.55, 7604.35, 7704.25, 7714.9, 7716.5, 7615.1, 7597.0, 7735.2, 7738.4, 7713.05, 7758.8, 7603.2, 7614.35, 7546.45, 7555.2, 7671.4, 7708.95, 7850.45, 7914.7, 7914.75, 7912.05, 7899.3, 7855.05, 7962.65, 7979.9, 7847.25, 7849.8, 7805.9, 7747.0, 7706.55, 7735.5, 7733.45, 7866.05, 7887.8, 7848.85, 7900.4, 7814.9, 7860.75, 7890.75, 7870.15, 7783.4, 7749.7, 7731.05, 7748.85, 7934.9, 8069.65, 8156.65, 8178.5, 8160.1, 8179.95, 8218.95, 8220.8, 8201.05, 8266.45, 8273.05, 8203.6, 8170.05, 8110.6, 8108.85, 8206.6, 8140.75, 8170.2, 8238.5, 8219.9, 8203.7, 8270.45, 8088.6, 8094.7, 8127.85, 8204.0, 8287.75, 8328.35, 8370.7, 8335.95, 8337.9, 8323.2, 8467.9, 8521.05, 8519.5, 8565.0, 8541.4, 8508.7, 8528.55, 8565.85, 8510.1, 8541.2, 8635.65, 8590.65, 8615.8, 8666.3, 8638.5, 8636.55, 8622.9, 8544.85, 8551.1, 8683.15, 8711.35, 8678.25, 8575.3, 8592.15, 8642.55, 8624.05, 8673.25, 8666.9, 8629.15, 8632.6, 8650.3, 8592.2, 8572.55, 8607.45, 8744.35, 8786.2, 8774.65, 8809.65, 8943.0, 8917.95, 8952.5, 8866.7, 8715.6, 8726.6, 8742.55, 8779.85, 8808.4, 8775.9, 8777.15, 8867.45, 8831.55, 8723.05, 8706.4, 8745.15, 8591.25, 8611.15, 8738.1, 8769.15, 8743.95, 8709.55, 8697.6, 8708.8, 8573.35, 8583.4, 8520.4, 8677.9, 8659.1, 8699.4, 8693.05, 8708.95, 8691.3, 8615.25, 8615.25, 8638.0, 8626.25, 8514.0, 8484.95, 8433.75, 8497.05, 8543.55, 8432.0, 8525.75, 8296.3, 8108.45, 8111.6, 8079.95, 8074.1, 7929.1, 8002.3, 8033.3, 7965.5, 8114.3, 8126.9, 8142.15, 8224.5, 8192.9, 8086.8, 8128.75, 8143.15, 8102.05, 8246.85, 8261.75, 8170.8, 8221.8, 8182.45, 8153.6, 8139.45, 8104.35, 8082.4, 8061.3, 7979.1, 7985.75, 7908.25, 8032.85, 8034.85, 8103.6, 8185.8, 8179.5, 8192.25, 8190.5, 8273.8, 8243.8, 8236.05, 8288.6, 8380.65, 8407.2, 8400.35, 8412.8, 8398.0, 8417.0, 8435.1, 8349.35, 8391.5, 8475.8, 8602.75, 8641.25, 8632.75, 8561.3, 8716.4, 8734.25, 8740.95, 8801.05, 8768.3, 8769.05, 8778.4, 8793.55, 8805.05, 8792.3, 8724.7, 8778.0, 8821.7, 8879.2, 8907.85, 8926.9, 8939.5, 8896.7, 8879.6, 8945.8, 8899.75, 8897.55, 8963.45, 8946.9, 8924.3, 8927.0, 8934.55, 9087.0, 9084.8, 9153.7, 9160.05, 9126.85, 9121.5, 9030.45, 9086.3, 9108.0, 9045.2, 9100.8, 9143.8, 9173.75, 9173.75, 9237.85, 9265.15, 9261.95, 9198.3, 9181.45, 9237.0, 9203.45, 9150.8, 9139.3, 9105.15, 9103.5, 9136.4, 9119.4, 9217.95, 9306.6, 9351.85, 9342.15, 9304.05, 9313.8, 9311.95, 9359.9, 9285.3, 9314.05, 9316.85, 9407.3, 9422.4, 9400.9, 9445.4, 9512.25, 9525.75, 9429.45, 9427.9, 9438.25, 9386.15, 9360.55, 9509.75, 9595.1, 9604.9, 9624.55, 9621.25, 9616.1, 9653.5, 9675.1, 9637.15, 9663.9, 9647.25, 9668.25, 9616.4, 9606.9, 9618.15, 9578.05, 9588.05, 9657.55, 9653.5, 9633.6, 9630.0, 9574.95, 9511.4, 9491.25, 9504.1, 9520.9, 9615.0, 9613.3, 9637.6, 9674.55, 9665.8, 9771.05, 9786.05, 9816.1, 9891.7, 9886.35, 9915.95, 9827.15, 9899.6, 9873.3, 9915.25, 9966.4, 9964.55, 10020.65, 10020.55, 10014.5, 10077.1, 10114.65, 10081.5, 10013.65, 10066.4, 10057.4, 9978.55, 9908.05, 9820.25, 9710.8, 9794.15, 9897.3, 9904.15, 9837.4, 9754.35, 9765.55, 9852.5, 9857.05, 9912.8, 9796.05, 9884.4, 9917.9, 9974.4, 9912.85, 9952.2, 9916.2, 9929.9, 9934.8, 10006.05, 10093.05, 10079.3, 10086.6, 10085.4, 10153.1, 10147.55, 10141.15, 10121.9, 9964.4, 9872.6, 9871.5, 9735.75, 9768.95, 9788.6, 9859.5, 9914.9, 9888.7, 9979.7, 9988.75, 10016.95, 9984.8, 10096.4, 10167.45, 10230.85, 10234.45, 10210.85, 10146.55, 10184.85, 10207.7, 10295.35, 10343.8, 10323.05, 10363.65, 10335.3, 10440.5, 10423.8, 10452.5, 10451.8, 10350.15, 10303.15, 10308.95, 10321.75, 10224.95, 10186.6, 10118.05, 10214.75, 10283.6, 10298.75, 10326.9, 10342.3, 10348.75, 10389.7, 10399.55, 10370.25, 10361.3, 10226.55, 10121.8, 10127.75, 10118.25, 10044.1, 10166.7, 10265.65, 10322.25, 10240.15, 10192.95, 10252.1, 10333.25, 10388.75, 10463.2, 10444.2, 10440.3, 10493.0, 10531.5, 10490.75, 10477.9, 10530.7, 10442.2, 10443.2, 10504.8, 10558.85, 10623.6, 10637.0, 10632.2, 10651.2, 10681.25, 10741.55, 10700.45, 10788.55, 10817.0, 10894.7, 10966.2, 11083.7, 11086.0, 11069.65, 11130.4, 11049.65, 11027.7, 11016.9, 10760.6, 10666.55, 10498.25, 10476.7, 10576.85, 10454.95, 10539.75, 10500.9, 10545.5, 10452.3, 10378.4, 10360.4, 10397.45, 10382.7, 10491.05, 10582.6, 10554.3, 10492.85, 10458.35, 10358.85, 10249.25, 10154.2, 10242.65, 10226.85, 10421.4, 10426.85, 10410.9, 10360.15, 10195.15, 10094.25, 10124.35, 10155.25, 10114.75, 9998.05, 10130.65, 10184.15, 10113.7, 10211.8, 10245.0, 10128.4, 10325.15, 10331.6, 10379.35, 10402.25, 10417.15, 10458.65, 10480.6, 10528.35, 10548.7, 10526.2, 10565.3, 10564.05, 10584.7, 10614.35, 10570.55, 10617.8, 10692.3, 10739.35, 10718.05, 10679.65, 10618.25, 10715.5, 10717.8, 10741.7, 10716.55, 10806.5, 10806.6, 10801.85, 10741.1, 10682.7, 10596.4, 10516.7, 10536.7, 10430.35, 10513.85, 10605.15, 10688.65, 10633.3, 10614.35, 10736.15, 10696.2, 10628.5, 10593.15, 10684.65, 10768.35, 10767.65, 10786.95, 10842.85, 10856.7, 10808.05, 10817.7, 10799.85, 10710.45, 10772.05, 10741.1, 10821.85, 10762.45, 10769.15, 10671.4, 10589.1, 10714.3, 10657.3, 10699.9, 10769.9, 10749.75, 10772.65, 10852.9, 10947.25, 10948.3, 11023.2, 11018.9, 10936.85, 11008.05, 10980.45, 10957.1, 11010.2, 11084.75, 11134.3, 11132.0, 11167.3, 11278.35, 11319.55, 11356.5, 11346.2, 11244.7, 11360.8, 11387.1, 11389.45, 11450.0, 11470.7, 11429.5, 11355.75, 11435.1, 11385.05, 11470.75, 11551.75, 11570.9, 11582.75, 11557.1, 11691.95, 11738.5, 11691.9, 11676.8, 11680.5, 11582.35, 11520.3, 11476.95, 11536.9, 11589.1, 11438.1, 11287.5, 11369.9, 11515.2, 11377.75, 11278.9, 11234.35, 11143.1, 10967.4, 11067.45, 11053.8, 10977.55, 10930.45, 11008.3, 10858.25, 10599.25, 10316.45, 10348.05, 10301.05, 10460.1, 10234.65, 10472.5, 10512.5, 10584.75, 10453.05, 10303.55, 10245.25, 10146.8, 10224.75, 10124.9, 10030.0, 10250.85, 10198.4, 10386.6, 10380.45, 10553.0, 10524.0, 10530.0, 10598.4, 10585.2, 10482.2, 10582.5, 10576.3, 10616.7, 10682.2, 10763.4, 10656.2, 10600.05, 10526.75, 10628.6, 10685.6, 10728.85, 10858.7, 10876.75, 10883.75, 10869.5, 10782.9, 10601.15, 10693.7, 10488.45, 10549.15, 10737.6, 10791.55, 10805.45, 10888.35, 10908.7, 10967.3, 10951.7, 10754.0, 10663.5, 10729.85, 10779.8, 10859.9, 10862.55, 10792.5, 10672.25, 10727.35, 10771.8, 10802.15, 10855.15, 10821.6, 10794.95, 10737.6, 10886.8, 10890.3, 10905.2, 10906.95, 10961.85, 10922.75, 10831.5, 10849.8, 10780.55, 10661.55, 10652.2, 10651.8, 10830.95, 10893.65, 10912.25, 10934.35, 11062.45, 11069.4, 10943.6, 10888.8, 10831.4, 10746.05, 10724.4, 10640.95, 10604.35, 10735.45, 10789.85, 10791.65, 10880.1, 10835.3, 10806.65, 10792.5, 10863.5, 10987.45, 11053.0, 11058.2, 11035.4, 11168.05, 11301.2, 11341.7, 11343.25, 11426.85, 11462.2, 11532.4, 11521.05, 11456.9, 11354.25, 11483.25, 11445.05, 11570.0, 11669.15, 11713.2, 11643.95, 11598.0, 11665.95, 11604.5, 11671.95, 11584.3, 11596.7, 11643.45, 11690.35, 11787.15, 11752.8, 11594.45, 11575.95, 11726.15, 11641.8, 11754.65, 11748.15, 11724.75, 11712.25, 11598.25, 11497.9, 11359.45, 11301.8, 11278.9, 11148.2, 11222.05, 11157.0, 11257.1, 11407.15, 11828.25, 11709.1, 11737.9, 11657.05, 11844.1, 11924.75, 11928.75, 11861.1, 11945.9, 11922.8, 12088.55, 12021.65, 11843.75, 11870.65, 11922.7, 11965.6, 11906.2, 11914.05, 11823.3, 11672.15, 11691.5, 11691.45, 11831.75, 11724.1, 11699.65, 11796.45, 11847.55, 11841.55, 11788.85, 11865.6, 11910.3, 11916.75, 11946.75, 11811.15, 11558.6, 11555.9, 11498.9, 11582.9, 11552.5, 11588.35, 11662.6, 11687.5, 11596.9, 11419.25, 11346.2, 11331.05, 11271.3, 11252.15, 11284.3, 11189.2, 11085.4, 11118.0, 10980.0, 10997.35, 10862.6, 10948.25, 10855.5, 11032.45, 11109.65, 10925.85, 11029.4, 11047.8, 11053.9, 11017.0, 10918.7, 10741.35, 10829.35, 11057.85, 11105.35, 11046.1, 10948.3, 11023.25, 10797.9, 10844.65, 10847.9, 10946.2, 11003.05, 11035.7, 10982.8, 11075.9, 11003.5, 10817.6, 10840.65, 10704.8, 11274.2, 11600.2, 11588.2, 11440.2, 11571.2, 11512.4, 11474.45, 11359.9, 11314.0, 11174.75, 11126.4, 11313.3, 11234.55, 11305.05, 11341.15, 11428.3, 11464.0, 11586.35, 11661.85, 11588.35, 11604.1, 11582.6, 11583.9, 11786.85, 11844.1, 11877.45, 11890.6, 11941.3, 11917.2, 11966.05, 12012.05, 11908.15, 11913.45, 11840.45, 11872.1, 11895.45, 11884.5, 11940.1, 11999.1, 11968.4, 11914.4, 12073.75, 12037.7, 12100.7, 12151.15, 12056.05, 12048.2, 11994.2, 12043.2, 12018.4, 11921.5, 11937.5, 11856.8, 11910.15, 11971.8, 12086.7, 12053.95, 12165.0, 12221.65, 12259.7, 12271.8, 12262.75, 12214.55, 12126.55, 12245.8, 12255.85, 12168.45, 12182.5, 12282.2, 12226.65, 11993.05, 12052.95, 12025.35, 12215.9, 12256.8, 12329.55, 12362.3, 12343.3, 12355.5, 12352.35, 12224.55, 12169.85, 12106.9, 12180.35, 12248.25, 12119.0, 12055.8, 12129.5, 12035.8, 11962.1, 11707.9, 11979.65, 12089.15, 12137.95, 12098.35, 12031.5, 12107.9, 12201.2, 12174.65, 12113.45, 12045.8, 11992.5, 12125.9, 12080.85, 11829.4, 11797.9, 11678.5, 11633.3, 11201.75, 11132.75, 11303.3, 11251.0, 11269.0, 10989.45, 10451.45, 10458.4, 9590.15, 9955.2, 9197.4, 8967.05, 8468.8, 8263.45, 8745.45, 7610.25, 7801.05, 8317.85, 8641.45, 8660.25, 8281.1, 8597.75, 8253.8, 8083.8, 8792.2, 8748.75, 9111.9, 8993.85, 8925.3, 8992.8, 9266.75, 9261.85, 8981.45, 9187.3, 9313.9, 9154.4, 9282.3, 9380.9, 9553.35, 9859.9, 9293.5, 9205.6, 9270.9, 9199.05, 9251.5, 9239.2, 9196.55, 9383.55, 9142.75, 9136.85, 8823.25, 8879.1, 9066.55, 9106.25, 9039.25, 9029.05, 9314.95, 9490.1, 9580.3, 9826.15, 9979.1, 10061.55, 10029.1, 10142.15, 10167.45, 10046.65, 10116.15, 9902.0, 9972.9, 9813.7, 9914.0, 9881.15, 10091.65, 10244.4, 10311.2, 10471.0, 10305.3, 10288.9, 10383.0, 10312.4, 10302.1, 10430.05, 10551.7, 10607.35, 10763.65, 10799.65, 10705.75, 10813.45, 10768.05, 10802.7, 10607.35, 10618.2, 10739.95, 10901.7, 11022.2, 11162.25, 11132.6, 11215.45, 11194.15, 11131.8, 11300.55, 11202.85, 11102.15, 11073.45, 10891.6, 11095.25, 11101.65, 11200.15, 11214.05, 11270.15, 11322.5, 11308.4, 11300.45, 11178.4, 11247.1, 11385.35, 11408.4, 11312.2, 11371.6, 11466.45, 11472.25, 11549.6, 11559.25, 11647.6, 11387.5, 11470.25, 11535.0, 11527.45, 11333.85, 11355.05, 11317.35, 11278.0, 11449.25, 11464.45, 11440.05, 11521.8, 11604.55, 11516.1, 11504.95, 11250.55, 11153.65, 11131.85, 10805.55, 11050.25, 11227.55, 11222.4, 11247.55, 11416.95, 11503.35, 11662.4, 11738.85, 11834.6, 11914.2, 11930.95, 11934.5, 11971.05, 11680.35, 11762.45, 11873.05, 11896.8, 11937.65, 11896.45, 11930.35, 11767.75, 11889.4, 11729.6, 11670.8, 11642.4, 11669.15, 11813.5, 11908.5, 12120.3, 12263.55, 12461.05, 12631.1, 12749.15, 12690.8, 12719.95, 12874.2, 12938.25, 12771.7, 12859.05, 12926.45, 13055.15, 12858.4, 12987.0, 12968.95, 13109.05, 13113.75, 13133.9, 13258.55, 13355.75, 13392.95, 13529.1, 13478.3, 13513.85, 13558.15, 13567.85, 13682.7, 13740.7, 13760.55, 13328.4, 13466.3, 13601.1, 13749.25, 13873.2, 13932.6, 13981.95, 13981.75, 14132.9, 14199.5, 14146.25, 14137.35, 14347.25, 14484.75, 14563.45, 14564.85, 14595.6, 14433.7, 14281.3, 14521.15, 14644.7, 14590.35, 14371.9, 14238.9, 13967.5, 13817.55, 13634.6, 14281.2, 14647.85, 14789.95, 14895.65, 14924.25, 15115.8, 15109.3, 15106.5, 15173.3, 15163.3, 15314.7, 15313.45, 15208.9, 15118.95, 14981.75, 14675.7, 14707.8, 14982.0, 15097.35, 14529.15, 14761.55, 14919.1, 15245.6, 15080.75, 14938.1, 14956.2, 15098.4, 15174.8, 15030.95, 14929.5, 14910.45, 14721.3, 14557.85, 14744.0, 14736.4, 14814.75, 14549.4, 14324.9, 14507.3, 14845.1, 14690.7, 14867.35, 14637.8, 14683.5, 14819.05, 14873.8, 14834.85, 14310.8, 14504.8, 14581.45, 14617.85, 14359.45, 14296.4, 14406.15, 14341.35, 14485.0, 14653.05, 14864.55, 14894.9, 14631.1, 14634.15, 14496.5, 14617.85, 14724.8, 14823.15, 14942.35, 14850.75, 14696.5, 14677.8, 14923.15, 15108.1, 15030.15, 14906.05, 15175.3, 15197.7, 15208.45, 15301.45, 15337.85, 15435.65, 15582.8, 15574.85, 15576.2, 15690.35, 15670.25, 15751.65, 15740.1, 15635.35, 15737.75, 15799.35, 15811.85, 15869.25, 15767.55, 15691.4, 15683.35, 15746.5, 15772.75, 15686.95, 15790.45, 15860.35, 15814.7, 15748.45, 15721.5, 15680.0, 15722.2, 15834.35, 15818.25, 15879.65, 15727.9, 15689.8, 15692.6, 15812.35, 15853.95, 15924.2, 15923.4, 15752.4, 15632.1, 15824.05, 15856.05, 15824.45, 15746.45, 15709.4, 15778.45, 15763.05, 15885.15, 16130.75, 16258.8, 16294.6, 16238.2, 16258.25, 16280.1, 16282.25, 16364.4, 16529.1, 16563.05, 16614.6, 16568.85, 16450.5, 16496.45, 16624.6, 16634.65, 16636.9, 16705.2, 16931.05, 17132.2, 17076.25, 17234.15, 17323.6, 17377.8, 17362.1, 17353.5, 17369.25, 17355.3, 17380.0, 17519.45, 17629.5, 17585.15, 17396.9, 17562.0, 17546.65, 17822.95, 17853.2, 17855.1, 17748.6, 17711.3, 17618.15, 17532.05, 17691.25, 17822.3, 17646.0, 17790.35, 17895.2, 17945.95, 17991.95, 18161.75, 18338.55, 18477.05, 18418.75, 18266.6, 18178.1, 18114.9, 18125.4, 18268.4, 18210.95, 17857.25, 17671.65, 17929.65, 17888.95, 17829.2, 17916.8, 18068.55, 18044.25, 18017.2, 17873.6, 18102.75, 18109.45, 17999.2, 17898.65, 17764.8, 17416.55, 17503.35, 17415.05, 17536.25, 17026.45, 17053.95, 16983.2, 17166.9, 17401.65, 17196.7], \"yaxis\": \"y\"}],\n", | |
" {\"legend\": {\"tracegroupgap\": 0}, \"margin\": {\"t\": 60}, \"template\": {\"data\": {\"bar\": [{\"error_x\": {\"color\": \"#2a3f5f\"}, \"error_y\": {\"color\": \"#2a3f5f\"}, \"marker\": {\"line\": {\"color\": \"#E5ECF6\", \"width\": 0.5}}, \"type\": \"bar\"}], \"barpolar\": [{\"marker\": {\"line\": {\"color\": \"#E5ECF6\", \"width\": 0.5}}, \"type\": \"barpolar\"}], \"carpet\": [{\"aaxis\": {\"endlinecolor\": \"#2a3f5f\", \"gridcolor\": \"white\", \"linecolor\": \"white\", \"minorgridcolor\": \"white\", \"startlinecolor\": \"#2a3f5f\"}, \"baxis\": {\"endlinecolor\": \"#2a3f5f\", \"gridcolor\": \"white\", \"linecolor\": \"white\", \"minorgridcolor\": \"white\", \"startlinecolor\": \"#2a3f5f\"}, \"type\": \"carpet\"}], \"choropleth\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"type\": \"choropleth\"}], \"contour\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"contour\"}], \"contourcarpet\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"type\": \"contourcarpet\"}], \"heatmap\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"heatmap\"}], \"heatmapgl\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"heatmapgl\"}], \"histogram\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"histogram\"}], \"histogram2d\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"histogram2d\"}], \"histogram2dcontour\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"histogram2dcontour\"}], \"mesh3d\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"type\": \"mesh3d\"}], \"parcoords\": [{\"line\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"parcoords\"}], \"pie\": [{\"automargin\": true, \"type\": \"pie\"}], \"scatter\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatter\"}], \"scatter3d\": [{\"line\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatter3d\"}], \"scattercarpet\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scattercarpet\"}], \"scattergeo\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scattergeo\"}], \"scattergl\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scattergl\"}], \"scattermapbox\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scattermapbox\"}], \"scatterpolar\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatterpolar\"}], \"scatterpolargl\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatterpolargl\"}], \"scatterternary\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatterternary\"}], \"surface\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"surface\"}], \"table\": [{\"cells\": {\"fill\": {\"color\": \"#EBF0F8\"}, \"line\": {\"color\": \"white\"}}, \"header\": {\"fill\": {\"color\": \"#C8D4E3\"}, \"line\": {\"color\": \"white\"}}, \"type\": \"table\"}]}, \"layout\": {\"annotationdefaults\": {\"arrowcolor\": \"#2a3f5f\", \"arrowhead\": 0, \"arrowwidth\": 1}, \"coloraxis\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"colorscale\": {\"diverging\": [[0, \"#8e0152\"], [0.1, \"#c51b7d\"], [0.2, \"#de77ae\"], [0.3, \"#f1b6da\"], [0.4, \"#fde0ef\"], [0.5, \"#f7f7f7\"], [0.6, \"#e6f5d0\"], [0.7, \"#b8e186\"], [0.8, \"#7fbc41\"], [0.9, \"#4d9221\"], [1, \"#276419\"]], \"sequential\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"sequentialminus\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]]}, \"colorway\": [\"#636efa\", \"#EF553B\", \"#00cc96\", \"#ab63fa\", \"#FFA15A\", \"#19d3f3\", \"#FF6692\", \"#B6E880\", \"#FF97FF\", \"#FECB52\"], \"font\": {\"color\": \"#2a3f5f\"}, \"geo\": {\"bgcolor\": \"white\", \"lakecolor\": \"white\", \"landcolor\": \"#E5ECF6\", \"showlakes\": true, \"showland\": true, \"subunitcolor\": \"white\"}, \"hoverlabel\": {\"align\": \"left\"}, \"hovermode\": \"closest\", \"mapbox\": {\"style\": \"light\"}, \"paper_bgcolor\": \"white\", \"plot_bgcolor\": \"#E5ECF6\", \"polar\": {\"angularaxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}, \"bgcolor\": \"#E5ECF6\", \"radialaxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}}, \"scene\": {\"xaxis\": {\"backgroundcolor\": \"#E5ECF6\", \"gridcolor\": \"white\", \"gridwidth\": 2, \"linecolor\": \"white\", \"showbackground\": true, \"ticks\": \"\", \"zerolinecolor\": \"white\"}, \"yaxis\": {\"backgroundcolor\": \"#E5ECF6\", \"gridcolor\": \"white\", \"gridwidth\": 2, \"linecolor\": \"white\", \"showbackground\": true, \"ticks\": \"\", \"zerolinecolor\": \"white\"}, \"zaxis\": {\"backgroundcolor\": \"#E5ECF6\", \"gridcolor\": \"white\", \"gridwidth\": 2, \"linecolor\": \"white\", \"showbackground\": true, \"ticks\": \"\", \"zerolinecolor\": \"white\"}}, \"shapedefaults\": {\"line\": {\"color\": \"#2a3f5f\"}}, \"ternary\": {\"aaxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}, \"baxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}, \"bgcolor\": \"#E5ECF6\", \"caxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}}, \"title\": {\"x\": 0.05}, \"xaxis\": {\"automargin\": true, \"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\", \"title\": {\"standoff\": 15}, \"zerolinecolor\": \"white\", \"zerolinewidth\": 2}, \"yaxis\": {\"automargin\": true, \"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\", \"title\": {\"standoff\": 15}, \"zerolinecolor\": \"white\", \"zerolinewidth\": 2}}}, \"xaxis\": {\"anchor\": \"y\", \"domain\": [0.0, 1.0], \"title\": {\"text\": \"x\"}}, \"yaxis\": {\"anchor\": \"x\", \"domain\": [0.0, 1.0], \"title\": {\"text\": \"Close\"}}},\n", | |
" {\"responsive\": true}\n", | |
" ).then(function(){\n", | |
" \n", | |
"var gd = document.getElementById('d5af6330-0af3-4ed4-a995-a20108841efc');\n", | |
"var x = new MutationObserver(function (mutations, observer) {{\n", | |
" var display = window.getComputedStyle(gd).display;\n", | |
" if (!display || display === 'none') {{\n", | |
" console.log([gd, 'removed!']);\n", | |
" Plotly.purge(gd);\n", | |
" observer.disconnect();\n", | |
" }}\n", | |
"}});\n", | |
"\n", | |
"// Listen for the removal of the full notebook cells\n", | |
"var notebookContainer = gd.closest('#notebook-container');\n", | |
"if (notebookContainer) {{\n", | |
" x.observe(notebookContainer, {childList: true});\n", | |
"}}\n", | |
"\n", | |
"// Listen for the clearing of the current output cell\n", | |
"var outputEl = gd.closest('.output');\n", | |
"if (outputEl) {{\n", | |
" x.observe(outputEl, {childList: true});\n", | |
"}}\n", | |
"\n", | |
" })\n", | |
" };\n", | |
" \n", | |
" </script>\n", | |
" </div>\n", | |
"</body>\n", | |
"</html>" | |
] | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "VxUYuouoRoFn", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 350 | |
}, | |
"outputId": "87c89041-18c2-4ea0-94ad-163c83b360fa" | |
}, | |
"source": [ | |
"# run_stat(stock_data, SIPStrategy)\n", | |
"cerebro = init_stat()\n", | |
"\n", | |
"# add data feeds to data engine\n", | |
"data = bt.feeds.PandasData(dataname=stock_data, openinterest=None)\n", | |
"cerebro.adddata(data)\n", | |
"\n", | |
"# add strategy to engine\n", | |
"cerebro.broker.set_fundmode(True)\n", | |
"cerebro.addstrategy(SIPStrategy)\n", | |
"\n", | |
"# initial cash stats\n", | |
"start_portfolio_value = cerebro.broker.getvalue()\n", | |
"\n", | |
"# add analyzer\n", | |
"# cerebro.addanalyzer(bt.analyzers.TradeAnalyzer, _name = \"ta\")\n", | |
"cerebro.addanalyzer(bt.analyzers.TimeReturn)\n", | |
"\n", | |
"# run engine\n", | |
"strats= cerebro.run()\n", | |
"%matplotlib inline\n", | |
"cerebro.plot()" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"2010-01-18 Order failed(Margin)\n" | |
] | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"application/javascript": [ | |
"/* Put everything inside the global mpl namespace */\n", | |
"window.mpl = {};\n", | |
"\n", | |
"\n", | |
"mpl.get_websocket_type = function() {\n", | |
" if (typeof(WebSocket) !== 'undefined') {\n", | |
" return WebSocket;\n", | |
" } else if (typeof(MozWebSocket) !== 'undefined') {\n", | |
" return MozWebSocket;\n", | |
" } else {\n", | |
" alert('Your browser does not have WebSocket support. ' +\n", | |
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", | |
" 'Firefox 4 and 5 are also supported but you ' +\n", | |
" 'have to enable WebSockets in about:config.');\n", | |
" };\n", | |
"}\n", | |
"\n", | |
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", | |
" this.id = figure_id;\n", | |
"\n", | |
" this.ws = websocket;\n", | |
"\n", | |
" this.supports_binary = (this.ws.binaryType != undefined);\n", | |
"\n", | |
" if (!this.supports_binary) {\n", | |
" var warnings = document.getElementById(\"mpl-warnings\");\n", | |
" if (warnings) {\n", | |
" warnings.style.display = 'block';\n", | |
" warnings.textContent = (\n", | |
" \"This browser does not support binary websocket messages. \" +\n", | |
" \"Performance may be slow.\");\n", | |
" }\n", | |
" }\n", | |
"\n", | |
" this.imageObj = new Image();\n", | |
"\n", | |
" this.context = undefined;\n", | |
" this.message = undefined;\n", | |
" this.canvas = undefined;\n", | |
" this.rubberband_canvas = undefined;\n", | |
" this.rubberband_context = undefined;\n", | |
" this.format_dropdown = undefined;\n", | |
"\n", | |
" this.image_mode = 'full';\n", | |
"\n", | |
" this.root = $('<div/>');\n", | |
" this._root_extra_style(this.root)\n", | |
" this.root.attr('style', 'display: inline-block');\n", | |
"\n", | |
" $(parent_element).append(this.root);\n", | |
"\n", | |
" this._init_header(this);\n", | |
" this._init_canvas(this);\n", | |
" this._init_toolbar(this);\n", | |
"\n", | |
" var fig = this;\n", | |
"\n", | |
" this.waiting = false;\n", | |
"\n", | |
" this.ws.onopen = function () {\n", | |
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", | |
" fig.send_message(\"send_image_mode\", {});\n", | |
" if (mpl.ratio != 1) {\n", | |
" fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", | |
" }\n", | |
" fig.send_message(\"refresh\", {});\n", | |
" }\n", | |
"\n", | |
" this.imageObj.onload = function() {\n", | |
" if (fig.image_mode == 'full') {\n", | |
" // Full images could contain transparency (where diff images\n", | |
" // almost always do), so we need to clear the canvas so that\n", | |
" // there is no ghosting.\n", | |
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", | |
" }\n", | |
" fig.context.drawImage(fig.imageObj, 0, 0);\n", | |
" };\n", | |
"\n", | |
" this.imageObj.onunload = function() {\n", | |
" fig.ws.close();\n", | |
" }\n", | |
"\n", | |
" this.ws.onmessage = this._make_on_message_function(this);\n", | |
"\n", | |
" this.ondownload = ondownload;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_header = function() {\n", | |
" var titlebar = $(\n", | |
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", | |
" 'ui-helper-clearfix\"/>');\n", | |
" var titletext = $(\n", | |
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", | |
" 'text-align: center; padding: 3px;\"/>');\n", | |
" titlebar.append(titletext)\n", | |
" this.root.append(titlebar);\n", | |
" this.header = titletext[0];\n", | |
"}\n", | |
"\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", | |
"\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", | |
"\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_canvas = function() {\n", | |
" var fig = this;\n", | |
"\n", | |
" var canvas_div = $('<div/>');\n", | |
"\n", | |
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", | |
"\n", | |
" function canvas_keyboard_event(event) {\n", | |
" return fig.key_event(event, event['data']);\n", | |
" }\n", | |
"\n", | |
" canvas_div.keydown('key_press', canvas_keyboard_event);\n", | |
" canvas_div.keyup('key_release', canvas_keyboard_event);\n", | |
" this.canvas_div = canvas_div\n", | |
" this._canvas_extra_style(canvas_div)\n", | |
" this.root.append(canvas_div);\n", | |
"\n", | |
" var canvas = $('<canvas/>');\n", | |
" canvas.addClass('mpl-canvas');\n", | |
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", | |
"\n", | |
" this.canvas = canvas[0];\n", | |
" this.context = canvas[0].getContext(\"2d\");\n", | |
"\n", | |
" var backingStore = this.context.backingStorePixelRatio ||\n", | |
"\tthis.context.webkitBackingStorePixelRatio ||\n", | |
"\tthis.context.mozBackingStorePixelRatio ||\n", | |
"\tthis.context.msBackingStorePixelRatio ||\n", | |
"\tthis.context.oBackingStorePixelRatio ||\n", | |
"\tthis.context.backingStorePixelRatio || 1;\n", | |
"\n", | |
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", | |
"\n", | |
" var rubberband = $('<canvas/>');\n", | |
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", | |
"\n", | |
" var pass_mouse_events = true;\n", | |
"\n", | |
" canvas_div.resizable({\n", | |
" start: function(event, ui) {\n", | |
" pass_mouse_events = false;\n", | |
" },\n", | |
" resize: function(event, ui) {\n", | |
" fig.request_resize(ui.size.width, ui.size.height);\n", | |
" },\n", | |
" stop: function(event, ui) {\n", | |
" pass_mouse_events = true;\n", | |
" fig.request_resize(ui.size.width, ui.size.height);\n", | |
" },\n", | |
" });\n", | |
"\n", | |
" function mouse_event_fn(event) {\n", | |
" if (pass_mouse_events)\n", | |
" return fig.mouse_event(event, event['data']);\n", | |
" }\n", | |
"\n", | |
" rubberband.mousedown('button_press', mouse_event_fn);\n", | |
" rubberband.mouseup('button_release', mouse_event_fn);\n", | |
" // Throttle sequential mouse events to 1 every 20ms.\n", | |
" rubberband.mousemove('motion_notify', mouse_event_fn);\n", | |
"\n", | |
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n", | |
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n", | |
"\n", | |
" canvas_div.on(\"wheel\", function (event) {\n", | |
" event = event.originalEvent;\n", | |
" event['data'] = 'scroll'\n", | |
" if (event.deltaY < 0) {\n", | |
" event.step = 1;\n", | |
" } else {\n", | |
" event.step = -1;\n", | |
" }\n", | |
" mouse_event_fn(event);\n", | |
" });\n", | |
"\n", | |
" canvas_div.append(canvas);\n", | |
" canvas_div.append(rubberband);\n", | |
"\n", | |
" this.rubberband = rubberband;\n", | |
" this.rubberband_canvas = rubberband[0];\n", | |
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n", | |
" this.rubberband_context.strokeStyle = \"#000000\";\n", | |
"\n", | |
" this._resize_canvas = function(width, height) {\n", | |
" // Keep the size of the canvas, canvas container, and rubber band\n", | |
" // canvas in synch.\n", | |
" canvas_div.css('width', width)\n", | |
" canvas_div.css('height', height)\n", | |
"\n", | |
" canvas.attr('width', width * mpl.ratio);\n", | |
" canvas.attr('height', height * mpl.ratio);\n", | |
" canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", | |
"\n", | |
" rubberband.attr('width', width);\n", | |
" rubberband.attr('height', height);\n", | |
" }\n", | |
"\n", | |
" // Set the figure to an initial 600x600px, this will subsequently be updated\n", | |
" // upon first draw.\n", | |
" this._resize_canvas(600, 600);\n", | |
"\n", | |
" // Disable right mouse context menu.\n", | |
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", | |
" return false;\n", | |
" });\n", | |
"\n", | |
" function set_focus () {\n", | |
" canvas.focus();\n", | |
" canvas_div.focus();\n", | |
" }\n", | |
"\n", | |
" window.setTimeout(set_focus, 100);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_toolbar = function() {\n", | |
" var fig = this;\n", | |
"\n", | |
" var nav_element = $('<div/>');\n", | |
" nav_element.attr('style', 'width: 100%');\n", | |
" this.root.append(nav_element);\n", | |
"\n", | |
" // Define a callback function for later on.\n", | |
" function toolbar_event(event) {\n", | |
" return fig.toolbar_button_onclick(event['data']);\n", | |
" }\n", | |
" function toolbar_mouse_event(event) {\n", | |
" return fig.toolbar_button_onmouseover(event['data']);\n", | |
" }\n", | |
"\n", | |
" for(var toolbar_ind in mpl.toolbar_items) {\n", | |
" var name = mpl.toolbar_items[toolbar_ind][0];\n", | |
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", | |
" var image = mpl.toolbar_items[toolbar_ind][2];\n", | |
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n", | |
"\n", | |
" if (!name) {\n", | |
" // put a spacer in here.\n", | |
" continue;\n", | |
" }\n", | |
" var button = $('<button/>');\n", | |
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", | |
" 'ui-button-icon-only');\n", | |
" button.attr('role', 'button');\n", | |
" button.attr('aria-disabled', 'false');\n", | |
" button.click(method_name, toolbar_event);\n", | |
" button.mouseover(tooltip, toolbar_mouse_event);\n", | |
"\n", | |
" var icon_img = $('<span/>');\n", | |
" icon_img.addClass('ui-button-icon-primary ui-icon');\n", | |
" icon_img.addClass(image);\n", | |
" icon_img.addClass('ui-corner-all');\n", | |
"\n", | |
" var tooltip_span = $('<span/>');\n", | |
" tooltip_span.addClass('ui-button-text');\n", | |
" tooltip_span.html(tooltip);\n", | |
"\n", | |
" button.append(icon_img);\n", | |
" button.append(tooltip_span);\n", | |
"\n", | |
" nav_element.append(button);\n", | |
" }\n", | |
"\n", | |
" var fmt_picker_span = $('<span/>');\n", | |
"\n", | |
" var fmt_picker = $('<select/>');\n", | |
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", | |
" fmt_picker_span.append(fmt_picker);\n", | |
" nav_element.append(fmt_picker_span);\n", | |
" this.format_dropdown = fmt_picker[0];\n", | |
"\n", | |
" for (var ind in mpl.extensions) {\n", | |
" var fmt = mpl.extensions[ind];\n", | |
" var option = $(\n", | |
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", | |
" fmt_picker.append(option);\n", | |
" }\n", | |
"\n", | |
" // Add hover states to the ui-buttons\n", | |
" $( \".ui-button\" ).hover(\n", | |
" function() { $(this).addClass(\"ui-state-hover\");},\n", | |
" function() { $(this).removeClass(\"ui-state-hover\");}\n", | |
" );\n", | |
"\n", | |
" var status_bar = $('<span class=\"mpl-message\"/>');\n", | |
" nav_element.append(status_bar);\n", | |
" this.message = status_bar[0];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", | |
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", | |
" // which will in turn request a refresh of the image.\n", | |
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.send_message = function(type, properties) {\n", | |
" properties['type'] = type;\n", | |
" properties['figure_id'] = this.id;\n", | |
" this.ws.send(JSON.stringify(properties));\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.send_draw_message = function() {\n", | |
" if (!this.waiting) {\n", | |
" this.waiting = true;\n", | |
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", | |
" }\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype.handle_save = function(fig, msg) {\n", | |
" var format_dropdown = fig.format_dropdown;\n", | |
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", | |
" fig.ondownload(fig, format);\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n", | |
" var size = msg['size'];\n", | |
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", | |
" fig._resize_canvas(size[0], size[1]);\n", | |
" fig.send_message(\"refresh\", {});\n", | |
" };\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", | |
" var x0 = msg['x0'] / mpl.ratio;\n", | |
" var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", | |
" var x1 = msg['x1'] / mpl.ratio;\n", | |
" var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", | |
" x0 = Math.floor(x0) + 0.5;\n", | |
" y0 = Math.floor(y0) + 0.5;\n", | |
" x1 = Math.floor(x1) + 0.5;\n", | |
" y1 = Math.floor(y1) + 0.5;\n", | |
" var min_x = Math.min(x0, x1);\n", | |
" var min_y = Math.min(y0, y1);\n", | |
" var width = Math.abs(x1 - x0);\n", | |
" var height = Math.abs(y1 - y0);\n", | |
"\n", | |
" fig.rubberband_context.clearRect(\n", | |
" 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n", | |
"\n", | |
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", | |
" // Updates the figure title.\n", | |
" fig.header.textContent = msg['label'];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", | |
" var cursor = msg['cursor'];\n", | |
" switch(cursor)\n", | |
" {\n", | |
" case 0:\n", | |
" cursor = 'pointer';\n", | |
" break;\n", | |
" case 1:\n", | |
" cursor = 'default';\n", | |
" break;\n", | |
" case 2:\n", | |
" cursor = 'crosshair';\n", | |
" break;\n", | |
" case 3:\n", | |
" cursor = 'move';\n", | |
" break;\n", | |
" }\n", | |
" fig.rubberband_canvas.style.cursor = cursor;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_message = function(fig, msg) {\n", | |
" fig.message.textContent = msg['message'];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n", | |
" // Request the server to send over a new figure.\n", | |
" fig.send_draw_message();\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", | |
" fig.image_mode = msg['mode'];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.updated_canvas_event = function() {\n", | |
" // Called whenever the canvas gets updated.\n", | |
" this.send_message(\"ack\", {});\n", | |
"}\n", | |
"\n", | |
"// A function to construct a web socket function for onmessage handling.\n", | |
"// Called in the figure constructor.\n", | |
"mpl.figure.prototype._make_on_message_function = function(fig) {\n", | |
" return function socket_on_message(evt) {\n", | |
" if (evt.data instanceof Blob) {\n", | |
" /* FIXME: We get \"Resource interpreted as Image but\n", | |
" * transferred with MIME type text/plain:\" errors on\n", | |
" * Chrome. But how to set the MIME type? It doesn't seem\n", | |
" * to be part of the websocket stream */\n", | |
" evt.data.type = \"image/png\";\n", | |
"\n", | |
" /* Free the memory for the previous frames */\n", | |
" if (fig.imageObj.src) {\n", | |
" (window.URL || window.webkitURL).revokeObjectURL(\n", | |
" fig.imageObj.src);\n", | |
" }\n", | |
"\n", | |
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", | |
" evt.data);\n", | |
" fig.updated_canvas_event();\n", | |
" fig.waiting = false;\n", | |
" return;\n", | |
" }\n", | |
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", | |
" fig.imageObj.src = evt.data;\n", | |
" fig.updated_canvas_event();\n", | |
" fig.waiting = false;\n", | |
" return;\n", | |
" }\n", | |
"\n", | |
" var msg = JSON.parse(evt.data);\n", | |
" var msg_type = msg['type'];\n", | |
"\n", | |
" // Call the \"handle_{type}\" callback, which takes\n", | |
" // the figure and JSON message as its only arguments.\n", | |
" try {\n", | |
" var callback = fig[\"handle_\" + msg_type];\n", | |
" } catch (e) {\n", | |
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", | |
" return;\n", | |
" }\n", | |
"\n", | |
" if (callback) {\n", | |
" try {\n", | |
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", | |
" callback(fig, msg);\n", | |
" } catch (e) {\n", | |
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", | |
" }\n", | |
" }\n", | |
" };\n", | |
"}\n", | |
"\n", | |
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", | |
"mpl.findpos = function(e) {\n", | |
" //this section is from http://www.quirksmode.org/js/events_properties.html\n", | |
" var targ;\n", | |
" if (!e)\n", | |
" e = window.event;\n", | |
" if (e.target)\n", | |
" targ = e.target;\n", | |
" else if (e.srcElement)\n", | |
" targ = e.srcElement;\n", | |
" if (targ.nodeType == 3) // defeat Safari bug\n", | |
" targ = targ.parentNode;\n", | |
"\n", | |
" // jQuery normalizes the pageX and pageY\n", | |
" // pageX,Y are the mouse positions relative to the document\n", | |
" // offset() returns the position of the element relative to the document\n", | |
" var x = e.pageX - $(targ).offset().left;\n", | |
" var y = e.pageY - $(targ).offset().top;\n", | |
"\n", | |
" return {\"x\": x, \"y\": y};\n", | |
"};\n", | |
"\n", | |
"/*\n", | |
" * return a copy of an object with only non-object keys\n", | |
" * we need this to avoid circular references\n", | |
" * http://stackoverflow.com/a/24161582/3208463\n", | |
" */\n", | |
"function simpleKeys (original) {\n", | |
" return Object.keys(original).reduce(function (obj, key) {\n", | |
" if (typeof original[key] !== 'object')\n", | |
" obj[key] = original[key]\n", | |
" return obj;\n", | |
" }, {});\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.mouse_event = function(event, name) {\n", | |
" var canvas_pos = mpl.findpos(event)\n", | |
"\n", | |
" if (name === 'button_press')\n", | |
" {\n", | |
" this.canvas.focus();\n", | |
" this.canvas_div.focus();\n", | |
" }\n", | |
"\n", | |
" var x = canvas_pos.x * mpl.ratio;\n", | |
" var y = canvas_pos.y * mpl.ratio;\n", | |
"\n", | |
" this.send_message(name, {x: x, y: y, button: event.button,\n", | |
" step: event.step,\n", | |
" guiEvent: simpleKeys(event)});\n", | |
"\n", | |
" /* This prevents the web browser from automatically changing to\n", | |
" * the text insertion cursor when the button is pressed. We want\n", | |
" * to control all of the cursor setting manually through the\n", | |
" * 'cursor' event from matplotlib */\n", | |
" event.preventDefault();\n", | |
" return false;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._key_event_extra = function(event, name) {\n", | |
" // Handle any extra behaviour associated with a key event\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.key_event = function(event, name) {\n", | |
"\n", | |
" // Prevent repeat events\n", | |
" if (name == 'key_press')\n", | |
" {\n", | |
" if (event.which === this._key)\n", | |
" return;\n", | |
" else\n", | |
" this._key = event.which;\n", | |
" }\n", | |
" if (name == 'key_release')\n", | |
" this._key = null;\n", | |
"\n", | |
" var value = '';\n", | |
" if (event.ctrlKey && event.which != 17)\n", | |
" value += \"ctrl+\";\n", | |
" if (event.altKey && event.which != 18)\n", | |
" value += \"alt+\";\n", | |
" if (event.shiftKey && event.which != 16)\n", | |
" value += \"shift+\";\n", | |
"\n", | |
" value += 'k';\n", | |
" value += event.which.toString();\n", | |
"\n", | |
" this._key_event_extra(event, name);\n", | |
"\n", | |
" this.send_message(name, {key: value,\n", | |
" guiEvent: simpleKeys(event)});\n", | |
" return false;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", | |
" if (name == 'download') {\n", | |
" this.handle_save(this, null);\n", | |
" } else {\n", | |
" this.send_message(\"toolbar_button\", {name: name});\n", | |
" }\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", | |
" this.message.textContent = tooltip;\n", | |
"};\n", | |
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", | |
"\n", | |
"mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", | |
"\n", | |
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", | |
" // Create a \"websocket\"-like object which calls the given IPython comm\n", | |
" // object with the appropriate methods. Currently this is a non binary\n", | |
" // socket, so there is still some room for performance tuning.\n", | |
" var ws = {};\n", | |
"\n", | |
" ws.close = function() {\n", | |
" comm.close()\n", | |
" };\n", | |
" ws.send = function(m) {\n", | |
" //console.log('sending', m);\n", | |
" comm.send(m);\n", | |
" };\n", | |
" // Register the callback with on_msg.\n", | |
" comm.on_msg(function(msg) {\n", | |
" //console.log('receiving', msg['content']['data'], msg);\n", | |
" // Pass the mpl event to the overridden (by mpl) onmessage function.\n", | |
" ws.onmessage(msg['content']['data'])\n", | |
" });\n", | |
" return ws;\n", | |
"}\n", | |
"\n", | |
"mpl.mpl_figure_comm = function(comm, msg) {\n", | |
" // This is the function which gets called when the mpl process\n", | |
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n", | |
"\n", | |
" var id = msg.content.data.id;\n", | |
" // Get hold of the div created by the display call when the Comm\n", | |
" // socket was opened in Python.\n", | |
" var element = $(\"#\" + id);\n", | |
" var ws_proxy = comm_websocket_adapter(comm)\n", | |
"\n", | |
" function ondownload(figure, format) {\n", | |
" window.open(figure.imageObj.src);\n", | |
" }\n", | |
"\n", | |
" var fig = new mpl.figure(id, ws_proxy,\n", | |
" ondownload,\n", | |
" element.get(0));\n", | |
"\n", | |
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", | |
" // web socket which is closed, not our websocket->open comm proxy.\n", | |
" ws_proxy.onopen();\n", | |
"\n", | |
" fig.parent_element = element.get(0);\n", | |
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", | |
" if (!fig.cell_info) {\n", | |
" console.error(\"Failed to find cell for figure\", id, fig);\n", | |
" return;\n", | |
" }\n", | |
"\n", | |
" var output_index = fig.cell_info[2]\n", | |
" var cell = fig.cell_info[0];\n", | |
"\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype.handle_close = function(fig, msg) {\n", | |
" var width = fig.canvas.width/mpl.ratio\n", | |
" fig.root.unbind('remove')\n", | |
"\n", | |
" // Update the output cell to use the data from the current canvas.\n", | |
" fig.push_to_output();\n", | |
" var dataURL = fig.canvas.toDataURL();\n", | |
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n", | |
" // the notebook keyboard shortcuts fail.\n", | |
" IPython.keyboard_manager.enable()\n", | |
" $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", | |
" fig.close_ws(fig, msg);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.close_ws = function(fig, msg){\n", | |
" fig.send_message('closing', msg);\n", | |
" // fig.ws.close()\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", | |
" // Turn the data on the canvas into data in the output cell.\n", | |
" var width = this.canvas.width/mpl.ratio\n", | |
" var dataURL = this.canvas.toDataURL();\n", | |
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.updated_canvas_event = function() {\n", | |
" // Tell IPython that the notebook contents must change.\n", | |
" IPython.notebook.set_dirty(true);\n", | |
" this.send_message(\"ack\", {});\n", | |
" var fig = this;\n", | |
" // Wait a second, then push the new image to the DOM so\n", | |
" // that it is saved nicely (might be nice to debounce this).\n", | |
" setTimeout(function () { fig.push_to_output() }, 1000);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_toolbar = function() {\n", | |
" var fig = this;\n", | |
"\n", | |
" var nav_element = $('<div/>');\n", | |
" nav_element.attr('style', 'width: 100%');\n", | |
" this.root.append(nav_element);\n", | |
"\n", | |
" // Define a callback function for later on.\n", | |
" function toolbar_event(event) {\n", | |
" return fig.toolbar_button_onclick(event['data']);\n", | |
" }\n", | |
" function toolbar_mouse_event(event) {\n", | |
" return fig.toolbar_button_onmouseover(event['data']);\n", | |
" }\n", | |
"\n", | |
" for(var toolbar_ind in mpl.toolbar_items){\n", | |
" var name = mpl.toolbar_items[toolbar_ind][0];\n", | |
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", | |
" var image = mpl.toolbar_items[toolbar_ind][2];\n", | |
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n", | |
"\n", | |
" if (!name) { continue; };\n", | |
"\n", | |
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", | |
" button.click(method_name, toolbar_event);\n", | |
" button.mouseover(tooltip, toolbar_mouse_event);\n", | |
" nav_element.append(button);\n", | |
" }\n", | |
"\n", | |
" // Add the status bar.\n", | |
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", | |
" nav_element.append(status_bar);\n", | |
" this.message = status_bar[0];\n", | |
"\n", | |
" // Add the close button to the window.\n", | |
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", | |
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", | |
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n", | |
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n", | |
" buttongrp.append(button);\n", | |
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", | |
" titlebar.prepend(buttongrp);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._root_extra_style = function(el){\n", | |
" var fig = this\n", | |
" el.on(\"remove\", function(){\n", | |
"\tfig.close_ws(fig, {});\n", | |
" });\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._canvas_extra_style = function(el){\n", | |
" // this is important to make the div 'focusable\n", | |
" el.attr('tabindex', 0)\n", | |
" // reach out to IPython and tell the keyboard manager to turn it's self\n", | |
" // off when our div gets focus\n", | |
"\n", | |
" // location in version 3\n", | |
" if (IPython.notebook.keyboard_manager) {\n", | |
" IPython.notebook.keyboard_manager.register_events(el);\n", | |
" }\n", | |
" else {\n", | |
" // location in version 2\n", | |
" IPython.keyboard_manager.register_events(el);\n", | |
" }\n", | |
"\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._key_event_extra = function(event, name) {\n", | |
" var manager = IPython.notebook.keyboard_manager;\n", | |
" if (!manager)\n", | |
" manager = IPython.keyboard_manager;\n", | |
"\n", | |
" // Check for shift+enter\n", | |
" if (event.shiftKey && event.which == 13) {\n", | |
" this.canvas_div.blur();\n", | |
" // select the cell after this one\n", | |
" var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", | |
" IPython.notebook.select(index + 1);\n", | |
" }\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_save = function(fig, msg) {\n", | |
" fig.ondownload(fig, null);\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.find_output_cell = function(html_output) {\n", | |
" // Return the cell and output element which can be found *uniquely* in the notebook.\n", | |
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", | |
" // IPython event is triggered only after the cells have been serialised, which for\n", | |
" // our purposes (turning an active figure into a static one), is too late.\n", | |
" var cells = IPython.notebook.get_cells();\n", | |
" var ncells = cells.length;\n", | |
" for (var i=0; i<ncells; i++) {\n", | |
" var cell = cells[i];\n", | |
" if (cell.cell_type === 'code'){\n", | |
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n", | |
" var data = cell.output_area.outputs[j];\n", | |
" if (data.data) {\n", | |
" // IPython >= 3 moved mimebundle to data attribute of output\n", | |
" data = data.data;\n", | |
" }\n", | |
" if (data['text/html'] == html_output) {\n", | |
" return [cell, data, j];\n", | |
" }\n", | |
" }\n", | |
" }\n", | |
" }\n", | |
"}\n", | |
"\n", | |
"// Register the function which deals with the matplotlib target/channel.\n", | |
"// The kernel may be null if the page has been refreshed.\n", | |
"if (IPython.notebook.kernel != null) {\n", | |
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", | |
"}\n" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"<div id='533db62a-6d29-4e30-9552-23d274d2f41b'></div>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[[<Figure size 432x288 with 4 Axes>]]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 132 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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5/3336dixYr873//4+233yY6Opq7776bu+++G6vVyvDhw/n555/JzMxk69atDBgwANAW4A0GQ56aZ8WKFalUqZJfzTMyMpIePXpgMBioVq2aI8coODXAAwcOsG3bNhYuXAho06j+7vWVV17Jnj17HPUXL16kSZMmbppnzZo1HedOTU2lZs2abufzHId9u0uXLg4H6+rVq1OlShW3/uZFsL6155dQGaedUBpvsI01OzubUaNGsXbtWqpVq1bifRdCbHPZ/VxXuHIjArgM6AC0A6QQolFx9c/XxUuF0n4jO336tJuGGR0dzeHDh2nXrh1Hjx7lxIkTnDhxgmPHjjna9OjRgyeffJIbbriBrKwsR5v69bUAgbGxsZw7d4569epxyy23uGVQAfLUPOvXr8/mzZv9ap42m80xHWswGDh06BCZmZns3LkTo9FIZmYmDRs2pF+/fvTs2dNx7czMTDIzM6lUqRIxMTGOczdu3JgNGzaQlpbG8ePHiY6OJisri6wsZ6zltm3bsnjxYurWrcvixYtp27atX80zJycHm81GTEwMaWlpnDx5ErPZTGZmJn/88QdXXXVVwN97sL6155dQGaedUBpvsIz1iSeeYMWKFW5lVWtULXHNU0p5Yz4POwoskVLagEQhhBWIA1Jxj9paTy/DT/lJoJoQIkLXPl3b+yUoDYYywjIYXn04M0/P5ArrFQU+z99//02/fv2w2WxUqlSJGTNmULlyZbp27Urv3r1p27at29tX//79ufHGG1m1ahWghbAaNWoUly5dIjw8nNq1azNy5EhiYmIKlEHl5ptv5pNPPgmo79dccw2VKlWib9++dOjQgYgI7at84YUXGD16NF999RU2m4077riDp59+mrfffpunnnrKzZq2WrVqDBkyhL59+2IwGBzCfufOnfz6668888wzCCF4+eWX6dOnD7Vr12batGkALF++nHnz5pGenk7//v155ZVXqFOnDo8++igVK1bEYrEwefJkh7Xer7/+ytSpUwMam0KhKBnS09O9BCfA/t37S6E3+eYH4Dbgf7pBUBSQCSwDvhVCTEMzGGoKJAIGoKluWZuKZlQ0UEppE0L8D+iHZnE7BFia18XLZFaVvBhTZQzfxH7D4AuDmXhuYhF2K3dOnDjB8OHDWbRoUbFdY8aMGbRp04bOnTu7lRf2LfaZZ55h5sxc17+LjYK4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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 4 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "fqtzatAwhIDB" | |
}, | |
"source": [ | |
"class SupportAndResistance:\n", | |
" def __init__(self):\n", | |
" self.period = 10\n", | |
" # self.data = data\n", | |
"\n", | |
" def identify_levels(self, data):\n", | |
" threshold = (data['High'] - data['Low']).mean()\n", | |
" result = []\n", | |
" levels = self.get_reversal_prices(data)\n", | |
" print(f\"Range==> : {threshold:.2f}, total pivots: {len(levels)}\")\n", | |
" i = 0\n", | |
" while i < len(levels):\n", | |
" price = levels[i]\n", | |
" j = i + 1\n", | |
" while j < len(levels):\n", | |
" if abs(levels[j] - price) <= threshold:\n", | |
" price = (price + levels[j]) / 2\n", | |
" else:\n", | |
" break\n", | |
" j += 1\n", | |
" result.append(round(price,1))\n", | |
" i = j\n", | |
" return pd.Series(result)\n", | |
"\n", | |
" def plot(self, data):\n", | |
" # line chart\n", | |
" fig_line = px.line(data, x=data.index, y=\"Close\")\n", | |
" levels = self.get_reversal_prices(data)\n", | |
" zones = self.identify_levels(data)\n", | |
"\n", | |
" fig = go.Figure(\n", | |
" [\n", | |
" go.Candlestick(\n", | |
" x=data.index,\n", | |
" open=data.Open,\n", | |
" high=data.High,\n", | |
" low=data.Low,\n", | |
" close=data.Close,\n", | |
" name='Chart'\n", | |
" ),\n", | |
" go.Scatter(\n", | |
" x=levels.index,\n", | |
" y=levels,\n", | |
" mode=\"markers\",\n", | |
" marker_color=\"blue\",\n", | |
" name=\"Pivot points\"\n", | |
" )\n", | |
" ]\n", | |
" )\n", | |
" threshold = (data['High'] - data['Low']).mean()\n", | |
" noise = threshold / 4\n", | |
" for z in zones:\n", | |
" col = \"green\" if z[0] < data['Close'][-1] else \"red\"\n", | |
" fig.add_hrect(y0=z[0]-noise, y1=z[0]+noise, line_width=0,fillcolor=col, opacity=(1 - .8 / z[1]))\n", | |
"\n", | |
" fig.show()\n", | |
"\n", | |
" def get_reversal_prices(self, data):\n", | |
" down = self.get_downtrend_reversal_prices(data)\n", | |
" up = self.get_uptrend_reversal_prices(data)\n", | |
" return pd.concat([down, up]).rename(\"Level\").sort_values()\n", | |
"\n", | |
" def get_downtrend_reversal_prices(self, data):\n", | |
" prev_low = data['Low'].rolling(self.period).min().shift(1)\n", | |
" next_low = data['Low'].rolling(self.period).min().shift(-self.period + 1)\n", | |
" mask = (data['Low'] <= prev_low) & (data['Low'] <= next_low)\n", | |
" return data['Low'].loc[mask]\n", | |
"\n", | |
" def get_uptrend_reversal_prices(self, data):\n", | |
" prev_high = data['High'].rolling(self.period).max().shift(1)\n", | |
" next_high = data['High'].rolling(self.period).max().shift(-self.period + 1)\n", | |
" mask = (data['High'] >= prev_high) & (data['High'] >= next_high)\n", | |
" return data['High'].loc[mask]\n", | |
"" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "w5ilXKviwa8W", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
}, | |
"outputId": "1080b95f-6613-4b2b-9a84-744cf2d5f210" | |
}, | |
"source": [ | |
"snr = SupportAndResistance()\n", | |
"levels = snr.identify_levels(stock_data.loc[\"2016-01-01\": \"2018-12-31\"])" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Range==> : 88.90, total pivots: 41\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 88 | |
}, | |
"id": "xS7T_9JawipF", | |
"outputId": "2768c3da-2c5a-4420-c34f-c77710ae01f6" | |
}, | |
"source": [ | |
"!pip install plotly --upgrade\n", | |
"import plotly\n", | |
"plotly.__version__" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Requirement already satisfied: plotly in /usr/local/lib/python3.7/dist-packages (5.4.0)\n", | |
"Requirement already satisfied: six in /usr/local/lib/python3.7/dist-packages (from plotly) (1.15.0)\n", | |
"Requirement already satisfied: tenacity>=6.2.0 in /usr/local/lib/python3.7/dist-packages (from plotly) (8.0.1)\n" | |
] | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"application/vnd.google.colaboratory.intrinsic+json": { | |
"type": "string" | |
}, | |
"text/plain": [ | |
"'4.4.1'" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 100 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "EupmYMiF4pMs", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
}, | |
"outputId": "46610e34-e4b4-4f14-e427-a02bb6ab0f84" | |
}, | |
"source": [ | |
"levels.loc[levels > 650].max()" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"11760.2" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 101 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "PLNJVBB7mjPq" | |
}, | |
"source": [ | |
"### Nifty Buy at Dip strategy" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "eayJroWydG4k", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 300 | |
}, | |
"outputId": "1de8908f-2247-40a7-a843-e52d9c62f730" | |
}, | |
"source": [ | |
"data = get_stock_data(\"^NSEI\", \"2010-1-1\", \"2021-12-31\")\n", | |
"data.describe()" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>Open</th>\n", | |
" <th>High</th>\n", | |
" <th>Low</th>\n", | |
" <th>Close</th>\n", | |
" <th>Adj Close</th>\n", | |
" <th>Volume</th>\n", | |
" <th>Dividends</th>\n", | |
" <th>Stock Splits</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>count</th>\n", | |
" <td>2920.000000</td>\n", | |
" <td>2920.000000</td>\n", | |
" <td>2920.000000</td>\n", | |
" <td>2920.000000</td>\n", | |
" <td>2920.000000</td>\n", | |
" <td>2.920000e+03</td>\n", | |
" <td>2920.0</td>\n", | |
" <td>2920.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>mean</th>\n", | |
" <td>8688.583185</td>\n", | |
" <td>8733.156524</td>\n", | |
" <td>8628.610120</td>\n", | |
" <td>8681.498716</td>\n", | |
" <td>8681.498716</td>\n", | |
" <td>2.239973e+05</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>std</th>\n", | |
" <td>3120.960429</td>\n", | |
" <td>3130.271741</td>\n", | |
" <td>3101.844054</td>\n", | |
" <td>3117.004648</td>\n", | |
" <td>3117.004648</td>\n", | |
" <td>2.254740e+05</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>min</th>\n", | |
" <td>4623.150000</td>\n", | |
" <td>4623.150000</td>\n", | |
" <td>4531.150000</td>\n", | |
" <td>4544.200000</td>\n", | |
" <td>4544.200000</td>\n", | |
" <td>0.000000e+00</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>25%</th>\n", | |
" <td>5872.312500</td>\n", | |
" <td>5906.475000</td>\n", | |
" <td>5827.350000</td>\n", | |
" <td>5868.275000</td>\n", | |
" <td>5868.275000</td>\n", | |
" <td>0.000000e+00</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>50%</th>\n", | |
" <td>8260.275000</td>\n", | |
" <td>8307.425000</td>\n", | |
" <td>8215.500000</td>\n", | |
" <td>8261.700000</td>\n", | |
" <td>8261.700000</td>\n", | |
" <td>1.728000e+05</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>75%</th>\n", | |
" <td>10752.675000</td>\n", | |
" <td>10794.912500</td>\n", | |
" <td>10691.337500</td>\n", | |
" <td>10741.400000</td>\n", | |
" <td>10741.400000</td>\n", | |
" <td>2.958250e+05</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>max</th>\n", | |
" <td>18602.350000</td>\n", | |
" <td>18604.450000</td>\n", | |
" <td>18445.300000</td>\n", | |
" <td>18477.050000</td>\n", | |
" <td>18477.050000</td>\n", | |
" <td>1.811000e+06</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" Open High ... Dividends Stock Splits\n", | |
"count 2920.000000 2920.000000 ... 2920.0 2920.0\n", | |
"mean 8688.583185 8733.156524 ... 0.0 0.0\n", | |
"std 3120.960429 3130.271741 ... 0.0 0.0\n", | |
"min 4623.150000 4623.150000 ... 0.0 0.0\n", | |
"25% 5872.312500 5906.475000 ... 0.0 0.0\n", | |
"50% 8260.275000 8307.425000 ... 0.0 0.0\n", | |
"75% 10752.675000 10794.912500 ... 0.0 0.0\n", | |
"max 18602.350000 18604.450000 ... 0.0 0.0\n", | |
"\n", | |
"[8 rows x 8 columns]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 102 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "lUkAGSbfrHoB" | |
}, | |
"source": [ | |
"cummax = data['Close'].cummax()\n", | |
"max_drawdown = data['Close'].cummax() - data['Close']\n", | |
"max_drawdown_perc = round(((data['Close'].cummax() - data['Close']) / data['Close'].cummax()) * 100, 2)" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "hBdN1NAMmt5Q" | |
}, | |
"source": [ | |
"max_drawdown = data['Close'].cummax() - data['Close']" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "6F6Hrb6enuOk" | |
}, | |
"source": [ | |
"max_drawdown_perc = round((max_drawdown / data['Close'].cummax()) * 100, 2)" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "HP84OZN_o0eJ", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
}, | |
"outputId": "f9a62aed-d0fd-4d78-e8c2-ffdd6fdf9ff1" | |
}, | |
"source": [ | |
"result = []\n", | |
"mx_draw = 0\n", | |
"mx_draw_index = None\n", | |
"for i in range(len(data)):\n", | |
" if max_drawdown_perc[i] > mx_draw:\n", | |
" mx_draw = max(mx_draw, max_drawdown_perc[i])\n", | |
" mx_draw_index = i\n", | |
" if data['Close'][i] >= cummax[i] and mx_draw >= 1:\n", | |
" time_taken = i - mx_draw_index\n", | |
" result.append((mx_draw, data.index[mx_draw_index].strftime('%d-%m-%Y'), data.index[i].strftime('%d-%m-%Y'), (data.index[i] - data.index[mx_draw_index]).days))\n", | |
" mx_draw = 0\n", | |
" mx_draw_index = None\n", | |
"len(result)" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"49" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 106 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "ry90DOc6pEXv", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 867 | |
}, | |
"outputId": "45fe136d-994a-4d83-936d-86fec2222196" | |
}, | |
"source": [ | |
"result.sort()\n", | |
"result" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[(1.0, '13-08-2018', '17-08-2018', 4),\n", | |
" (1.01, '31-03-2010', '05-04-2010', 5),\n", | |
" (1.18, '26-12-2019', '02-01-2020', 7),\n", | |
" (1.19, '01-07-2021', '07-07-2021', 6),\n", | |
" (1.2, '09-07-2021', '15-07-2021', 6),\n", | |
" (1.29, '19-11-2020', '24-11-2020', 5),\n", | |
" (1.31, '17-08-2010', '19-08-2010', 2),\n", | |
" (1.32, '20-09-2021', '23-09-2021', 3),\n", | |
" (1.41, '22-03-2017', '30-03-2017', 8),\n", | |
" (1.45, '23-05-2019', '24-05-2019', 1),\n", | |
" (1.5, '30-07-2010', '04-08-2010', 5),\n", | |
" (1.51, '25-11-2020', '01-12-2020', 6),\n", | |
" (1.54, '12-10-2010', '13-10-2010', 1),\n", | |
" (1.73, '24-05-2017', '26-05-2017', 2),\n", | |
" (1.74, '19-04-2017', '25-04-2017', 6),\n", | |
" (1.78, '16-04-2014', '21-04-2014', 5),\n", | |
" (1.81, '01-10-2021', '08-10-2021', 7),\n", | |
" (1.83, '20-07-2021', '03-08-2021', 14),\n", | |
" (1.86, '30-05-2014', '03-06-2014', 4),\n", | |
" (1.9, '28-06-2017', '10-07-2017', 12),\n", | |
" (2.13, '23-06-2014', '02-07-2014', 9),\n", | |
" (2.15, '18-01-2021', '20-01-2021', 2),\n", | |
" (2.35, '06-01-2020', '13-01-2020', 7),\n", | |
" (2.42, '10-12-2019', '17-12-2019', 7),\n", | |
" (2.55, '31-08-2010', '06-09-2010', 6),\n", | |
" (2.75, '07-05-2014', '09-05-2014', 2),\n", | |
" (3.14, '21-12-2020', '28-12-2020', 7),\n", | |
" (3.35, '08-08-2014', '18-08-2014', 10),\n", | |
" (3.91, '06-12-2017', '19-12-2017', 13),\n", | |
" (3.99, '11-08-2017', '18-09-2017', 38),\n", | |
" (4.04, '20-10-2010', '04-11-2010', 15),\n", | |
" (4.11, '27-09-2017', '13-10-2017', 16),\n", | |
" (4.28, '14-07-2014', '23-07-2014', 9),\n", | |
" (4.76, '09-02-2015', '02-03-2015', 21),\n", | |
" (5.04, '13-11-2013', '09-12-2013', 26),\n", | |
" (5.21, '16-10-2014', '31-10-2014', 15),\n", | |
" (5.42, '13-05-2019', '20-05-2019', 7),\n", | |
" (5.7, '04-02-2014', '06-03-2014', 30),\n", | |
" (6.5, '17-12-2014', '20-01-2015', 34),\n", | |
" (6.65, '20-04-2021', '27-05-2021', 37),\n", | |
" (6.9, '29-01-2021', '02-02-2021', 4),\n", | |
" (10.17, '23-03-2018', '24-07-2018', 123),\n", | |
" (10.57, '25-05-2010', '12-07-2010', 48),\n", | |
" (10.66, '05-02-2010', '26-03-2010', 49),\n", | |
" (11.45, '19-09-2019', '27-11-2019', 69),\n", | |
" (14.55, '26-10-2018', '16-04-2019', 172),\n", | |
" (22.52, '25-02-2016', '14-03-2017', 383),\n", | |
" (27.89, '20-12-2011', '01-11-2013', 682),\n", | |
" (38.44, '23-03-2020', '09-11-2020', 231)]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 107 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "DWvI7IG9rZyV" | |
}, | |
"source": [ | |
"buy_drawdown_levels = [2, 3, 4, 5, 6, 10, 14,20, 30]" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
}, | |
"id": "GS2R7nXNzbHq", | |
"outputId": "2131889d-4322-4f3f-96e5-c39eed55b48e" | |
}, | |
"source": [ | |
"invest_amount = [5000, 10000]\n", | |
"for i in range(len(buy_drawdown_levels) - 2):\n", | |
" invest_amount.append(invest_amount[-1] + invest_amount[-2])\n", | |
"invest_amount" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[5000, 10000, 15000, 25000, 40000, 65000, 105000, 170000, 275000]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 109 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "-Yq9nUIV0eCz" | |
}, | |
"source": [ | |
"lst = []\n", | |
"for i in range(len(buy_drawdown_levels)):\n", | |
" lst.append((buy_drawdown_levels[i], invest_amount[i]))\n", | |
"df = pd.DataFrame(lst, columns=['drawdown_perc', 'invest_amount'])" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 331 | |
}, | |
"id": "ol8ENQEW1L9n", | |
"outputId": "69fee592-3318-4296-e74c-1b3f7748cf2c" | |
}, | |
"source": [ | |
"df['sell_amount'] = df['invest_amount'] * 100 / (100 - df['drawdown_perc'])\n", | |
"df['profit'] = df['sell_amount'] - df['invest_amount']\n", | |
"df['profit_perc'] = (df['profit'] * 100) / df['invest_amount']\n", | |
"df['occurence'] = [6,4,4,4,3,4,1,2,2]\n", | |
"df['cum_occ'] = df.loc[::-1, 'occurence'].cumsum()[::-1]\n", | |
"df" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>drawdown_perc</th>\n", | |
" <th>invest_amount</th>\n", | |
" <th>sell_amount</th>\n", | |
" <th>profit</th>\n", | |
" <th>profit_perc</th>\n", | |
" <th>occurence</th>\n", | |
" <th>cum_occ</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>2</td>\n", | |
" <td>5000</td>\n", | |
" <td>5102.040816</td>\n", | |
" <td>102.040816</td>\n", | |
" <td>2.040816</td>\n", | |
" <td>6</td>\n", | |
" <td>30</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>3</td>\n", | |
" <td>10000</td>\n", | |
" <td>10309.278351</td>\n", | |
" <td>309.278351</td>\n", | |
" <td>3.092784</td>\n", | |
" <td>4</td>\n", | |
" <td>24</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>4</td>\n", | |
" <td>15000</td>\n", | |
" <td>15625.000000</td>\n", | |
" <td>625.000000</td>\n", | |
" <td>4.166667</td>\n", | |
" <td>4</td>\n", | |
" <td>20</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>5</td>\n", | |
" <td>25000</td>\n", | |
" <td>26315.789474</td>\n", | |
" <td>1315.789474</td>\n", | |
" <td>5.263158</td>\n", | |
" <td>4</td>\n", | |
" <td>16</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>6</td>\n", | |
" <td>40000</td>\n", | |
" <td>42553.191489</td>\n", | |
" <td>2553.191489</td>\n", | |
" <td>6.382979</td>\n", | |
" <td>3</td>\n", | |
" <td>12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>10</td>\n", | |
" <td>65000</td>\n", | |
" <td>72222.222222</td>\n", | |
" <td>7222.222222</td>\n", | |
" <td>11.111111</td>\n", | |
" <td>4</td>\n", | |
" <td>9</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>14</td>\n", | |
" <td>105000</td>\n", | |
" <td>122093.023256</td>\n", | |
" <td>17093.023256</td>\n", | |
" <td>16.279070</td>\n", | |
" <td>1</td>\n", | |
" <td>5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>20</td>\n", | |
" <td>170000</td>\n", | |
" <td>212500.000000</td>\n", | |
" <td>42500.000000</td>\n", | |
" <td>25.000000</td>\n", | |
" <td>2</td>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>30</td>\n", | |
" <td>275000</td>\n", | |
" <td>392857.142857</td>\n", | |
" <td>117857.142857</td>\n", | |
" <td>42.857143</td>\n", | |
" <td>2</td>\n", | |
" <td>2</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" drawdown_perc invest_amount sell_amount ... profit_perc occurence cum_occ\n", | |
"0 2 5000 5102.040816 ... 2.040816 6 30\n", | |
"1 3 10000 10309.278351 ... 3.092784 4 24\n", | |
"2 4 15000 15625.000000 ... 4.166667 4 20\n", | |
"3 5 25000 26315.789474 ... 5.263158 4 16\n", | |
"4 6 40000 42553.191489 ... 6.382979 3 12\n", | |
"5 10 65000 72222.222222 ... 11.111111 4 9\n", | |
"6 14 105000 122093.023256 ... 16.279070 1 5\n", | |
"7 20 170000 212500.000000 ... 25.000000 2 4\n", | |
"8 30 275000 392857.142857 ... 42.857143 2 2\n", | |
"\n", | |
"[9 rows x 7 columns]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 111 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
}, | |
"id": "SgX1Aj5y1MeO", | |
"outputId": "4a133c71-8955-46a1-9211-8a3311375768" | |
}, | |
"source": [ | |
"((df['sell_amount'].sum() - df['invest_amount'].sum()) * 100) / df['invest_amount'].sum()" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"26.701082882403796" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 112 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
}, | |
"id": "dwH81hX84nE_", | |
"outputId": "bf6cc912-d105-44aa-a9bc-aa436ee780ef" | |
}, | |
"source": [ | |
"df['sell_amount'].sum() - df['invest_amount'].sum()" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"189577.68846506695" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 113 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
}, | |
"id": "oMnpBJIn5LVp", | |
"outputId": "64a65728-4cca-47b8-9ac9-41ec7f9d7e7f" | |
}, | |
"source": [ | |
"(df['profit'] * df['cum_occ']).sum()" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"630854.2363468102" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 114 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "c99XTrY-6XqM", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
}, | |
"outputId": "b7d5028a-d07f-49e2-e20f-21513af5a882" | |
}, | |
"source": [ | |
"list(df['invest_amount'])" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[5000, 10000, 15000, 25000, 40000, 65000, 105000, 170000, 275000]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 115 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "FCsw7H1J0wOO" | |
}, | |
"source": [ | |
"plt.plot([1,2,3])\n", | |
"plt.show()" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "c7ZQoGlhjJ5h" | |
}, | |
"source": [ | |
"plt.plot([1, 2, 3, 4], [1, 4, 2, 3])\n", | |
"plt.show()" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "hSXNlErylXIv" | |
}, | |
"source": [ | |
"### SIP Strategy" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "UqCm0VFSjpGq" | |
}, | |
"source": [ | |
"symbol = '^NSEI' # refer yahoo finance for symbol\n", | |
"start = '2010-01-01'\n", | |
"end = '2021-12-20'\n", | |
"\n", | |
"# fetch stock data from yahoo finance API\n", | |
"data = get_stock_data(symbol, start, end)" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "dhKukzP7ldFh", | |
"outputId": "0304635e-2ac2-43d3-b132-8e5b0e0003ee" | |
}, | |
"source": [ | |
"invested_amount = data['Close'].sum()\n", | |
"portfolio_value = data['Close'][-1] * data['Close'].count()\n", | |
"print(f\"Invested: {invested_amount}, Value: {portfolio_value}\")" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Invested: 25349976.25, Value: 50214364.0\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "Z7z2nsf9mmpG", | |
"outputId": "6192be89-e03d-4bd9-c07c-8ce6c79979b7" | |
}, | |
"source": [ | |
"from datetime import datetime\n", | |
"then = datetime(2010, 1, 1) # Random date in the past\n", | |
"now = datetime(2019, 12, 31) # Now\n", | |
"duration = now - then # For build-in functions\n", | |
"duration_in_s = duration.total_seconds()\n", | |
"year = divmod(duration_in_s, 31536000)[0]\n" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"10.0" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 138 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "M7vA5jf-nwpD", | |
"outputId": "ff99ae08-d527-4c3f-9c0c-b485d640a3af" | |
}, | |
"source": [ | |
"cagr = round(((data['Close'][-1] / data['Close'][0]) ** (1 / year) - 1) * 100, 2)\n", | |
"abs_return = round((data['Close'][-1] / data['Close'][0]) * 100, 2)\n", | |
"abs_return" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"328.67" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 153 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"### 15 Minute Marubozu Strategy\n", | |
"\n", | |
"On a 15 Minute chart if a marubozu candle is formed than take a position in same direction." | |
], | |
"metadata": { | |
"id": "l7IYgFPlePqY" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"display_line_chart(stock_data)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 542 | |
}, | |
"id": "FicovvBueO6G", | |
"outputId": "0f493f14-4f0f-4e05-cc48-105a3426acc8" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"<html>\n", | |
"<head><meta charset=\"utf-8\" /></head>\n", | |
"<body>\n", | |
" <div> <script src=\"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG\"></script><script type=\"text/javascript\">if (window.MathJax) {MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}</script> <script type=\"text/javascript\">window.PlotlyConfig = {MathJaxConfig: 'local'};</script>\n", | |
" <script src=\"https://cdn.plot.ly/plotly-2.8.3.min.js\"></script> <div id=\"d2c150dd-810c-49dc-889c-cb2c87d6a9a0\" class=\"plotly-graph-div\" style=\"height:525px; width:100%;\"></div> <script type=\"text/javascript\"> window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById(\"d2c150dd-810c-49dc-889c-cb2c87d6a9a0\")) { Plotly.newPlot( \"d2c150dd-810c-49dc-889c-cb2c87d6a9a0\", [{\"hovertemplate\":\"Datetime=%{x}<br>Close=%{y}<extra></extra>\",\"legendgroup\":\"\",\"line\":{\"color\":\"#636efa\",\"dash\":\"solid\"},\"marker\":{\"symbol\":\"circle\"},\"mode\":\"lines\",\"name\":\"\",\"orientation\":\"v\",\"showlegend\":false,\"x\":[\"2022-01-03T09:15:00+05:30\",\"2022-01-03T09:30:00+05:30\",\"2022-01-03T09:45:00+05:30\",\"2022-01-03T10:00:00+05:30\",\"2022-01-03T10:15:00+05:30\",\"2022-01-03T10:30:00+05:30\",\"2022-01-03T10:45:00+05:30\",\"2022-01-03T11:00:00+05:30\",\"2022-01-03T11:15:00+05:30\",\"2022-01-03T11:30:00+05:30\",\"2022-01-03T11:45:00+05:30\",\"2022-01-03T12:00:00+05:30\",\"2022-01-03T12:15:00+05:30\",\"2022-01-03T12:30:00+05:30\",\"2022-01-03T12:45:00+05:30\",\"2022-01-03T13:00:00+05:30\",\"2022-01-03T13:15:00+05:30\",\"2022-01-03T13:30:00+05:30\",\"2022-01-03T13:45:00+05:30\",\"2022-01-03T14:00:00+05:30\",\"2022-01-03T14:15:00+05:30\",\"2022-01-03T14:30:00+05:30\",\"2022-01-03T14:45:00+05:30\",\"2022-01-03T15:00:00+05:30\",\"2022-01-03T15:15:00+05:30\",\"2022-01-04T09:15:00+05:30\",\"2022-01-04T09:30:00+05:30\",\"2022-01-04T09:45:00+05:30\",\"2022-01-04T10:00:00+05:30\",\"2022-01-04T10:15:00+05:30\",\"2022-01-04T10:30:00+05:30\",\"2022-01-04T10:45:00+05:30\",\"2022-01-04T11:00:00+05:30\",\"2022-01-04T11:15:00+05:30\",\"2022-01-04T11:30:00+05:30\",\"2022-01-04T11:45:00+05:30\",\"2022-01-04T12:00:00+05:30\",\"2022-01-04T12:15:00+05:30\",\"2022-01-04T12:30:00+05:30\",\"2022-01-04T12:45:00+05:30\",\"2022-01-04T13:00:00+05:30\",\"2022-01-04T13:15:00+05:30\",\"2022-01-04T13:30:00+05:30\",\"2022-01-04T13:45:00+05:30\",\"2022-01-04T14:00:00+05:30\",\"2022-01-04T14:15:00+05:30\",\"2022-01-04T14:30:00+05:30\",\"2022-01-04T14:45:00+05:30\",\"2022-01-04T15:00:00+05:30\",\"2022-01-04T15:15:00+05:30\",\"2022-01-05T09:15:00+05:30\",\"2022-01-05T09:30:00+05:30\",\"2022-01-05T09:45:00+05:30\",\"2022-01-05T10:00:00+05:30\",\"2022-01-05T10:15:00+05:30\",\"2022-01-05T10:30:00+05:30\",\"2022-01-05T10:45:00+05:30\",\"2022-01-05T11:00:00+05:30\",\"2022-01-05T11:15:00+05:30\",\"2022-01-05T11:30:00+05:30\",\"2022-01-05T11:45:00+05:30\",\"2022-01-05T12:00:00+05:30\",\"2022-01-05T12:15:00+05:30\",\"2022-01-05T12:30:00+05:30\",\"2022-01-05T12:45:00+05:30\",\"2022-01-05T13:00:00+05:30\",\"2022-01-05T13:15:00+05:30\",\"2022-01-05T13:30:00+05:30\",\"2022-01-05T13:45:00+05:30\",\"2022-01-05T14:00:00+05:30\",\"2022-01-05T14:15:00+05:30\",\"2022-01-05T14:30:00+05:30\",\"2022-01-05T14:45:00+05:30\",\"2022-01-05T15:00:00+05:30\",\"2022-01-05T15:15:00+05:30\",\"2022-01-06T09:15:00+05:30\",\"2022-01-06T09:30:00+05:30\",\"2022-01-06T09:45:00+05:30\",\"2022-01-06T10:00:00+05:30\",\"2022-01-06T10:15:00+05:30\",\"2022-01-06T10:30:00+05:30\",\"2022-01-06T10:45:00+05:30\",\"2022-01-06T11:00:00+05:30\",\"2022-01-06T11:15:00+05:30\",\"2022-01-06T11:30:00+05:30\",\"2022-01-06T11:45:00+05:30\",\"2022-01-06T12:00:00+05:30\",\"2022-01-06T12:15:00+05:30\",\"2022-01-06T12:30:00+05:30\",\"2022-01-06T12:45:00+05:30\",\"2022-01-06T13:00:00+05:30\",\"2022-01-06T13:15:00+05:30\",\"2022-01-06T13:30:00+05:30\",\"2022-01-06T13:45:00+05:30\",\"2022-01-06T14:00:00+05:30\",\"2022-01-06T14:15:00+05:30\",\"2022-01-06T14:30:00+05:30\",\"2022-01-06T14:45:00+05:30\",\"2022-01-06T15:00:00+05:30\",\"2022-01-06T15:15:00+05:30\",\"2022-01-07T09:15:00+05:30\",\"2022-01-07T09:30:00+05:30\",\"2022-01-07T09:45:00+05:30\",\"2022-01-07T10:00:00+05:30\",\"2022-01-07T10:15:00+05:30\",\"2022-01-07T10:30:00+05:30\",\"2022-01-07T10:45:00+05:30\",\"2022-01-07T11:00:00+05:30\",\"2022-01-07T11:15:00+05:30\",\"2022-01-07T11:30:00+05:30\",\"2022-01-07T11:45:00+05:30\",\"2022-01-07T12:00:00+05:30\",\"2022-01-07T12:15:00+05:30\",\"2022-01-07T12:30:00+05:30\",\"2022-01-07T12:45:00+05:30\",\"2022-01-07T13:00:00+05:30\",\"2022-01-07T13:15:00+05:30\",\"2022-01-07T13:30:00+05:30\",\"2022-01-07T13:45:00+05:30\",\"2022-01-07T14:00:00+05:30\",\"2022-01-07T14:15:00+05:30\",\"2022-01-07T14:30:00+05:30\",\"2022-01-07T14:45:00+05:30\",\"2022-01-07T15:00:00+05:30\",\"2022-01-07T15:15:00+05:30\",\"2022-01-10T09:15:00+05:30\",\"2022-01-10T09:30:00+05:30\",\"2022-01-10T09:45:00+05:30\",\"2022-01-10T10:00:00+05:30\",\"2022-01-10T10:15:00+05:30\",\"2022-01-10T10:30:00+05:30\",\"2022-01-10T10:45:00+05:30\",\"2022-01-10T11:00:00+05:30\",\"2022-01-10T11:15:00+05:30\",\"2022-01-10T11:30:00+05:30\",\"2022-01-10T11:45:00+05:30\",\"2022-01-10T12:00:00+05:30\",\"2022-01-10T12:15:00+05:30\",\"2022-01-10T12:30:00+05:30\",\"2022-01-10T12:45:00+05:30\",\"2022-01-10T13:00:00+05:30\",\"2022-01-10T13:15:00+05:30\",\"2022-01-10T13:30:00+05:30\",\"2022-01-10T13:45:00+05:30\",\"2022-01-10T14:00:00+05:30\",\"2022-01-10T14:15:00+05:30\",\"2022-01-10T14:30:00+05:30\",\"2022-01-10T14:45:00+05:30\",\"2022-01-10T15:00:00+05:30\",\"2022-01-10T15:15:00+05:30\",\"2022-01-11T09:15:00+05:30\",\"2022-01-11T09:30:00+05:30\",\"2022-01-11T09:45:00+05:30\",\"2022-01-11T10:00:00+05:30\",\"2022-01-11T10:15:00+05:30\",\"2022-01-11T10:30:00+05:30\",\"2022-01-11T10:45:00+05:30\",\"2022-01-11T11:00:00+05:30\",\"2022-01-11T11:15:00+05:30\",\"2022-01-11T11:30:00+05:30\",\"2022-01-11T11:45:00+05:30\",\"2022-01-11T12:00:00+05:30\",\"2022-01-11T12:15:00+05:30\",\"2022-01-11T12:30:00+05:30\",\"2022-01-11T12:45:00+05:30\",\"2022-01-11T13:00:00+05:30\",\"2022-01-11T13:15:00+05:30\",\"2022-01-11T13:30:00+05:30\",\"2022-01-11T13:45:00+05:30\",\"2022-01-11T14:00:00+05:30\",\"2022-01-11T14:15:00+05:30\",\"2022-01-11T14:30:00+05:30\",\"2022-01-11T14:45:00+05:30\",\"2022-01-11T15:00:00+05:30\",\"2022-01-11T15:15:00+05:30\",\"2022-01-12T09:15:00+05:30\",\"2022-01-12T09:30:00+05:30\",\"2022-01-12T09:45:00+05:30\",\"2022-01-12T10:00:00+05:30\",\"2022-01-12T10:15:00+05:30\",\"2022-01-12T10:30:00+05:30\",\"2022-01-12T10:45:00+05:30\",\"2022-01-12T11:00:00+05:30\",\"2022-01-12T11:15:00+05:30\",\"2022-01-12T11:30:00+05:30\",\"2022-01-12T11:45:00+05:30\",\"2022-01-12T12:00:00+05:30\",\"2022-01-12T12:15:00+05:30\",\"2022-01-12T12:30:00+05:30\",\"2022-01-12T12:45:00+05:30\",\"2022-01-12T13:00:00+05:30\",\"2022-01-12T13:15:00+05:30\",\"2022-01-12T13:30:00+05:30\",\"2022-01-12T13:45:00+05:30\",\"2022-01-12T14:00:00+05:30\",\"2022-01-12T14:15:00+05:30\",\"2022-01-12T14:30:00+05:30\",\"2022-01-12T14:45:00+05:30\",\"2022-01-12T15:00:00+05:30\",\"2022-01-12T15:15:00+05:30\",\"2022-01-13T09:15:00+05:30\",\"2022-01-13T09:30:00+05:30\",\"2022-01-13T09:45:00+05:30\",\"2022-01-13T10:00:00+05:30\",\"2022-01-13T10:15:00+05:30\",\"2022-01-13T10:30:00+05:30\",\"2022-01-13T10:45:00+05:30\",\"2022-01-13T11:00:00+05:30\",\"2022-01-13T11:15:00+05:30\",\"2022-01-13T11:30:00+05:30\",\"2022-01-13T11:45:00+05:30\",\"2022-01-13T12:00:00+05:30\",\"2022-01-13T12:15:00+05:30\",\"2022-01-13T12:30:00+05:30\",\"2022-01-13T12:45:00+05:30\",\"2022-01-13T13:00:00+05:30\",\"2022-01-13T13:15:00+05:30\",\"2022-01-13T13:30:00+05:30\",\"2022-01-13T13:45:00+05:30\",\"2022-01-13T14:00:00+05:30\",\"2022-01-13T14:15:00+05:30\",\"2022-01-13T14:30:00+05:30\",\"2022-01-13T14:45:00+05:30\",\"2022-01-13T15:00:00+05:30\",\"2022-01-13T15:15:00+05:30\",\"2022-01-14T09:15:00+05:30\",\"2022-01-14T09:30:00+05:30\",\"2022-01-14T09:45:00+05:30\",\"2022-01-14T10:00:00+05:30\",\"2022-01-14T10:15:00+05:30\",\"2022-01-14T10:30:00+05:30\",\"2022-01-14T10:45:00+05:30\",\"2022-01-14T11:00:00+05:30\",\"2022-01-14T11:15:00+05:30\",\"2022-01-14T11:30:00+05:30\",\"2022-01-14T11:45:00+05:30\",\"2022-01-14T12:00:00+05:30\",\"2022-01-14T12:15:00+05:30\",\"2022-01-14T12:30:00+05:30\",\"2022-01-14T12:45:00+05:30\",\"2022-01-14T13:00:00+05:30\",\"2022-01-14T13:15:00+05:30\",\"2022-01-14T13:30:00+05:30\",\"2022-01-14T13:45:00+05:30\",\"2022-01-14T14:00:00+05:30\",\"2022-01-14T14:15:00+05:30\",\"2022-01-14T14:30:00+05:30\",\"2022-01-14T14:45:00+05:30\",\"2022-01-14T15:00:00+05:30\",\"2022-01-14T15:15:00+05:30\",\"2022-01-17T09:15:00+05:30\",\"2022-01-17T09:30:00+05:30\",\"2022-01-17T09:45:00+05:30\",\"2022-01-17T10:00:00+05:30\",\"2022-01-17T10:15:00+05:30\",\"2022-01-17T10:30:00+05:30\",\"2022-01-17T10:45:00+05:30\",\"2022-01-17T11:00:00+05:30\",\"2022-01-17T11:15:00+05:30\",\"2022-01-17T11:30:00+05:30\",\"2022-01-17T11:45:00+05:30\",\"2022-01-17T12:00:00+05:30\",\"2022-01-17T12:15:00+05:30\",\"2022-01-17T12:30:00+05:30\",\"2022-01-17T12:45:00+05:30\",\"2022-01-17T13:00:00+05:30\",\"2022-01-17T13:15:00+05:30\",\"2022-01-17T13:30:00+05:30\",\"2022-01-17T13:45:00+05:30\",\"2022-01-17T14:00:00+05:30\",\"2022-01-17T14:15:00+05:30\",\"2022-01-17T14:30:00+05:30\",\"2022-01-17T14:45:00+05:30\",\"2022-01-17T15:00:00+05:30\",\"2022-01-17T15:15:00+05:30\",\"2022-01-18T09:15:00+05:30\",\"2022-01-18T09:30:00+05:30\",\"2022-01-18T09:45:00+05:30\",\"2022-01-18T10:00:00+05:30\",\"2022-01-18T10:15:00+05:30\",\"2022-01-18T10:30:00+05:30\",\"2022-01-18T10:45:00+05:30\",\"2022-01-18T11:00:00+05:30\",\"2022-01-18T11:15:00+05:30\",\"2022-01-18T11:30:00+05:30\",\"2022-01-18T11:45:00+05:30\",\"2022-01-18T12:00:00+05:30\",\"2022-01-18T12:15:00+05:30\",\"2022-01-18T12:30:00+05:30\",\"2022-01-18T12:45:00+05:30\",\"2022-01-18T13:00:00+05:30\",\"2022-01-18T13:15:00+05:30\",\"2022-01-18T13:30:00+05:30\",\"2022-01-18T13:45:00+05:30\",\"2022-01-18T14:00:00+05:30\",\"2022-01-18T14:15:00+05:30\",\"2022-01-18T14:30:00+05:30\",\"2022-01-18T14:45:00+05:30\",\"2022-01-18T15:00:00+05:30\",\"2022-01-18T15:15:00+05:30\",\"2022-01-19T09:15:00+05:30\",\"2022-01-19T09:30:00+05:30\",\"2022-01-19T09:45:00+05:30\",\"2022-01-19T10:00:00+05:30\",\"2022-01-19T10:15:00+05:30\",\"2022-01-19T10:30:00+05:30\",\"2022-01-19T10:45:00+05:30\",\"2022-01-19T11:00:00+05:30\",\"2022-01-19T11:15:00+05:30\",\"2022-01-19T11:30:00+05:30\",\"2022-01-19T11:45:00+05:30\",\"2022-01-19T12:00:00+05:30\",\"2022-01-19T12:15:00+05:30\",\"2022-01-19T12:30:00+05:30\",\"2022-01-19T12:45:00+05:30\",\"2022-01-19T13:00:00+05:30\",\"2022-01-19T13:15:00+05:30\",\"2022-01-19T13:30:00+05:30\",\"2022-01-19T13:45:00+05:30\",\"2022-01-19T14:00:00+05:30\",\"2022-01-19T14:15:00+05:30\",\"2022-01-19T14:30:00+05:30\",\"2022-01-19T14:45:00+05:30\",\"2022-01-19T15:00:00+05:30\",\"2022-01-19T15:15:00+05:30\",\"2022-01-20T09:15:00+05:30\",\"2022-01-20T09:30:00+05:30\",\"2022-01-20T09:45:00+05:30\",\"2022-01-20T10:00:00+05:30\",\"2022-01-20T10:15:00+05:30\",\"2022-01-20T10:30:00+05:30\",\"2022-01-20T10:45:00+05:30\",\"2022-01-20T11:00:00+05:30\",\"2022-01-20T11:15:00+05:30\",\"2022-01-20T11:30:00+05:30\",\"2022-01-20T11:45:00+05:30\",\"2022-01-20T12:00:00+05:30\",\"2022-01-20T12:15:00+05:30\",\"2022-01-20T12:30:00+05:30\",\"2022-01-20T12:45:00+05:30\",\"2022-01-20T13:00:00+05:30\",\"2022-01-20T13:15:00+05:30\",\"2022-01-20T13:30:00+05:30\",\"2022-01-20T13:45:00+05:30\",\"2022-01-20T14:00:00+05:30\",\"2022-01-20T14:15:00+05:30\",\"2022-01-20T14:30:00+05:30\",\"2022-01-20T14:45:00+05:30\",\"2022-01-20T15:00:00+05:30\",\"2022-01-20T15:15:00+05:30\",\"2022-01-21T09:15:00+05:30\",\"2022-01-21T09:30:00+05:30\",\"2022-01-21T09:45:00+05:30\",\"2022-01-21T10:00:00+05:30\",\"2022-01-21T10:15:00+05:30\",\"2022-01-21T10:30:00+05:30\",\"2022-01-21T10:45:00+05:30\",\"2022-01-21T11:00:00+05:30\",\"2022-01-21T11:15:00+05:30\",\"2022-01-21T11:30:00+05:30\",\"2022-01-21T11:45:00+05:30\",\"2022-01-21T12:00:00+05:30\",\"2022-01-21T12:15:00+05:30\",\"2022-01-21T12:30:00+05:30\",\"2022-01-21T12:45:00+05:30\",\"2022-01-21T13:00:00+05:30\",\"2022-01-21T13:15:00+05:30\",\"2022-01-21T13:30:00+05:30\",\"2022-01-21T13:45:00+05:30\",\"2022-01-21T14:00:00+05:30\",\"2022-01-21T14:15:00+05:30\",\"2022-01-21T14:30:00+05:30\",\"2022-01-21T14:45:00+05:30\",\"2022-01-21T15:00:00+05:30\",\"2022-01-21T15:15:00+05:30\",\"2022-01-24T09:15:00+05:30\",\"2022-01-24T09:30:00+05:30\",\"2022-01-24T09:45:00+05:30\",\"2022-01-24T10:00:00+05:30\",\"2022-01-24T10:15:00+05:30\",\"2022-01-24T10:30:00+05:30\",\"2022-01-24T10:45:00+05:30\",\"2022-01-24T11:00:00+05:30\",\"2022-01-24T11:15:00+05:30\",\"2022-01-24T11:30:00+05:30\",\"2022-01-24T11:45:00+05:30\",\"2022-01-24T12:00:00+05:30\",\"2022-01-24T12:15:00+05:30\",\"2022-01-24T12:30:00+05:30\",\"2022-01-24T12:45:00+05:30\",\"2022-01-24T13:00:00+05:30\",\"2022-01-24T13:15:00+05:30\",\"2022-01-24T13:30:00+05:30\",\"2022-01-24T13:45:00+05:30\",\"2022-01-24T14:00:00+05:30\",\"2022-01-24T14:15:00+05:30\",\"2022-01-24T14:30:00+05:30\",\"2022-01-24T14:45:00+05:30\",\"2022-01-24T15:00:00+05:30\",\"2022-01-24T15:15:00+05:30\",\"2022-01-25T09:15:00+05:30\",\"2022-01-25T09:30:00+05:30\",\"2022-01-25T09:45:00+05:30\",\"2022-01-25T10:00:00+05:30\",\"2022-01-25T10:15:00+05:30\",\"2022-01-25T10:30:00+05:30\",\"2022-01-25T10:45:00+05:30\",\"2022-01-25T11:00:00+05:30\",\"2022-01-25T11:15:00+05:30\",\"2022-01-25T11:30:00+05:30\",\"2022-01-25T11:45:00+05:30\",\"2022-01-25T12:00:00+05:30\",\"2022-01-25T12:15:00+05:30\",\"2022-01-25T12:30:00+05:30\",\"2022-01-25T12:45:00+05:30\",\"2022-01-25T13:00:00+05:30\",\"2022-01-25T13:15:00+05:30\",\"2022-01-25T13:30:00+05:30\",\"2022-01-25T13:45:00+05:30\",\"2022-01-25T14:00:00+05:30\",\"2022-01-25T14:15:00+05:30\",\"2022-01-25T14:30:00+05:30\",\"2022-01-25T14:45:00+05:30\",\"2022-01-25T15:00:00+05:30\",\"2022-01-25T15:15:00+05:30\",\"2022-01-27T09:15:00+05:30\",\"2022-01-27T09:30:00+05:30\",\"2022-01-27T09:45:00+05:30\",\"2022-01-27T10:00:00+05:30\",\"2022-01-27T10:15:00+05:30\",\"2022-01-27T10:30:00+05:30\",\"2022-01-27T10:45:00+05:30\",\"2022-01-27T11:00:00+05:30\",\"2022-01-27T11:15:00+05:30\",\"2022-01-27T11:30:00+05:30\",\"2022-01-27T11:45:00+05:30\",\"2022-01-27T12:00:00+05:30\",\"2022-01-27T12:15:00+05:30\",\"2022-01-27T12:30:00+05:30\",\"2022-01-27T12:45:00+05:30\",\"2022-01-27T13:00:00+05:30\",\"2022-01-27T13:15:00+05:30\",\"2022-01-27T13:30:00+05:30\",\"2022-01-27T13:45:00+05:30\",\"2022-01-27T14:00:00+05:30\",\"2022-01-27T14:15:00+05:30\",\"2022-01-27T14:30:00+05:30\",\"2022-01-27T14:45:00+05:30\",\"2022-01-27T15:00:00+05:30\",\"2022-01-27T15:15:00+05:30\",\"2022-01-28T09:15:00+05:30\",\"2022-01-28T09:30:00+05:30\",\"2022-01-28T09:45:00+05:30\",\"2022-01-28T10:00:00+05:30\",\"2022-01-28T10:15:00+05:30\",\"2022-01-28T10:30:00+05:30\",\"2022-01-28T10:45:00+05:30\",\"2022-01-28T11:00:00+05:30\",\"2022-01-28T11:15:00+05:30\",\"2022-01-28T11:30:00+05:30\",\"2022-01-28T11:45:00+05:30\",\"2022-01-28T12:00:00+05:30\",\"2022-01-28T12:15:00+05:30\",\"2022-01-28T12:30:00+05:30\",\"2022-01-28T12:45:00+05:30\",\"2022-01-28T13:00:00+05:30\",\"2022-01-28T13:15:00+05:30\",\"2022-01-28T13:30:00+05:30\",\"2022-01-28T13:45:00+05:30\",\"2022-01-28T14:00:00+05:30\",\"2022-01-28T14:15:00+05:30\",\"2022-01-28T14:30:00+05:30\",\"2022-01-28T14:45:00+05:30\",\"2022-01-28T15:00:00+05:30\",\"2022-01-28T15:15:00+05:30\",\"2022-01-31T09:15:00+05:30\",\"2022-01-31T09:30:00+05:30\",\"2022-01-31T09:45:00+05:30\",\"2022-01-31T10:00:00+05:30\",\"2022-01-31T10:15:00+05:30\",\"2022-01-31T10:30:00+05:30\",\"2022-01-31T10:45:00+05:30\",\"2022-01-31T11:00:00+05:30\",\"2022-01-31T11:15:00+05:30\",\"2022-01-31T11:30:00+05:30\",\"2022-01-31T11:45:00+05:30\",\"2022-01-31T12:00:00+05:30\",\"2022-01-31T12:15:00+05:30\",\"2022-01-31T12:30:00+05:30\",\"2022-01-31T12:45:00+05:30\",\"2022-01-31T13:00:00+05:30\",\"2022-01-31T13:15:00+05:30\",\"2022-01-31T13:30:00+05:30\",\"2022-01-31T13:45:00+05:30\",\"2022-01-31T14:00:00+05:30\",\"2022-01-31T14:15:00+05:30\",\"2022-01-31T14:30:00+05:30\",\"2022-01-31T14:45:00+05:30\",\"2022-01-31T15:00:00+05:30\",\"2022-01-31T15:15:00+05:30\",\"2022-02-01T09:15:00+05:30\",\"2022-02-01T09:30:00+05:30\",\"2022-02-01T09:45:00+05:30\",\"2022-02-01T10:00:00+05:30\",\"2022-02-01T10:15:00+05:30\",\"2022-02-01T10:30:00+05:30\",\"2022-02-01T10:45:00+05:30\",\"2022-02-01T11:00:00+05:30\",\"2022-02-01T11:15:00+05:30\",\"2022-02-01T11:30:00+05:30\",\"2022-02-01T11:45:00+05:30\",\"2022-02-01T12:00:00+05:30\",\"2022-02-01T12:15:00+05:30\",\"2022-02-01T12:30:00+05:30\",\"2022-02-01T12:45:00+05:30\",\"2022-02-01T13:00:00+05:30\",\"2022-02-01T13:15:00+05:30\",\"2022-02-01T13:30:00+05:30\",\"2022-02-01T13:45:00+05:30\",\"2022-02-01T14:00:00+05:30\",\"2022-02-01T14:15:00+05:30\",\"2022-02-01T14:30:00+05:30\",\"2022-02-01T14:45:00+05:30\",\"2022-02-01T15:00:00+05:30\",\"2022-02-01T15:15:00+05:30\",\"2022-02-02T09:15:00+05:30\",\"2022-02-02T09:30:00+05:30\",\"2022-02-02T09:45:00+05:30\",\"2022-02-02T10:00:00+05:30\",\"2022-02-02T10:15:00+05:30\",\"2022-02-02T10:30:00+05:30\",\"2022-02-02T10:45:00+05:30\",\"2022-02-02T11:00:00+05:30\",\"2022-02-02T11:15:00+05:30\",\"2022-02-02T11:30:00+05:30\",\"2022-02-02T11:45:00+05:30\",\"2022-02-02T12:00:00+05:30\",\"2022-02-02T12:15:00+05:30\",\"2022-02-02T12:30:00+05:30\",\"2022-02-02T12:45:00+05:30\",\"2022-02-02T13:00:00+05:30\",\"2022-02-02T13:15:00+05:30\",\"2022-02-02T13:30:00+05:30\",\"2022-02-02T13:45:00+05:30\",\"2022-02-02T14:00:00+05:30\",\"2022-02-02T14:15:00+05:30\",\"2022-02-02T14:30:00+05:30\",\"2022-02-02T14:45:00+05:30\",\"2022-02-02T15:00:00+05:30\",\"2022-02-02T15:15:00+05:30\",\"2022-02-03T09:15:00+05:30\",\"2022-02-03T09:30:00+05:30\",\"2022-02-03T09:45:00+05:30\",\"2022-02-03T10:00:00+05:30\",\"2022-02-03T10:15:00+05:30\",\"2022-02-03T10:30:00+05:30\",\"2022-02-03T10:45:00+05:30\",\"2022-02-03T11:00:00+05:30\",\"2022-02-03T11:15:00+05:30\",\"2022-02-03T11:30:00+05:30\",\"2022-02-03T11:45:00+05:30\",\"2022-02-03T12:00:00+05:30\",\"2022-02-03T12:15:00+05:30\",\"2022-02-03T12:30:00+05:30\",\"2022-02-03T12:45:00+05:30\",\"2022-02-03T13:00:00+05:30\",\"2022-02-03T13:15:00+05:30\",\"2022-02-03T13:30:00+05:30\",\"2022-02-03T13:45:00+05:30\",\"2022-02-03T14:00:00+05:30\",\"2022-02-03T14:15:00+05:30\",\"2022-02-03T14:30:00+05:30\",\"2022-02-03T14:45:00+05:30\",\"2022-02-03T15:00:00+05:30\",\"2022-02-03T15:15:00+05:30\",\"2022-02-04T09:15:00+05:30\",\"2022-02-04T09:30:00+05:30\",\"2022-02-04T09:45:00+05:30\",\"2022-02-04T10:00:00+05:30\",\"2022-02-04T10:15:00+05:30\",\"2022-02-04T10:30:00+05:30\",\"2022-02-04T10:45:00+05:30\",\"2022-02-04T11:00:00+05:30\",\"2022-02-04T11:15:00+05:30\",\"2022-02-04T11:30:00+05:30\",\"2022-02-04T11:45:00+05:30\",\"2022-02-04T12:00:00+05:30\",\"2022-02-04T12:15:00+05:30\",\"2022-02-04T12:30:00+05:30\",\"2022-02-04T12:45:00+05:30\",\"2022-02-04T13:00:00+05:30\",\"2022-02-04T13:15:00+05:30\",\"2022-02-04T13:30:00+05:30\",\"2022-02-04T13:45:00+05:30\",\"2022-02-04T14:00:00+05:30\",\"2022-02-04T14:15:00+05:30\",\"2022-02-04T14:30:00+05:30\",\"2022-02-04T14:45:00+05:30\",\"2022-02-04T15:00:00+05:30\",\"2022-02-04T15:15:00+05:30\",\"2022-02-07T09:15:00+05:30\",\"2022-02-07T09:30:00+05:30\",\"2022-02-07T09:45:00+05:30\",\"2022-02-07T10:00:00+05:30\",\"2022-02-07T10:15:00+05:30\",\"2022-02-07T10:30:00+05:30\",\"2022-02-07T10:45:00+05:30\",\"2022-02-07T11:00:00+05:30\",\"2022-02-07T11:15:00+05:30\",\"2022-02-07T11:30:00+05:30\",\"2022-02-07T11:45:00+05:30\",\"2022-02-07T12:00:00+05:30\",\"2022-02-07T12:15:00+05:30\",\"2022-02-07T12:30:00+05:30\",\"2022-02-07T12:45:00+05:30\",\"2022-02-07T13:00:00+05:30\",\"2022-02-07T13:15:00+05:30\",\"2022-02-07T13:30:00+05:30\",\"2022-02-07T13:45:00+05:30\",\"2022-02-07T14:00:00+05:30\",\"2022-02-07T14:15:00+05:30\",\"2022-02-07T14:30:00+05:30\",\"2022-02-07T14:45:00+05:30\",\"2022-02-07T15:00:00+05:30\",\"2022-02-07T15:15:00+05:30\",\"2022-02-08T09:15:00+05:30\",\"2022-02-08T09:30:00+05:30\",\"2022-02-08T09:45:00+05:30\",\"2022-02-08T10:00:00+05:30\",\"2022-02-08T10:15:00+05:30\",\"2022-02-08T10:30:00+05:30\",\"2022-02-08T10:45:00+05:30\",\"2022-02-08T11:00:00+05:30\",\"2022-02-08T11:15:00+05:30\",\"2022-02-08T11:30:00+05:30\",\"2022-02-08T11:45:00+05:30\",\"2022-02-08T12:00:00+05:30\",\"2022-02-08T12:15:00+05:30\",\"2022-02-08T12:30:00+05:30\",\"2022-02-08T12:45:00+05:30\",\"2022-02-08T13:00:00+05:30\",\"2022-02-08T13:15:00+05:30\",\"2022-02-08T13:30:00+05:30\",\"2022-02-08T13:45:00+05:30\",\"2022-02-08T14:00:00+05:30\",\"2022-02-08T14:15:00+05:30\",\"2022-02-08T14:30:00+05:30\",\"2022-02-08T14:45:00+05:30\",\"2022-02-08T15:00:00+05:30\",\"2022-02-08T15:15:00+05:30\",\"2022-02-09T09:15:00+05:30\",\"2022-02-09T09:30:00+05:30\",\"2022-02-09T09:45:00+05:30\",\"2022-02-09T10:00:00+05:30\",\"2022-02-09T10:15:00+05:30\",\"2022-02-09T10:30:00+05:30\",\"2022-02-09T10:45:00+05:30\",\"2022-02-09T11:00:00+05:30\",\"2022-02-09T11:15:00+05:30\",\"2022-02-09T11:30:00+05:30\",\"2022-02-09T11:45:00+05:30\",\"2022-02-09T12:00:00+05:30\",\"2022-02-09T12:15:00+05:30\",\"2022-02-09T12:30:00+05:30\",\"2022-02-09T12:45:00+05:30\",\"2022-02-09T13:00:00+05:30\",\"2022-02-09T13:15:00+05:30\",\"2022-02-09T13:30:00+05:30\",\"2022-02-09T13:45:00+05:30\",\"2022-02-09T14:00:00+05:30\",\"2022-02-09T14:15:00+05:30\",\"2022-02-09T14:30:00+05:30\",\"2022-02-09T14:45:00+05:30\",\"2022-02-09T15:00:00+05:30\",\"2022-02-09T15:15:00+05:30\",\"2022-02-10T09:15:00+05:30\",\"2022-02-10T09:30:00+05:30\",\"2022-02-10T09:45:00+05:30\",\"2022-02-10T10:00:00+05:30\",\"2022-02-10T10:15:00+05:30\",\"2022-02-10T10:30:00+05:30\",\"2022-02-10T10:45:00+05:30\",\"2022-02-10T11:00:00+05:30\",\"2022-02-10T11:15:00+05:30\",\"2022-02-10T11:30:00+05:30\",\"2022-02-10T11:45:00+05:30\",\"2022-02-10T12:00:00+05:30\",\"2022-02-10T12:15:00+05:30\",\"2022-02-10T12:30:00+05:30\",\"2022-02-10T12:45:00+05:30\",\"2022-02-10T13:00:00+05:30\",\"2022-02-10T13:15:00+05:30\",\"2022-02-10T13:30:00+05:30\",\"2022-02-10T13:45:00+05:30\",\"2022-02-10T14:00:00+05:30\",\"2022-02-10T14:15:00+05:30\",\"2022-02-10T14:30:00+05:30\",\"2022-02-10T14:45:00+05:30\",\"2022-02-10T15:00:00+05:30\",\"2022-02-10T15:15:00+05:30\",\"2022-02-11T09:15:00+05:30\",\"2022-02-11T09:30:00+05:30\",\"2022-02-11T09:45:00+05:30\",\"2022-02-11T10:00:00+05:30\",\"2022-02-11T10:15:00+05:30\",\"2022-02-11T10:30:00+05:30\",\"2022-02-11T10:45:00+05:30\",\"2022-02-11T11:00:00+05:30\",\"2022-02-11T11:15:00+05:30\",\"2022-02-11T11:30:00+05:30\",\"2022-02-11T11:45:00+05:30\",\"2022-02-11T12:00:00+05:30\",\"2022-02-11T12:15:00+05:30\",\"2022-02-11T12:30:00+05:30\",\"2022-02-11T12:45:00+05:30\",\"2022-02-11T13:00:00+05:30\",\"2022-02-11T13:15:00+05:30\",\"2022-02-11T13:30:00+05:30\",\"2022-02-11T13:45:00+05:30\",\"2022-02-11T14:00:00+05:30\",\"2022-02-11T14:15:00+05:30\",\"2022-02-11T14:30:00+05:30\",\"2022-02-11T14:45:00+05:30\",\"2022-02-11T15:00:00+05:30\",\"2022-02-11T15:15:00+05:30\",\"2022-02-14T09:15:00+05:30\",\"2022-02-14T09:30:00+05:30\",\"2022-02-14T09:45:00+05:30\",\"2022-02-14T10:00:00+05:30\",\"2022-02-14T10:15:00+05:30\",\"2022-02-14T10:30:00+05:30\",\"2022-02-14T10:45:00+05:30\",\"2022-02-14T11:00:00+05:30\",\"2022-02-14T11:15:00+05:30\",\"2022-02-14T11:30:00+05:30\",\"2022-02-14T11:45:00+05:30\",\"2022-02-14T12:00:00+05:30\",\"2022-02-14T12:15:00+05:30\",\"2022-02-14T12:30:00+05:30\",\"2022-02-14T12:45:00+05:30\",\"2022-02-14T13:00:00+05:30\",\"2022-02-14T13:15:00+05:30\",\"2022-02-14T13:30:00+05:30\",\"2022-02-14T13:45:00+05:30\",\"2022-02-14T14:00:00+05:30\",\"2022-02-14T14:15:00+05:30\",\"2022-02-14T14:30:00+05:30\",\"2022-02-14T14:45:00+05:30\",\"2022-02-14T15:00:00+05:30\",\"2022-02-14T15:15:00+05:30\",\"2022-02-15T15:30:00+05:30\"],\"xaxis\":\"x\",\"y\":[1908.45,1910.2,1905.55,1908.25,1910.75,1913.2,1910.0,1906.95,1904.95,1906.1,1905.35,1902.7,1901.05,1905.15,1905.55,1904.4,1903.3,1903.05,1904.4,1904.85,1903.05,1903.0,1898.5,1898.1,1899.0,1893.8,1885.25,1884.6,1885.7,1880.95,1878.45,1883.45,1883.0,1880.45,1881.0,1881.05,1880.1,1883.5,1890.0,1889.55,1886.75,1888.05,1885.7,1888.05,1887.0,1887.75,1890.0,1896.15,1895.8,1899.15,1875.7,1871.1,1871.8,1867.0,1862.75,1857.6,1854.55,1847.45,1855.4,1847.0,1854.05,1851.8,1851.05,1850.3,1850.55,1852.7,1853.5,1854.9,1851.15,1848.6,1840.6,1840.55,1844.6,1845.25,1848.0,1815.9,1814.55,1817.35,1819.0,1811.3,1810.25,1809.7,1804.3,1802.75,1803.1,1802.45,1800.4,1804.4,1809.9,1809.8,1805.0,1802.6,1809.0,1805.45,1809.65,1815.0,1817.95,1815.9,1818.7,1817.8,1820.3,1832.0,1824.0,1826.2,1827.0,1827.5,1827.7,1819.6,1820.8,1820.2,1818.0,1815.0,1813.15,1808.7,1812.95,1811.1,1813.05,1816.85,1818.4,1813.9,1816.45,1816.45,1814.5,1813.15,1816.0,1821.95,1830.0,1844.0,1850.85,1862.15,1848.8,1859.0,1859.7,1860.8,1861.25,1865.65,1866.35,1865.65,1866.1,1863.45,1867.05,1862.75,1859.65,1854.75,1854.65,1854.85,1854.95,1856.15,1851.15,1853.0,1854.65,1858.85,1857.9,1858.65,1857.75,1862.9,1864.3,1864.5,1868.0,1867.5,1867.75,1861.9,1861.3,1859.45,1859.8,1861.0,1864.5,1864.9,1861.95,1861.75,1861.7,1858.8,1858.0,1854.9,1860.9,1865.5,1868.1,1867.95,1864.95,1868.05,1869.85,1872.85,1874.5,1879.0,1880.3,1881.5,1879.85,1875.95,1865.25,1869.8,1869.05,1872.25,1872.2,1874.5,1874.2,1872.8,1875.2,1879.3,1877.2,1877.0,1907.85,1900.25,1885.5,1886.3,1881.55,1878.0,1878.75,1884.55,1890.0,1889.75,1892.55,1892.6,1892.9,1892.05,1891.95,1896.05,1889.75,1896.25,1897.45,1896.1,1897.7,1894.75,1892.9,1898.15,1896.8,1893.0,1890.5,1888.35,1887.0,1894.5,1892.3,1897.95,1916.3,1915.8,1914.3,1915.3,1924.5,1924.4,1930.75,1927.2,1929.6,1926.8,1928.0,1924.8,1924.25,1929.3,1931.25,1930.95,1929.0,1929.35,1942.0,1937.0,1937.45,1940.35,1938.0,1943.0,1949.0,1951.85,1947.45,1945.0,1945.0,1945.5,1944.2,1943.0,1942.0,1940.3,1937.0,1933.0,1938.65,1937.3,1941.4,1941.5,1939.9,1940.05,1939.05,1938.6,1934.4,1925.2,1927.7,1929.1,1926.65,1923.25,1923.55,1923.7,1922.5,1917.2,1919.9,1920.85,1922.35,1923.65,1927.75,1925.75,1921.5,1919.45,1919.55,1918.95,1918.15,1916.6,1920.8,1917.5,1886.95,1882.05,1885.0,1886.9,1887.8,1892.25,1885.85,1883.2,1883.65,1885.35,1885.85,1884.9,1886.1,1882.85,1880.55,1877.95,1878.3,1878.9,1877.3,1876.1,1873.15,1873.05,1869.0,1869.75,1865.0,1833.55,1840.75,1838.35,1837.1,1831.5,1834.05,1831.95,1829.85,1828.0,1824.2,1827.15,1828.75,1835.8,1829.45,1827.8,1826.65,1823.0,1821.55,1819.85,1820.0,1818.7,1817.1,1822.85,1824.1,1825.2,1791.2,1794.6,1802.35,1792.9,1798.6,1797.75,1792.8,1793.95,1793.2,1786.4,1788.05,1790.65,1789.0,1784.25,1786.9,1789.7,1781.05,1777.45,1781.25,1780.6,1782.05,1781.75,1777.75,1785.85,1788.0,1748.3,1745.55,1744.05,1741.6,1746.85,1748.9,1750.25,1750.0,1749.5,1746.3,1742.65,1745.8,1747.45,1747.05,1747.05,1748.1,1749.15,1744.0,1737.0,1733.05,1737.45,1731.45,1745.1,1735.9,1734.0,1710.5,1734.0,1736.0,1719.9,1718.1,1717.9,1713.65,1717.0,1717.0,1715.0,1706.0,1708.55,1708.3,1708.05,1711.05,1718.65,1719.55,1719.25,1720.85,1721.3,1721.55,1719.25,1725.0,1719.15,1724.0,1685.25,1684.85,1690.2,1683.1,1677.2,1681.8,1684.9,1685.5,1681.55,1677.75,1676.3,1666.4,1670.15,1670.35,1665.1,1675.0,1677.3,1684.6,1683.7,1683.1,1692.1,1690.05,1684.5,1677.45,1687.0,1698.45,1723.55,1709.85,1712.7,1707.05,1702.95,1707.25,1706.7,1713.15,1715.1,1714.95,1713.15,1711.85,1713.0,1709.25,1708.85,1708.55,1701.55,1699.0,1691.05,1687.25,1688.55,1688.2,1687.95,1685.5,1725.0,1727.3,1729.95,1735.15,1738.9,1734.0,1738.5,1740.35,1734.25,1737.5,1740.3,1743.45,1742.85,1738.6,1738.4,1735.9,1740.75,1737.45,1738.8,1743.5,1743.45,1746.5,1748.0,1734.95,1736.2,1766.15,1760.65,1763.95,1764.8,1764.15,1763.3,1764.35,1764.5,1768.25,1769.8,1771.35,1770.65,1775.4,1779.3,1766.05,1738.0,1761.7,1765.65,1768.0,1771.45,1772.35,1773.15,1771.0,1769.95,1773.05,1776.0,1781.75,1782.6,1775.05,1774.45,1776.3,1782.9,1782.85,1782.7,1785.0,1789.15,1788.45,1788.8,1791.5,1787.0,1788.85,1788.05,1788.9,1790.95,1790.25,1791.35,1790.1,1787.0,1786.85,1787.1,1768.6,1763.0,1761.8,1761.5,1764.7,1768.0,1766.35,1766.5,1765.25,1765.15,1762.8,1760.75,1757.35,1759.0,1758.0,1757.7,1752.0,1747.35,1746.25,1748.25,1747.75,1745.05,1741.45,1738.75,1736.3,1729.35,1732.9,1734.5,1733.7,1735.9,1733.75,1738.3,1738.95,1745.3,1740.2,1740.0,1742.0,1741.2,1744.3,1740.15,1743.05,1748.6,1748.65,1747.8,1743.95,1739.9,1738.0,1738.75,1743.7,1740.0,1723.3,1723.9,1719.05,1726.5,1722.0,1723.45,1720.55,1711.0,1713.0,1711.75,1708.35,1707.1,1709.85,1718.6,1713.25,1712.3,1713.65,1707.4,1697.1,1701.8,1708.9,1708.95,1711.85,1716.5,1714.0,1712.2,1706.15,1706.75,1705.3,1702.05,1698.35,1698.0,1699.85,1703.85,1709.7,1712.05,1709.95,1718.25,1719.0,1715.8,1706.0,1713.3,1710.45,1715.85,1713.95,1713.35,1718.0,1723.55,1718.1,1708.6,1732.05,1725.15,1730.9,1733.65,1733.15,1733.05,1734.55,1732.6,1732.0,1734.5,1738.2,1737.75,1737.7,1738.1,1738.2,1734.0,1736.1,1736.45,1736.75,1735.9,1741.35,1740.4,1740.9,1736.0,1739.0,1756.9,1749.7,1752.0,1758.5,1763.0,1759.15,1755.9,1757.0,1756.65,1759.3,1760.7,1759.2,1755.9,1756.3,1758.0,1756.9,1758.45,1762.3,1761.75,1764.65,1763.4,1759.7,1761.9,1769.1,1769.6,1722.8,1721.3,1718.8,1720.05,1719.9,1716.75,1715.6,1716.6,1716.35,1716.0,1717.5,1718.0,1718.95,1721.3,1722.65,1725.3,1725.4,1727.25,1724.95,1722.85,1717.25,1715.65,1715.95,1722.45,1719.7,1701.2,1700.0,1710.05,1709.8,1710.95,1711.0,1711.0,1706.2,1709.75,1710.0,1710.65,1708.7,1706.7,1702.95,1703.6,1707.0,1710.0,1703.6,1701.9,1695.7,1694.5,1696.6,1687.9,1683.45,1684.0,1738.25],\"yaxis\":\"y\",\"type\":\"scatter\"}], {\"template\":{\"data\":{\"bar\":[{\"error_x\":{\"color\":\"#2a3f5f\"},\"error_y\":{\"color\":\"#2a3f5f\"},\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"bar\"}],\"barpolar\":[{\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"barpolar\"}],\"carpet\":[{\"aaxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"baxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"type\":\"carpet\"}],\"choropleth\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"type\":\"choropleth\"}],\"contour\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"contour\"}],\"contourcarpet\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"type\":\"contourcarpet\"}],\"heatmap\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"heatmap\"}],\"heatmapgl\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"heatmapgl\"}],\"histogram\":[{\"marker\":{\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"histogram\"}],\"histogram2d\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"histogram2d\"}],\"histogram2dcontour\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"histogram2dcontour\"}],\"mesh3d\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"type\":\"mesh3d\"}],\"parcoords\":[{\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"parcoords\"}],\"pie\":[{\"automargin\":true,\"type\":\"pie\"}],\"scatter\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatter\"}],\"scatter3d\":[{\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatter3d\"}],\"scattercarpet\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattercarpet\"}],\"scattergeo\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattergeo\"}],\"scattergl\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattergl\"}],\"scattermapbox\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattermapbox\"}],\"scatterpolar\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatterpolar\"}],\"scatterpolargl\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatterpolargl\"}],\"scatterternary\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatterternary\"}],\"surface\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"surface\"}],\"table\":[{\"cells\":{\"fill\":{\"color\":\"#EBF0F8\"},\"line\":{\"color\":\"white\"}},\"header\":{\"fill\":{\"color\":\"#C8D4E3\"},\"line\":{\"color\":\"white\"}},\"type\":\"table\"}]},\"layout\":{\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"autotypenumbers\":\"strict\",\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"colorscale\":{\"diverging\":[[0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1,\"#276419\"]],\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]},\"colorway\":[\"#636efa\",\"#EF553B\",\"#00cc96\",\"#ab63fa\",\"#FFA15A\",\"#19d3f3\",\"#FF6692\",\"#B6E880\",\"#FF97FF\",\"#FECB52\"],\"font\":{\"color\":\"#2a3f5f\"},\"geo\":{\"bgcolor\":\"white\",\"lakecolor\":\"white\",\"landcolor\":\"#E5ECF6\",\"showlakes\":true,\"showland\":true,\"subunitcolor\":\"white\"},\"hoverlabel\":{\"align\":\"left\"},\"hovermode\":\"closest\",\"mapbox\":{\"style\":\"light\"},\"paper_bgcolor\":\"white\",\"plot_bgcolor\":\"#E5ECF6\",\"polar\":{\"angularaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"bgcolor\":\"#E5ECF6\",\"radialaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"scene\":{\"xaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"gridwidth\":2,\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\"},\"yaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"gridwidth\":2,\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\"},\"zaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"gridwidth\":2,\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\"}},\"shapedefaults\":{\"line\":{\"color\":\"#2a3f5f\"}},\"ternary\":{\"aaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"baxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"bgcolor\":\"#E5ECF6\",\"caxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"title\":{\"x\":0.05},\"xaxis\":{\"automargin\":true,\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"zerolinewidth\":2},\"yaxis\":{\"automargin\":true,\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"zerolinewidth\":2}}},\"xaxis\":{\"anchor\":\"y\",\"domain\":[0.0,1.0],\"title\":{\"text\":\"Datetime\"}},\"yaxis\":{\"anchor\":\"x\",\"domain\":[0.0,1.0],\"title\":{\"text\":\"Close\"}},\"legend\":{\"tracegroupgap\":0},\"margin\":{\"t\":60}}, {\"responsive\": true} ).then(function(){\n", | |
" \n", | |
"var gd = document.getElementById('d2c150dd-810c-49dc-889c-cb2c87d6a9a0');\n", | |
"var x = new MutationObserver(function (mutations, observer) {{\n", | |
" var display = window.getComputedStyle(gd).display;\n", | |
" if (!display || display === 'none') {{\n", | |
" console.log([gd, 'removed!']);\n", | |
" Plotly.purge(gd);\n", | |
" observer.disconnect();\n", | |
" }}\n", | |
"}});\n", | |
"\n", | |
"// Listen for the removal of the full notebook cells\n", | |
"var notebookContainer = gd.closest('#notebook-container');\n", | |
"if (notebookContainer) {{\n", | |
" x.observe(notebookContainer, {childList: true});\n", | |
"}}\n", | |
"\n", | |
"// Listen for the clearing of the current output cell\n", | |
"var outputEl = gd.closest('.output');\n", | |
"if (outputEl) {{\n", | |
" x.observe(outputEl, {childList: true});\n", | |
"}}\n", | |
"\n", | |
" }) }; </script> </div>\n", | |
"</body>\n", | |
"</html>" | |
] | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"stock_data.tail()" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 238 | |
}, | |
"id": "kCMzX2boehmv", | |
"outputId": "8a06f2ec-9c46-4e18-f2d7-8998a8bb49ec" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div id=\"df-468c3d6f-7eab-4ac5-a2d6-6aca720b4760\">\n", | |
" <div class=\"colab-df-container\">\n", | |
" <div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>Open</th>\n", | |
" <th>High</th>\n", | |
" <th>Low</th>\n", | |
" <th>Close</th>\n", | |
" <th>Adj Close</th>\n", | |
" <th>Volume</th>\n", | |
" <th>Dividends</th>\n", | |
" <th>Stock Splits</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Datetime</th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>2022-02-14 14:30:00+05:30</th>\n", | |
" <td>1694.35</td>\n", | |
" <td>1697.25</td>\n", | |
" <td>1692.10</td>\n", | |
" <td>1696.60</td>\n", | |
" <td>1696.60</td>\n", | |
" <td>339834</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2022-02-14 14:45:00+05:30</th>\n", | |
" <td>1696.20</td>\n", | |
" <td>1698.00</td>\n", | |
" <td>1687.20</td>\n", | |
" <td>1687.90</td>\n", | |
" <td>1687.90</td>\n", | |
" <td>395101</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2022-02-14 15:00:00+05:30</th>\n", | |
" <td>1687.70</td>\n", | |
" <td>1688.80</td>\n", | |
" <td>1678.75</td>\n", | |
" <td>1683.45</td>\n", | |
" <td>1683.45</td>\n", | |
" <td>843081</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2022-02-14 15:15:00+05:30</th>\n", | |
" <td>1683.50</td>\n", | |
" <td>1687.00</td>\n", | |
" <td>1678.30</td>\n", | |
" <td>1684.00</td>\n", | |
" <td>1684.00</td>\n", | |
" <td>837542</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2022-02-15 15:30:00+05:30</th>\n", | |
" <td>1738.25</td>\n", | |
" <td>1738.25</td>\n", | |
" <td>1738.25</td>\n", | |
" <td>1738.25</td>\n", | |
" <td>1738.25</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-468c3d6f-7eab-4ac5-a2d6-6aca720b4760')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
" \n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-468c3d6f-7eab-4ac5-a2d6-6aca720b4760 button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-468c3d6f-7eab-4ac5-a2d6-6aca720b4760');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
" Open High ... Dividends Stock Splits\n", | |
"Datetime ... \n", | |
"2022-02-14 14:30:00+05:30 1694.35 1697.25 ... 0 0\n", | |
"2022-02-14 14:45:00+05:30 1696.20 1698.00 ... 0 0\n", | |
"2022-02-14 15:00:00+05:30 1687.70 1688.80 ... 0 0\n", | |
"2022-02-14 15:15:00+05:30 1683.50 1687.00 ... 0 0\n", | |
"2022-02-15 15:30:00+05:30 1738.25 1738.25 ... 0 0\n", | |
"\n", | |
"[5 rows x 8 columns]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 45 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from datetime import datetime, timedelta\n", | |
"import time" | |
], | |
"metadata": { | |
"id": "EDQVcProew48" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"now_timestamp = time.time()\n", | |
"offset = datetime.fromtimestamp(now_timestamp) - datetime.utcfromtimestamp(now_timestamp)\n", | |
"print(datetime.now() + timedelta(hours=5, minutes=30))" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
}, | |
"id": "UcItf2Fum424", | |
"outputId": "583aa7c4-75b3-429c-a486-a8c6cc00e898" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"2022-02-15 23:52:00.178711\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [], | |
"metadata": { | |
"id": "45S6xjyom_PN" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment