├── SwissFinteCH_zrh_20160714 ├── 1-GDP │ ├── GDP per capita.ipynb │ └── GDP_per_capita.xls ├── 2-unit-tests │ ├── prime_numbers.xlsm │ └── test_prime_numbers.py └── 4-corr │ ├── corr.py │ └── corr.xlsm ├── demo_interactive_xlwings.ipynb ├── for_python_quants_conference_nyc_20160506 ├── GDP_per_capita.ipynb ├── GDP_per_capita.xls ├── corr.py └── corr.xlsm ├── meetup_coding_bootcamp20210501.ipynb ├── nyc_cab.JPG ├── open_source_in_quant_finance_frankfurt_20150605.ipynb ├── opendatascicon_boston_20150531.ipynb ├── pydata_meetup_berlin_20150323.ipynb └── thalesians_zrh_20160609 ├── 1-portfolio opt ├── RATEINF-INFLATION_USA_QUANDL.xls ├── djia_csv │ ├── AAPL.csv │ ├── AXP.csv │ ├── BA.csv │ ├── CAT.csv │ ├── CSCO.csv │ ├── CVX.csv │ ├── DD.csv │ ├── DIS.csv │ ├── GE.csv │ ├── GS.csv │ ├── HD.csv │ ├── IBM.csv │ ├── INTC.csv │ ├── JNJ.csv │ ├── JPM.csv │ ├── KO.csv │ ├── MCD.csv │ ├── MMM.csv │ ├── MRK.csv │ ├── MSFT.csv │ ├── NKE.csv │ ├── PFE.csv │ ├── PG.csv │ ├── TRV.csv │ ├── UNH.csv │ ├── UTX.csv │ ├── V.csv │ ├── VZ.csv │ ├── WMT.csv │ └── XOM.csv └── portfolio opt.ipynb ├── 3-option pricing ├── impvol.py ├── impvol.xlsm └── quantlib option pricing.ipynb └── 4-unit tests ├── prime_numbers.xlsm └── test_prime_numbers.py /SwissFinteCH_zrh_20160714/1-GDP/GDP per capita.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# GDP per capita\n", 8 | "\n", 9 | "http://data.worldbank.org/indicator/NY.GDP.PCAP.CD \n", 10 | "http://api.worldbank.org/v2/en/indicator/ny.gdp.pcap.cd?downloadformat=excel" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": {}, 16 | "source": [ 17 | "## Import the libraries" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "metadata": { 24 | "collapsed": true 25 | }, 26 | "outputs": [], 27 | "source": [ 28 | "%matplotlib inline\n", 29 | "import numpy as np\n", 30 | "import pandas as pd\n", 31 | "import seaborn\n", 32 | "import xlwings as xw" 33 | ] 34 | }, 35 | { 36 | "cell_type": "markdown", 37 | "metadata": {}, 38 | "source": [ 39 | "## Connect to the active Excel workbook" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": null, 45 | "metadata": { 46 | "collapsed": false 47 | }, 48 | "outputs": [], 49 | "source": [ 50 | "wb = xw.Workbook.active()\n", 51 | "wb" 52 | ] 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "metadata": {}, 57 | "source": [ 58 | "## Read the data" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": null, 64 | "metadata": { 65 | "collapsed": true 66 | }, 67 | "outputs": [], 68 | "source": [ 69 | "data = xw.Range(1, 'B4').options(pd.DataFrame,\n", 70 | " expand='table').value" 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": null, 76 | "metadata": { 77 | "collapsed": false 78 | }, 79 | "outputs": [], 80 | "source": [ 81 | "meta = xw.Range(2, 'A1:D1').options(pd.DataFrame,\n", 82 | " expand='vertical',\n", 83 | " index=False).value.set_index('Country Code')" 84 | ] 85 | }, 86 | { 87 | "cell_type": "markdown", 88 | "metadata": {}, 89 | "source": [ 90 | "## Check it" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": null, 96 | "metadata": { 97 | "collapsed": false, 98 | "scrolled": true 99 | }, 100 | "outputs": [], 101 | "source": [ 102 | "data.head()" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": null, 108 | "metadata": { 109 | "collapsed": false 110 | }, 111 | "outputs": [], 112 | "source": [ 113 | "meta.head()" 114 | ] 115 | }, 116 | { 117 | "cell_type": "markdown", 118 | "metadata": {}, 119 | "source": [ 120 | "## Joining" 121 | ] 122 | }, 123 | { 124 | "cell_type": "code", 125 | "execution_count": null, 126 | "metadata": { 127 | "collapsed": false 128 | }, 129 | "outputs": [], 130 | "source": [ 131 | "combined = pd.concat([meta, data],\n", 132 | " axis=1,\n", 133 | " join='inner')\n", 134 | "combined" 135 | ] 136 | }, 137 | { 138 | "cell_type": "markdown", 139 | "metadata": {}, 140 | "source": [ 141 | "## Quick view" 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": null, 147 | "metadata": { 148 | "collapsed": true 149 | }, 150 | "outputs": [], 151 | "source": [ 152 | "xw.view(combined)" 153 | ] 154 | }, 155 | { 156 | "cell_type": "markdown", 157 | "metadata": {}, 158 | "source": [ 159 | "## Summary Statistics" 160 | ] 161 | }, 162 | { 163 | "cell_type": "code", 164 | "execution_count": null, 165 | "metadata": { 166 | "collapsed": false, 167 | "scrolled": false 168 | }, 169 | "outputs": [], 170 | "source": [ 171 | "regions = combined.groupby('Region')['2014']\n", 172 | "summary = regions.describe().unstack()\n", 173 | "summary" 174 | ] 175 | }, 176 | { 177 | "cell_type": "markdown", 178 | "metadata": {}, 179 | "source": [ 180 | "## Plotting" 181 | ] 182 | }, 183 | { 184 | "cell_type": "code", 185 | "execution_count": null, 186 | "metadata": { 187 | "collapsed": false 188 | }, 189 | "outputs": [], 190 | "source": [ 191 | "unstacked = combined.set_index([combined.index,\n", 192 | " 'Region'])['2014'].unstack().drop(np.nan, 1)\n", 193 | "ax = unstacked.plot(kind='box',\n", 194 | " rot=90,\n", 195 | " ylim=(0, 100000),\n", 196 | " return_type='axes')" 197 | ] 198 | }, 199 | { 200 | "cell_type": "markdown", 201 | "metadata": {}, 202 | "source": [ 203 | "## Write the results back to Excel" 204 | ] 205 | }, 206 | { 207 | "cell_type": "code", 208 | "execution_count": null, 209 | "metadata": { 210 | "collapsed": false 211 | }, 212 | "outputs": [], 213 | "source": [ 214 | "wb.set_current()\n", 215 | "xw.Sheet.add('2014')" 216 | ] 217 | }, 218 | { 219 | "cell_type": "code", 220 | "execution_count": null, 221 | "metadata": { 222 | "collapsed": false 223 | }, 224 | "outputs": [], 225 | "source": [ 226 | "xw.Range('A1').value = 'GDP per capita 2014'\n", 227 | "xw.Range('A2').value = summary.round(2)" 228 | ] 229 | }, 230 | { 231 | "cell_type": "code", 232 | "execution_count": null, 233 | "metadata": { 234 | "collapsed": true 235 | }, 236 | "outputs": [], 237 | "source": [ 238 | "xw.Sheet('2014').autofit()" 239 | ] 240 | }, 241 | { 242 | "cell_type": "code", 243 | "execution_count": null, 244 | "metadata": { 245 | "collapsed": false 246 | }, 247 | "outputs": [], 248 | "source": [ 249 | "fig = ax.get_figure()\n", 250 | "xw.Plot(fig).show('GDP_PC_2014',\n", 251 | " top=xw.Range('A12').top,\n", 252 | " wkb=wb)" 253 | ] 254 | }, 255 | { 256 | "cell_type": "code", 257 | "execution_count": null, 258 | "metadata": { 259 | "collapsed": true 260 | }, 261 | "outputs": [], 262 | "source": [] 263 | } 264 | ], 265 | "metadata": { 266 | "kernelspec": { 267 | "display_name": "Python 3", 268 | "language": "python", 269 | "name": "python3" 270 | }, 271 | "language_info": { 272 | "codemirror_mode": { 273 | "name": "ipython", 274 | "version": 3 275 | }, 276 | "file_extension": ".py", 277 | "mimetype": "text/x-python", 278 | "name": "python", 279 | "nbconvert_exporter": "python", 280 | "pygments_lexer": "ipython3", 281 | "version": "3.5.1" 282 | }, 283 | "toc": { 284 | "toc_cell": false, 285 | "toc_number_sections": false, 286 | "toc_section_display": "none", 287 | "toc_threshold": 6, 288 | "toc_window_display": false 289 | } 290 | }, 291 | "nbformat": 4, 292 | "nbformat_minor": 0 293 | } 294 | -------------------------------------------------------------------------------- /SwissFinteCH_zrh_20160714/1-GDP/GDP_per_capita.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xlwings/talks/6573104eb0a959a9e563144b6e66da49770f87df/SwissFinteCH_zrh_20160714/1-GDP/GDP_per_capita.xls -------------------------------------------------------------------------------- /SwissFinteCH_zrh_20160714/2-unit-tests/prime_numbers.xlsm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xlwings/talks/6573104eb0a959a9e563144b6e66da49770f87df/SwissFinteCH_zrh_20160714/2-unit-tests/prime_numbers.xlsm -------------------------------------------------------------------------------- /SwissFinteCH_zrh_20160714/2-unit-tests/test_prime_numbers.py: -------------------------------------------------------------------------------- 1 | import os 2 | import unittest 3 | import xlwings as xw 4 | 5 | this_dir = os.path.dirname(os.path.abspath(__file__)) 6 | 7 | 8 | class TestPrime(unittest.TestCase): 9 | def setUp(self): 10 | xl_file = os.path.join(this_dir, 'prime_numbers.xlsm') 11 | self.wb = xw.Workbook(xl_file) 12 | 13 | # Map functions 14 | self.is_prime = self.wb.macro('Module1.is_prime') 15 | 16 | def test_negative(self): 17 | self.assertFalse(self.is_prime(-5)) 18 | 19 | def test_zero(self): 20 | self.assertFalse(self.is_prime(0)) 21 | 22 | def test_100(self): 23 | """Tests all number numbers from 1 to 100, taken from https://en.wikipedia.org/wiki/Prime_number""" 24 | prime_numbers = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] 25 | for n in range(1, 101): 26 | if n in prime_numbers: 27 | self.assertTrue(self.is_prime(n)) 28 | else: 29 | self.assertFalse(self.is_prime(n)) 30 | 31 | @staticmethod 32 | def is_prime2(number): 33 | """Alternative implementation of the VBA function""" 34 | if number <= 1: 35 | return False 36 | 37 | for i in range(2, number): 38 | if number % i == 0: 39 | return False 40 | 41 | return True 42 | 43 | def test_100_alternative(self): 44 | """Compare the VBA implementation with an alternative implementation in Python""" 45 | for n in range(1, 101): 46 | self.assertEqual(self.is_prime(n), self.is_prime2(n)) 47 | 48 | 49 | if __name__ == '__main__': 50 | unittest.main() 51 | -------------------------------------------------------------------------------- /SwissFinteCH_zrh_20160714/4-corr/corr.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | import seaborn as sns 3 | import matplotlib.pyplot as plt 4 | import plotly 5 | import plotly.graph_objs as go 6 | import xlwings as xw 7 | 8 | @xw.func 9 | @xw.arg('x', pd.DataFrame) 10 | def CORREL2(x): 11 | return x.corr() 12 | 13 | @xw.func 14 | @xw.arg('corr', pd.DataFrame) 15 | def corr_plot(corr): 16 | wb = xw.Workbook.caller() 17 | ax = sns.heatmap(corr, vmin=-1, vmax=1, linewidths=.5) 18 | plt.yticks(rotation=0) 19 | plt.xticks(rotation=90) 20 | fig = ax.get_figure() 21 | xw.Plot(fig).show('CorrPlot', sheet=1) 22 | plt.close() 23 | return '' 24 | 25 | @xw.func 26 | @xw.arg('corr', pd.DataFrame) 27 | def corr_plotly(corr): 28 | plotly.offline.plot({ 29 | "data": [ 30 | go.Heatmap( 31 | z=corr.iloc[::-1].values, 32 | x=list(corr.columns), 33 | y=list(reversed(corr.columns)), 34 | zmin=-1, 35 | zmax=1 36 | ) 37 | ] 38 | }) 39 | return '' 40 | -------------------------------------------------------------------------------- /SwissFinteCH_zrh_20160714/4-corr/corr.xlsm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xlwings/talks/6573104eb0a959a9e563144b6e66da49770f87df/SwissFinteCH_zrh_20160714/4-corr/corr.xlsm -------------------------------------------------------------------------------- /demo_interactive_xlwings.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "metadata": { 3 | "name": "", 4 | "signature": "sha256:ccea522166c2158bf2f92a83f74d51b4e18e371476c926f4c5e92a7c30c12403" 5 | }, 6 | "nbformat": 3, 7 | "nbformat_minor": 0, 8 | "worksheets": [ 9 | { 10 | "cells": [ 11 | { 12 | "cell_type": "heading", 13 | "level": 1, 14 | "metadata": {}, 15 | "source": [ 16 | "The Basics" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "collapsed": false, 22 | "input": [ 23 | "from xlwings import Workbook, Range\n", 24 | "wb = Workbook()" 25 | ], 26 | "language": "python", 27 | "metadata": {}, 28 | "outputs": [] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "collapsed": false, 33 | "input": [ 34 | "Range('A1').value = 'Hello xlwings!'" 35 | ], 36 | "language": "python", 37 | "metadata": {}, 38 | "outputs": [] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "collapsed": false, 43 | "input": [ 44 | "Range((1,1)).value" 45 | ], 46 | "language": "python", 47 | "metadata": {}, 48 | "outputs": [] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "collapsed": false, 53 | "input": [ 54 | "from datetime import date\n", 55 | "Range('Sheet1', 'A3:B4').value = date.today()" 56 | ], 57 | "language": "python", 58 | "metadata": {}, 59 | "outputs": [] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "collapsed": false, 64 | "input": [ 65 | "Range('A6').value = [['one', 'two'],\n", 66 | " [1.1, 2.2],\n", 67 | " [3.3, None]]" 68 | ], 69 | "language": "python", 70 | "metadata": {}, 71 | "outputs": [] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "collapsed": false, 76 | "input": [ 77 | "Range('A6').table.value" 78 | ], 79 | "language": "python", 80 | "metadata": {}, 81 | "outputs": [] 82 | }, 83 | { 84 | "cell_type": "heading", 85 | "level": 1, 86 | "metadata": {}, 87 | "source": [ 88 | "NumPy Arrays" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "collapsed": false, 94 | "input": [ 95 | "import numpy as np\n", 96 | "Range('A10').value = np.eye(3)" 97 | ], 98 | "language": "python", 99 | "metadata": {}, 100 | "outputs": [] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "collapsed": false, 105 | "input": [ 106 | "Range('A7', asarray=True).table.value" 107 | ], 108 | "language": "python", 109 | "metadata": {}, 110 | "outputs": [] 111 | }, 112 | { 113 | "cell_type": "heading", 114 | "level": 1, 115 | "metadata": {}, 116 | "source": [ 117 | "Pandas DataFrames" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "collapsed": false, 123 | "input": [ 124 | "from pandas import DataFrame\n", 125 | "data = Range('A6').table.value\n", 126 | "df = DataFrame(data[1:], columns=data[0])\n", 127 | "df" 128 | ], 129 | "language": "python", 130 | "metadata": {}, 131 | "outputs": [] 132 | }, 133 | { 134 | "cell_type": "code", 135 | "collapsed": false, 136 | "input": [ 137 | "Range('A14').value = df" 138 | ], 139 | "language": "python", 140 | "metadata": {}, 141 | "outputs": [] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "collapsed": false, 146 | "input": [ 147 | "Range('A18', index=False, header=True).value = df" 148 | ], 149 | "language": "python", 150 | "metadata": {}, 151 | "outputs": [] 152 | }, 153 | { 154 | "cell_type": "heading", 155 | "level": 1, 156 | "metadata": {}, 157 | "source": [ 158 | "Excel Charts" 159 | ] 160 | }, 161 | { 162 | "cell_type": "code", 163 | "collapsed": false, 164 | "input": [ 165 | "from xlwings import Chart, ChartType\n", 166 | "chart = Chart.add(source_data=Range('A6').table,\n", 167 | " chart_type=ChartType.xlDoughnut)" 168 | ], 169 | "language": "python", 170 | "metadata": {}, 171 | "outputs": [] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "collapsed": false, 176 | "input": [], 177 | "language": "python", 178 | "metadata": {}, 179 | "outputs": [] 180 | } 181 | ], 182 | "metadata": {} 183 | } 184 | ] 185 | } -------------------------------------------------------------------------------- /for_python_quants_conference_nyc_20160506/GDP_per_capita.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xlwings/talks/6573104eb0a959a9e563144b6e66da49770f87df/for_python_quants_conference_nyc_20160506/GDP_per_capita.xls -------------------------------------------------------------------------------- /for_python_quants_conference_nyc_20160506/corr.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | import seaborn as sns 3 | import matplotlib.pyplot as plt 4 | import plotly 5 | import plotly.graph_objs as go 6 | import xlwings as xw 7 | 8 | @xw.func 9 | @xw.arg('x', pd.DataFrame) 10 | def CORREL2(x): 11 | return x.corr() 12 | 13 | @xw.func 14 | @xw.arg('corr', pd.DataFrame) 15 | def corr_plot(corr): 16 | wb = xw.Workbook.caller() 17 | ax = sns.heatmap(corr, vmin=-1, vmax=1, linewidths=.5) 18 | plt.yticks(rotation=0) 19 | plt.xticks(rotation=90) 20 | fig = ax.get_figure() 21 | xw.Plot(fig).show('CorrPlot', sheet=1) 22 | plt.close() 23 | return '' 24 | 25 | @xw.func 26 | @xw.arg('corr', pd.DataFrame) 27 | def corr_plotly(corr): 28 | plotly.offline.plot({ 29 | "data": [ 30 | go.Heatmap( 31 | z=corr.iloc[::-1].values, 32 | x=list(corr.columns), 33 | y=list(reversed(corr.columns)), 34 | zmin=-1, 35 | zmax=1 36 | ) 37 | ] 38 | }) 39 | return '' 40 | -------------------------------------------------------------------------------- /for_python_quants_conference_nyc_20160506/corr.xlsm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xlwings/talks/6573104eb0a959a9e563144b6e66da49770f87df/for_python_quants_conference_nyc_20160506/corr.xlsm -------------------------------------------------------------------------------- /meetup_coding_bootcamp20210501.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Python for Excel" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": {}, 14 | "outputs": [], 15 | "source": [ 16 | "from pathlib import Path\n", 17 | "import pandas as pd" 18 | ] 19 | }, 20 | { 21 | "cell_type": "markdown", 22 | "metadata": {}, 23 | "source": [ 24 | "# Having a quick look" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": null, 30 | "metadata": {}, 31 | "outputs": [], 32 | "source": [ 33 | "# requires \"sales_data\" folder from\n", 34 | "# https://github.com/fzumstein/python-for-excel\n", 35 | "df = pd.read_excel('sales_data/new/January.xlsx')\n", 36 | "df" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": null, 42 | "metadata": {}, 43 | "outputs": [], 44 | "source": [ 45 | "df.info()" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": null, 51 | "metadata": {}, 52 | "outputs": [], 53 | "source": [ 54 | "df.describe()" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": {}, 60 | "source": [ 61 | "# Reading all files into a pandas DataFrame" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": null, 67 | "metadata": {}, 68 | "outputs": [], 69 | "source": [ 70 | "# Read in all Excel files from all subfolders of sales_data\n", 71 | "parts = []\n", 72 | "for path in Path(\"sales_data\").rglob(\"*.xls*\"):\n", 73 | " print(f'Reading {path.name}')\n", 74 | " part = pd.read_excel(path, index_col=\"transaction_id\")\n", 75 | " parts.append(part)" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": null, 81 | "metadata": {}, 82 | "outputs": [], 83 | "source": [ 84 | "# Combine the DataFrames from each file into a single DataFrame\n", 85 | "# pandas takes care of properly aligning the columns\n", 86 | "data = pd.concat(parts)" 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": null, 92 | "metadata": {}, 93 | "outputs": [], 94 | "source": [ 95 | "data.sort_values('transaction_date')" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": null, 101 | "metadata": {}, 102 | "outputs": [], 103 | "source": [ 104 | "data.info()" 105 | ] 106 | }, 107 | { 108 | "cell_type": "markdown", 109 | "metadata": {}, 110 | "source": [ 111 | "# Pivot Table" 112 | ] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "execution_count": null, 117 | "metadata": {}, 118 | "outputs": [], 119 | "source": [ 120 | "# Pivot each store into a column and sum up all transactions per date\n", 121 | "pivot = pd.pivot_table(data,\n", 122 | " index=\"transaction_date\", columns=\"store\",\n", 123 | " values=\"amount\", aggfunc=\"sum\")\n", 124 | "pivot" 125 | ] 126 | }, 127 | { 128 | "cell_type": "markdown", 129 | "metadata": {}, 130 | "source": [ 131 | "# Resampling: Aggregating by month" 132 | ] 133 | }, 134 | { 135 | "cell_type": "code", 136 | "execution_count": null, 137 | "metadata": {}, 138 | "outputs": [], 139 | "source": [ 140 | "# Resample to end of month and assign an index name\n", 141 | "summary = pivot.resample(\"M\").sum()\n", 142 | "summary.index.name = \"Month\"\n", 143 | "summary" 144 | ] 145 | }, 146 | { 147 | "cell_type": "markdown", 148 | "metadata": {}, 149 | "source": [ 150 | "# Plotting with Plotly" 151 | ] 152 | }, 153 | { 154 | "cell_type": "code", 155 | "execution_count": null, 156 | "metadata": {}, 157 | "outputs": [], 158 | "source": [ 159 | "pd.options.plotting.backend = \"plotly\"\n", 160 | "summary.plot.bar(barmode=\"group\")" 161 | ] 162 | }, 163 | { 164 | "cell_type": "markdown", 165 | "metadata": {}, 166 | "source": [ 167 | "# Writing an Excel report with pandas" 168 | ] 169 | }, 170 | { 171 | "cell_type": "code", 172 | "execution_count": null, 173 | "metadata": {}, 174 | "outputs": [], 175 | "source": [ 176 | "# Write summary report to Excel file\n", 177 | "summary.to_excel(\"sales_report_pandas.xlsx\")" 178 | ] 179 | }, 180 | { 181 | "cell_type": "markdown", 182 | "metadata": {}, 183 | "source": [ 184 | "# Excel Automation with xlwings" 185 | ] 186 | }, 187 | { 188 | "cell_type": "markdown", 189 | "metadata": {}, 190 | "source": [ 191 | "## Interactive use" 192 | ] 193 | }, 194 | { 195 | "cell_type": "code", 196 | "execution_count": null, 197 | "metadata": {}, 198 | "outputs": [], 199 | "source": [ 200 | "import xlwings as xw\n", 201 | "from xlwings import view, load" 202 | ] 203 | }, 204 | { 205 | "cell_type": "code", 206 | "execution_count": null, 207 | "metadata": {}, 208 | "outputs": [], 209 | "source": [ 210 | "view(summary)" 211 | ] 212 | }, 213 | { 214 | "cell_type": "code", 215 | "execution_count": null, 216 | "metadata": {}, 217 | "outputs": [], 218 | "source": [ 219 | "df = load()\n", 220 | "df" 221 | ] 222 | }, 223 | { 224 | "cell_type": "markdown", 225 | "metadata": {}, 226 | "source": [ 227 | "## True editing of Excel files" 228 | ] 229 | }, 230 | { 231 | "cell_type": "code", 232 | "execution_count": null, 233 | "metadata": {}, 234 | "outputs": [], 235 | "source": [ 236 | "template = xw.Book(\"sales_report_template.xlsx\")\n", 237 | "sheet = template.sheets[\"Sheet1\"]" 238 | ] 239 | }, 240 | { 241 | "cell_type": "code", 242 | "execution_count": null, 243 | "metadata": {}, 244 | "outputs": [], 245 | "source": [ 246 | "sheet[\"B3\"].value = summary" 247 | ] 248 | }, 249 | { 250 | "cell_type": "code", 251 | "execution_count": null, 252 | "metadata": {}, 253 | "outputs": [], 254 | "source": [ 255 | "sheet[\"B3\"].expand().columns.autofit()" 256 | ] 257 | }, 258 | { 259 | "cell_type": "code", 260 | "execution_count": null, 261 | "metadata": {}, 262 | "outputs": [], 263 | "source": [ 264 | "sheet.charts[\"Chart 1\"].set_source_data(sheet[\"B3\"].expand())" 265 | ] 266 | }, 267 | { 268 | "cell_type": "code", 269 | "execution_count": null, 270 | "metadata": {}, 271 | "outputs": [], 272 | "source": [ 273 | "template.save(\"sales_report_xlwings.xlsx\")" 274 | ] 275 | } 276 | ], 277 | "metadata": { 278 | "kernelspec": { 279 | "display_name": "Python 3", 280 | "language": "python", 281 | "name": "python3" 282 | }, 283 | "language_info": { 284 | "codemirror_mode": { 285 | "name": "ipython", 286 | "version": 3 287 | }, 288 | "file_extension": ".py", 289 | "mimetype": "text/x-python", 290 | "name": "python", 291 | "nbconvert_exporter": "python", 292 | "pygments_lexer": "ipython3", 293 | "version": "3.7.4" 294 | } 295 | }, 296 | "nbformat": 4, 297 | "nbformat_minor": 4 298 | } 299 | -------------------------------------------------------------------------------- /nyc_cab.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xlwings/talks/6573104eb0a959a9e563144b6e66da49770f87df/nyc_cab.JPG -------------------------------------------------------------------------------- /open_source_in_quant_finance_frankfurt_20150605.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Open Source in Quantitative Finance 2015 (Frankfurt/Eschborn)" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "# Quandl WIKI dataset - A first look at the data" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": null, 20 | "metadata": { 21 | "collapsed": true 22 | }, 23 | "outputs": [], 24 | "source": [ 25 | "import numpy as np\n", 26 | "import pandas as pd" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": null, 32 | "metadata": { 33 | "collapsed": true 34 | }, 35 | "outputs": [], 36 | "source": [ 37 | "# TODO: adjust directory\n", 38 | "# Download file from: https://www.quandl.com/api/v1/datasets/WIKI/MSFT.csv and save as MSFT.csv\n", 39 | "# Alternatively, load data directly via quandl package\n", 40 | "data_dir = '/Users/Felix/quandl_wiki/'" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": null, 46 | "metadata": { 47 | "collapsed": false 48 | }, 49 | "outputs": [], 50 | "source": [ 51 | "head = pd.read_csv(data_dir + 'MSFT.csv', nrows=20, index_col=0, parse_dates=True)\n", 52 | "head" 53 | ] 54 | }, 55 | { 56 | "cell_type": "markdown", 57 | "metadata": {}, 58 | "source": [ 59 | "## qgrid (by Quantopian)" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": null, 65 | "metadata": { 66 | "collapsed": false 67 | }, 68 | "outputs": [], 69 | "source": [ 70 | "import qgrid\n", 71 | "qgrid.nbinstall()\n", 72 | "qgrid.show_grid(head)" 73 | ] 74 | }, 75 | { 76 | "cell_type": "markdown", 77 | "metadata": {}, 78 | "source": [ 79 | "# Let's have a second look...this time in Excel" 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": {}, 85 | "source": [ 86 | "## By default, `pandas` uses\n", 87 | "* ### `XlsxWriter` to write `.xlsx`\n", 88 | "* ### `openpyxl` to write `.xlsm`\n", 89 | "* ### `xlwt` to write `.xls`" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": null, 95 | "metadata": { 96 | "collapsed": true 97 | }, 98 | "outputs": [], 99 | "source": [ 100 | "head.to_excel('pandas_out.xlsx', 'Sheet1')" 101 | ] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "execution_count": null, 106 | "metadata": { 107 | "collapsed": true 108 | }, 109 | "outputs": [], 110 | "source": [ 111 | "!open pandas_out.xlsx # on Windows: !start pandas_out.xlsx" 112 | ] 113 | }, 114 | { 115 | "cell_type": "markdown", 116 | "metadata": {}, 117 | "source": [ 118 | "## Manipulating existing Excel sheets is ... limited\n", 119 | "\n", 120 | "* ### Openpyxl can do it, but not everything is supported (e.g. charts are not)" 121 | ] 122 | }, 123 | { 124 | "cell_type": "code", 125 | "execution_count": null, 126 | "metadata": { 127 | "collapsed": true 128 | }, 129 | "outputs": [], 130 | "source": [ 131 | "from openpyxl import load_workbook\n", 132 | "\n", 133 | "writer = pd.ExcelWriter('pandas_out.xlsx', engine='openpyxl')\n", 134 | "writer.book = load_workbook('pandas_out.xlsx')\n", 135 | "head.to_excel(writer, 'Sheet2')\n", 136 | "\n", 137 | "writer.save()" 138 | ] 139 | }, 140 | { 141 | "cell_type": "code", 142 | "execution_count": null, 143 | "metadata": { 144 | "collapsed": true 145 | }, 146 | "outputs": [], 147 | "source": [ 148 | "!open pandas_out.xlsx # on Windows: !start pandas_out.xlsx" 149 | ] 150 | }, 151 | { 152 | "cell_type": "markdown", 153 | "metadata": {}, 154 | "source": [ 155 | "# `xlwings`: interacts with an open/unsaved Workbook\n", 156 | "* ### Windows: by wrapping `pywin32` (COM interface)\n", 157 | "* ### Mac: by wrapping `appscript` (AppleScript)\n", 158 | "* ### In turn, xlwings needs an installation of Microsoft Excel" 159 | ] 160 | }, 161 | { 162 | "cell_type": "code", 163 | "execution_count": null, 164 | "metadata": { 165 | "collapsed": true 166 | }, 167 | "outputs": [], 168 | "source": [ 169 | "from xlwings import Application, Workbook, Range, Sheet, Chart, ChartType" 170 | ] 171 | }, 172 | { 173 | "cell_type": "code", 174 | "execution_count": null, 175 | "metadata": { 176 | "collapsed": true 177 | }, 178 | "outputs": [], 179 | "source": [ 180 | "wb = Workbook()\n", 181 | "Range(\"A1\").value = head\n", 182 | "Sheet(1).autofit()" 183 | ] 184 | }, 185 | { 186 | "cell_type": "code", 187 | "execution_count": null, 188 | "metadata": { 189 | "collapsed": true 190 | }, 191 | "outputs": [], 192 | "source": [ 193 | "Sheet.add('Sheet2')\n", 194 | "Range('Sheet2', 'B2').value = head\n", 195 | "Sheet(2).autofit()" 196 | ] 197 | }, 198 | { 199 | "cell_type": "markdown", 200 | "metadata": {}, 201 | "source": [ 202 | "### 2d arrays: nested lists" 203 | ] 204 | }, 205 | { 206 | "cell_type": "code", 207 | "execution_count": null, 208 | "metadata": { 209 | "collapsed": false 210 | }, 211 | "outputs": [], 212 | "source": [ 213 | "# A1 Notation\n", 214 | "Sheet(1).activate()\n", 215 | "Range('Sheet1', 'A1:B2').value" 216 | ] 217 | }, 218 | { 219 | "cell_type": "code", 220 | "execution_count": null, 221 | "metadata": { 222 | "collapsed": false 223 | }, 224 | "outputs": [], 225 | "source": [ 226 | "# The same with Index notation (Excel-1-based)\n", 227 | "Range(1, (1,1),(2,2)).value" 228 | ] 229 | }, 230 | { 231 | "cell_type": "code", 232 | "execution_count": null, 233 | "metadata": { 234 | "collapsed": false 235 | }, 236 | "outputs": [], 237 | "source": [ 238 | "# Get a contiguous Range of cells (as in: \"Ctrl-Shift-Down-and-Right\")\n", 239 | "out = Range(1, 'K2').table.value\n", 240 | "out" 241 | ] 242 | }, 243 | { 244 | "cell_type": "code", 245 | "execution_count": null, 246 | "metadata": { 247 | "collapsed": true 248 | }, 249 | "outputs": [], 250 | "source": [ 251 | "# Assign to top-left corner\n", 252 | "Range(1, 'B25').value = out" 253 | ] 254 | }, 255 | { 256 | "cell_type": "markdown", 257 | "metadata": {}, 258 | "source": [ 259 | "### `table` returns a `Range` object, so we can use any `Range` attribute/method on it:" 260 | ] 261 | }, 262 | { 263 | "cell_type": "code", 264 | "execution_count": null, 265 | "metadata": { 266 | "collapsed": true 267 | }, 268 | "outputs": [], 269 | "source": [ 270 | "Range('B25').table.clear_contents()" 271 | ] 272 | }, 273 | { 274 | "cell_type": "markdown", 275 | "metadata": {}, 276 | "source": [ 277 | "### `NumPy` Arrays" 278 | ] 279 | }, 280 | { 281 | "cell_type": "code", 282 | "execution_count": null, 283 | "metadata": { 284 | "collapsed": false 285 | }, 286 | "outputs": [], 287 | "source": [ 288 | "Range(1, 'K2', asarray=True).table.value" 289 | ] 290 | }, 291 | { 292 | "cell_type": "markdown", 293 | "metadata": {}, 294 | "source": [ 295 | "### `pandas` DataFrames" 296 | ] 297 | }, 298 | { 299 | "cell_type": "code", 300 | "execution_count": null, 301 | "metadata": { 302 | "collapsed": false 303 | }, 304 | "outputs": [], 305 | "source": [ 306 | "data = Range('A1').table.value\n", 307 | "df = pd.DataFrame(data[1:], columns=data[0])\n", 308 | "df" 309 | ] 310 | }, 311 | { 312 | "cell_type": "markdown", 313 | "metadata": {}, 314 | "source": [ 315 | "# Let's do some `pandas` magic" 316 | ] 317 | }, 318 | { 319 | "cell_type": "code", 320 | "execution_count": null, 321 | "metadata": { 322 | "collapsed": false 323 | }, 324 | "outputs": [], 325 | "source": [ 326 | "df = pd.read_csv(data_dir + 'MSFT.csv', index_col=0, parse_dates=True)\n", 327 | "df.head()" 328 | ] 329 | }, 330 | { 331 | "cell_type": "markdown", 332 | "metadata": {}, 333 | "source": [ 334 | "### Let's create a \"behavior\" table: Adj. Volume by month x weekday" 335 | ] 336 | }, 337 | { 338 | "cell_type": "code", 339 | "execution_count": null, 340 | "metadata": { 341 | "collapsed": false 342 | }, 343 | "outputs": [], 344 | "source": [ 345 | "grouped = df.groupby([df.index.month, df.index.weekday])\n", 346 | "behavior = grouped['Adj. Volume'].aggregate(np.sum).unstack()\n", 347 | "behavior.columns = ['MO', 'TU', 'WE', 'TH', 'FR']\n", 348 | "behavior.index = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']\n", 349 | "behavior" 350 | ] 351 | }, 352 | { 353 | "cell_type": "markdown", 354 | "metadata": {}, 355 | "source": [ 356 | "### Now let's use Excel to create a heatmap" 357 | ] 358 | }, 359 | { 360 | "cell_type": "code", 361 | "execution_count": null, 362 | "metadata": { 363 | "collapsed": true 364 | }, 365 | "outputs": [], 366 | "source": [ 367 | "wb_heatmap = Workbook()\n", 368 | "Range('A1').value = behavior\n", 369 | "Range('A:A').number_format = 'HH:MM'\n", 370 | "Sheet(1).autofit()" 371 | ] 372 | }, 373 | { 374 | "cell_type": "markdown", 375 | "metadata": {}, 376 | "source": [ 377 | "## Let's add a Chart, too" 378 | ] 379 | }, 380 | { 381 | "cell_type": "code", 382 | "execution_count": null, 383 | "metadata": { 384 | "collapsed": true 385 | }, 386 | "outputs": [], 387 | "source": [ 388 | "chart = Chart.add(source_data=Range('A1').table,\n", 389 | " chart_type=ChartType.xlLine)" 390 | ] 391 | }, 392 | { 393 | "cell_type": "markdown", 394 | "metadata": {}, 395 | "source": [ 396 | "### Manipulate attributes" 397 | ] 398 | }, 399 | { 400 | "cell_type": "code", 401 | "execution_count": null, 402 | "metadata": { 403 | "collapsed": false 404 | }, 405 | "outputs": [], 406 | "source": [ 407 | "chart.name" 408 | ] 409 | }, 410 | { 411 | "cell_type": "code", 412 | "execution_count": null, 413 | "metadata": { 414 | "collapsed": false 415 | }, 416 | "outputs": [], 417 | "source": [ 418 | "chart.name = 'AdjVolume'\n", 419 | "chart.name" 420 | ] 421 | }, 422 | { 423 | "cell_type": "markdown", 424 | "metadata": {}, 425 | "source": [ 426 | "# One more thing: PDF Reporting with ReportLab" 427 | ] 428 | }, 429 | { 430 | "cell_type": "code", 431 | "execution_count": null, 432 | "metadata": { 433 | "collapsed": true 434 | }, 435 | "outputs": [], 436 | "source": [ 437 | "from reportlab.platypus import SimpleDocTemplate, Table\n", 438 | "\n", 439 | "# reportlab initialization with container for Flowables\n", 440 | "doc = SimpleDocTemplate(\"report_basics.pdf\")\n", 441 | "elements = []\n", 442 | "\n", 443 | "# Create reportlab table from Excel data\n", 444 | "data = Range('B1').table.value\n", 445 | "table = Table(data)\n", 446 | "\n", 447 | "# Compose content and write PDF document\n", 448 | "elements.append(table)\n", 449 | "doc.build(elements)" 450 | ] 451 | }, 452 | { 453 | "cell_type": "code", 454 | "execution_count": null, 455 | "metadata": { 456 | "collapsed": true 457 | }, 458 | "outputs": [], 459 | "source": [ 460 | "!open report_basics.pdf" 461 | ] 462 | } 463 | ], 464 | "metadata": { 465 | "kernelspec": { 466 | "display_name": "Python 2", 467 | "language": "python", 468 | "name": "python2" 469 | }, 470 | "language_info": { 471 | "codemirror_mode": { 472 | "name": "ipython", 473 | "version": 2 474 | }, 475 | "file_extension": ".py", 476 | "mimetype": "text/x-python", 477 | "name": "python", 478 | "nbconvert_exporter": "python", 479 | "pygments_lexer": "ipython2", 480 | "version": "2.7.9" 481 | } 482 | }, 483 | "nbformat": 4, 484 | "nbformat_minor": 0 485 | } 486 | -------------------------------------------------------------------------------- /opendatascicon_boston_20150531.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Open Data Science Conference 2015 (Boston)\n", 8 | "\n", 9 | "# The NYC Taxi Trip Dataset (2013)\n", 10 | "### **173 million records**, i.e. taxi trips, 28 GB of uncompressed Data\n", 11 | "\n", 12 | "\n", 13 | "http://de.wikipedia.org/wiki/New_York_City_Taxi_Cabs#/media/File:USACab.JPG" 14 | ] 15 | }, 16 | { 17 | "cell_type": "markdown", 18 | "metadata": {}, 19 | "source": [ 20 | "# A first look at the data" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": null, 26 | "metadata": { 27 | "collapsed": true 28 | }, 29 | "outputs": [], 30 | "source": [ 31 | "import numpy as np\n", 32 | "import pandas as pd" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": null, 38 | "metadata": { 39 | "collapsed": true 40 | }, 41 | "outputs": [], 42 | "source": [ 43 | "# TODO: adjust directory\n", 44 | "data_dir = '/Users/Felix/taxi_dataset/'" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": null, 50 | "metadata": { 51 | "collapsed": false 52 | }, 53 | "outputs": [], 54 | "source": [ 55 | "head = pd.read_csv(data_dir + 'trip_data_1.csv', nrows=20)\n", 56 | "head" 57 | ] 58 | }, 59 | { 60 | "cell_type": "markdown", 61 | "metadata": {}, 62 | "source": [ 63 | "## qgrid (by Quantopian)" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": null, 69 | "metadata": { 70 | "collapsed": false 71 | }, 72 | "outputs": [], 73 | "source": [ 74 | "import qgrid\n", 75 | "qgrid.nbinstall()\n", 76 | "qgrid.show_grid(head)" 77 | ] 78 | }, 79 | { 80 | "cell_type": "markdown", 81 | "metadata": {}, 82 | "source": [ 83 | "# Let's have a second look...this time in Excel" 84 | ] 85 | }, 86 | { 87 | "cell_type": "markdown", 88 | "metadata": {}, 89 | "source": [ 90 | "## By default, `pandas` uses\n", 91 | "* ### `XlsxWriter` to write `.xlsx`\n", 92 | "* ### `openpyxl` to write `.xlsm`\n", 93 | "* ### `xlwt` to write `.xls`" 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": null, 99 | "metadata": { 100 | "collapsed": true 101 | }, 102 | "outputs": [], 103 | "source": [ 104 | "head.to_excel('pandas_out.xlsx', 'Sheet1')" 105 | ] 106 | }, 107 | { 108 | "cell_type": "code", 109 | "execution_count": null, 110 | "metadata": { 111 | "collapsed": true 112 | }, 113 | "outputs": [], 114 | "source": [ 115 | "!open pandas_out.xlsx # on Windows: !start pandas_out.xlsx" 116 | ] 117 | }, 118 | { 119 | "cell_type": "markdown", 120 | "metadata": {}, 121 | "source": [ 122 | "## Manipulating existing Excel sheets is ... limited\n", 123 | "\n", 124 | "* ### Openpyxl can do it, but not everything is supported (e.g. charts are not)" 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "execution_count": null, 130 | "metadata": { 131 | "collapsed": true 132 | }, 133 | "outputs": [], 134 | "source": [ 135 | "from openpyxl import load_workbook\n", 136 | "\n", 137 | "writer = pd.ExcelWriter('pandas_out.xlsx', engine='openpyxl')\n", 138 | "writer.book = load_workbook('pandas_out.xlsx')\n", 139 | "head.to_excel(writer, 'Sheet2')\n", 140 | "\n", 141 | "writer.save()" 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": null, 147 | "metadata": { 148 | "collapsed": true 149 | }, 150 | "outputs": [], 151 | "source": [ 152 | "!open pandas_out.xlsx # on Windows: !start pandas_out.xlsx" 153 | ] 154 | }, 155 | { 156 | "cell_type": "markdown", 157 | "metadata": {}, 158 | "source": [ 159 | "# `xlwings`: interacts with an open/unsaved Workbook\n", 160 | "* ### Windows: by wrapping `pywin32` (COM interface)\n", 161 | "* ### Mac: by wrapping `appscript` (AppleScript)\n", 162 | "* ### In turn, xlwings needs an installation of Microsoft Excel" 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": null, 168 | "metadata": { 169 | "collapsed": true 170 | }, 171 | "outputs": [], 172 | "source": [ 173 | "from xlwings import Application, Workbook, Range, Sheet, Chart, ChartType" 174 | ] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": null, 179 | "metadata": { 180 | "collapsed": true 181 | }, 182 | "outputs": [], 183 | "source": [ 184 | "wb = Workbook()\n", 185 | "Range(\"A1\").value = head\n", 186 | "Sheet(1).autofit()" 187 | ] 188 | }, 189 | { 190 | "cell_type": "code", 191 | "execution_count": null, 192 | "metadata": { 193 | "collapsed": true 194 | }, 195 | "outputs": [], 196 | "source": [ 197 | "Sheet.add('Sheet2')\n", 198 | "Range('Sheet2', 'B2').value = head\n", 199 | "Sheet(2).autofit()" 200 | ] 201 | }, 202 | { 203 | "cell_type": "markdown", 204 | "metadata": {}, 205 | "source": [ 206 | "### 2d arrays: nested lists" 207 | ] 208 | }, 209 | { 210 | "cell_type": "code", 211 | "execution_count": null, 212 | "metadata": { 213 | "collapsed": false 214 | }, 215 | "outputs": [], 216 | "source": [ 217 | "# A1 Notation\n", 218 | "Sheet(1).activate()\n", 219 | "Range('Sheet1', 'H1:I2').value" 220 | ] 221 | }, 222 | { 223 | "cell_type": "code", 224 | "execution_count": null, 225 | "metadata": { 226 | "collapsed": false 227 | }, 228 | "outputs": [], 229 | "source": [ 230 | "# The same with Index notation (Excel-1-based)\n", 231 | "Range(1, (1,8),(2,9)).value" 232 | ] 233 | }, 234 | { 235 | "cell_type": "code", 236 | "execution_count": null, 237 | "metadata": { 238 | "collapsed": false 239 | }, 240 | "outputs": [], 241 | "source": [ 242 | "# Get a contiguous Range of cells (as in: \"Ctrl-Shift-Down-and-Right\")\n", 243 | "out = Range(1, 'M2').table.value\n", 244 | "out" 245 | ] 246 | }, 247 | { 248 | "cell_type": "code", 249 | "execution_count": null, 250 | "metadata": { 251 | "collapsed": true 252 | }, 253 | "outputs": [], 254 | "source": [ 255 | "# Assign to top-left corner\n", 256 | "Range(1, 'B25').value = out" 257 | ] 258 | }, 259 | { 260 | "cell_type": "markdown", 261 | "metadata": {}, 262 | "source": [ 263 | "### `table` returns a `Range` object, so we can use any `Range` attribute/method on it:" 264 | ] 265 | }, 266 | { 267 | "cell_type": "code", 268 | "execution_count": null, 269 | "metadata": { 270 | "collapsed": true 271 | }, 272 | "outputs": [], 273 | "source": [ 274 | "Range('B25').table.clear_contents()" 275 | ] 276 | }, 277 | { 278 | "cell_type": "markdown", 279 | "metadata": {}, 280 | "source": [ 281 | "### `NumPy` Arrays" 282 | ] 283 | }, 284 | { 285 | "cell_type": "code", 286 | "execution_count": null, 287 | "metadata": { 288 | "collapsed": false 289 | }, 290 | "outputs": [], 291 | "source": [ 292 | "Range(1, 'M2', asarray=True).table.value" 293 | ] 294 | }, 295 | { 296 | "cell_type": "markdown", 297 | "metadata": {}, 298 | "source": [ 299 | "### `pandas` DataFrames" 300 | ] 301 | }, 302 | { 303 | "cell_type": "code", 304 | "execution_count": null, 305 | "metadata": { 306 | "collapsed": false 307 | }, 308 | "outputs": [], 309 | "source": [ 310 | "data = Range('B1').table.value\n", 311 | "df = pd.DataFrame(data[1:], columns=data[0])\n", 312 | "df" 313 | ] 314 | }, 315 | { 316 | "cell_type": "markdown", 317 | "metadata": {}, 318 | "source": [ 319 | "# Let's do some `pandas` magic on the Taxi dataset" 320 | ] 321 | }, 322 | { 323 | "cell_type": "markdown", 324 | "metadata": {}, 325 | "source": [ 326 | "### `pickup_datetime` and `passenger_count` have been stored in an `HDF5` file (see end of Notebook)" 327 | ] 328 | }, 329 | { 330 | "cell_type": "code", 331 | "execution_count": null, 332 | "metadata": { 333 | "collapsed": true 334 | }, 335 | "outputs": [], 336 | "source": [ 337 | "# No attempts have been made to optimize this...\n", 338 | "store = pd.HDFStore(data_dir + 'test.h5')\n", 339 | "df = store['df']\n", 340 | "store.close()" 341 | ] 342 | }, 343 | { 344 | "cell_type": "code", 345 | "execution_count": null, 346 | "metadata": { 347 | "collapsed": false 348 | }, 349 | "outputs": [], 350 | "source": [ 351 | "df.index" 352 | ] 353 | }, 354 | { 355 | "cell_type": "markdown", 356 | "metadata": {}, 357 | "source": [ 358 | "### Let's create a \"behavior\" table: total passengers per hour and weekday" 359 | ] 360 | }, 361 | { 362 | "cell_type": "code", 363 | "execution_count": null, 364 | "metadata": { 365 | "collapsed": false 366 | }, 367 | "outputs": [], 368 | "source": [ 369 | "df = df.resample('1H', how={'passenger_count': np.sum})\n", 370 | "grouped = df.groupby([df.index.time, df.index.weekday])\n", 371 | "behavior = grouped['passenger_count'].aggregate(np.sum).unstack()\n", 372 | "behavior.columns = ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU']\n", 373 | "behavior" 374 | ] 375 | }, 376 | { 377 | "cell_type": "markdown", 378 | "metadata": {}, 379 | "source": [ 380 | "### Now let's use Excel to create a heatmap" 381 | ] 382 | }, 383 | { 384 | "cell_type": "code", 385 | "execution_count": null, 386 | "metadata": { 387 | "collapsed": true 388 | }, 389 | "outputs": [], 390 | "source": [ 391 | "wb_heatmap = Workbook()\n", 392 | "Range('A1').value = behavior\n", 393 | "Range('A:A').number_format = 'HH:MM'" 394 | ] 395 | }, 396 | { 397 | "cell_type": "markdown", 398 | "metadata": {}, 399 | "source": [ 400 | "## Let's add a Chart, too" 401 | ] 402 | }, 403 | { 404 | "cell_type": "code", 405 | "execution_count": null, 406 | "metadata": { 407 | "collapsed": true 408 | }, 409 | "outputs": [], 410 | "source": [ 411 | "chart = Chart.add(source_data=Range('A1').table,\n", 412 | " chart_type=ChartType.xlLine)" 413 | ] 414 | }, 415 | { 416 | "cell_type": "markdown", 417 | "metadata": {}, 418 | "source": [ 419 | "### Manipulate attributes" 420 | ] 421 | }, 422 | { 423 | "cell_type": "code", 424 | "execution_count": null, 425 | "metadata": { 426 | "collapsed": false 427 | }, 428 | "outputs": [], 429 | "source": [ 430 | "chart.name" 431 | ] 432 | }, 433 | { 434 | "cell_type": "code", 435 | "execution_count": null, 436 | "metadata": { 437 | "collapsed": false 438 | }, 439 | "outputs": [], 440 | "source": [ 441 | "chart.name = 'taxi'\n", 442 | "chart.name" 443 | ] 444 | }, 445 | { 446 | "cell_type": "markdown", 447 | "metadata": {}, 448 | "source": [ 449 | "# One more thing: PDF Reporting with ReportLab" 450 | ] 451 | }, 452 | { 453 | "cell_type": "code", 454 | "execution_count": null, 455 | "metadata": { 456 | "collapsed": true 457 | }, 458 | "outputs": [], 459 | "source": [ 460 | "from reportlab.platypus import SimpleDocTemplate, Table\n", 461 | "\n", 462 | "# reportlab initialization with container for Flowables\n", 463 | "doc = SimpleDocTemplate(\"report_basics.pdf\")\n", 464 | "elements = []\n", 465 | "\n", 466 | "# Create reportlab table from Excel data\n", 467 | "data = Range('B1').table.value\n", 468 | "table = Table(data)\n", 469 | "\n", 470 | "# Compose content and write PDF document\n", 471 | "elements.append(table)\n", 472 | "doc.build(elements)" 473 | ] 474 | }, 475 | { 476 | "cell_type": "code", 477 | "execution_count": null, 478 | "metadata": { 479 | "collapsed": true 480 | }, 481 | "outputs": [], 482 | "source": [ 483 | "!open report_basics.pdf" 484 | ] 485 | }, 486 | { 487 | "cell_type": "markdown", 488 | "metadata": {}, 489 | "source": [ 490 | "# How to get the data\n", 491 | "`$ wget https://nyctaxitrips.blob.core.windows.net/data/trip_data_{1,2,3,4,5,6,7,8,9,10,11,12}.csv.zip`" 492 | ] 493 | }, 494 | { 495 | "cell_type": "markdown", 496 | "metadata": {}, 497 | "source": [ 498 | "# Save `passenger_count` into an `HDF5` file" 499 | ] 500 | }, 501 | { 502 | "cell_type": "code", 503 | "execution_count": null, 504 | "metadata": { 505 | "collapsed": true 506 | }, 507 | "outputs": [], 508 | "source": [ 509 | "# Again: not optimized and you'll need a bit of memory to process this...\n", 510 | "parts = []\n", 511 | "for i in range(1,13):\n", 512 | " part = pd.read_csv(data_dir + 'trip_data_{0}.csv'.format(i),\n", 513 | " parse_dates=True, index_col='pickup_datetime', \n", 514 | " usecols=[5,7], skipinitialspace=True)\n", 515 | " part.sort_index(inplace=True)\n", 516 | " parts.append(part)\n", 517 | " \n", 518 | "# Make one big DataFrame and save to HDF5\n", 519 | "df = pd.concat(parts)\n", 520 | "store = pd.HDFStore(data_dir + 'passenger_count.h5')\n", 521 | "store['df'] = df\n", 522 | "store.close()" 523 | ] 524 | }, 525 | { 526 | "cell_type": "markdown", 527 | "metadata": {}, 528 | "source": [ 529 | "# See also:" 530 | ] 531 | }, 532 | { 533 | "cell_type": "markdown", 534 | "metadata": {}, 535 | "source": [ 536 | "http://chriswhong.com/open-data/foil_nyc_taxi/ \n", 537 | "http://www.theguardian.com/technology/2014/jun/27/new-york-taxi-details-anonymised-data-researchers-warn \n", 538 | "http://nyctaxi.herokuapp.com/ \n", 539 | "\n", 540 | "See these two Notebooks by Continuum Analytics about how to get the data and how to work with Blaze/bcolz on it:\n", 541 | "http://nbviewer.ipython.org/github/ContinuumIO/blaze/blob/gh-pages/notebooks/timings-csv.ipynb\n", 542 | "http://nbviewer.ipython.org/github/ContinuumIO/blaze/blob/gh-pages/notebooks/timings-bcolz.ipynb" 543 | ] 544 | } 545 | ], 546 | "metadata": { 547 | "kernelspec": { 548 | "display_name": "Python 2", 549 | "language": "python", 550 | "name": "python2" 551 | }, 552 | "language_info": { 553 | "codemirror_mode": { 554 | "name": "ipython", 555 | "version": 2 556 | }, 557 | "file_extension": ".py", 558 | "mimetype": "text/x-python", 559 | "name": "python", 560 | "nbconvert_exporter": "python", 561 | "pygments_lexer": "ipython2", 562 | "version": "2.7.9" 563 | } 564 | }, 565 | "nbformat": 4, 566 | "nbformat_minor": 0 567 | } 568 | -------------------------------------------------------------------------------- /pydata_meetup_berlin_20150323.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n", 8 | "

xlwings: PyData Meetup Berlin @ Microsoft Digital Eatery (23-Mar-2015)

\n", 9 | "

xlwings.org

\n", 10 | "

Felix Zumstein, Founder of Zoomer Analytics GmbH

\n", 11 | "

www.zoomeranalytics.com / @zoomeranalytics

\n", 12 | "
" 13 | ] 14 | }, 15 | { 16 | "cell_type": "markdown", 17 | "metadata": {}, 18 | "source": [ 19 | "# The NYC Taxi Trip Dataset (2013)\n", 20 | "### **173 million records**, i.e. taxi trips, 28 GB of uncompressed Data\n", 21 | "\n", 22 | "\n", 23 | "\n", 24 | "http://de.wikipedia.org/wiki/New_York_City_Taxi_Cabs#/media/File:USACab.JPG\n", 25 | "\n", 26 | "\n", 27 | "\n" 28 | ] 29 | }, 30 | { 31 | "cell_type": "markdown", 32 | "metadata": {}, 33 | "source": [ 34 | "# A first look at the data" 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": null, 40 | "metadata": { 41 | "collapsed": true 42 | }, 43 | "outputs": [], 44 | "source": [ 45 | "import numpy as np\n", 46 | "import pandas as pd" 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "execution_count": null, 52 | "metadata": { 53 | "collapsed": true 54 | }, 55 | "outputs": [], 56 | "source": [ 57 | "# TODO: adjust directory\n", 58 | "data_dir = '/Users/Felix/taxi_dataset/'" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": null, 64 | "metadata": { 65 | "collapsed": true 66 | }, 67 | "outputs": [], 68 | "source": [ 69 | "head = pd.read_csv(data_dir + 'trip_data_1.csv', nrows=20)\n", 70 | "head" 71 | ] 72 | }, 73 | { 74 | "cell_type": "markdown", 75 | "metadata": {}, 76 | "source": [ 77 | "# Let's have a second look...this time in Excel" 78 | ] 79 | }, 80 | { 81 | "cell_type": "markdown", 82 | "metadata": {}, 83 | "source": [ 84 | "## By default, `pandas` uses\n", 85 | "* ### `XlsxWriter` to write `.xlsx`\n", 86 | "* ### `openpyxl` to write `.xlsm`\n", 87 | "* ### `xlwt` to write `.xls`" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": null, 93 | "metadata": { 94 | "collapsed": true 95 | }, 96 | "outputs": [], 97 | "source": [ 98 | "head.to_excel('pandas_out.xlsx', sheet_name='Sheet1')" 99 | ] 100 | }, 101 | { 102 | "cell_type": "code", 103 | "execution_count": null, 104 | "metadata": { 105 | "collapsed": true 106 | }, 107 | "outputs": [], 108 | "source": [ 109 | "!open pandas_out.xlsx # on Windows: !start pandas_out.xlsx" 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "metadata": {}, 115 | "source": [ 116 | "### These libraries are platform independent and work without an installion of Excel. However, files get overwritten:" 117 | ] 118 | }, 119 | { 120 | "cell_type": "code", 121 | "execution_count": null, 122 | "metadata": { 123 | "collapsed": true 124 | }, 125 | "outputs": [], 126 | "source": [ 127 | "head.to_excel('pandas_out.xlsx', sheet_name='Sheet2')" 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "execution_count": null, 133 | "metadata": { 134 | "collapsed": true 135 | }, 136 | "outputs": [], 137 | "source": [ 138 | "!open pandas_out.xlsx # on Windows: !start pandas_out.xlsx" 139 | ] 140 | }, 141 | { 142 | "cell_type": "markdown", 143 | "metadata": {}, 144 | "source": [ 145 | "### `pandas` uses the `xlrd` package for reading files, changes need to be saved first:" 146 | ] 147 | }, 148 | { 149 | "cell_type": "code", 150 | "execution_count": null, 151 | "metadata": { 152 | "collapsed": true 153 | }, 154 | "outputs": [], 155 | "source": [ 156 | "pd.read_excel('pandas_out.xlsx', 'Sheet2')" 157 | ] 158 | }, 159 | { 160 | "cell_type": "markdown", 161 | "metadata": {}, 162 | "source": [ 163 | "# `xlwings`: interacts with an open/unsaved Workbook\n", 164 | "* ### Windows: by wrapping `pywin32` (COM interface)\n", 165 | "* ### Mac: by wrapping `appscript` (AppleScript)\n", 166 | "* ### In turn, xlwings needs an installation of Microsoft Excel" 167 | ] 168 | }, 169 | { 170 | "cell_type": "code", 171 | "execution_count": null, 172 | "metadata": { 173 | "collapsed": true 174 | }, 175 | "outputs": [], 176 | "source": [ 177 | "from xlwings import Application, Workbook, Range, Sheet, Chart, ChartType" 178 | ] 179 | }, 180 | { 181 | "cell_type": "code", 182 | "execution_count": null, 183 | "metadata": { 184 | "collapsed": true 185 | }, 186 | "outputs": [], 187 | "source": [ 188 | "wb = Workbook()\n", 189 | "Range(\"A1\").value = head\n", 190 | "Sheet(1).autofit()\n", 191 | "wb.current()" 192 | ] 193 | }, 194 | { 195 | "cell_type": "code", 196 | "execution_count": null, 197 | "metadata": { 198 | "collapsed": true 199 | }, 200 | "outputs": [], 201 | "source": [ 202 | "Sheet.add('Sheet2')\n", 203 | "Range('Sheet2', 'B2').value = head\n", 204 | "Sheet(2).autofit()" 205 | ] 206 | }, 207 | { 208 | "cell_type": "markdown", 209 | "metadata": {}, 210 | "source": [ 211 | "### 2d arrays: nested lists" 212 | ] 213 | }, 214 | { 215 | "cell_type": "code", 216 | "execution_count": null, 217 | "metadata": { 218 | "collapsed": true 219 | }, 220 | "outputs": [], 221 | "source": [ 222 | "# A1 Notation\n", 223 | "Sheet(1).activate()\n", 224 | "Range('Sheet1', 'H1:I2').value" 225 | ] 226 | }, 227 | { 228 | "cell_type": "code", 229 | "execution_count": null, 230 | "metadata": { 231 | "collapsed": true 232 | }, 233 | "outputs": [], 234 | "source": [ 235 | "# The same with Index notation (Excel-1-based)\n", 236 | "Range(1, (1,8),(2,9)).value" 237 | ] 238 | }, 239 | { 240 | "cell_type": "code", 241 | "execution_count": null, 242 | "metadata": { 243 | "collapsed": true 244 | }, 245 | "outputs": [], 246 | "source": [ 247 | "# Get a contiguous Range of cells (as in: \"Ctrl-Shift-Down-and-Right\")\n", 248 | "out = Range(1, 'M2').table.value\n", 249 | "out" 250 | ] 251 | }, 252 | { 253 | "cell_type": "code", 254 | "execution_count": null, 255 | "metadata": { 256 | "collapsed": true 257 | }, 258 | "outputs": [], 259 | "source": [ 260 | "# Assign to top-left corner\n", 261 | "Range(1, 'B25').value = out" 262 | ] 263 | }, 264 | { 265 | "cell_type": "markdown", 266 | "metadata": {}, 267 | "source": [ 268 | "### `table` returns a `Range` object, so we can use any `Range` attribute/method on it:" 269 | ] 270 | }, 271 | { 272 | "cell_type": "code", 273 | "execution_count": null, 274 | "metadata": { 275 | "collapsed": true 276 | }, 277 | "outputs": [], 278 | "source": [ 279 | "Range('B25').table.clear_contents()" 280 | ] 281 | }, 282 | { 283 | "cell_type": "markdown", 284 | "metadata": {}, 285 | "source": [ 286 | "### `NumPy` Arrays" 287 | ] 288 | }, 289 | { 290 | "cell_type": "code", 291 | "execution_count": null, 292 | "metadata": { 293 | "collapsed": true 294 | }, 295 | "outputs": [], 296 | "source": [ 297 | "Range(1, 'M2', asarray=True).table.value" 298 | ] 299 | }, 300 | { 301 | "cell_type": "markdown", 302 | "metadata": {}, 303 | "source": [ 304 | "### `pandas` DataFrames" 305 | ] 306 | }, 307 | { 308 | "cell_type": "code", 309 | "execution_count": null, 310 | "metadata": { 311 | "collapsed": true 312 | }, 313 | "outputs": [], 314 | "source": [ 315 | "data = Range('B1').table.value\n", 316 | "# index = Range('A2').vertical.value # optional\n", 317 | "df = pd.DataFrame(data[1:], columns=data[0])\n", 318 | "df" 319 | ] 320 | }, 321 | { 322 | "cell_type": "markdown", 323 | "metadata": {}, 324 | "source": [ 325 | "# Let's do some `pandas` magic on the Taxi dataset" 326 | ] 327 | }, 328 | { 329 | "cell_type": "markdown", 330 | "metadata": {}, 331 | "source": [ 332 | "### `pickup_datetime` and `passenger_count` have been stored in an `HDF5` file (see end of Notebook)" 333 | ] 334 | }, 335 | { 336 | "cell_type": "code", 337 | "execution_count": null, 338 | "metadata": { 339 | "collapsed": true 340 | }, 341 | "outputs": [], 342 | "source": [ 343 | "# No attempts have been made to optimize this...\n", 344 | "store = pd.HDFStore(data_dir + 'test.h5')\n", 345 | "df = store['df']\n", 346 | "store.close()" 347 | ] 348 | }, 349 | { 350 | "cell_type": "code", 351 | "execution_count": null, 352 | "metadata": { 353 | "collapsed": true 354 | }, 355 | "outputs": [], 356 | "source": [ 357 | "df.index" 358 | ] 359 | }, 360 | { 361 | "cell_type": "markdown", 362 | "metadata": {}, 363 | "source": [ 364 | "### Let's create a \"behavior\" table: total passengers per hour and weekday" 365 | ] 366 | }, 367 | { 368 | "cell_type": "code", 369 | "execution_count": null, 370 | "metadata": { 371 | "collapsed": true 372 | }, 373 | "outputs": [], 374 | "source": [ 375 | "df = df.resample('1H', how={'passenger_count': np.sum})\n", 376 | "grouped = df.groupby([df.index.time, df.index.weekday])\n", 377 | "behavior = grouped['passenger_count'].aggregate(np.sum).unstack()\n", 378 | "behavior.columns = ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU']\n", 379 | "behavior" 380 | ] 381 | }, 382 | { 383 | "cell_type": "markdown", 384 | "metadata": {}, 385 | "source": [ 386 | "### Now let's use Excel to create a heatmap" 387 | ] 388 | }, 389 | { 390 | "cell_type": "code", 391 | "execution_count": null, 392 | "metadata": { 393 | "collapsed": true 394 | }, 395 | "outputs": [], 396 | "source": [ 397 | "wb_heatmap = Workbook()\n", 398 | "Range('A1').value = behavior\n", 399 | "Range('A:A').number_format = 'HH:MM'" 400 | ] 401 | }, 402 | { 403 | "cell_type": "markdown", 404 | "metadata": {}, 405 | "source": [ 406 | "## Let's add a Chart, too" 407 | ] 408 | }, 409 | { 410 | "cell_type": "code", 411 | "execution_count": null, 412 | "metadata": { 413 | "collapsed": true 414 | }, 415 | "outputs": [], 416 | "source": [ 417 | "chart = Chart.add(source_data=Range('A1').table,\n", 418 | " chart_type=ChartType.xlLine)" 419 | ] 420 | }, 421 | { 422 | "cell_type": "markdown", 423 | "metadata": {}, 424 | "source": [ 425 | "### Manipulate attributes" 426 | ] 427 | }, 428 | { 429 | "cell_type": "code", 430 | "execution_count": null, 431 | "metadata": { 432 | "collapsed": true 433 | }, 434 | "outputs": [], 435 | "source": [ 436 | "chart.name" 437 | ] 438 | }, 439 | { 440 | "cell_type": "code", 441 | "execution_count": null, 442 | "metadata": { 443 | "collapsed": true 444 | }, 445 | "outputs": [], 446 | "source": [ 447 | "chart.name = 'taxi'\n", 448 | "chart.name" 449 | ] 450 | }, 451 | { 452 | "cell_type": "markdown", 453 | "metadata": {}, 454 | "source": [ 455 | "# One more thing: PDF Reporting with ReportLab" 456 | ] 457 | }, 458 | { 459 | "cell_type": "code", 460 | "execution_count": null, 461 | "metadata": { 462 | "collapsed": true 463 | }, 464 | "outputs": [], 465 | "source": [ 466 | "from reportlab.platypus import SimpleDocTemplate, Table\n", 467 | "\n", 468 | "# reportlab initialization with container for Flowables\n", 469 | "doc = SimpleDocTemplate(\"report_basics.pdf\")\n", 470 | "elements = []\n", 471 | "\n", 472 | "# Create reportlab table from Excel data\n", 473 | "data = Range('B1').table.value\n", 474 | "table = Table(data)\n", 475 | "\n", 476 | "# Compose content and write PDF document\n", 477 | "elements.append(table)\n", 478 | "doc.build(elements)" 479 | ] 480 | }, 481 | { 482 | "cell_type": "code", 483 | "execution_count": null, 484 | "metadata": { 485 | "collapsed": true 486 | }, 487 | "outputs": [], 488 | "source": [ 489 | "!open report_basics.pdf" 490 | ] 491 | }, 492 | { 493 | "cell_type": "markdown", 494 | "metadata": {}, 495 | "source": [ 496 | "# Let's switch sides: Fire up an Excel template" 497 | ] 498 | }, 499 | { 500 | "cell_type": "code", 501 | "execution_count": null, 502 | "metadata": { 503 | "collapsed": true 504 | }, 505 | "outputs": [], 506 | "source": [ 507 | "# Cleaning up (and introducing the Application object)\n", 508 | "Application(wkb=wb).quit()" 509 | ] 510 | }, 511 | { 512 | "cell_type": "code", 513 | "execution_count": null, 514 | "metadata": { 515 | "collapsed": true 516 | }, 517 | "outputs": [], 518 | "source": [ 519 | "Workbook.open_template()" 520 | ] 521 | }, 522 | { 523 | "cell_type": "markdown", 524 | "metadata": {}, 525 | "source": [ 526 | "# How to get the data\n", 527 | "`$ wget https://nyctaxitrips.blob.core.windows.net/data/trip_data_{1,2,3,4,5,6,7,8,9,10,11,12}.csv.zip`" 528 | ] 529 | }, 530 | { 531 | "cell_type": "markdown", 532 | "metadata": {}, 533 | "source": [ 534 | "# Save `passenger_count` into an `HDF5` file" 535 | ] 536 | }, 537 | { 538 | "cell_type": "code", 539 | "execution_count": null, 540 | "metadata": { 541 | "collapsed": true 542 | }, 543 | "outputs": [], 544 | "source": [ 545 | "# Again: not optimized and you'll need a bit of memory to process this...\n", 546 | "parts = []\n", 547 | "for i in range(1,13):\n", 548 | " part = pd.read_csv(data_dir + 'trip_data_{0}.csv'.format(i),\n", 549 | " parse_dates=True, index_col='pickup_datetime', \n", 550 | " usecols=[5,7], skipinitialspace=True)\n", 551 | " part.sort_index(inplace=True)\n", 552 | " parts.append(part)\n", 553 | " \n", 554 | "# Make one big DataFrame and save to HDF5\n", 555 | "df = pd.concat(parts)\n", 556 | "store = pd.HDFStore(data_dir + 'passenger_count.h5')\n", 557 | "store['df'] = df\n", 558 | "store.close()" 559 | ] 560 | }, 561 | { 562 | "cell_type": "markdown", 563 | "metadata": {}, 564 | "source": [ 565 | "# See also:" 566 | ] 567 | }, 568 | { 569 | "cell_type": "markdown", 570 | "metadata": {}, 571 | "source": [ 572 | "http://chriswhong.com/open-data/foil_nyc_taxi/ \n", 573 | "http://www.theguardian.com/technology/2014/jun/27/new-york-taxi-details-anonymised-data-researchers-warn \n", 574 | "http://nyctaxi.herokuapp.com/ \n", 575 | "\n", 576 | "See these two Notebooks by Continuum Analytics about how to get the data and how to work with Blaze/bcolz on it:\n", 577 | "http://nbviewer.ipython.org/github/ContinuumIO/blaze/blob/gh-pages/notebooks/timings-csv.ipynb\n", 578 | "http://nbviewer.ipython.org/github/ContinuumIO/blaze/blob/gh-pages/notebooks/timings-bcolz.ipynb" 579 | ] 580 | } 581 | ], 582 | "metadata": { 583 | "kernelspec": { 584 | "display_name": "Python 2", 585 | "language": "python", 586 | "name": "python2" 587 | }, 588 | "language_info": { 589 | "codemirror_mode": { 590 | "name": "ipython", 591 | "version": 2 592 | }, 593 | "file_extension": ".py", 594 | "mimetype": "text/x-python", 595 | "name": "python", 596 | "nbconvert_exporter": "python", 597 | "pygments_lexer": "ipython2", 598 | "version": "2.7.10" 599 | } 600 | }, 601 | "nbformat": 4, 602 | "nbformat_minor": 0 603 | } 604 | -------------------------------------------------------------------------------- /thalesians_zrh_20160609/1-portfolio opt/RATEINF-INFLATION_USA_QUANDL.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xlwings/talks/6573104eb0a959a9e563144b6e66da49770f87df/thalesians_zrh_20160609/1-portfolio opt/RATEINF-INFLATION_USA_QUANDL.xls -------------------------------------------------------------------------------- /thalesians_zrh_20160609/1-portfolio opt/djia_csv/DIS.csv: -------------------------------------------------------------------------------- 1 | Date,Open,High,Low,Close,Volume,Ex-Dividend,Split Ratio,Adj. Open,Adj. High,Adj. Low,Adj. Close,Adj. Volume 2 | 2015-01-02,94.91,95.28,92.8486,93.75,5846978.0,0.0,1.0,94.30547770700599,94.67312101910801,92.257207643312,93.152866242038,5846978.0 3 | 2015-01-05,93.25,93.35,91.78,92.38,7770421.0,0.0,1.0,92.656050955414,92.755414012739,91.195414012739,91.791592356688,7770421.0 4 | 2015-01-06,92.64,93.191,91.15700000000001,91.89,6783217.0,0.0,1.0,92.049936305732,92.59742675159201,90.576382165605,91.304713375796,6783217.0 5 | 2015-01-08,93.87,94.3,93.555,93.79,7561109.0,0.0,1.0,93.272101910828,93.699363057325,92.959108280255,93.192611464968,7561109.0 6 | 2015-01-12,94.68,94.76,93.77,94.46,6557551.0,0.0,1.0,94.076942675159,94.156433121019,93.17273885350299,93.858343949045,6557551.0 7 | 2015-01-13,95.28,96.43,94.7,95.19,9350064.0,0.0,1.0,94.67312101910801,95.815796178344,94.096815286624,94.58369426751601,9350064.0 8 | 2015-01-14,94.13,94.8,93.29,94.23,6461328.0,0.0,1.0,93.53044585987301,94.196178343949,92.695796178344,93.629808917197,6461328.0 9 | 2015-01-15,94.66,94.96,94.04,94.35,5650015.0,0.0,1.0,94.057070063694,94.355159235669,93.44101910828002,93.749044585987,5650015.0 10 | 2015-01-20,95.22,95.39,93.75,94.74,7933459.0,0.0,1.0,94.613503184713,94.78242038216601,93.152866242038,94.136560509554,7933459.0 11 | 2015-01-21,94.36,94.7,93.82,94.17,7074819.0,0.0,1.0,93.75898089171999,94.096815286624,93.222420382166,93.570191082803,7074819.0 12 | 2015-01-22,94.58,95.39,94.01,95.15,7012744.0,0.0,1.0,93.977579617834,94.78242038216601,93.41121019108299,94.54394904458599,7012744.0 13 | 2015-01-23,94.92,95.53,94.43,94.72,4659808.0,0.0,1.0,94.31541401273898,94.92152866241999,93.828535031847,94.11668789808901,4659808.0 14 | 2015-01-26,94.45,95.0,93.93,94.97,5442991.0,0.0,1.0,93.848407643312,94.394904458599,93.33171974522301,94.365095541401,5442991.0 15 | 2015-01-28,94.14,94.47,92.61,92.67,6177608.0,0.0,1.0,93.540382165605,93.86828025477699,92.020127388535,92.07974522293001,6177608.0 16 | 2015-01-29,93.1,93.5,91.52,93.22,7667868.0,0.0,1.0,92.50700636942699,92.90445859872601,90.937070063694,92.62624203821699,7667868.0 17 | 2015-01-30,92.41,92.9375,90.83,90.96,10187705.0,0.0,1.0,91.821401273885,92.34554140127399,90.251464968153,90.380636942675,10187705.0 18 | 2015-02-02,91.28,92.05,90.06,91.93,9357680.0,0.0,1.0,90.698598726115,91.463694267516,89.48636942675199,91.344458598726,9357680.0 19 | 2015-02-03,92.48,94.11,92.19,94.1,11436423.0,0.0,1.0,91.890955414013,93.510573248408,91.60280254777099,93.500636942675,11436423.0 20 | 2015-02-04,99.37,101.94,98.82,101.28,32561319.0,0.0,1.0,98.737070063694,101.29070063694,98.19057324840799,100.6349044586,32561319.0 21 | 2015-02-06,102.53,102.99,101.65,102.02,8458923.0,0.0,1.0,101.87694267516,102.33401273885,101.00254777069999,101.3701910828,8458923.0 22 | 2015-02-09,101.7,102.5,101.45,101.73,5457564.0,0.0,1.0,101.05222929936,101.84713375796,100.80382165604999,101.08203821656001,5457564.0 23 | 2015-02-10,101.98,102.19,101.18,101.92,5719483.0,0.0,1.0,101.33044585987,101.53910828024999,100.53554140127,101.27082802548,5719483.0 24 | 2015-02-11,101.86,102.02,101.07,101.87,5856663.0,0.0,1.0,101.21121019108,101.3701910828,100.42624203821998,101.22114649682,5856663.0 25 | 2015-02-12,102.19,103.85,101.7,103.58,6803413.0,0.0,1.0,101.53910828024999,103.18853503185,101.05222929936,102.92025477706999,6803413.0 26 | 2015-02-13,103.65,104.405,103.43,104.17,5167274.0,0.0,1.0,102.9898089172,103.74,102.77121019108,103.50649681528999,5167274.0 27 | 2015-02-17,104.25,104.45,103.57,104.12,4753087.0,0.0,1.0,103.58598726115,103.7847133758,102.91031847134,103.45681528661999,4753087.0 28 | 2015-02-18,103.53,104.33,103.4,103.86,3734816.0,0.0,1.0,102.87057324841,103.66547770701,102.74140127389,103.19847133758002,3734816.0 29 | 2015-02-19,104.01,104.08,103.55,103.89,5092633.0,0.0,1.0,103.34751592357,103.41707006368999,102.89044585987,103.22828025478,5092633.0 30 | 2015-02-20,103.86,104.69,102.7302,104.55,5177766.0,0.0,1.0,103.19847133758002,104.02318471338002,102.07586751592,103.88407643312,5177766.0 31 | 2015-02-23,104.82,105.23,104.44,104.99,5300761.0,0.0,1.0,104.15235668790001,104.55974522293002,103.77477707006001,104.32127388535,5300761.0 32 | 2015-02-24,104.54,105.05,104.35,104.67,4099123.0,0.0,1.0,103.87414012739,104.38089171975001,103.68535031847,104.00331210191,4099123.0 33 | 2015-02-25,104.68,105.98,104.67,105.57,6547113.0,0.0,1.0,104.01324840764,105.30496815286999,104.00331210191,104.89757961783,6547113.0 34 | 2015-02-26,105.5,105.71,104.14,104.56,5044894.0,0.0,1.0,104.82802547771,105.03668789809,103.47668789809,103.89401273885001,5044894.0 35 | 2015-02-27,104.67,105.1396,103.96,104.08,4161516.0,0.0,1.0,104.00331210191,104.46992101910999,103.2978343949,103.41707006368999,4161516.0 36 | 2015-03-02,104.35,105.98,104.35,105.89,5626445.0,0.0,1.0,103.68535031847,105.30496815286999,103.68535031847,105.21554140126999,5626445.0 37 | 2015-03-03,105.78,106.64,105.21,106.35,4671924.0,0.0,1.0,105.10624203821999,105.96076433121,104.53987261146,105.67261146497,4671924.0 38 | 2015-03-04,105.86,106.0,104.78,105.57,4972667.0,0.0,1.0,105.18573248408,105.32484076433,104.11261146497,104.89757961783,4972667.0 39 | 2015-03-05,105.54,105.81,104.87,105.03,3954726.0,0.0,1.0,104.86777070064001,105.13605095541,104.20203821656,104.36101910828,3954726.0 40 | 2015-03-06,104.67,105.0,103.49,103.82,5704232.0,0.0,1.0,104.00331210191,104.33121019108,102.83082802548,103.15872611465001,5704232.0 41 | 2015-03-09,103.94,105.42,103.82,105.26,4868861.0,0.0,1.0,103.27796178344,104.74853503185,103.15872611465001,104.58955414013,4868861.0 42 | 2015-03-10,104.27,104.35,103.09,103.09,6472601.0,0.0,1.0,103.60585987261,103.68535031847,102.43337579618,102.43337579618,6472601.0 43 | 2015-03-11,103.51,103.9999,102.865,102.89,4822763.0,0.0,1.0,102.85070063694,103.33748025478,102.2098089172,102.23464968153,4822763.0 44 | 2015-03-12,103.85,107.33,103.81,107.17,10590488.0,0.0,1.0,103.18853503185,106.64636942675,103.14878980892,106.48738853503001,10590488.0 45 | 2015-03-13,107.28,107.28,105.52,106.44,7999532.0,0.0,1.0,106.59668789809,106.59668789809,104.84789808917,105.76203821656,7999532.0 46 | 2015-03-16,106.84,107.73,106.05,107.37,6317176.0,0.0,1.0,106.15949044586,107.04382165605,105.37452229299,106.68611464968001,6317176.0 47 | 2015-03-17,107.0,107.21,106.15,106.96,4488612.0,0.0,1.0,106.31847133758001,106.52713375796,105.47388535031999,106.27872611465,4488612.0 48 | 2015-03-18,106.9,108.42,105.73,107.97,5486736.0,0.0,1.0,106.21910828025,107.72942675159,105.05656050955,107.28229299363001,5486736.0 49 | 2015-03-19,107.84,108.48,107.14,107.37,4872724.0,0.0,1.0,107.15312101910999,107.78904458599001,106.45757961783,106.68611464968001,4872724.0 50 | 2015-03-20,107.83,108.94,107.5,108.43,8493501.0,0.0,1.0,107.14318471338001,108.24611464968001,106.8152866242,107.73936305732,8493501.0 51 | 2015-03-23,108.6,108.85,108.04,108.22,5169797.0,0.0,1.0,107.90828025478001,108.15668789809,107.35184713375999,107.53070063694,5169797.0 52 | 2015-03-24,107.72,108.05,107.08,107.11,4470223.0,0.0,1.0,107.03388535031999,107.36178343949,106.39796178344,106.42777070064001,4470223.0 53 | 2015-03-25,107.45,107.4599,105.0,105.0,6580084.0,0.0,1.0,106.76560509554001,106.77544203821999,104.33121019108,104.33121019108,6580084.0 54 | 2015-03-26,104.47,105.82,104.1,105.24,5904804.0,0.0,1.0,103.80458598726,105.14598726115,103.43694267515998,104.56968152866,5904804.0 55 | 2015-03-27,105.2,106.45,104.88,105.48,5298532.0,0.0,1.0,104.52993630573,105.77197452229,104.21197452229,104.80815286624001,5298532.0 56 | 2015-03-30,106.06,106.945,106.05,106.12,3811120.0,0.0,1.0,105.38445859873,106.26382165605,105.37452229299,105.44407643312,3811120.0 57 | 2015-03-31,105.6,106.32,104.89,104.89,5655079.0,0.0,1.0,104.92738853503,105.64280254777,104.22191082803002,104.22191082803002,5655079.0 58 | 2015-04-01,105.43,106.0,104.25,105.44,6094791.0,0.0,1.0,104.75847133758002,105.32484076433,103.58598726115,104.76840764331,6094791.0 59 | 2015-04-02,105.49,106.24,104.863,106.0,3621838.0,0.0,1.0,104.81808917196999,105.56331210191,104.19508280254999,105.32484076433,3621838.0 60 | 2015-04-06,105.31,106.57,105.04,105.63,4153418.0,0.0,1.0,104.63923566879,105.89121019107999,104.37095541400998,104.95719745222999,4153418.0 61 | 2015-04-07,105.8,106.41,105.4,105.43,4562347.0,0.0,1.0,105.12611464968,105.73222929935999,104.72866242038,104.75847133758002,4562347.0 62 | 2015-04-08,105.23,106.69,105.16,106.36,4267118.0,0.0,1.0,104.55974522293002,106.01044585986999,104.49019108280001,105.6825477707,4267118.0 63 | 2015-04-09,106.51,107.0,105.88,106.77,3920637.0,0.0,1.0,105.83159235669001,106.31847133758001,105.20560509554001,106.08993630573,3920637.0 64 | 2015-04-10,106.73,107.1,106.41,106.95,3250296.0,0.0,1.0,106.05019108280001,106.4178343949,105.73222929935999,106.26878980892,3250296.0 65 | 2015-04-13,107.07,107.9,106.47,106.51,4127169.0,0.0,1.0,106.38802547771,107.2127388535,105.79184713376,105.83159235669001,4127169.0 66 | 2015-04-14,106.41,107.3,106.11,106.66,5366587.0,0.0,1.0,105.73222929935999,106.61656050955,105.43414012739001,105.98063694268,5366587.0 67 | 2015-04-15,106.92,107.43,106.86,106.98,4307265.0,0.0,1.0,106.23898089171999,106.74573248408001,106.17936305732,106.29859872611,4307265.0 68 | 2015-04-16,107.15,108.3,106.9,108.1,6338533.0,0.0,1.0,106.46751592357,107.6101910828,106.21910828025,107.41146496815,6338533.0 69 | 2015-04-17,107.8,107.8,106.04,106.69,7916838.0,0.0,1.0,107.11337579618,107.11337579618,105.36458598726,106.01044585986999,7916838.0 70 | 2015-04-20,107.83,108.5,107.32,108.22,8084502.0,0.0,1.0,107.14318471338001,107.80891719745001,106.63643312101999,107.53070063694,8084502.0 71 | 2015-04-21,108.93,108.99,107.58,107.68,4559360.0,0.0,1.0,108.23617834395,108.29579617834,106.89477707006,106.99414012739,4559360.0 72 | 2015-04-22,108.02,108.25,106.97,107.94,4059025.0,0.0,1.0,107.33197452229,107.56050955414,106.28866242038,107.25248407643,4059025.0 73 | 2015-04-23,107.96,109.9,107.61,109.0,5975337.0,0.0,1.0,107.27235668790001,109.2,106.92458598726,108.30573248408001,5975337.0 74 | 2015-04-24,109.53,110.48,109.19,109.53,6191406.0,0.0,1.0,108.8323566879,109.77630573248001,108.49452229299,108.8323566879,6191406.0 75 | 2015-04-27,111.5,111.66,110.07,110.16,8461942.0,0.0,1.0,110.78980891719999,110.94878980892,109.36891719745,109.45834394904,8461942.0 76 | 2015-04-28,110.75,111.1499,108.89,109.92,7285956.0,0.0,1.0,110.04458598726002,110.4419388535,108.19643312102,109.21987261146,7285956.0 77 | 2015-04-29,109.66,110.38,109.26,109.81,5966118.0,0.0,1.0,108.96152866241998,109.67694267515999,108.56407643312001,109.11057324840999,5966118.0 78 | 2015-04-30,109.68,110.19,107.68,108.72,7584798.0,0.0,1.0,108.98140127389,109.48815286624,106.99414012739,108.02751592357001,7584798.0 79 | 2015-05-01,109.95,110.67,109.27,110.52,6172870.0,0.0,1.0,109.24968152865999,109.96509554139999,108.57401273885,109.81605095541,6172870.0 80 | 2015-05-04,111.48,111.53,110.5,111.03,7527249.0,0.0,1.0,110.76993630573,110.81961783438999,109.79617834395,110.32280254777001,7527249.0 81 | 2015-05-05,113.27,113.3,110.56,110.81,14610817.0,0.0,1.0,112.54853503185,112.57834394903999,109.85579617834,110.10420382166001,14610817.0 82 | 2015-05-06,111.56,111.96,109.22,109.72,8969943.0,0.0,1.0,110.84942675158999,111.24687898088999,108.52433121019001,109.02114649682,8969943.0 83 | 2015-05-07,109.6,109.78,108.715,109.26,8290227.0,0.0,1.0,108.90191082803001,109.08076433121,108.0225477707,108.56407643312001,8290227.0 84 | 2015-05-08,110.26,110.7,109.57,110.11,6259191.0,0.0,1.0,109.55770700637,109.9949044586,108.87210191083,109.40866242038,6259191.0 85 | 2015-05-11,110.14,110.14,108.49,108.6,6726429.0,0.0,1.0,109.43847133758001,109.43847133758001,107.79898089171999,107.90828025478001,6726429.0 86 | 2015-05-12,108.28,109.66,107.67,109.24,6344998.0,0.0,1.0,107.59031847134001,108.96152866241998,106.98420382166,108.54420382166,6344998.0 87 | 2015-05-13,109.7,109.87,108.78,109.19,4105913.0,0.0,1.0,109.00127388535,109.1701910828,108.08713375795999,108.49452229299,4105913.0 88 | 2015-05-14,109.69,110.0,109.01,109.93,4661702.0,0.0,1.0,108.99133757962,109.29936305732001,108.31566878980999,109.22980891719999,4661702.0 89 | 2015-05-15,110.1,110.69,109.68,110.3,5837237.0,0.0,1.0,109.39872611465,109.98496815286998,108.98140127389,109.5974522293,5837237.0 90 | 2015-05-18,110.47,110.74,110.01,110.33,4863551.0,0.0,1.0,109.76636942674999,110.03464968153,109.30929936305999,109.62726114649999,4863551.0 91 | 2015-05-19,110.69,110.9899,110.4705,110.56,4463846.0,0.0,1.0,109.98496815286998,110.28295796178001,109.76686624204001,109.85579617834,4463846.0 92 | 2015-05-20,110.78,110.81,110.02,110.2,4391394.0,0.0,1.0,110.07439490446001,110.10420382166001,109.31923566879,109.49808917196998,4391394.0 93 | 2015-05-21,110.04,110.64,109.9,110.39,4867594.0,0.0,1.0,109.33910828025,109.9352866242,109.2,109.68687898089,4867594.0 94 | 2015-05-22,110.3,110.9,110.1203,110.26,4255908.0,0.0,1.0,109.5974522293,110.19363057325,109.41889681529,109.55770700637,4255908.0 95 | 2015-05-26,110.17,110.85,108.76,109.44,5966924.0,0.0,1.0,109.46828025478001,110.14394904459,108.0672611465,108.74292993631,5966924.0 96 | 2015-05-27,109.51,110.61,109.3,110.37,3967950.0,0.0,1.0,108.81248407643,109.90547770701001,108.60382165605,109.66700636943001,3967950.0 97 | 2015-05-28,110.11,110.54,109.6,110.53,3385681.0,0.0,1.0,109.40866242038,109.83592356688,108.90191082803001,109.82598726115,3385681.0 98 | 2015-05-29,110.33,110.52,109.41,110.37,5220830.0,0.0,1.0,109.62726114649999,109.81605095541,108.71312101910999,109.66700636943001,5220830.0 99 | 2015-06-01,111.48,111.77,110.55,110.96,6758605.0,0.0,1.0,110.76993630573,111.05808917196998,109.84585987260999,110.25324840764,6758605.0 100 | 2015-06-02,110.92,111.25,110.02,110.75,4410138.0,0.0,1.0,110.21350318471,110.54140127389,109.31923566879,110.04458598726002,4410138.0 101 | 2015-06-03,111.28,111.82,110.5,111.17,4502494.0,0.0,1.0,110.57121019108,111.10777070063999,109.79617834395,110.46191082803001,4502494.0 102 | 2015-06-04,110.95,111.25,109.99,110.3,5560121.0,0.0,1.0,110.24331210191002,110.54140127389,109.28942675159,109.5974522293,5560121.0 103 | 2015-06-05,110.3,110.77,109.8,110.3,4312506.0,0.0,1.0,109.5974522293,110.06445859873001,109.10063694268,109.5974522293,4312506.0 104 | 2015-06-08,110.03,110.24,109.21,109.29,6062252.0,0.0,1.0,109.32917197452,109.5378343949,108.51439490445999,108.59388535032,6062252.0 105 | 2015-06-09,109.35,109.41,107.65,108.52,7711756.0,0.0,1.0,108.65350318471,108.71312101910999,106.96433121019001,107.82878980892,7711756.0 106 | 2015-06-10,108.9,110.25,108.73,110.0,5128742.0,0.0,1.0,108.20636942674999,109.54777070064002,108.0374522293,109.29936305732001,5128742.0 107 | 2015-06-11,110.01,110.96,110.01,110.62,5036279.0,0.0,1.0,109.30929936305999,110.25324840764,109.30929936305999,109.91541401274,5036279.0 108 | 2015-06-12,110.33,110.53,109.54,109.95,4009859.0,0.0,1.0,109.62726114649999,109.82598726115,108.84229299363001,109.24968152865999,4009859.0 109 | 2015-06-15,109.27,110.41,108.93,110.18,4444327.0,0.0,1.0,108.57401273885,109.70675159236,108.23617834395,109.47821656051,4444327.0 110 | 2015-06-16,110.35,111.29,109.9,111.06,3843784.0,0.0,1.0,109.64713375795999,110.58114649682,109.2,110.35261146497,3843784.0 111 | 2015-06-17,111.2,111.94,110.88,111.49,4634984.0,0.0,1.0,110.49171974522,111.22700636943001,110.17375796178001,110.77987261146002,4634984.0 112 | 2015-06-18,111.83,113.55,111.58,113.22,7035466.0,0.0,1.0,111.11770700637,112.82675159236,110.86929936306002,112.49885350318,7035466.0 113 | 2015-06-19,112.83,113.48,112.4,112.62,9485131.0,0.0,1.0,112.11133757962,112.75719745223,111.68407643312,111.90267515924,9485131.0 114 | 2015-06-22,113.4,114.47,113.274,113.53,5897675.0,0.0,1.0,112.67770700636999,113.74089171975001,112.55250955414,112.80687898088999,5897675.0 115 | 2015-06-23,113.93,114.52,113.72,114.41,5762590.0,0.0,1.0,113.20433121018999,113.79057324841001,112.99566878981001,113.68127388535,5762590.0 116 | 2015-06-24,114.3,114.56,113.71,113.77,5513809.0,0.0,1.0,113.57197452228998,113.83031847134,112.98573248408,113.04535031847,5513809.0 117 | 2015-06-25,114.62,115.275,114.39,114.45,6194118.0,0.0,1.0,113.88993630573,114.54076433121,113.66140127389,113.72101910828,6194118.0 118 | 2015-06-26,114.97,115.18,114.41,114.86,5406840.0,0.0,1.0,114.23770700636999,114.44636942675,113.68127388535,114.12840764331001,5406840.0 119 | 2015-06-29,114.16,115.19,113.0,113.05,7510628.0,0.0,1.0,113.43286624203999,114.45630573248,112.28025477706998,112.32993630573,7510628.0 120 | 2015-06-30,113.93,114.86,113.55,114.32,5492245.0,0.0,1.0,113.20433121018999,114.12840764331001,112.82675159236,113.59184713376001,5492245.0 121 | 2015-07-01,114.95,115.25,114.34,115.13,5340072.0,0.0,1.0,114.2178343949,114.51592356687999,113.61171974522,114.39668789808998,5340072.0 122 | 2015-07-02,115.38,115.67,114.45,114.97,5521022.0,0.0,1.0,114.6450955414,114.93324840764,113.72101910828,114.23770700636999,5521022.0 123 | 2015-07-06,114.47,115.86,114.27,115.7,5862765.0,0.0,1.0,113.74089171975001,115.12203821656,113.5421656051,114.96305732484,5862765.0 124 | 2015-07-07,116.42,117.19,114.86,117.1,8321873.0,0.0,1.0,115.67847133758,116.44356687898001,114.12840764331001,116.35414012738998,8321873.0 125 | 2015-07-08,116.5,116.68,115.11,115.19,7843354.0,0.0,1.0,115.75796178344,115.93681528661999,114.37681528661999,114.45630573248,7843354.0 126 | 2015-07-09,116.83,117.21,115.51,115.6,7011341.0,0.0,1.0,116.08585987261002,116.46343949045,114.77426751591999,114.86369426751999,7011341.0 127 | 2015-07-10,117.05,117.43,115.67,116.44,7019433.0,0.0,1.0,116.30445859873001,116.68203821656,114.93324840764,115.69834394904,7019433.0 128 | 2015-07-14,118.03,118.1399,117.7,117.85,5049038.0,0.0,1.0,117.27821656051,117.38741656051,116.95031847133998,117.09936305732,5049038.0 129 | 2015-07-15,118.04,118.9,117.85,118.3,4838359.0,0.0,1.0,117.28815286623998,118.14267515924,117.09936305732,117.54649681529,4838359.0 130 | 2015-07-16,119.0,119.15,119.15,119.07,6293481.0,0.0,1.0,118.24203821656,118.39108280254999,118.39108280254999,118.31159235668999,6293481.0 131 | 2015-07-17,118.69,118.9,118.03,118.86,5106156.0,0.0,1.0,117.93401273885,118.14267515924,117.27821656051,118.10292993631,5106156.0 132 | 2015-07-20,119.29,119.9,118.89,119.58,6611434.0,0.0,1.0,118.5301910828,119.13630573248001,118.1327388535,118.81834394904,6611434.0 133 | 2015-07-21,119.76,119.8,118.83,119.31,4375365.0,0.0,1.0,118.99719745223,119.03694267516,118.07312101911002,118.55006369427,4375365.0 134 | 2015-07-22,119.28,119.7,118.93,119.33,4711827.0,0.0,1.0,118.52025477707,118.93757961783001,118.17248407643,118.56993630573,4711827.0 135 | 2015-07-23,119.3,119.6699,118.57,118.8,3304638.0,0.0,1.0,118.54012738853999,118.90767133758001,117.81477707006,118.04331210191002,3304638.0 136 | 2015-07-24,119.35,119.8,118.58,118.91,4084334.0,0.0,1.0,118.58980891719999,119.03694267516,117.8247133758,118.15261146497,4084334.0 137 | 2015-07-27,118.63,118.8,117.78,118.25,5174760.0,0.0,1.0,117.87439490446,118.04331210191002,117.02980891719999,117.49681528661999,5174760.0 138 | 2015-07-28,118.68,118.9,117.87,118.46,6366111.0,0.0,1.0,117.92407643312,118.14267515924,117.11923566879,117.70547770701,6366111.0 139 | 2015-07-29,118.85,119.86,118.41,119.84,6062569.0,0.0,1.0,118.09299363056999,119.09656050955,117.65579617834,119.07668789808999,6062569.0 140 | 2015-07-30,119.71,120.35,119.01,120.03,4412443.0,0.0,1.0,118.94751592357001,119.58343949045,118.25197452228998,119.26547770701,4412443.0 141 | 2015-07-31,120.12,120.72,119.5994,120.0,5691513.0,0.0,1.0,119.3549044586,119.95108280254999,118.83762038216999,119.23566878981,5691513.0 142 | 2015-08-03,120.88,121.73,120.17,121.12,8323295.0,0.0,1.0,120.11006369427,120.95464968153,119.40458598726002,120.34853503184999,8323295.0 143 | 2015-08-04,121.5,122.08,120.61,121.69,10018275.0,0.0,1.0,120.72611464968,121.30242038216998,119.84178343948999,120.9149044586,10018275.0 144 | 2015-08-05,110.83,113.95,109.5,110.53,60905927.0,0.0,1.0,110.12407643312001,113.22420382166,108.8025477707,109.82598726115,60905927.0 145 | 2015-08-06,110.4,110.4,104.24,108.55,57099291.0,0.0,1.0,109.69681528662,109.69681528662,103.57605095541,107.85859872611,57099291.0 146 | 2015-08-07,108.75,109.5598,107.66,109.35,15771626.0,0.0,1.0,108.05732484076,108.86196687898001,106.97426751591999,108.65350318471,15771626.0 147 | 2015-08-10,110.0,111.0,109.74,111.0,11477444.0,0.0,1.0,109.29936305732001,110.29299363057,109.04101910828001,110.29299363057,11477444.0 148 | 2015-08-11,110.34,110.49,107.95,108.0,13528523.0,0.0,1.0,109.63719745223,109.78624203821998,107.26242038216999,107.31210191083001,13528523.0 149 | 2015-08-12,107.0,107.44,105.51,106.99,16923515.0,0.0,1.0,106.31847133758001,106.75566878980999,104.83796178344,106.30853503185,16923515.0 150 | 2015-08-13,107.21,108.51,106.75,107.52,9698456.0,0.0,1.0,106.52713375796,107.81885350318001,106.07006369427,106.83515923566999,9698456.0 151 | 2015-08-14,107.61,107.67,106.52,107.16,7088664.0,0.0,1.0,106.92458598726,106.98420382166,105.84152866241999,106.4774522293,7088664.0 152 | 2015-08-17,107.3,109.28,106.84,109.05,7922329.0,0.0,1.0,106.61656050955,108.58394904459,106.15949044586,108.35541401274,7922329.0 153 | 2015-08-18,108.04,108.25,106.8,106.94,11968986.0,0.0,1.0,107.35184713375999,107.56050955414,106.11974522293,106.25885350318,11968986.0 154 | 2015-08-19,106.58,107.75,105.7701,106.45,9420801.0,0.0,1.0,105.90114649681999,107.06369426751999,105.09640509554,105.77197452229,9420801.0 155 | 2015-08-20,104.34,105.0,99.76,100.02,34534486.0,0.0,1.0,103.67541401274,104.33121019108,99.12458598726101,99.382929936306,34534486.0 156 | 2015-08-21,97.5,100.63,96.61,98.84,30804382.0,0.0,1.0,96.87898089171999,99.989044585987,95.99464968152901,98.210445859873,30804382.0 157 | 2015-08-24,93.38,99.995,90.0,96.07,21946543.0,0.0,1.0,92.78522292993601,99.358089171975,89.42675159235701,95.458089171975,21946543.0 158 | 2015-08-25,99.73,100.09,95.72,95.89,18960963.0,0.0,1.0,99.094777070064,99.452484076433,95.110318471338,95.27923566879,18960963.0 159 | 2015-08-26,98.69,99.49,96.26,99.23,13691213.0,0.0,1.0,98.061401273885,98.856305732484,95.64687898089198,98.59796178344,13691213.0 160 | 2015-08-27,101.24,102.62,99.78,102.17,17378305.0,0.0,1.0,100.59515923567,101.96636942674999,99.144458598726,101.51923566879,17378305.0 161 | 2015-08-28,102.39,103.34,101.81,102.48,10992121.0,0.0,1.0,101.73783439489999,102.68178343948999,101.16152866241998,101.82726114649999,10992121.0 162 | 2015-08-31,102.22,102.46,100.91,101.88,8513824.0,0.0,1.0,101.56891719745,101.80738853503,100.26726114649999,101.23108280254999,8513824.0 163 | 2015-09-01,99.49,101.3396,99.1578,99.51,14169541.0,0.0,1.0,98.856305732484,100.69412484076,98.526221656051,98.876178343949,14169541.0 164 | 2015-09-02,100.75,101.94,99.55,101.89,12109705.0,0.0,1.0,100.10828025478001,101.29070063694,98.915923566879,101.24101910828001,12109705.0 165 | 2015-09-03,102.2,103.03,101.46,101.99,8930570.0,0.0,1.0,101.54904458599,102.37375796178002,100.81375796178001,101.34038216561,8930570.0 166 | 2015-09-04,100.96,101.82,100.36,100.97,9189146.0,0.0,1.0,100.31694267515999,101.17146496815,99.72076433121,100.32687898089,9189146.0 167 | 2015-09-08,102.95,104.15,102.515,104.01,8501389.0,0.0,1.0,102.29426751591998,103.48662420382,101.86203821656,103.34751592357,8501389.0 168 | 2015-09-09,104.75,104.95,101.68,101.91,9577524.0,0.0,1.0,104.08280254777,104.28152866241999,101.0323566879,101.26089171975,9577524.0 169 | 2015-09-10,101.85,103.22,101.331,102.6,9025537.0,0.0,1.0,101.20127388535,102.5625477707,100.68557961783002,101.94649681528999,9025537.0 170 | 2015-09-11,102.35,104.5,102.2,104.48,9528234.0,0.0,1.0,101.69808917196998,103.83439490446,101.54904458599,103.81452229298999,9528234.0 171 | 2015-09-14,104.65,104.9,102.99,103.82,6955563.0,0.0,1.0,103.98343949045,104.23184713376,102.33401273885,103.15872611465001,6955563.0 172 | 2015-09-15,103.25,103.8,101.83,103.43,9153475.0,0.0,1.0,102.59235668790001,103.13885350318,101.18140127389,102.77121019108,9153475.0 173 | 2015-09-16,103.32,104.07,102.75,103.96,6499506.0,0.0,1.0,102.66191082803002,103.40713375796,102.09554140126998,103.2978343949,6499506.0 174 | 2015-09-17,104.2,105.95,103.75,104.2,7645635.0,0.0,1.0,103.53630573248002,105.27515923566999,103.08917197452,103.53630573248002,7645635.0 175 | 2015-09-18,103.2,104.21,102.39,102.84,13423099.0,0.0,1.0,102.54267515923999,103.54624203821999,101.73783439489999,102.18496815286998,13423099.0 176 | 2015-09-21,103.68,103.83,102.46,103.41,7134907.0,0.0,1.0,103.01961783439,103.16866242038,101.80738853503,102.75133757962,7134907.0 177 | 2015-09-22,102.18,102.75,101.48,102.49,8300473.0,0.0,1.0,101.52917197452,102.09554140126998,100.83363057325,101.83719745223,8300473.0 178 | 2015-09-23,102.44,102.63,101.38,101.57,5807007.0,0.0,1.0,101.78751592357,101.97630573248001,100.73426751592,100.92305732484002,5807007.0 179 | 2015-09-24,101.0,101.33,99.24,100.62,10599712.0,0.0,1.0,100.35668789809,100.68458598726,98.607898089172,99.97910828025499,10599712.0 180 | 2015-09-25,101.51,101.8,99.58,100.3,7155145.0,0.0,1.0,100.86343949045,101.15159235669,98.945732484076,99.661146496815,7155145.0 181 | 2015-09-28,99.9,100.39,98.295,98.49,8190734.0,0.0,1.0,99.263694267516,99.75057324840799,97.66891719745199,97.86267515923599,8190734.0 182 | 2015-09-29,98.51,100.06,97.77,99.42,9432438.0,0.0,1.0,97.88254777070101,99.422675159236,97.147261146497,98.786751592357,9432438.0 183 | 2015-09-30,100.78,102.43,100.5,102.2,9125415.0,0.0,1.0,100.13808917196998,101.77757961783001,99.859872611465,101.54904458599,9125415.0 184 | 2015-10-01,102.97,103.47,101.08,102.67,7487998.0,0.0,1.0,102.31414012739,102.81095541401,100.43617834395,102.01605095541001,7487998.0 185 | 2015-10-02,101.21,103.01,99.88,103.0,9079282.0,0.0,1.0,100.56535031847,102.35388535032,99.24382165605101,102.34394904458999,9079282.0 186 | 2015-10-05,103.7,104.196,102.6101,103.85,7044842.0,0.0,1.0,103.03949044586001,103.53233121019001,101.95653248408001,103.18853503185,7044842.0 187 | 2015-10-06,104.19,104.51,103.21,103.77,5597584.0,0.0,1.0,103.52636942675,103.84433121019,102.55261146497,103.10904458599,5597584.0 188 | 2015-10-07,104.49,104.59,102.66,103.39,6947193.0,0.0,1.0,103.82445859873,103.92382165605,102.00611464968,102.73146496815001,6947193.0 189 | 2015-10-08,103.2,104.89,102.7,104.61,7419812.0,0.0,1.0,102.54267515923999,104.22191082803002,102.04585987261,103.94369426751999,7419812.0 190 | 2015-10-09,105.09,106.05,104.67,105.56,7312394.0,0.0,1.0,104.42063694267999,105.37452229299,104.00331210191,104.8876433121,7312394.0 191 | 2015-10-12,105.91,106.7,105.62,106.35,5179044.0,0.0,1.0,105.23541401274001,106.02038216560999,104.9472611465,105.67261146497,5179044.0 192 | 2015-10-13,105.74,107.39,105.31,106.59,8295031.0,0.0,1.0,105.06649681529,106.70598726115,104.63923566879,105.91108280255,8295031.0 193 | 2015-10-14,106.5,106.85,105.23,105.73,5464706.0,0.0,1.0,105.82165605096,106.16942675159001,104.55974522293002,105.05656050955,5464706.0 194 | 2015-10-15,106.5,108.0,106.26,107.89,6698064.0,0.0,1.0,105.82165605096,107.31210191083001,105.58318471338,107.20280254777,6698064.0 195 | 2015-10-16,108.27,108.5,107.46,108.24,5739595.0,0.0,1.0,107.58038216560999,107.80891719745001,106.77554140126999,107.55057324840999,5739595.0 196 | 2015-10-19,108.25,109.97,107.94,109.47,7974890.0,0.0,1.0,107.56050955414,109.26955414013001,107.25248407643,108.7727388535,7974890.0 197 | 2015-10-20,109.55,110.53,109.41,109.84,9542378.0,0.0,1.0,108.85222929935999,109.82598726115,108.71312101910999,109.14038216560999,9542378.0 198 | 2015-10-21,110.67,111.56,110.01,110.09,8769847.0,0.0,1.0,109.96509554139999,110.84942675158999,109.30929936305999,109.38878980892,8769847.0 199 | 2015-10-22,110.67,113.35,110.39,113.25,9844696.0,0.0,1.0,109.96509554139999,112.62802547771001,109.68687898089,112.52866242038,9844696.0 200 | 2015-10-23,114.21,114.21,111.85,113.09,7919680.0,0.0,1.0,113.4825477707,113.4825477707,111.13757961783001,112.36968152866001,7919680.0 201 | 2015-10-26,113.07,113.58,112.12,113.52,5722775.0,0.0,1.0,112.3498089172,112.85656050955,111.40585987261002,112.79694267516001,5722775.0 202 | 2015-10-27,113.29,114.26799999999999,113.245,113.77,5728853.0,0.0,1.0,112.56840764331001,113.54017834395,112.52369426751999,113.04535031847,5728853.0 203 | 2015-10-28,113.97,114.46,112.86,114.34,6438416.0,0.0,1.0,113.24407643312,113.73095541401001,112.14114649681999,113.61171974522,6438416.0 204 | 2015-10-29,114.34,115.4,114.2,115.04,6067108.0,0.0,1.0,113.61171974522,114.66496815286999,113.47261146497,114.3072611465,6067108.0 205 | 2015-10-30,115.0,115.2399,113.67,113.74,8360131.0,0.0,1.0,114.26751592357,114.50588789808998,112.94598726115,113.01554140126999,8360131.0 206 | 2015-11-02,114.49,115.31,114.01,115.04,6935799.0,0.0,1.0,113.76076433121,114.57554140126999,113.28382165605,114.3072611465,6935799.0 207 | 2015-11-03,114.97,116.4,114.54,115.54,7062751.0,0.0,1.0,114.23770700636999,115.65859872611,113.81044585987,114.80407643312,7062751.0 208 | 2015-11-04,116.64,116.83,110.81,113.25,20690818.0,0.0,1.0,115.89707006369,116.08585987261002,110.10420382166001,112.52866242038,20690818.0 209 | 2015-11-05,113.26,113.93,111.6001,113.0,12599962.0,0.0,1.0,112.53859872611,113.20433121018999,110.88927133758001,112.28025477706998,12599962.0 210 | 2015-11-06,114.6,116.75,114.57,115.67,16624801.0,0.0,1.0,113.87006369427,116.00636942675,113.84025477706999,114.93324840764,16624801.0 211 | 2015-11-09,115.9,116.73,115.18,116.42,9277142.0,0.0,1.0,115.16178343949,115.98649681529,114.44636942675,115.67847133758,9277142.0 212 | 2015-11-10,116.17,117.51,115.51,117.42,8123730.0,0.0,1.0,115.43006369427,116.76152866241999,114.77426751591999,116.67210191083001,8123730.0 213 | 2015-11-11,117.55,117.58,116.43,116.52,6346138.0,0.0,1.0,116.80127388535,116.83108280254999,115.68840764331001,115.7778343949,6346138.0 214 | 2015-11-12,115.6,116.99,115.0,116.21,7101004.0,0.0,1.0,114.86369426751999,116.24484076433001,114.26751592357,115.4698089172,7101004.0 215 | 2015-11-13,115.92,116.42,114.38,114.84,7881739.0,0.0,1.0,115.18165605096,115.67847133758,113.65146496815001,114.10853503185,7881739.0 216 | 2015-11-16,113.47,116.08,113.335,115.92,5743775.0,0.0,1.0,112.7472611465,115.34063694267999,112.61312101911001,115.18165605096,5743775.0 217 | 2015-11-17,116.11,117.55,115.51,116.13,6409536.0,0.0,1.0,115.37044585986999,116.80127388535,114.77426751591999,115.39031847134,6409536.0 218 | 2015-11-18,116.22,118.28,116.05,118.14,6544055.0,0.0,1.0,115.47974522293,117.52662420382,115.31082802548,117.38751592357,6544055.0 219 | 2015-11-19,118.15,119.1598,117.64,118.71,6096984.0,0.0,1.0,117.3974522293,118.40082038217,116.89070063693998,117.95388535032,6096984.0 220 | 2015-11-20,119.11,120.25,118.9,120.07,9869987.0,0.0,1.0,118.35133757962,119.48407643312001,118.14267515924,119.30522292994,9869987.0 221 | 2015-11-23,120.3,120.65,119.0,119.42,6980344.0,0.0,1.0,119.53375796178001,119.88152866241998,118.24203821656,118.65936305732001,6980344.0 222 | 2015-11-24,117.9,118.57,117.28,117.95,8100965.0,0.0,1.0,117.14904458598998,117.81477707006,116.53299363056999,117.19872611465,8100965.0 223 | 2015-11-25,118.29,119.338,118.15,118.67,4728518.0,0.0,1.0,117.53656050955,118.57788535032,117.3974522293,117.91414012738998,4728518.0 224 | 2015-11-27,116.0,116.5,113.7,115.13,14911383.0,0.0,1.0,115.26114649681999,115.75796178344,112.97579617833999,114.39668789808998,14911383.0 225 | 2015-11-30,115.56,115.58,113.31,113.47,16210045.0,0.0,1.0,114.82394904459,114.84382165605,112.58828025478,112.7472611465,16210045.0 226 | 2015-12-01,114.15,115.46,113.66,115.39,8786969.0,0.0,1.0,113.42292993631,114.72458598726001,112.93605095541001,114.65503184713002,8786969.0 227 | 2015-12-02,115.39,115.47,113.83,114.0,7735891.0,0.0,1.0,114.65503184713002,114.73452229299,113.10496815286999,113.27388535032,7735891.0 228 | 2015-12-03,114.17,114.65100000000001,111.44,111.89,10424436.0,0.0,1.0,113.44280254777,113.9207388535,110.7301910828,111.17732484076001,10424436.0 229 | 2015-12-04,112.74,114.305,112.53,114.24,8741160.0,0.0,1.0,112.02191082803002,113.57694267516001,111.81324840764,113.51235668790001,8741160.0 230 | 2015-12-07,114.56,114.56,112.65,113.83,6597008.0,0.0,1.0,113.83031847134,113.83031847134,111.93248407643,113.10496815286999,6597008.0 231 | 2015-12-08,113.35,113.45,112.4,112.48,7437786.0,0.0,1.0,112.62802547771001,112.72738853503,111.68407643312,111.76356687898,7437786.0 232 | 2015-12-09,112.39,113.0612,110.58,111.47,9022974.0,0.0,1.0,111.67414012738999,112.34106496815001,109.87566878980999,110.76,9022974.0 233 | 2015-12-10,111.15,111.58,110.17,110.76,6954487.0,0.71,1.0,111.15,111.58,110.17,110.76,6954487.0 234 | 2015-12-11,109.91,109.95,107.6177,108.04,12253961.0,0.0,1.0,109.91,109.95,107.6177,108.04,12253961.0 235 | 2015-12-14,108.68,109.87,108.2792,109.35,9596933.0,0.0,1.0,108.68,109.87,108.2792,109.35,9596933.0 236 | 2015-12-15,112.05,113.345,111.5801,112.16,13260921.0,0.0,1.0,112.05,113.345,111.5801,112.16,13260921.0 237 | 2015-12-16,114.69,114.75,111.8,113.79,12193091.0,0.0,1.0,114.69,114.75,111.8,113.79,12193091.0 238 | 2015-12-17,114.13,114.48,111.98,112.01,9296716.0,0.0,1.0,114.13,114.48,111.98,112.01,9296716.0 239 | 2015-12-18,112.01,112.44,107.35,107.72,27617492.0,0.0,1.0,112.01,112.44,107.35,107.72,27617492.0 240 | 2015-12-21,108.8,110.1,105.33,106.59,22726955.0,0.0,1.0,108.8,110.1,105.33,106.59,22726955.0 241 | 2015-12-22,106.99,107.2,105.83,106.74,8514164.0,0.0,1.0,106.99,107.2,105.83,106.74,8514164.0 242 | 2015-12-23,107.21,107.24,104.3,105.56,12319505.0,0.0,1.0,107.21,107.24,104.3,105.56,12319505.0 243 | 2015-12-24,105.2,106.64,105.06,105.86,4356093.0,0.0,1.0,105.2,106.64,105.06,105.86,4356093.0 244 | 2015-12-28,106.5,108.2,106.33,107.25,8787250.0,0.0,1.0,106.5,108.2,106.33,107.25,8787250.0 245 | 2015-12-29,107.88,108.04,106.45,107.08,8569766.0,0.0,1.0,107.88,108.04,106.45,107.08,8569766.0 246 | 2015-12-30,106.89,107.21,106.25,106.34,4903401.0,0.0,1.0,106.89,107.21,106.25,106.34,4903401.0 247 | 2015-12-31,106.14,106.31,105.06,105.08,6609538.0,0.0,1.0,106.14,106.31,105.06,105.08,6609538.0 248 | 2016-01-04,103.12,103.43,101.73,102.98,12462520.0,0.0,1.0,103.12,103.43,101.73,102.98,12462520.0 249 | 2016-01-05,102.67,102.67,99.89,100.9,15828554.0,0.0,1.0,102.67,102.67,99.89,100.9,15828554.0 250 | 2016-01-06,99.38,101.46,99.36,100.36,13886647.0,0.0,1.0,99.38,101.46,99.36,100.36,13886647.0 251 | 2016-01-07,98.96,101.35,98.52,99.5,14670264.0,0.0,1.0,98.96,101.35,98.52,99.5,14670264.0 252 | 2016-01-08,100.63,100.915,99.0,99.25,10603883.0,0.0,1.0,100.63,100.915,99.0,99.25,10603883.0 253 | 2016-01-11,100.21,100.45,98.55,99.92,9558621.0,0.0,1.0,100.21,100.45,98.55,99.92,9558621.0 254 | 2016-01-12,100.97,101.85,100.34,101.46,8728468.0,0.0,1.0,100.97,101.85,100.34,101.46,8728468.0 255 | 2016-01-13,101.88,101.88,98.12,98.48,11471973.0,0.0,1.0,101.88,101.88,98.12,98.48,11471973.0 256 | 2016-01-14,98.65,99.91,97.19,99.11,11076547.0,0.0,1.0,98.65,99.91,97.19,99.11,11076547.0 257 | 2016-01-15,95.62,96.88,93.46,93.9,22135482.0,0.0,1.0,95.62,96.88,93.46,93.9,22135482.0 258 | 2016-01-19,95.0,95.07,93.03,93.97,13210538.0,0.0,1.0,95.0,95.07,93.03,93.97,13210538.0 259 | 2016-01-20,92.18,93.64,90.42,92.54,16865851.0,0.0,1.0,92.18,93.64,90.42,92.54,16865851.0 260 | 2016-01-21,92.87,94.86,92.3,94.02,12047890.0,0.0,1.0,92.87,94.86,92.3,94.02,12047890.0 261 | 2016-01-22,95.95,97.42,95.55,96.9,12250656.0,0.0,1.0,95.95,97.42,95.55,96.9,12250656.0 262 | 2016-01-25,96.42,96.68,95.1204,95.29,7768759.0,0.0,1.0,96.42,96.68,95.1204,95.29,7768759.0 263 | 2016-01-26,95.49,96.4261,95.09,96.27,6895010.0,0.0,1.0,95.49,96.4261,95.09,96.27,6895010.0 264 | 2016-01-27,96.31,96.63,93.87,94.32,6292095.0,0.0,1.0,96.31,96.63,93.87,94.32,6292095.0 265 | 2016-01-28,95.2,95.2,92.37,93.53,7275614.0,0.0,1.0,95.2,95.2,92.37,93.53,7275614.0 266 | 2016-01-29,94.21,95.82,93.63,95.82,8071741.0,0.0,1.0,94.21,95.82,93.63,95.82,8071741.0 267 | 2016-02-01,95.08,95.71,94.7,95.15,6994205.0,0.0,1.0,95.08,95.71,94.7,95.15,6994205.0 268 | 2016-02-02,94.0,94.17,92.8663,93.12,7101405.0,0.0,1.0,94.0,94.17,92.8663,93.12,7101405.0 269 | 2016-02-03,94.1,95.41,92.42,95.14,10860674.0,0.0,1.0,94.1,95.41,92.42,95.14,10860674.0 270 | 2016-02-04,94.87,96.73,94.6,95.43,8207904.0,0.0,1.0,94.87,96.73,94.6,95.43,8207904.0 271 | 2016-02-05,95.32,95.39,93.47,93.9,8823003.0,0.0,1.0,95.32,95.39,93.47,93.9,8823003.0 272 | 2016-02-08,92.56,92.96,89.51,92.12,13658358.0,0.0,1.0,92.56,92.96,89.51,92.12,13658358.0 273 | 2016-02-09,90.15,93.2,89.04,92.32,15166949.0,0.0,1.0,90.15,93.2,89.04,92.32,15166949.0 274 | 2016-02-10,88.0,90.03,86.25,88.85,32573476.0,0.0,1.0,88.0,90.03,86.25,88.85,32573476.0 275 | 2016-02-11,87.0,91.06,86.96,90.31,17332287.0,0.0,1.0,87.0,91.06,86.96,90.31,17332287.0 276 | 2016-02-12,91.52,91.59,89.61,91.15,10754720.0,0.0,1.0,91.52,91.59,89.61,91.15,10754720.0 277 | 2016-02-16,92.47,93.31,91.79,92.91,8965770.0,0.0,1.0,92.47,93.31,91.79,92.91,8965770.0 278 | 2016-02-17,93.67,96.44,93.56,95.5,12288206.0,0.0,1.0,93.67,96.44,93.56,95.5,12288206.0 279 | 2016-02-18,96.34,96.45,94.45,95.17,8727183.0,0.0,1.0,96.34,96.45,94.45,95.17,8727183.0 280 | 2016-02-19,95.23,95.72,94.56,95.01,6664359.0,0.0,1.0,95.23,95.72,94.56,95.01,6664359.0 281 | 2016-02-22,96.23,97.0,95.86,96.37,6932010.0,0.0,1.0,96.23,97.0,95.86,96.37,6932010.0 282 | 2016-02-23,96.5,96.82,95.15,95.38,6181572.0,0.0,1.0,96.5,96.82,95.15,95.38,6181572.0 283 | 2016-02-24,94.65,95.75,93.23,95.43,6913044.0,0.0,1.0,94.65,95.75,93.23,95.43,6913044.0 284 | 2016-02-25,95.92,95.95,94.35,95.65,4536895.0,0.0,1.0,95.92,95.95,94.35,95.65,4536895.0 285 | 2016-02-26,95.71,96.22,95.28,95.31,5264576.0,0.0,1.0,95.71,96.22,95.28,95.31,5264576.0 286 | 2016-02-29,95.31,96.29,95.23,95.52,6620228.0,0.0,1.0,95.31,96.29,95.23,95.52,6620228.0 287 | 2016-03-01,95.9,97.66,95.53,97.65,7117954.0,0.0,1.0,95.9,97.66,95.53,97.65,7117954.0 288 | 2016-03-02,97.67,97.83,96.41,97.0,6443649.0,0.0,1.0,97.67,97.83,96.41,97.0,6443649.0 289 | 2016-03-03,97.79,98.84,96.89,98.82,8536136.0,0.0,1.0,97.79,98.84,96.89,98.82,8536136.0 290 | 2016-03-04,99.0,99.21,97.9,98.48,6702983.0,0.0,1.0,99.0,99.21,97.9,98.48,6702983.0 291 | 2016-03-07,98.57,99.71,98.48,99.39,7174224.0,0.0,1.0,98.57,99.71,98.48,99.39,7174224.0 292 | 2016-03-08,98.93,98.98,97.6,97.82,6156707.0,0.0,1.0,98.93,98.98,97.6,97.82,6156707.0 293 | 2016-03-09,98.0,98.24,96.81,97.66,7009199.0,0.0,1.0,98.0,98.24,96.81,97.66,7009199.0 294 | 2016-03-11,97.57,98.35,97.54,97.94,5560559.0,0.0,1.0,97.57,98.35,97.54,97.94,5560559.0 295 | 2016-03-14,97.94,99.2199,97.84,98.81,6157431.0,0.0,1.0,97.94,99.2199,97.84,98.81,6157431.0 296 | 2016-03-15,98.02,98.33,97.39,98.24,5895632.0,0.0,1.0,98.02,98.33,97.39,98.24,5895632.0 297 | 2016-03-16,98.16,99.08,97.47,98.44,5997626.0,0.0,1.0,98.16,99.08,97.47,98.44,5997626.0 298 | 2016-03-17,98.28,99.91,98.28,99.6,6384279.0,0.0,1.0,98.28,99.91,98.28,99.6,6384279.0 299 | 2016-03-18,99.98,100.15,98.96,99.2,10204581.0,0.0,1.0,99.98,100.15,98.96,99.2,10204581.0 300 | 2016-03-21,98.92,99.1199,97.7,98.46,7070113.0,0.0,1.0,98.92,99.1199,97.7,98.46,7070113.0 301 | 2016-03-22,97.59,98.32,97.44,97.58,6475422.0,0.0,1.0,97.59,98.32,97.44,97.58,6475422.0 302 | 2016-03-23,97.72,97.845,96.75,96.83,5517292.0,0.0,1.0,97.72,97.845,96.75,96.83,5517292.0 303 | 2016-03-24,96.55,97.49,96.3,97.22,5547427.0,0.0,1.0,96.55,97.49,96.3,97.22,5547427.0 304 | 2016-03-28,97.5,98.46,97.45,98.09,5297108.0,0.0,1.0,97.5,98.46,97.45,98.09,5297108.0 305 | 2016-03-29,98.0,98.37,97.36200000000001,98.16,5124275.0,0.0,1.0,98.0,98.37,97.36200000000001,98.16,5124275.0 306 | 2016-03-30,98.9,99.09,98.345,98.91,5649702.0,0.0,1.0,98.9,99.09,98.345,98.91,5649702.0 307 | 2016-03-31,99.01,100.37,99.01,99.31,6973989.0,0.0,1.0,99.01,100.37,99.01,99.31,6973989.0 308 | 2016-04-01,98.8,99.3399,98.58,99.07,5869145.0,0.0,1.0,98.8,99.3399,98.58,99.07,5869145.0 309 | 2016-04-04,99.3,99.44,98.58,98.68,4991513.0,0.0,1.0,99.3,99.44,98.58,98.68,4991513.0 310 | 2016-04-05,96.85,97.61,96.15,97.0,10769621.0,0.0,1.0,96.85,97.61,96.15,97.0,10769621.0 311 | 2016-04-06,96.96,97.63,96.83,97.48,6934393.0,0.0,1.0,96.96,97.63,96.83,97.48,6934393.0 312 | 2016-04-07,97.11,97.42,95.92,96.16,7502232.0,0.0,1.0,97.11,97.42,95.92,96.16,7502232.0 313 | 2016-04-08,96.63,96.84,95.8,96.42,6968255.0,0.0,1.0,96.63,96.84,95.8,96.42,6968255.0 314 | 2016-04-11,96.93,97.6399,96.195,96.27,5889041.0,0.0,1.0,96.93,97.6399,96.195,96.27,5889041.0 315 | 2016-04-12,96.28,97.53,96.07,97.35,6213379.0,0.0,1.0,96.28,97.53,96.07,97.35,6213379.0 316 | 2016-04-13,98.03,99.81,97.96,99.465,7271502.0,0.0,1.0,98.03,99.81,97.96,99.465,7271502.0 317 | 2016-04-14,99.79,99.866,98.26,98.63,6641905.0,0.0,1.0,99.79,99.866,98.26,98.63,6641905.0 318 | 2016-04-15,98.5,98.8899,98.18,98.59,6117101.0,0.0,1.0,98.5,98.8899,98.18,98.59,6117101.0 319 | 2016-04-18,99.6,101.95,99.5,101.48,10650376.0,0.0,1.0,99.6,101.95,99.5,101.48,10650376.0 320 | 2016-04-19,102.0,103.64,101.925,102.64,10494908.0,0.0,1.0,102.0,103.64,101.925,102.64,10494908.0 321 | 2016-04-20,103.02,103.48,101.96,103.27,7676634.0,0.0,1.0,103.02,103.48,101.96,103.27,7676634.0 322 | 2016-04-21,103.36,104.12,102.65,102.91,6802556.0,0.0,1.0,103.36,104.12,102.65,102.91,6802556.0 323 | 2016-04-22,103.06,103.99,102.93,103.77,5702168.0,0.0,1.0,103.06,103.99,102.93,103.77,5702168.0 324 | 2016-04-25,103.5,104.62,103.35,104.57,6065318.0,0.0,1.0,103.5,104.62,103.35,104.57,6065318.0 325 | 2016-04-26,104.58,105.57,104.18,104.89,6436346.0,0.0,1.0,104.58,105.57,104.18,104.89,6436346.0 326 | 2016-04-27,105.19,105.6,104.76,105.28,5994523.0,0.0,1.0,105.19,105.6,104.76,105.28,5994523.0 327 | 2016-04-28,104.54,105.49,103.8,104.03,5569766.0,0.0,1.0,104.54,105.49,103.8,104.03,5569766.0 328 | 2016-04-29,103.95,104.21,102.4,103.26,6953954.0,0.0,1.0,103.95,104.21,102.4,103.26,6953954.0 329 | 2016-05-02,103.3,104.57,102.8,104.36,5271738.0,0.0,1.0,103.3,104.57,102.8,104.36,5271738.0 330 | 2016-05-03,103.88,103.99,103.19,103.78,6218006.0,0.0,1.0,103.88,103.99,103.19,103.78,6218006.0 331 | 2016-05-04,103.31,104.48,103.2,103.67,6423645.0,0.0,1.0,103.31,104.48,103.2,103.67,6423645.0 332 | 2016-05-05,103.98,105.125,103.45,104.93,6418015.0,0.0,1.0,103.98,105.125,103.45,104.93,6418015.0 333 | 2016-05-06,104.51,105.74,104.39,105.54,7383571.0,0.0,1.0,104.51,105.74,104.39,105.54,7383571.0 334 | 2016-05-09,106.01,106.68,104.97,105.34,8048288.0,0.0,1.0,106.01,106.68,104.97,105.34,8048288.0 335 | 2016-05-10,105.53,106.75,105.45,106.6,10761794.0,0.0,1.0,105.53,106.75,105.45,106.6,10761794.0 336 | 2016-05-11,101.46,102.5,100.62,102.29,26932746.0,0.0,1.0,101.46,102.5,100.62,102.29,26932746.0 337 | 2016-05-12,102.5,102.85,101.125,101.71,11222049.0,0.0,1.0,102.5,102.85,101.125,101.71,11222049.0 338 | 2016-05-13,101.71,102.04,100.36,100.52,9314119.0,0.0,1.0,101.71,102.04,100.36,100.52,9314119.0 339 | 2016-05-16,100.41,100.67,99.37,100.36,9087461.0,0.0,1.0,100.41,100.67,99.37,100.36,9087461.0 340 | 2016-05-17,100.79,101.29,99.55,99.94,8509954.0,0.0,1.0,100.79,101.29,99.55,99.94,8509954.0 341 | 2016-05-18,99.59,99.77,98.36,99.0,9302900.0,0.0,1.0,99.59,99.77,98.36,99.0,9302900.0 342 | 2016-05-19,98.58,98.61,97.51,98.41,7050300.0,0.0,1.0,98.58,98.61,97.51,98.41,7050300.0 343 | 2016-05-20,99.0,99.93,98.77,99.78,7289997.0,0.0,1.0,99.0,99.93,98.77,99.78,7289997.0 344 | 2016-05-23,99.6,100.33,99.12,99.18,5453443.0,0.0,1.0,99.6,100.33,99.12,99.18,5453443.0 345 | 2016-05-24,99.45,100.04,99.38,99.51,5246309.0,0.0,1.0,99.45,100.04,99.38,99.51,5246309.0 346 | 2016-05-25,99.92,100.8,99.81,99.86,5665181.0,0.0,1.0,99.92,100.8,99.81,99.86,5665181.0 347 | -------------------------------------------------------------------------------- /thalesians_zrh_20160609/1-portfolio opt/djia_csv/MRK.csv: -------------------------------------------------------------------------------- 1 | Date,Open,High,Low,Close,Volume,Ex-Dividend,Split Ratio,Adj. Open,Adj. High,Adj. Low,Adj. Close,Adj. Volume 2 | 2015-01-02,57.22,57.79,57.025,57.19,7072355.0,0.0,1.0,55.34229606399,55.893591218769,55.153695089987,55.313280529528,7072355.0 3 | 2015-01-05,58.18,58.48,57.57,58.04,15887377.0,0.0,1.0,56.270793166776,56.560948511397,55.68081063271401,56.13538733928701,15887377.0 4 | 2015-01-06,58.33,60.5,58.25,60.32,24217749.0,0.0,1.0,56.415870839087,58.514661165177,56.338496080521004,58.340567958403994,24217749.0 5 | 2015-01-08,62.05,62.935,61.85,62.85,19077561.0,0.0,1.0,60.013797112384005,60.869755379015,59.82036021596999,60.787544698039,19077561.0 6 | 2015-01-12,63.05,63.5,62.1,62.3,11552527.0,0.0,1.0,60.980981594453,61.416214611384,60.062156336487,60.255593232901,11552527.0 7 | 2015-01-13,62.95,63.62,61.73,62.19,10022977.0,0.0,1.0,60.884263146246006,61.532276749232,59.704298078121006,60.149202939873,10022977.0 8 | 2015-01-14,61.66,62.91,61.48,62.64,9817619.0,0.0,1.0,59.636595164377006,60.845575766962995,59.462501957604,60.584435956804,9817619.0 9 | 2015-01-15,62.86,62.99,61.83,61.88,9550056.0,0.0,1.0,60.797216542859005,60.922950525528,59.801016526328,59.849375750431996,9550056.0 10 | 2015-01-20,62.78,63.3,61.88,62.61,13095109.0,0.0,1.0,60.719841784294005,61.22277771497,59.849375750431996,60.555420422341996,13095109.0 11 | 2015-01-21,62.38,62.78,62.08,62.16,9073343.0,0.0,1.0,60.332967991466,60.719841784294005,60.042812646846,60.120187405410995,9073343.0 12 | 2015-01-22,62.26,62.71,61.53,62.59,8494255.0,0.0,1.0,60.216905853618,60.652138870549,59.510861181708,60.536076732701,8494255.0 13 | 2015-01-23,62.46,63.0,62.41,62.49,6229087.0,0.0,1.0,60.410342750031994,60.932622370348994,60.361983525928004,60.439358284494,6229087.0 14 | 2015-01-26,62.58,62.98,62.12,62.82,6714420.0,0.0,1.0,60.52640488788,60.913278680708,60.081500026128,60.758529163577,6714420.0 15 | 2015-01-28,62.82,62.9608,61.32,61.45,8862098.0,0.0,1.0,60.758529163577,60.894708738652,59.307752440473,59.43348642314201,8862098.0 16 | 2015-01-29,61.42,62.15,60.755,62.09,9063771.0,0.0,1.0,59.40447088868,60.11051556059,58.761293208104,60.052484491666,9063771.0 17 | 2015-01-30,61.53,61.93,60.03,60.28,12045653.0,0.0,1.0,59.510861181708,59.897734974535,58.060084458604,58.301880579121,12045653.0 18 | 2015-02-02,60.58,60.93,59.78,60.88,9249503.0,0.0,1.0,58.592035923741996,58.930550492466004,57.818288338086994,58.882191268363,9249503.0 19 | 2015-02-03,60.94,61.06,59.94,61.02,11449396.0,0.0,1.0,58.940222337287,59.056284475135,57.973037855218,59.017597095852004,11449396.0 20 | 2015-02-04,59.97,60.0,58.34,59.05,19397750.0,0.0,1.0,58.00205338968001,58.031068924142,56.425542683907004,57.112243666176006,19397750.0 21 | 2015-02-05,59.27,59.35,58.505,59.17,12630300.0,0.0,1.0,57.325024252232,57.402399010797005,56.585128123449,57.228305804025,12630300.0 22 | 2015-02-06,59.1,59.77,58.58,58.79,9849465.0,0.0,1.0,57.16060289028001,57.808616493266,56.65766695960399,56.86077570083901,9849465.0 23 | 2015-02-09,58.7,59.0,57.93,58.33,10006346.0,0.0,1.0,56.773729097452005,57.063884442073004,56.028997046259,56.415870839087,10006346.0 24 | 2015-02-10,59.0,59.34,58.771,58.85,9530898.0,0.0,1.0,57.063884442073004,57.392727165976,56.842399195679,56.918806769763,9530898.0 25 | 2015-02-11,58.79,58.96,58.4,58.74,10472660.0,0.0,1.0,56.86077570083901,57.02519706279,56.483573752832,56.812416476735,10472660.0 26 | 2015-02-12,59.05,59.11,58.59,58.88,7194351.0,0.0,1.0,57.112243666176006,57.170274735101,56.667338804425,56.947822304225,7194351.0 27 | 2015-02-13,58.88,58.94,58.61,58.81,7887364.0,0.0,1.0,56.947822304225,57.005853373149,56.686682494066,56.880119390480004,7887364.0 28 | 2015-02-17,58.74,58.97,58.7,58.79,10153165.0,0.0,1.0,56.812416476735,57.034868907611,56.773729097452005,56.86077570083901,10153165.0 29 | 2015-02-18,58.72,59.01,58.23,58.8,10475530.0,0.0,1.0,56.793072787094005,57.073556286894,56.31915239088001,56.870447545659,10475530.0 30 | 2015-02-19,58.85,58.99,57.81,58.3,9797378.0,0.0,1.0,56.918806769763,57.054212597252,55.912934908410996,56.386855304624994,9797378.0 31 | 2015-02-20,58.11,58.48,57.73,58.35,11576719.0,0.0,1.0,56.203090253031995,56.560948511397,55.835560149845,56.435214528728,11576719.0 32 | 2015-02-23,58.46,58.67,58.17,58.3,8585119.0,0.0,1.0,56.541604821756,56.74471356299,56.261121321956,56.386855304624994,8585119.0 33 | 2015-02-24,58.49,58.57,58.05,58.36,7708091.0,0.0,1.0,56.570620356218,56.647995114783,56.145059184107,56.444886373549004,7708091.0 34 | 2015-02-25,58.46,58.97,58.0625,58.49,8447022.0,0.0,1.0,56.541604821756,57.034868907611,56.157148990133,56.570620356218,8447022.0 35 | 2015-02-26,58.66,59.15,58.66,58.96,11488560.0,0.0,1.0,56.735041718169995,57.208962114383,56.735041718169995,57.02519706279,11488560.0 36 | 2015-02-27,58.89,59.06,58.49,58.54,13059760.0,0.0,1.0,56.957494149045,57.121915510997,56.570620356218,56.618979580320996,13059760.0 37 | 2015-03-02,58.29,58.89,58.28,58.58,9666895.0,0.0,1.0,56.377183459804,56.957494149045,56.367511614982995,56.65766695960399,9666895.0 38 | 2015-03-03,58.64,58.7,57.95,58.34,8240091.0,0.0,1.0,56.715698028528,56.773729097452005,56.048340735901,56.425542683907004,8240091.0 39 | 2015-03-04,58.41,58.65,57.68,57.88,13334370.0,0.0,1.0,56.493245597652,56.725369873348995,55.787200925742,55.980637822156,13334370.0 40 | 2015-03-05,58.09,58.28,57.8,57.98,11534075.0,0.0,1.0,56.18374656339001,56.367511614982995,55.90326306359,56.077356270363,11534075.0 41 | 2015-03-06,57.85,57.87,56.72,56.84,11064674.0,0.0,1.0,55.95162228769399,55.970965977335,54.858703822956,54.97476596080401,11064674.0 42 | 2015-03-09,56.84,57.37,56.3,57.26,8342037.0,0.0,1.0,54.97476596080401,55.4873737363,54.452486340487006,55.380983443273,8342037.0 43 | 2015-03-10,56.95,57.19,56.49,56.58,13125044.0,0.0,1.0,55.081156253831,55.313280529528,54.63625139208,54.723297995466005,13125044.0 44 | 2015-03-11,57.49,57.49,55.97,56.06,15657552.0,0.45,1.0,56.049770981951,56.049770981951,54.567849745343,54.655595081721,15657552.0 45 | 2015-03-12,55.82,56.22,55.66,56.17,12911973.0,0.45,1.0,54.857600457037,55.250704007428,54.700359036881,55.201566063628995,12911973.0 46 | 2015-03-13,56.03,56.43,55.64,56.2,12803237.0,0.0,1.0,55.063979820992,55.457083371383,54.680703859361,55.231048829908,12803237.0 47 | 2015-03-16,56.58,57.32,56.58,57.12,11382050.0,0.0,1.0,55.60449720278001,56.331738771002996,55.60449720278001,56.135186995807,11382050.0 48 | 2015-03-17,56.89,56.89,56.24,56.47,9983479.0,0.0,1.0,55.909152454333,55.909152454333,55.270359184948,55.496393726422006,9983479.0 49 | 2015-03-18,56.39,57.97,56.21,57.65,14894290.0,0.0,1.0,55.417773016344,56.970532040388,55.240876418668,56.656049200074996,14894290.0 50 | 2015-03-19,57.43,58.34,57.03,58.21,14409360.0,0.0,1.0,56.43984224736,57.334152824499,56.046738696969,57.206394170622,14409360.0 51 | 2015-03-20,58.24,58.86,57.76,58.58,23773497.0,0.0,1.0,57.235876936901995,57.845187440007,56.764152676433,57.570014954734,23773497.0 52 | 2015-03-23,58.4,59.14,58.04,58.73,10511545.0,0.0,1.0,57.393118357058,58.120359925281,57.039325161705996,57.71742878613001,10511545.0 53 | 2015-03-24,59.41,59.7,58.51,58.63,12935972.0,0.0,1.0,58.385704821794995,58.670704895828,57.501221833415,57.619152898533,12935972.0 54 | 2015-03-25,59.5,59.71,58.18,58.26,13870079.0,0.0,1.0,58.474153120633,58.68053248458801,57.176911404343,57.255532114420994,13870079.0 55 | 2015-03-26,58.04,58.2,57.41,57.6,10560211.0,0.0,1.0,57.039325161705996,57.196566581862,56.420187069841006,56.606911256276,10560211.0 56 | 2015-03-27,57.83,58.2252,57.63,57.75,8416109.0,0.0,1.0,56.832945797750995,57.221332105537,56.636394022556,56.754325087672996,8416109.0 57 | 2015-03-30,58.25,58.54,58.15,58.34,8083336.0,0.0,1.0,57.245704525661004,57.53070459969499,57.147428638064,57.334152824499,8083336.0 58 | 2015-03-31,58.19,58.31,57.48,57.48,10409068.0,0.0,1.0,57.186738993103,57.30467005822,56.488980191159,56.488980191159,10409068.0 59 | 2015-04-01,57.26,57.32,56.22,56.86,11623843.0,0.0,1.0,56.272773238444,56.331738771002996,55.250704007428,55.879669688053,11623843.0 60 | 2015-04-02,57.0,57.4501,56.85,57.1,7551414.0,0.0,1.0,56.017255930690006,56.459595700767004,55.869842099294004,56.115531818288005,7551414.0 61 | 2015-04-06,56.93,57.335,56.71,57.18,12635739.0,0.0,1.0,55.948462809371996,56.346480154142,55.732255856657,56.194152528366004,12635739.0 62 | 2015-04-07,57.66,57.88,57.3,57.43,9250277.0,0.0,1.0,56.665876788835,56.88208374155,56.312083593483,56.43984224736,9250277.0 63 | 2015-04-08,57.91,58.05,57.02,57.15,13554025.0,0.0,1.0,56.911566507829,57.049152750466,56.03691110821,56.164669762087,13554025.0 64 | 2015-04-09,57.22,57.729,57.11,57.43,11974348.0,0.0,1.0,56.233462883405,56.733687151276996,56.125359407047995,56.43984224736,11974348.0 65 | 2015-04-10,57.05,57.645,56.32,57.25,15487486.0,0.0,1.0,56.066393874489,56.651135405695,55.348979895026,56.262945649684,15487486.0 66 | 2015-04-13,57.08,57.365,56.5,56.73,10349573.0,0.0,1.0,56.095876640768005,56.375962920422,55.525876492702,55.751911034176,10349573.0 67 | 2015-04-14,56.94,57.99,56.61,57.76,14640384.0,0.0,1.0,55.958290398131,56.990187217907,55.633979969059,56.764152676433,14640384.0 68 | 2015-04-15,58.07,58.945,58.07,58.45,12093250.0,0.0,1.0,57.068807927985,57.928721944464996,57.068807927985,57.442256300857004,12093250.0 69 | 2015-04-16,58.21,58.39,57.74,57.84,6350238.0,0.0,1.0,57.206394170622,57.383290768298,56.744497498913,56.842773386511,6350238.0 70 | 2015-04-17,57.35,57.36,56.57,56.88,11645650.0,0.0,1.0,56.361221537282,56.371049126042,55.59466961401999,55.89932486557299,11645650.0 71 | 2015-04-20,57.5,58.0,57.39,57.61,9887515.0,0.0,1.0,56.508635368679,57.000014806667004,56.400531892321,56.616738845036004,9887515.0 72 | 2015-04-21,58.01,58.03,57.41,57.66,9169026.0,0.0,1.0,57.009842395427,57.02949757294599,56.420187069841006,56.665876788835,9169026.0 73 | 2015-04-22,57.56,57.885,57.32,57.69,7891005.0,0.0,1.0,56.567600901237,56.88699753593001,56.331738771002996,56.695359555114,7891005.0 74 | 2015-04-23,57.52,57.85,57.035,57.51,8321420.0,0.0,1.0,56.528290546197994,56.852600975270995,56.051652491349,56.518462957438004,8321420.0 75 | 2015-04-24,57.85,58.19,57.51,57.6,7676445.0,0.0,1.0,56.852600975270995,57.186738993103,56.518462957438004,56.606911256276,7676445.0 76 | 2015-04-27,57.83,58.03,56.88,57.1,10363495.0,0.0,1.0,56.832945797750995,57.02949757294599,55.89932486557299,56.115531818288005,10363495.0 77 | 2015-04-28,60.22,60.48,59.22,59.98,34539796.0,0.0,1.0,59.181739511336005,59.43725681909,58.198980635359,58.945877381102,34539796.0 78 | 2015-04-29,59.33,60.43,59.23,59.68,17056708.0,0.0,1.0,58.307084111716996,59.388118875291006,58.208808224119,58.651049718308,17056708.0 79 | 2015-04-30,59.79,60.14,59.24,59.56,12463499.0,0.0,1.0,58.759153194666006,59.103118801258,58.218635812879,58.533118653191,12463499.0 80 | 2015-05-01,59.76,60.38,59.68,59.86,9314240.0,0.0,1.0,58.729670428387,59.338980931492,58.651049718308,58.827946315984,9314240.0 81 | 2015-05-04,60.14,60.95,60.03,60.64,9049765.0,0.0,1.0,59.103118801258,59.899153490798994,58.995015324899995,59.59449823924599,9049765.0 82 | 2015-05-05,60.32,60.7,60.06,60.49,12082488.0,0.0,1.0,59.280015398934005,59.653463771805,59.02449809118,59.44708440785,12082488.0 83 | 2015-05-06,60.45,60.59,59.93,60.26,11570856.0,0.0,1.0,59.407774052811,59.545360295448,58.896739437303,59.221049866375,11570856.0 84 | 2015-05-07,60.05,60.73,59.93,60.3,9000828.0,0.0,1.0,59.014670502419996,59.682946538084,58.896739437303,59.260360221414004,9000828.0 85 | 2015-05-08,61.0,61.375,60.7,60.74,10143412.0,0.0,1.0,59.948291434598,60.31682601309,59.653463771805,59.69277412684399,10143412.0 86 | 2015-05-11,60.66,60.69,59.835,60.0,9718746.0,0.0,1.0,59.614153416766,59.643636183045,58.803377344085,58.965532558621,9718746.0 87 | 2015-05-12,59.55,59.725,59.11,59.44,13191909.0,0.0,1.0,58.523291064431,58.695273867727,58.090877159002,58.415187588074,13191909.0 88 | 2015-05-13,59.62,59.85,58.97,59.18,7270161.0,0.0,1.0,58.59208418575,58.818118727225,57.953290916365006,58.15967028031999,7270161.0 89 | 2015-05-14,59.47,59.89,59.045,59.78,7127324.0,0.0,1.0,58.444670354353,58.857429082264005,58.026997832062996,58.749325605906,7127324.0 90 | 2015-05-15,59.94,60.23,59.81,60.23,7633087.0,0.0,1.0,58.906567026062,59.191567100095995,58.778808372185004,59.191567100095995,7633087.0 91 | 2015-05-18,60.17,60.45,60.01,60.01,7169633.0,0.0,1.0,59.132601567537,59.407774052811,58.975360147381004,58.975360147381004,7169633.0 92 | 2015-05-19,59.96,60.92,59.94,60.52,8110539.0,0.0,1.0,58.926222203582,59.86967072452,58.906567026062,59.476567174129,8110539.0 93 | 2015-05-20,60.67,60.85,60.44,60.46,6028235.0,0.0,1.0,59.623981005526,59.800877603202,59.397946464050996,59.417601641571,6028235.0 94 | 2015-05-21,60.55,60.785,60.09,60.1,8033251.0,0.0,1.0,59.506049940408,59.736998276263,59.053980857459,59.063808446219,8033251.0 95 | 2015-05-22,60.07,60.07,59.34,59.38,8942102.0,0.0,1.0,59.034325679940004,59.034325679940004,58.316911700476,58.356222055515005,8942102.0 96 | 2015-05-26,59.28,59.44,58.85,58.97,10799557.0,0.0,1.0,58.25794616791799,58.415187588074,57.835359851248,57.953290916365006,10799557.0 97 | 2015-05-27,59.09,59.78,58.87,59.46,9689749.0,0.0,1.0,58.071221981482,58.749325605906,57.855015028767006,58.434842765594,9689749.0 98 | 2015-05-28,59.45,59.85,59.38,59.7,9502770.0,0.0,1.0,58.425015176834,58.818118727225,58.356222055515005,58.670704895828,9502770.0 99 | 2015-05-29,59.88,61.12,59.47,60.89,19845035.0,0.0,1.0,58.847601493504,60.066222499715,58.444670354353,59.840187958240996,19845035.0 100 | 2015-06-01,60.85,61.7,60.34,60.75,11668791.0,0.0,1.0,59.800877603202,60.636222647782,59.299670576452996,59.702601715604,11668791.0 101 | 2015-06-02,60.45,60.455,59.82,60.24,8964706.0,0.0,1.0,59.407774052811,59.412687847191,58.788635960944994,59.201394688856,8964706.0 102 | 2015-06-03,60.66,60.88,60.26,60.39,8654521.0,0.0,1.0,59.614153416766,59.830360369481,59.221049866375,59.348808520252,8654521.0 103 | 2015-06-04,59.96,60.21,59.27,59.47,10736342.0,0.0,1.0,58.926222203582,59.171911922576,58.248118579158,58.444670354353,10736342.0 104 | 2015-06-05,59.36,59.41,58.8,58.99,10853348.0,0.0,1.0,58.336566877996,58.385704821794995,57.786221907449,57.972946093884,10853348.0 105 | 2015-06-08,58.89,59.17,58.76,58.87,8045800.0,0.0,1.0,57.874670206287,58.14984269156,57.746911552410005,57.855015028767006,8045800.0 106 | 2015-06-09,58.96,59.29,58.71,58.84,6445186.0,0.0,1.0,57.943463327605,58.267773756676995,57.697773608611,57.825532262488004,6445186.0 107 | 2015-06-10,58.98,59.66,58.91,59.61,10223248.0,0.0,1.0,57.963118505124996,58.631394540789,57.894325383806,58.58225659699001,10223248.0 108 | 2015-06-11,59.2,59.37,58.84,58.91,11640259.0,0.0,1.0,58.17932545784,58.346394466756,57.825532262488004,57.894325383806,11640259.0 109 | 2015-06-12,58.79,58.8,57.79,57.87,15812329.0,0.0,1.0,57.776394318689,57.786221907449,56.793635442712,56.87225615279,15812329.0 110 | 2015-06-15,57.6,57.64,57.02,57.12,9756330.0,0.0,1.0,56.606911256276,56.646221611315,56.03691110821,56.135186995807,9756330.0 111 | 2015-06-16,57.24,57.73,56.88,57.71,6880596.0,0.0,1.0,56.253118060925,56.734669910152995,55.89932486557299,56.715014732634,6880596.0 112 | 2015-06-17,57.71,58.17,57.47,57.91,7886973.0,0.0,1.0,56.715014732634,57.167083815583,56.479152602399,56.911566507829,7886973.0 113 | 2015-06-18,57.91,58.87,57.91,58.59,7399048.0,0.0,1.0,56.911566507829,57.855015028767006,56.911566507829,57.579842543493996,7399048.0 114 | 2015-06-19,58.41,58.84,57.95,58.04,12390906.0,0.0,1.0,57.402945945818004,57.825532262488004,56.95087686286801,57.039325161705996,12390906.0 115 | 2015-06-22,58.79,59.2,58.43,58.83,8257167.0,0.0,1.0,57.776394318689,58.17932545784,57.422601123337,57.815704673728,8257167.0 116 | 2015-06-23,58.88,59.05,58.52,59.03,7958331.0,0.0,1.0,57.864842617526996,58.031911626443005,57.511049422175,58.012256448923,7958331.0 117 | 2015-06-24,58.92,59.03,58.24,58.24,7881689.0,0.0,1.0,57.904152972566,58.012256448923,57.235876936901995,57.235876936901995,7881689.0 118 | 2015-06-25,58.25,58.595,57.715,57.9,9930319.0,0.0,1.0,57.245704525661004,57.584756337873,56.719928527014,56.901738919069004,9930319.0 119 | 2015-06-26,58.22,58.51,57.85,58.46,7227030.0,0.0,1.0,57.216221759382,57.501221833415,56.852600975270995,57.45208388961701,7227030.0 120 | 2015-06-29,57.93,58.22,57.25,57.29,9542393.0,0.0,1.0,56.931221685348994,57.216221759382,56.262945649684,56.302256004723,9542393.0 121 | 2015-06-30,57.71,57.71,56.705,57.03,8622940.0,0.0,1.0,56.715014732634,56.715014732634,55.727342062277,56.046738696969,8622940.0 122 | 2015-07-01,56.93,57.87,56.61,57.6,9297548.0,0.0,1.0,55.948462809371996,56.87225615279,55.633979969059,56.606911256276,9297548.0 123 | 2015-07-02,57.94,58.33,57.5,57.67,8481251.0,0.0,1.0,56.941049274107996,57.324325235739,56.508635368679,56.675704377595,8481251.0 124 | 2015-07-06,57.24,57.84,56.64,57.55,8024005.0,0.0,1.0,56.253118060925,56.842773386511,55.663462735338,56.557773312476996,8024005.0 125 | 2015-07-07,57.75,58.1,57.1752,57.99,9029811.0,0.0,1.0,56.754325087672996,57.098290694265,56.189435285761,56.990187217907,9029811.0 126 | 2015-07-08,57.73,57.74,57.12,57.35,9084184.0,0.0,1.0,56.734669910152995,56.744497498913,56.135186995807,56.361221537282,9084184.0 127 | 2015-07-09,58.04,58.17,57.35,57.38,8664219.0,0.0,1.0,57.039325161705996,57.167083815583,56.361221537282,56.390704303561,8664219.0 128 | 2015-07-10,58.07,58.25,57.58,57.95,8019595.0,0.0,1.0,57.068807927985,57.245704525661004,56.587256078757,56.95087686286801,8019595.0 129 | 2015-07-14,57.9,58.28,57.68,58.19,7207788.0,0.0,1.0,56.901738919069004,57.275187291941,56.685531966354,57.186738993103,7207788.0 130 | 2015-07-15,58.16,58.56,58.07,58.22,5748628.0,0.0,1.0,57.157256226822994,57.550359777214005,57.068807927985,57.216221759382,5748628.0 131 | 2015-07-16,58.51,58.865,58.865,58.82,5313322.0,0.0,1.0,57.501221833415,57.850101234387,57.850101234387,57.805877084968,5313322.0 132 | 2015-07-17,58.7,58.92,58.59,58.82,6986938.0,0.0,1.0,57.687946019851,57.904152972566,57.579842543493996,57.805877084968,6986938.0 133 | 2015-07-20,58.96,59.2,58.86,59.0,5650794.0,0.0,1.0,57.943463327605,58.17932545784,57.845187440007,57.982773682643995,5650794.0 134 | 2015-07-21,58.99,59.02,58.65,58.67,6843731.0,0.0,1.0,57.972946093884,58.002428860164,57.638808076052,57.658463253571995,6843731.0 135 | 2015-07-22,58.51,59.03,58.01,58.13,8591889.0,0.0,1.0,57.501221833415,58.012256448923,57.009842395427,57.127773460544006,8591889.0 136 | 2015-07-23,58.53,58.53,57.94,58.07,6360885.0,0.0,1.0,57.520877010935,57.520877010935,56.941049274107996,57.068807927985,6360885.0 137 | 2015-07-24,57.71,57.88,57.32,57.41,7713094.0,0.0,1.0,56.715014732634,56.88208374155,56.331738771002996,56.420187069841006,7713094.0 138 | 2015-07-27,57.43,57.45,56.63,56.99,14851518.0,0.0,1.0,56.43984224736,56.459497424880006,55.653635146579,56.00742834193001,14851518.0 139 | 2015-07-28,56.52,57.64,55.83,57.52,16213274.0,0.0,1.0,55.545531670221,56.646221611315,54.867428045797006,56.528290546197994,16213274.0 140 | 2015-07-29,57.69,58.82,57.64,58.54,12616479.0,0.0,1.0,56.695359555114,57.805877084968,56.646221611315,57.53070459969499,12616479.0 141 | 2015-07-30,58.62,58.82,58.28,58.52,6975999.0,0.0,1.0,57.609325309773,57.805877084968,57.275187291941,57.511049422175,6975999.0 142 | 2015-07-31,59.0,59.33,58.7,58.96,8614778.0,0.0,1.0,57.982773682643995,58.307084111716996,57.687946019851,57.943463327605,8614778.0 143 | 2015-08-03,59.3,59.45,58.48,59.05,6783645.0,0.0,1.0,58.277601345437,58.425015176834,57.471739067136,58.031911626443005,6783645.0 144 | 2015-08-04,59.44,59.47,58.3665,58.7,6809039.0,0.0,1.0,58.415187588074,58.444670354353,57.360195934713,57.687946019851,6809039.0 145 | 2015-08-05,59.08,59.275,58.765,59.1,5677165.0,0.0,1.0,58.06139439272199,58.253032373538,57.75182534679,58.081049570242,5677165.0 146 | 2015-08-06,59.16,59.25,58.32,58.43,6988684.0,0.0,1.0,58.1400151028,58.228463401638,57.31449764698001,57.422601123337,6988684.0 147 | 2015-08-07,58.35,58.4499,57.67,57.97,9688456.0,0.0,1.0,57.343980413259004,57.442158024969,56.675704377595,56.970532040388,9688456.0 148 | 2015-08-10,58.26,58.605,58.26,58.41,4958095.0,0.0,1.0,57.255532114420994,57.59458392663299,57.255532114420994,57.402945945818004,4958095.0 149 | 2015-08-11,57.93,58.19,57.56,57.76,6854654.0,0.0,1.0,56.931221685348994,57.186738993103,56.567600901237,56.764152676433,6854654.0 150 | 2015-08-12,57.28,58.28,57.12,58.26,7525257.0,0.0,1.0,56.292428415964004,57.275187291941,56.135186995807,57.255532114420994,7525257.0 151 | 2015-08-13,58.55,59.45,58.5,58.98,10801353.0,0.0,1.0,57.540532188454,58.425015176834,57.491394244656,57.963118505124996,10801353.0 152 | 2015-08-14,59.01,59.57,58.87,59.18,9435391.0,0.0,1.0,57.992601271404,58.542946241951,57.855015028767006,58.15967028031999,9435391.0 153 | 2015-08-17,58.8,59.75,58.58,59.71,6084884.0,0.0,1.0,57.786221907449,58.719842839627,57.570014954734,58.68053248458801,6084884.0 154 | 2015-08-18,59.67,59.95,59.56,59.66,6768285.0,0.0,1.0,58.641222129549,58.916394614821996,58.533118653191,58.631394540789,6768285.0 155 | 2015-08-19,59.32,60.07,59.19,59.66,7966480.0,0.0,1.0,58.297256522957,59.034325679940004,58.16949786908001,58.631394540789,7966480.0 156 | 2015-08-20,58.29,58.55,56.74,56.95,23628408.0,0.0,1.0,57.2850148807,57.540532188454,55.761738622936,55.968117986891,23628408.0 157 | 2015-08-21,56.59,57.625,55.76,55.77,17423351.0,0.0,1.0,55.614324791539005,56.631480228176,54.798634924478996,54.808462513238,17423351.0 158 | 2015-08-24,53.07,55.13,45.69,54.315,22098162.0,0.0,1.0,52.1550135481,54.179496832613,44.902253043390004,53.378548348692,22098162.0 159 | 2015-08-25,55.39,55.41,51.0,51.17,22510803.0,0.0,1.0,54.435014140367,54.454669317887,50.120702674827996,50.287771683744005,22510803.0 160 | 2015-08-26,53.4,54.61,52.49,54.42,22667929.0,0.0,1.0,52.479323977173,53.668462217104995,51.585013400034,53.481738030669,22667929.0 161 | 2015-08-27,55.33,55.4,53.64,54.95,14571728.0,0.0,1.0,54.376048607808,54.444841729127,52.715186107407,54.002600234937,14571728.0 162 | 2015-08-28,54.81,55.41,54.5941,55.37,12807700.0,0.0,1.0,53.86501399229999,54.454669317887,53.652836350977005,54.415358962847996,12807700.0 163 | 2015-08-31,55.05,55.298,53.62,53.85,12914805.0,0.0,1.0,54.100876122535,54.344600323777,52.695530929888,52.921565471362,12914805.0 164 | 2015-09-01,52.47,53.23,52.2,52.53,15665341.0,0.0,1.0,51.565358222514,52.312254968257,51.300013326000006,51.62432375507301,15665341.0 165 | 2015-09-02,53.17,53.27,52.35,52.98,13083774.0,0.0,1.0,52.253289435698,52.351565323296,51.447427157397,52.066565249262,13083774.0 166 | 2015-09-03,53.27,53.55,52.6,52.65,11983497.0,0.0,1.0,52.351565323296,52.626737808569004,51.693116876391,51.74225482019,11983497.0 167 | 2015-09-04,52.1,52.24,51.18,51.59,14453039.0,0.0,1.0,51.20173743840299,51.339323681039,50.297599272503994,50.70053041165399,14453039.0 168 | 2015-09-08,53.01,53.02,52.195,52.69,14885999.0,0.0,1.0,52.096048015542,52.105875604302,51.29509953162,51.781565175229,14885999.0 169 | 2015-09-09,53.21,53.33,51.81,51.93,11116693.0,0.0,1.0,52.292599790737,52.410530855854,50.916737364369,51.034668429487,11116693.0 170 | 2015-09-10,52.02,53.2,51.86,52.72,14065238.0,0.0,1.0,51.123116728325,52.282772201977,50.965875308168,51.811047941508,14065238.0 171 | 2015-09-11,52.21,52.45,51.71,52.09,12087916.0,0.0,1.0,51.309840914759995,51.545703044995,50.818461476772,51.191909849643004,12087916.0 172 | 2015-09-14,52.12,52.73,51.99,52.34,8760994.0,0.0,1.0,51.221392615922,51.820875530268005,51.093633962045004,51.437599568637,8760994.0 173 | 2015-09-15,52.78,53.885,52.67,53.55,11627894.0,0.0,1.0,51.870013474067,52.955962032022,51.76190999771,52.626737808569004,11627894.0 174 | 2015-09-16,53.51,53.965,53.3201,53.87,8565120.0,0.0,1.0,52.58742745353,53.0345827421,52.400801542981995,52.941220648881995,8565120.0 175 | 2015-09-17,53.85,54.5,53.02,53.96,22616163.0,0.0,1.0,52.921565471362,53.56035874074799,52.105875604302,53.029668947720005,22616163.0 176 | 2015-09-18,53.68,53.87,51.91,52.13,28637960.0,0.0,1.0,52.754496462446006,52.941220648881995,51.015013251967,51.231220204681996,28637960.0 177 | 2015-09-21,52.44,52.44,50.69,50.98,16925078.0,0.0,1.0,51.535875456235,51.535875456235,49.816047423275,50.101047497307995,16925078.0 178 | 2015-09-22,50.55,51.0,50.26,50.74,12455001.0,0.0,1.0,49.678461180637996,50.120702674827996,49.393461106604995,49.865185367074005,12455001.0 179 | 2015-09-23,50.74,51.44,50.39,51.03,10023562.0,0.0,1.0,49.865185367074005,50.553116580258,49.521219760482,50.150185441107,10023562.0 180 | 2015-09-24,50.53,50.86,50.22,50.59,10285521.0,0.0,1.0,49.658806003119004,49.983116432191,49.354150751566,49.717771535677,10285521.0 181 | 2015-09-25,50.92,51.32,49.13,49.6,15116267.0,0.0,1.0,50.042081964750004,50.435185515141,48.282943576751,48.744840248459994,15116267.0 182 | 2015-09-28,49.3,49.37,48.09,48.42,20011321.0,0.0,1.0,48.450012585667,48.518805706985,47.260874345735,47.585184774807,20011321.0 183 | 2015-09-29,48.58,49.3,48.195,48.65,12597501.0,0.0,1.0,47.742426194964,48.450012585667,47.364064027712004,47.811219316282,12597501.0 184 | 2015-09-30,49.4,49.54,48.845,49.39,12587026.0,0.0,1.0,48.548288473264996,48.685874715901,48.002857297096995,48.53846088450499,12587026.0 185 | 2015-10-01,49.35,49.57,48.54,49.37,14304419.0,0.0,1.0,48.499150529466,48.715357482181,47.703115839924,48.518805706985,14304419.0 186 | 2015-10-02,48.79,50.15,48.35,50.14,24227742.0,0.0,1.0,47.948805558919,49.285357630247,47.516391653488995,49.275530041488,24227742.0 187 | 2015-10-05,51.07,51.32,50.69,51.23,15765561.0,0.0,1.0,50.189495796146005,50.435185515141,49.816047423275,50.346737216303,15765561.0 188 | 2015-10-06,51.39,51.39,49.321000000000005,49.8,16411777.0,0.0,1.0,50.503978636458996,50.503978636458996,48.470650522062996,48.94139202365599,16411777.0 189 | 2015-10-07,50.46,51.12,49.77,50.95,14508216.0,0.0,1.0,49.5900128818,50.238633739945,48.911909257376,50.07156473102899,14508216.0 190 | 2015-10-08,50.66,51.19,50.14,51.02,12510725.0,0.0,1.0,49.786564656996,50.307426861264,49.275530041488,50.140357852347,12510725.0 191 | 2015-10-09,50.99,51.51,50.69,50.95,10896170.0,0.0,1.0,50.110875086068,50.621909701576,49.816047423275,50.07156473102899,10896170.0 192 | 2015-10-12,49.71,50.85,49.69,50.71,11653308.0,0.0,1.0,48.852943724818,49.97328884343099,48.833288547298004,49.835702600795,11653308.0 193 | 2015-10-13,50.78,50.91,49.36,49.47,14653769.0,0.0,1.0,49.904495722113,50.03225437599,48.508978118226004,48.617081594583,14653769.0 194 | 2015-10-14,49.59,50.12,49.45,49.54,13702176.0,0.0,1.0,48.735012659700004,49.255874863968,48.597426417064,48.685874715901,13702176.0 195 | 2015-10-15,49.67,51.08,49.25,50.72,13924570.0,0.0,1.0,48.813633369779,50.199323384905995,48.400874641868,49.845530189554005,13924570.0 196 | 2015-10-16,51.3,51.72,51.08,51.48,10999556.0,0.0,1.0,50.415530337621,50.828289065530996,50.199323384905995,50.592426935297006,10999556.0 197 | 2015-10-19,51.33,51.55,50.93,51.4,8370988.0,0.0,1.0,50.4450131039,50.661220056615,50.05190955351,50.513806225219,8370988.0 198 | 2015-10-20,51.39,51.4696,50.1,50.39,9876186.0,0.0,1.0,50.503978636458996,50.582206242987006,49.236219686449004,49.521219760482,9876186.0 199 | 2015-10-21,50.75,50.98,50.15,50.59,11269945.0,0.0,1.0,49.875012955833995,50.101047497307995,49.285357630247,49.717771535677,11269945.0 200 | 2015-10-22,50.82,52.56,50.3,52.01,18419646.0,0.0,1.0,49.943806077152004,51.653806521351996,49.432771461644,51.113289139565,18419646.0 201 | 2015-10-23,52.35,53.25,52.14,52.88,15651212.0,0.0,1.0,51.447427157397,52.33191014577599,51.241047793442,51.968289361665,15651212.0 202 | 2015-10-26,52.65,53.17,52.4734,52.91,10891758.0,0.0,1.0,51.74225482019,52.253289435698,51.568699602692,51.997772127944,10891758.0 203 | 2015-10-27,53.76,54.1,52.78,53.47,13932223.0,0.0,1.0,52.83311717252499,53.167255190357,51.870013474067,52.548117098491,13932223.0 204 | 2015-10-28,53.99,55.14,53.55,55.1,14701229.0,0.0,1.0,53.05915171399901,54.189324421372994,52.626737808569004,54.150014066334,14701229.0 205 | 2015-10-29,54.96,55.64,54.47,54.87,8863284.0,0.0,1.0,54.012427823697,54.680703859361,53.530875974468,53.923979524859,8863284.0 206 | 2015-10-30,54.79,55.265,54.66,54.66,10850451.0,0.0,1.0,53.845358814781,54.31216928087,53.717600160904,53.717600160904,10850451.0 207 | 2015-11-02,54.69,55.325,54.41,55.11,10552354.0,0.0,1.0,53.747082927183,54.371134813429,53.47191044191,54.159841655093004,10552354.0 208 | 2015-11-03,55.08,55.38,54.475,55.11,9186099.0,0.0,1.0,54.130358888814,54.425186551607,53.535789768848,54.159841655093004,9186099.0 209 | 2015-11-04,55.47,55.765,55.18,55.53,7718320.0,0.0,1.0,54.513634850445,54.803548718858,54.228634776412,54.572600383003994,7718320.0 210 | 2015-11-05,55.46,55.6836,54.68,55.05,9042876.0,0.0,1.0,54.503807261685,54.723552146353995,53.737255338423005,54.100876122535,9042876.0 211 | 2015-11-06,54.79,54.88,54.01,54.61,10706219.0,0.0,1.0,53.845358814781,53.933807113619004,53.078806891519,53.668462217104995,10706219.0 212 | 2015-11-09,54.03,54.41,53.7404,54.24,9116733.0,0.0,1.0,53.098462069038,53.47191044191,52.813855098555,53.304841432993,9116733.0 213 | 2015-11-10,54.38,54.6,54.02,54.43,7449684.0,0.0,1.0,53.44242767563,53.658634628345006,53.088634480279,53.491565619429,7449684.0 214 | 2015-11-11,54.81,55.0,53.68,53.72,8512508.0,0.0,1.0,53.86501399229999,54.051738178736,52.754496462446006,52.793806817485,8512508.0 215 | 2015-11-12,53.59,53.9701,53.03,53.03,8420859.0,0.0,1.0,52.666048163608,53.039594812367,52.115703193061,52.115703193061,8420859.0 216 | 2015-11-13,53.46,53.72,52.9,53.03,10769583.0,0.0,1.0,52.538289509730994,52.793806817485,51.987944539184,52.115703193061,10769583.0 217 | 2015-11-16,52.19,53.81,52.13,53.7,6898164.0,0.0,1.0,51.290185737241,52.882255116323,51.231220204681996,52.774151639966,6898164.0 218 | 2015-11-17,53.71,54.3,53.29,53.71,7114602.0,0.0,1.0,52.783979228726,53.363806965551994,52.371220500815,52.783979228726,7114602.0 219 | 2015-11-18,53.86,54.32,53.7,54.23,10746738.0,0.0,1.0,52.931393060122005,53.383462143072,52.774151639966,53.295013844234,10746738.0 220 | 2015-11-19,54.44,54.5289,53.9215,54.28,6658353.0,0.0,1.0,53.501393208189,53.588760472263004,52.991832730995,53.344151788033,6658353.0 221 | 2015-11-20,54.61,54.86,54.0,54.1,8908069.0,0.0,1.0,53.668462217104995,53.914151936099,53.068979302759,53.167255190357,8908069.0 222 | 2015-11-23,54.075,54.2011,53.78,54.01,8328787.0,0.0,1.0,53.142686218457,53.266612112718,52.852772350044,53.078806891519,8328787.0 223 | 2015-11-24,53.56,53.68,53.1,53.48,9968981.0,0.0,1.0,52.636565397328994,52.754496462446006,52.18449631438,52.557944687250995,9968981.0 224 | 2015-11-25,53.62,53.92,53.46,53.72,6068622.0,0.0,1.0,52.695530929888,52.990358592681,52.538289509730994,52.793806817485,6068622.0 225 | 2015-11-27,53.36,54.2,53.36,53.96,2981642.0,0.0,1.0,52.440013622133996,53.265531077953995,52.440013622133996,53.029668947720005,2981642.0 226 | 2015-11-30,54.04,54.11,53.0,53.01,12145509.0,0.0,1.0,53.108289657798004,53.177082779116,52.086220426782,52.096048015542,12145509.0 227 | 2015-12-01,53.77,54.64,53.44,54.57,12978722.0,0.0,1.0,52.842944761283995,53.697944983384,52.518634332212,53.629151862066,12978722.0 228 | 2015-12-02,54.66,54.99,53.75,53.82,10061964.0,0.0,1.0,53.717600160904,54.041910589976,52.823289583765,52.892082705083,10061964.0 229 | 2015-12-03,54.07,54.09,52.24,52.59,13588490.0,0.0,1.0,53.137772424077,53.15742760159701,51.339323681039,51.683289287631,13588490.0 230 | 2015-12-04,52.87,53.68,52.83,53.64,13230302.0,0.0,1.0,51.958461772905,52.754496462446006,51.919151417866004,52.715186107407,13230302.0 231 | 2015-12-07,54.02,54.23,53.175,53.68,8665736.0,0.0,1.0,53.088634480279,53.295013844234,52.258203230078,52.754496462446006,8665736.0 232 | 2015-12-08,53.57,54.4,53.22,53.47,7567624.0,0.0,1.0,52.646392986089,53.462082853149994,52.302427379497004,52.548117098491,7567624.0 233 | 2015-12-09,53.28,53.611000000000004,52.52,52.82,10324364.0,0.0,1.0,52.361392912056,52.686686100003996,51.614496166312996,51.909323829106,10324364.0 234 | 2015-12-10,53.02,53.98,52.82,53.69,11436449.0,0.0,1.0,52.105875604302,53.049324125239,51.909323829106,52.764324051205996,11436449.0 235 | 2015-12-11,53.0,53.28,52.02,52.15,10343166.0,0.46,1.0,52.545657845695,52.823257547521,51.574058889303,51.70294446515099,10343166.0 236 | 2015-12-14,52.15,52.36,51.65,52.2,11928345.0,0.0,1.0,51.70294446515099,51.911144241520994,51.20723071189,51.752515840477,11928345.0 237 | 2015-12-15,52.48,53.19,52.23,52.9,11540074.0,0.0,1.0,52.030115542303,52.734029071934,51.782258665673,52.446515095043004,11540074.0 238 | 2015-12-16,53.42,54.1145,53.0,54.02,9953023.0,0.0,1.0,52.962057398435,53.650603801714,52.545657845695,53.556913902348,9953023.0 239 | 2015-12-17,54.11,54.25,52.66,52.66,13495986.0,0.0,1.0,53.646142377935,53.784942228848,52.208572493477,52.208572493477,13495986.0 240 | 2015-12-18,52.15,52.32,51.61,51.64,18302655.0,0.0,1.0,51.70294446515099,51.87148714126,51.167573611629,51.197316436823996,18302655.0 241 | 2015-12-21,52.15,52.15,51.2,51.87,11118739.0,0.0,1.0,51.70294446515099,51.70294446515099,50.761088333955,51.42534476332501,11118739.0 242 | 2015-12-22,52.01,52.23,51.28,52.1,12159708.0,0.0,1.0,51.564144614238,51.782258665673,50.840402534476006,51.653373089825,12159708.0 243 | 2015-12-23,52.38,53.22,52.36,52.98,7111172.0,0.0,1.0,51.930972791651,52.763771897130006,51.911144241520994,52.525829295565,7111172.0 244 | 2015-12-24,52.79,53.13,52.61,52.85,2980053.0,0.0,1.0,52.337458069324995,52.674543421543,52.159001118151,52.396943719716994,2980053.0 245 | 2015-12-28,52.79,53.04,52.565,52.84,4834598.0,0.0,1.0,52.337458069324995,52.585314945956,52.114386880358,52.38702944465201,4834598.0 246 | 2015-12-29,52.97,53.61,52.91,53.34,6605356.0,0.0,1.0,52.515915020499,53.150428624674,52.456429370108005,52.882743197913,6605356.0 247 | 2015-12-30,53.34,53.58,53.08,53.25,5406788.0,0.0,1.0,52.882743197913,53.120685799478,52.624972046217,52.793514722326,5406788.0 248 | 2015-12-31,52.8,53.2858,52.66,52.82,8264365.0,0.0,1.0,52.347372344391005,52.829007827059,52.208572493477,52.367200894521,8264365.0 249 | 2016-01-04,52.01,52.61,51.61,52.48,16115102.0,0.0,1.0,51.564144614238,52.159001118151,51.167573611629,52.030115542303,16115102.0 250 | 2016-01-05,52.79,53.4685,52.67,53.15,11073012.0,0.0,1.0,52.337458069324995,53.010141632501,52.218486768542995,52.694371971673,11073012.0 251 | 2016-01-06,52.51,52.95,52.21,52.42,12425209.0,0.0,1.0,52.059858367499,52.496086470368994,51.762430115542,51.970629891912004,12425209.0 252 | 2016-01-07,51.52,52.315,51.44,51.96,12719359.0,0.0,1.0,51.078345136042,51.866530003727,50.999030935520004,51.514573238912,12719359.0 253 | 2016-01-08,52.51,52.52,50.86,51.08,14046442.0,0.0,1.0,52.059858367499,52.069772642564004,50.424002981737004,50.642117033172,14046442.0 254 | 2016-01-11,51.25,51.535,50.61,51.25,14294340.0,0.0,1.0,50.810659709281,51.09321654864,50.176146105106,50.810659709281,14294340.0 255 | 2016-01-12,51.51,52.07,50.98,51.76,11315469.0,0.0,1.0,51.068430860977,51.623630264629,50.54297428252,51.316287737607006,11315469.0 256 | 2016-01-13,51.91,52.06,50.581,50.66,16463069.0,0.0,1.0,51.465001863586,51.613715989564,50.147394707417,50.225717480431996,16463069.0 257 | 2016-01-14,50.67,52.11,50.59,51.8,13461093.0,0.0,1.0,50.235631755498,51.66328736489,50.156317554976,51.355944837868,13461093.0 258 | 2016-01-15,50.5,51.3,50.1,51.14,15367405.0,0.0,1.0,50.067089079389,50.860231084607,49.67051807677999,50.701602683563,15367405.0 259 | 2016-01-19,51.6,51.91,50.81,51.34,10909511.0,0.0,1.0,51.157659336563995,51.465001863586,50.374431606411,50.899888184868004,10909511.0 260 | 2016-01-20,50.29,51.02,49.3,50.55,15877847.0,0.0,1.0,49.858889303019,50.58263138278,48.877376071562004,50.116660454715,15877847.0 261 | 2016-01-21,50.78,51.32,50.09,50.92,11927195.0,0.0,1.0,50.344688781215,50.880059634736995,49.660603801715006,50.483488632128,11927195.0 262 | 2016-01-22,51.44,51.74,50.95,51.35,10792534.0,0.0,1.0,50.999030935520004,51.296459187477,50.513231457324,50.909802459933005,10792534.0 263 | 2016-01-25,51.35,51.44,50.761,50.92,9100470.0,0.0,1.0,50.909802459933005,50.999030935520004,50.325851658591006,50.483488632128,9100470.0 264 | 2016-01-26,51.05,51.6,50.76,51.45,9014550.0,0.0,1.0,50.612374207975996,51.157659336563995,50.324860231085,51.008945210585004,9014550.0 265 | 2016-01-27,50.66,51.565,49.83,50.37,13069165.0,0.0,1.0,50.225717480431996,51.122959373835,49.402832650019,49.938203503541004,13069165.0 266 | 2016-01-28,50.33,50.54,48.98,49.2,18115260.0,0.0,1.0,49.89854640328,50.10674617965,48.560119269474,48.778233320909,18115260.0 267 | 2016-01-29,49.8,50.67,49.58,50.67,16714758.0,0.0,1.0,49.373089824823,50.235631755498,49.154975773388,50.235631755498,16714758.0 268 | 2016-02-01,50.39,50.98,49.84,50.75,11417310.0,0.0,1.0,49.958032053671,50.54297428252,49.412746925084,50.314945956019,11417310.0 269 | 2016-02-02,50.27,50.51,49.9,50.41,14808623.0,0.0,1.0,49.839060752889004,50.077003354454,49.472232575475,49.97786060380201,14808623.0 270 | 2016-02-03,49.62,50.105,48.58,50.05,19536413.0,0.0,1.0,49.194632873649,49.675475214312,48.16354826686499,49.620946701454,19536413.0 271 | 2016-02-04,49.7,49.74,48.03,48.59,20420983.0,0.0,1.0,49.273947074171,49.313604174432,47.618263138277996,48.173462541931,20420983.0 272 | 2016-02-05,48.6,49.72,48.27,49.38,16818156.0,0.0,1.0,48.183376816996,49.293775624301006,47.856205739843,48.956690272082994,16818156.0 273 | 2016-02-08,48.93,49.33,47.97,48.83,13284172.0,0.0,1.0,48.510547894148,48.907118896757005,47.558777487887,48.411405143496,13284172.0 274 | 2016-02-09,48.69,49.57,48.4,49.16,10523038.0,0.0,1.0,48.272605292583,49.145061498323,47.985091315691,48.738576220649,10523038.0 275 | 2016-02-10,49.51,50.41,49.49,49.53,11025062.0,0.0,1.0,49.085575847931004,49.97786060380201,49.065747297800996,49.105404398062,11025062.0 276 | 2016-02-11,48.81,49.39,48.51,48.85,10752483.0,0.0,1.0,48.391576593366004,48.966604547149004,48.094148341408996,48.43123369362701,10752483.0 277 | 2016-02-12,48.98,49.11,48.28,49.03,13468525.0,0.0,1.0,48.560119269474,48.689004845321996,47.866120014909,48.609690644801,13468525.0 278 | 2016-02-16,49.4,49.99,49.24,49.78,11210755.0,0.0,1.0,48.976518822214004,49.561461051062004,48.817890421170006,49.353261274693004,11210755.0 279 | 2016-02-17,50.0,50.65,49.96,50.6,9296383.0,0.0,1.0,49.571375326127004,50.215803205367,49.531718225867,50.166231830041,9296383.0 280 | 2016-02-18,50.6,50.99,50.245,50.32,9568224.0,0.0,1.0,50.166231830041,50.552888557585,49.814275065225,49.888632128215,9568224.0 281 | 2016-02-19,50.25,50.4,49.87,50.12,8922689.0,0.0,1.0,49.819232202757995,49.967946328736,49.44248975028,49.69034662691,8922689.0 282 | 2016-02-22,50.28,50.78,50.1282,50.77,7739527.0,0.0,1.0,49.848975027954,50.344688781215,49.698476332464,50.33477450615,7739527.0 283 | 2016-02-23,50.56,50.9352,50.43,50.54,7822951.0,0.0,1.0,50.126574729779996,50.498558330227006,49.997689153932,50.10674617965,7822951.0 284 | 2016-02-24,50.16,50.6199,49.63,50.56,7504249.0,0.0,1.0,49.730003727171,50.185961237421,49.204547148714,50.126574729779996,7504249.0 285 | 2016-02-25,50.56,51.0,50.39,51.0,8682941.0,0.0,1.0,50.126574729779996,50.56280283265,49.958032053671,50.56280283265,8682941.0 286 | 2016-02-26,51.05,51.13,50.63,50.64,9250195.0,0.0,1.0,50.612374207975996,50.691688408498,50.195974655236995,50.205888930302,9250195.0 287 | 2016-02-29,50.52,50.83,50.15,50.21,10908349.0,0.0,1.0,50.08691762951899,50.394260156541,49.720089452106,49.779575102497,10908349.0 288 | 2016-03-01,50.39,51.94,50.0901,51.75,12096196.0,0.0,1.0,49.958032053671,51.494744688781005,49.660702944465,51.306373462542,12096196.0 289 | 2016-03-02,51.63,52.435,51.52,52.27,11724370.0,0.0,1.0,51.187402161759,51.98550130451,51.078345136042,51.821915765934,11724370.0 290 | 2016-03-03,52.18,52.32,51.15,52.1,9791462.0,0.0,1.0,51.732687290347,51.87148714126,50.711516958627996,51.653373089825,9791462.0 291 | 2016-03-04,51.85,52.29,51.5,52.08,9017804.0,0.0,1.0,51.405516213194,51.841744316063995,51.058516585911,51.63354453969401,9017804.0 292 | 2016-03-07,51.84,52.9301,51.75,52.64,7317420.0,0.0,1.0,51.395601938129,52.476357062988995,51.306373462542,52.188743943347,7317420.0 293 | 2016-03-08,52.36,52.93,52.285,52.45,8177647.0,0.0,1.0,51.911144241520994,52.476257920239,51.836787178531,52.000372717108,8177647.0 294 | 2016-03-09,52.58,52.89,52.1,52.36,9096183.0,0.0,1.0,52.129258292956,52.436600819978,51.653373089825,51.911144241520994,9096183.0 295 | 2016-03-11,53.02,53.46,52.78,53.2,14880335.0,0.46,1.0,53.02,53.46,52.78,53.2,14880335.0 296 | 2016-03-14,53.15,53.32,52.835,53.08,6516333.0,0.0,1.0,53.15,53.32,52.835,53.08,6516333.0 297 | 2016-03-15,52.48,52.64,51.95,52.42,8906733.0,0.0,1.0,52.48,52.64,51.95,52.42,8906733.0 298 | 2016-03-16,52.31,52.31,51.555,51.94,9825958.0,0.0,1.0,52.31,52.31,51.555,51.94,9825958.0 299 | 2016-03-17,51.93,51.97,51.33,51.53,9578385.0,0.0,1.0,51.93,51.97,51.33,51.53,9578385.0 300 | 2016-03-18,51.74,52.415,51.59,52.25,14424250.0,0.0,1.0,51.74,52.415,51.59,52.25,14424250.0 301 | 2016-03-21,52.33,52.83,52.095,52.8,7647120.0,0.0,1.0,52.33,52.83,52.095,52.8,7647120.0 302 | 2016-03-22,52.58,53.46,52.545,53.03,9297224.0,0.0,1.0,52.58,53.46,52.545,53.03,9297224.0 303 | 2016-03-23,53.6,53.6,52.85,53.08,9947490.0,0.0,1.0,53.6,53.6,52.85,53.08,9947490.0 304 | 2016-03-24,52.79,53.35,52.59,53.07,7564710.0,0.0,1.0,52.79,53.35,52.59,53.07,7564710.0 305 | 2016-03-28,53.12,53.285,52.645,52.83,6036103.0,0.0,1.0,53.12,53.285,52.645,52.83,6036103.0 306 | 2016-03-29,52.91,53.41,52.57,53.32,7331239.0,0.0,1.0,52.91,53.41,52.57,53.32,7331239.0 307 | 2016-03-30,53.48,53.55,53.105,53.22,6318408.0,0.0,1.0,53.48,53.55,53.105,53.22,6318408.0 308 | 2016-03-31,53.08,53.48,52.76,52.91,8196124.0,0.0,1.0,53.08,53.48,52.76,52.91,8196124.0 309 | 2016-04-01,52.5,53.79,52.44,53.7,8649322.0,0.0,1.0,52.5,53.79,52.44,53.7,8649322.0 310 | 2016-04-04,53.91,54.63,53.75,54.4,10198639.0,0.0,1.0,53.91,54.63,53.75,54.4,10198639.0 311 | 2016-04-05,54.09,54.72,53.99,54.24,8954668.0,0.0,1.0,54.09,54.72,53.99,54.24,8954668.0 312 | 2016-04-06,54.35,55.79,54.26,55.63,12428969.0,0.0,1.0,54.35,55.79,54.26,55.63,12428969.0 313 | 2016-04-07,55.34,55.78,55.05,55.42,10508734.0,0.0,1.0,55.34,55.78,55.05,55.42,10508734.0 314 | 2016-04-08,55.75,55.905,55.1,55.36,6766772.0,0.0,1.0,55.75,55.905,55.1,55.36,6766772.0 315 | 2016-04-11,55.37,55.74,54.98,55.05,7046630.0,0.0,1.0,55.37,55.74,54.98,55.05,7046630.0 316 | 2016-04-12,54.97,55.75,54.94,55.34,5885256.0,0.0,1.0,54.97,55.75,54.94,55.34,5885256.0 317 | 2016-04-13,55.46,55.99,55.265,55.96,8399119.0,0.0,1.0,55.46,55.99,55.265,55.96,8399119.0 318 | 2016-04-14,56.02,56.6,55.94,56.45,8232018.0,0.0,1.0,56.02,56.6,55.94,56.45,8232018.0 319 | 2016-04-15,56.53,56.55,55.88,56.14,8417166.0,0.0,1.0,56.53,56.55,55.88,56.14,8417166.0 320 | 2016-04-18,56.11,56.83,55.92,56.51,7780562.0,0.0,1.0,56.11,56.83,55.92,56.51,7780562.0 321 | 2016-04-19,56.73,57.38,56.22,56.86,7230002.0,0.0,1.0,56.73,57.38,56.22,56.86,7230002.0 322 | 2016-04-20,57.15,57.4,56.44,56.58,8487264.0,0.0,1.0,57.15,57.4,56.44,56.58,8487264.0 323 | 2016-04-21,56.34,57.03,56.31,56.6,10529405.0,0.0,1.0,56.34,57.03,56.31,56.6,10529405.0 324 | 2016-04-22,56.69,57.03,56.51,56.74,7084967.0,0.0,1.0,56.69,57.03,56.51,56.74,7084967.0 325 | 2016-04-25,56.48,56.64,56.0,56.22,8229281.0,0.0,1.0,56.48,56.64,56.0,56.22,8229281.0 326 | 2016-04-26,56.41,56.42,55.87,56.04,7201691.0,0.0,1.0,56.41,56.42,55.87,56.04,7201691.0 327 | 2016-04-27,56.06,56.62,56.06,56.31,6941426.0,0.0,1.0,56.06,56.62,56.06,56.31,6941426.0 328 | 2016-04-28,55.89,56.23,55.545,55.74,9005433.0,0.0,1.0,55.89,56.23,55.545,55.74,9005433.0 329 | 2016-04-29,55.64,55.64,54.56,54.84,13155342.0,0.0,1.0,55.64,55.64,54.56,54.84,13155342.0 330 | 2016-05-02,54.85,55.36,54.7,55.3,9529194.0,0.0,1.0,54.85,55.36,54.7,55.3,9529194.0 331 | 2016-05-03,55.14,55.45,54.85,55.08,7571693.0,0.0,1.0,55.14,55.45,54.85,55.08,7571693.0 332 | 2016-05-04,54.71,55.04,54.4662,54.81,7649973.0,0.0,1.0,54.71,55.04,54.4662,54.81,7649973.0 333 | 2016-05-05,54.28,54.4,53.34,54.09,11144680.0,0.0,1.0,54.28,54.4,53.34,54.09,11144680.0 334 | 2016-05-06,53.82,53.97,53.06,53.6,10510095.0,0.0,1.0,53.82,53.97,53.06,53.6,10510095.0 335 | 2016-05-09,53.57,54.33,53.51,54.1,7895747.0,0.0,1.0,53.57,54.33,53.51,54.1,7895747.0 336 | 2016-05-10,54.47,54.73,54.39,54.68,6482418.0,0.0,1.0,54.47,54.73,54.39,54.68,6482418.0 337 | 2016-05-11,54.7,54.79,54.26,54.31,6443403.0,0.0,1.0,54.7,54.79,54.26,54.31,6443403.0 338 | 2016-05-12,54.59,54.62,53.93,54.12,8203208.0,0.0,1.0,54.59,54.62,53.93,54.12,8203208.0 339 | 2016-05-13,54.1,54.51,53.83,53.88,6984908.0,0.0,1.0,54.1,54.51,53.83,53.88,6984908.0 340 | 2016-05-16,53.77,54.77,53.59,54.65,6599242.0,0.0,1.0,53.77,54.77,53.59,54.65,6599242.0 341 | 2016-05-17,54.41,54.57,53.98,54.32,11745782.0,0.0,1.0,54.41,54.57,53.98,54.32,11745782.0 342 | 2016-05-18,54.39,54.95,54.17,54.67,7368470.0,0.0,1.0,54.39,54.95,54.17,54.67,7368470.0 343 | 2016-05-19,54.16,54.98,54.08,54.58,8722268.0,0.0,1.0,54.16,54.98,54.08,54.58,8722268.0 344 | 2016-05-20,54.83,55.54,54.63,55.11,8631657.0,0.0,1.0,54.83,55.54,54.63,55.11,8631657.0 345 | 2016-05-23,55.0,55.23,54.78,54.92,5552427.0,0.0,1.0,55.0,55.23,54.78,54.92,5552427.0 346 | 2016-05-24,55.23,55.885,55.18,55.6,6311193.0,0.0,1.0,55.23,55.885,55.18,55.6,6311193.0 347 | 2016-05-25,55.81,56.67,55.77,56.57,9590629.0,0.0,1.0,55.81,56.67,55.77,56.57,9590629.0 348 | -------------------------------------------------------------------------------- /thalesians_zrh_20160609/1-portfolio opt/djia_csv/VZ.csv: -------------------------------------------------------------------------------- 1 | Date,Open,High,Low,Close,Volume,Ex-Dividend,Split Ratio,Adj. Open,Adj. High,Adj. Low,Adj. Close,Adj. Volume 2 | 2015-01-02,47.01,47.23,46.91,46.96,11382534.0,0.0,1.0,47.01,47.23,46.91,46.96,11382534.0 3 | 2015-01-05,47.0,47.16,46.56,46.57,18923140.0,0.0,1.0,47.0,47.16,46.56,46.57,18923140.0 4 | 2015-01-06,46.76,47.38,46.465,47.04,22796898.0,0.0,1.0,46.76,47.38,46.465,47.04,22796898.0 5 | 2015-01-08,46.42,47.24,46.13,47.18,17551476.0,0.0,1.0,46.42,47.24,46.13,47.18,17551476.0 6 | 2015-01-12,47.0,47.265,46.67,47.08,12676259.0,0.0,1.0,47.0,47.265,46.67,47.08,12676259.0 7 | 2015-01-13,47.5,47.8,46.93,47.18,13031848.0,0.0,1.0,47.5,47.8,46.93,47.18,13031848.0 8 | 2015-01-14,46.88,47.34,46.57,46.97,14669010.0,0.0,1.0,46.88,47.34,46.57,46.97,14669010.0 9 | 2015-01-15,47.22,47.54,46.8,47.1,12411590.0,0.0,1.0,47.22,47.54,46.8,47.1,12411590.0 10 | 2015-01-20,48.13,48.245,47.71,48.18,16373696.0,0.0,1.0,48.13,48.245,47.71,48.18,16373696.0 11 | 2015-01-21,47.89,48.4,47.61,48.25,24865805.0,0.0,1.0,47.89,48.4,47.61,48.25,24865805.0 12 | 2015-01-22,48.12,48.48,46.91,47.8,38425240.0,0.0,1.0,48.12,48.48,46.91,47.8,38425240.0 13 | 2015-01-23,47.85,47.93,46.98,47.15,24304500.0,0.0,1.0,47.85,47.93,46.98,47.15,24304500.0 14 | 2015-01-26,46.98,47.1,46.49,46.96,15063470.0,0.0,1.0,46.98,47.1,46.49,46.96,15063470.0 15 | 2015-01-28,46.86,47.03,46.025,46.05,19518404.0,0.0,1.0,46.86,47.03,46.025,46.05,19518404.0 16 | 2015-01-29,45.97,46.28,45.37,46.11,19098608.0,0.0,1.0,45.97,46.28,45.37,46.11,19098608.0 17 | 2015-01-30,45.83,46.51,45.56,45.71,22714063.0,0.0,1.0,45.83,46.51,45.56,45.71,22714063.0 18 | 2015-02-02,46.2,47.15,45.76,46.98,23040960.0,0.0,1.0,46.2,47.15,45.76,46.98,23040960.0 19 | 2015-02-03,47.29,47.97,47.21,47.83,21443792.0,0.0,1.0,47.29,47.97,47.21,47.83,21443792.0 20 | 2015-02-04,47.67,48.31,47.66,47.8,19820016.0,0.0,1.0,47.67,48.31,47.66,47.8,19820016.0 21 | 2015-02-09,49.06,49.47,48.98,49.09,20996542.0,0.0,1.0,49.06,49.47,48.98,49.09,20996542.0 22 | 2015-02-10,49.31,49.56,49.01,49.51,15031974.0,0.0,1.0,49.31,49.56,49.01,49.51,15031974.0 23 | 2015-02-11,49.39,49.88,49.16,49.81,19294384.0,0.0,1.0,49.39,49.88,49.16,49.81,19294384.0 24 | 2015-02-12,49.89,49.99,49.25,49.52,20404937.0,0.0,1.0,49.89,49.99,49.25,49.52,20404937.0 25 | 2015-02-13,49.41,49.6,49.03,49.31,14573547.0,0.0,1.0,49.41,49.6,49.03,49.31,14573547.0 26 | 2015-02-17,49.04,49.32,48.89,49.18,15263386.0,0.0,1.0,49.04,49.32,48.89,49.18,15263386.0 27 | 2015-02-18,49.2,49.31,48.68,48.94,13467215.0,0.0,1.0,49.2,49.31,48.68,48.94,13467215.0 28 | 2015-02-19,48.79,49.14,48.74,48.91,11574188.0,0.0,1.0,48.79,49.14,48.74,48.91,11574188.0 29 | 2015-02-20,48.77,48.98,48.415,48.97,13444433.0,0.0,1.0,48.77,48.98,48.415,48.97,13444433.0 30 | 2015-02-23,48.94,49.0,48.54,48.77,12238338.0,0.0,1.0,48.94,49.0,48.54,48.77,12238338.0 31 | 2015-02-24,48.67,49.41,48.31,49.22,16306010.0,0.0,1.0,48.67,49.41,48.31,49.22,16306010.0 32 | 2015-02-25,49.32,49.4,49.03,49.2,11373290.0,0.0,1.0,49.32,49.4,49.03,49.2,11373290.0 33 | 2015-02-26,49.06,49.46,48.92,49.37,13581410.0,0.0,1.0,49.06,49.46,48.92,49.37,13581410.0 34 | 2015-02-27,49.22,49.66,49.05,49.45,17509380.0,0.0,1.0,49.22,49.66,49.05,49.45,17509380.0 35 | 2015-03-02,49.12,49.51,49.02,49.47,10914430.0,0.0,1.0,49.12,49.51,49.02,49.47,10914430.0 36 | 2015-03-03,49.49,49.68899999999999,49.28,49.55,11348200.0,0.0,1.0,49.49,49.68899999999999,49.28,49.55,11348200.0 37 | 2015-03-04,49.56,49.56,48.92,49.07,13820160.0,0.0,1.0,49.56,49.56,48.92,49.07,13820160.0 38 | 2015-03-05,49.18,49.22,48.81,48.92,9653450.0,0.0,1.0,49.18,49.22,48.81,48.92,9653450.0 39 | 2015-03-06,48.49,48.63,48.23,48.29,15644855.0,0.0,1.0,48.49,48.63,48.23,48.29,15644855.0 40 | 2015-03-09,48.26,48.62,48.18,48.23,13118961.0,0.0,1.0,48.26,48.62,48.18,48.23,13118961.0 41 | 2015-03-10,48.11,48.325,47.46,47.51,18764680.0,0.0,1.0,48.11,48.325,47.46,47.51,18764680.0 42 | 2015-03-11,47.57,48.03,47.355,47.68,14382725.0,0.0,1.0,47.57,48.03,47.355,47.68,14382725.0 43 | 2015-03-12,47.94,48.76,47.8,48.73,15727937.0,0.0,1.0,47.94,48.76,47.8,48.73,15727937.0 44 | 2015-03-13,48.5,48.93,48.47,48.84,20595295.0,0.0,1.0,48.5,48.93,48.47,48.84,20595295.0 45 | 2015-03-16,48.96,49.4,48.63,49.27,15898996.0,0.0,1.0,48.96,49.4,48.63,49.27,15898996.0 46 | 2015-03-17,49.01,49.3,48.87,48.95,15652685.0,0.0,1.0,49.01,49.3,48.87,48.95,15652685.0 47 | 2015-03-18,48.75,49.69,48.475,49.54,17920635.0,0.0,1.0,48.75,49.69,48.475,49.54,17920635.0 48 | 2015-03-19,49.23,49.5,49.0,49.3,13590478.0,0.0,1.0,49.23,49.5,49.0,49.3,13590478.0 49 | 2015-03-20,49.34,49.9,49.19,49.56,25444655.0,0.0,1.0,49.34,49.9,49.19,49.56,25444655.0 50 | 2015-03-23,49.78,49.85,49.45,49.64,13094381.0,0.0,1.0,49.78,49.85,49.45,49.64,13094381.0 51 | 2015-03-24,49.54,49.895,49.39,49.41,11335951.0,0.0,1.0,49.54,49.895,49.39,49.41,11335951.0 52 | 2015-03-25,49.38,49.41,48.72,48.73,14284814.0,0.0,1.0,49.38,49.41,48.72,48.73,14284814.0 53 | 2015-03-26,48.62,48.95,48.4,48.42,17892434.0,0.0,1.0,48.62,48.95,48.4,48.42,17892434.0 54 | 2015-03-27,48.48,48.72,48.3401,48.56,11587005.0,0.0,1.0,48.48,48.72,48.3401,48.56,11587005.0 55 | 2015-03-30,48.73,49.3,48.71,49.12,11037692.0,0.0,1.0,48.73,49.3,48.71,49.12,11037692.0 56 | 2015-03-31,49.09,49.1462,48.58,48.63,12668415.0,0.0,1.0,49.09,49.1462,48.58,48.63,12668415.0 57 | 2015-04-01,48.45,49.27,48.43,48.92,13305462.0,0.0,1.0,48.45,49.27,48.43,48.92,13305462.0 58 | 2015-04-02,48.89,49.6,48.86,49.47,13266860.0,0.0,1.0,48.89,49.6,48.86,49.47,13266860.0 59 | 2015-04-06,49.54,49.8199,49.4,49.63,14114023.0,0.0,1.0,49.54,49.8199,49.4,49.63,14114023.0 60 | 2015-04-07,49.81,49.81,49.25,49.27,11445494.0,0.0,1.0,49.81,49.81,49.25,49.27,11445494.0 61 | 2015-04-08,48.75,49.28,48.69,49.13,15466470.0,0.0,1.0,48.75,49.28,48.69,49.13,15466470.0 62 | 2015-04-09,48.91,49.18,48.67,49.01,10749105.0,0.0,1.0,48.91,49.18,48.67,49.01,10749105.0 63 | 2015-04-10,49.04,49.2469,48.94,49.22,9230473.0,0.0,1.0,49.04,49.2469,48.94,49.22,9230473.0 64 | 2015-04-13,49.27,49.51,49.04,49.04,12029863.0,0.0,1.0,49.27,49.51,49.04,49.04,12029863.0 65 | 2015-04-14,49.2,49.36,48.93,49.18,11856226.0,0.0,1.0,49.2,49.36,48.93,49.18,11856226.0 66 | 2015-04-15,49.15,49.5,49.05,49.39,11052154.0,0.0,1.0,49.15,49.5,49.05,49.39,11052154.0 67 | 2015-04-16,49.26,49.57,49.09,49.27,11637122.0,0.0,1.0,49.26,49.57,49.09,49.27,11637122.0 68 | 2015-04-17,48.98,49.12,48.7,48.9,18057584.0,0.0,1.0,48.98,49.12,48.7,48.9,18057584.0 69 | 2015-04-20,49.15,49.48,49.05,49.38,16986847.0,0.0,1.0,49.15,49.48,49.05,49.38,16986847.0 70 | 2015-04-21,48.97,49.4,48.46,49.17,33389496.0,0.0,1.0,48.97,49.4,48.46,49.17,33389496.0 71 | 2015-04-22,49.46,49.69,49.32,49.57,18553264.0,0.0,1.0,49.46,49.69,49.32,49.57,18553264.0 72 | 2015-04-23,49.62,50.2,49.45,50.05,22464247.0,0.0,1.0,49.62,50.2,49.45,50.05,22464247.0 73 | 2015-04-24,49.94,50.26,49.82,50.03,16946384.0,0.0,1.0,49.94,50.26,49.82,50.03,16946384.0 74 | 2015-04-27,50.0,50.33,50.0,50.08,16550224.0,0.0,1.0,50.0,50.33,50.0,50.08,16550224.0 75 | 2015-04-28,50.34,50.635,50.07,50.55,16010764.0,0.0,1.0,50.34,50.635,50.07,50.55,16010764.0 76 | 2015-04-29,50.45,50.61,50.14,50.47,13302717.0,0.0,1.0,50.45,50.61,50.14,50.47,13302717.0 77 | 2015-04-30,50.47,50.65,50.23,50.44,15289346.0,0.0,1.0,50.47,50.65,50.23,50.44,15289346.0 78 | 2015-05-01,50.75,50.77,50.05,50.41,13860113.0,0.0,1.0,50.75,50.77,50.05,50.41,13860113.0 79 | 2015-05-04,50.42,50.86,50.29,50.52,12577723.0,0.0,1.0,50.42,50.86,50.29,50.52,12577723.0 80 | 2015-05-05,50.69,50.69,50.06,50.09,12646226.0,0.0,1.0,50.69,50.69,50.06,50.09,12646226.0 81 | 2015-05-06,50.07,50.17,49.355,49.64,15512542.0,0.0,1.0,50.07,50.17,49.355,49.64,15512542.0 82 | 2015-05-07,49.6,49.8499,49.32,49.73,10831739.0,0.0,1.0,49.6,49.8499,49.32,49.73,10831739.0 83 | 2015-05-08,50.19,50.37,49.95,50.14,13264053.0,0.0,1.0,50.19,50.37,49.95,50.14,13264053.0 84 | 2015-05-11,50.14,50.28,49.79,49.8,9900243.0,0.0,1.0,50.14,50.28,49.79,49.8,9900243.0 85 | 2015-05-12,49.4,49.81,48.97,49.62,20448777.0,0.0,1.0,49.4,49.81,48.97,49.62,20448777.0 86 | 2015-05-13,49.64,49.98,49.5,49.73,16145233.0,0.0,1.0,49.64,49.98,49.5,49.73,16145233.0 87 | 2015-05-14,49.9,50.15,49.82,49.97,12094477.0,0.0,1.0,49.9,50.15,49.82,49.97,12094477.0 88 | 2015-05-15,50.01,50.09,49.65,49.79,13981466.0,0.0,1.0,50.01,50.09,49.65,49.79,13981466.0 89 | 2015-05-18,49.78,49.8,49.55,49.6,15031430.0,0.0,1.0,49.78,49.8,49.55,49.6,15031430.0 90 | 2015-05-19,49.53,49.58,49.32,49.55,15641859.0,0.0,1.0,49.53,49.58,49.32,49.55,15641859.0 91 | 2015-05-20,49.57,49.96,49.56,49.69,13530161.0,0.0,1.0,49.57,49.96,49.56,49.69,13530161.0 92 | 2015-05-21,49.68,50.1,49.67,49.9,15154630.0,0.0,1.0,49.68,50.1,49.67,49.9,15154630.0 93 | 2015-05-22,49.76,49.89,49.58,49.61,12271919.0,0.0,1.0,49.76,49.89,49.58,49.61,12271919.0 94 | 2015-05-26,49.58,49.75,49.21,49.42,17293465.0,0.0,1.0,49.58,49.75,49.21,49.42,17293465.0 95 | 2015-05-27,49.45,49.68,49.27,49.57,14322027.0,0.0,1.0,49.45,49.68,49.27,49.57,14322027.0 96 | 2015-05-28,49.47,49.65,49.3799,49.54,8362146.0,0.0,1.0,49.47,49.65,49.3799,49.54,8362146.0 97 | 2015-05-29,49.5,49.64,49.3745,49.44,14350304.0,0.0,1.0,49.5,49.64,49.3745,49.44,14350304.0 98 | 2015-06-01,49.44,49.54,49.14,49.22,11857897.0,0.0,1.0,49.44,49.54,49.14,49.22,11857897.0 99 | 2015-06-02,49.22,49.31,48.98,49.14,11048543.0,0.0,1.0,49.22,49.31,48.98,49.14,11048543.0 100 | 2015-06-03,49.15,49.44,48.87,49.08,17521459.0,0.0,1.0,49.15,49.44,48.87,49.08,17521459.0 101 | 2015-06-04,47.88,48.54,47.88,48.1,38327548.0,0.0,1.0,47.88,48.54,47.88,48.1,38327548.0 102 | 2015-06-05,47.96,47.97,47.11,47.23,23517416.0,0.0,1.0,47.96,47.97,47.11,47.23,23517416.0 103 | 2015-06-08,47.25,47.78,47.05,47.44,16493626.0,0.0,1.0,47.25,47.78,47.05,47.44,16493626.0 104 | 2015-06-09,47.47,47.62,47.17,47.34,12295087.0,0.0,1.0,47.47,47.62,47.17,47.34,12295087.0 105 | 2015-06-10,47.56,47.68,47.355,47.47,13007281.0,0.0,1.0,47.56,47.68,47.355,47.47,13007281.0 106 | 2015-06-11,47.61,47.88,47.52,47.76,10029707.0,0.0,1.0,47.61,47.88,47.52,47.76,10029707.0 107 | 2015-06-12,47.75,47.75,47.21,47.25,10619101.0,0.0,1.0,47.75,47.75,47.21,47.25,10619101.0 108 | 2015-06-15,47.14,47.22,46.93,47.0,10680556.0,0.0,1.0,47.14,47.22,46.93,47.0,10680556.0 109 | 2015-06-16,46.99,47.49,46.91,47.42,10809827.0,0.0,1.0,46.99,47.49,46.91,47.42,10809827.0 110 | 2015-06-17,47.5,47.51,46.9,47.27,18166857.0,0.0,1.0,47.5,47.51,46.9,47.27,18166857.0 111 | 2015-06-18,47.42,47.92,47.39,47.77,14482351.0,0.0,1.0,47.42,47.92,47.39,47.77,14482351.0 112 | 2015-06-19,47.65,47.71,47.37,47.46,23797124.0,0.0,1.0,47.65,47.71,47.37,47.46,23797124.0 113 | 2015-06-22,47.63,47.78,47.41,47.53,9067468.0,0.0,1.0,47.63,47.78,47.41,47.53,9067468.0 114 | 2015-06-23,47.86,48.11,47.71,47.77,14293382.0,0.0,1.0,47.86,48.11,47.71,47.77,14293382.0 115 | 2015-06-24,47.6,47.79,47.29,47.29,15226068.0,0.0,1.0,47.6,47.79,47.29,47.29,15226068.0 116 | 2015-06-25,47.63,47.92,47.43,47.44,14157574.0,0.0,1.0,47.63,47.92,47.43,47.44,14157574.0 117 | 2015-06-26,47.59,48.49,47.38,47.62,9569596.0,0.0,1.0,47.59,48.49,47.38,47.62,9569596.0 118 | 2015-06-29,47.28,47.72,46.75,46.77,14751664.0,0.0,1.0,47.28,47.72,46.75,46.77,14751664.0 119 | 2015-06-30,47.14,47.25,46.6,46.685,10996262.0,0.0,1.0,47.14,47.25,46.6,46.685,10996262.0 120 | 2015-07-01,46.64,47.11,46.57,47.0,12502611.0,0.0,1.0,46.64,47.11,46.57,47.0,12502611.0 121 | 2015-07-02,47.23,47.38,47.11,47.2,9749449.0,0.0,1.0,47.23,47.38,47.11,47.2,9749449.0 122 | 2015-07-06,47.06,47.14,46.8,47.04,12012934.0,0.0,1.0,47.06,47.14,46.8,47.04,12012934.0 123 | 2015-07-07,47.22,47.45,46.83,47.25,17970550.0,0.0,1.0,47.22,47.45,46.83,47.25,17970550.0 124 | 2015-07-08,46.58,46.83,46.3,46.58,17776936.0,0.0,1.0,46.58,46.83,46.3,46.58,17776936.0 125 | 2015-07-09,47.01,47.16,46.23,46.26,16243862.0,0.0,1.0,47.01,47.16,46.23,46.26,16243862.0 126 | 2015-07-10,46.84,47.33,46.72,47.0,14687249.0,0.0,1.0,46.84,47.33,46.72,47.0,14687249.0 127 | 2015-07-14,47.19,47.44,47.05,47.41,9927773.0,0.0,1.0,47.19,47.44,47.05,47.41,9927773.0 128 | 2015-07-15,47.48,47.5,47.0399,47.33,9604493.0,0.0,1.0,47.48,47.5,47.0399,47.33,9604493.0 129 | 2015-07-16,47.48,47.86,47.86,47.83,10851478.0,0.0,1.0,47.48,47.86,47.86,47.83,10851478.0 130 | 2015-07-17,47.78,47.95,47.5,47.59,9906435.0,0.0,1.0,47.78,47.95,47.5,47.59,9906435.0 131 | 2015-07-20,47.63,48.26,47.42,48.1,17213080.0,0.0,1.0,47.63,48.26,47.42,48.1,17213080.0 132 | 2015-07-21,46.98,47.35,46.57,46.97,31255437.0,0.0,1.0,46.98,47.35,46.57,46.97,31255437.0 133 | 2015-07-22,46.79,46.84,46.11,46.45,20947798.0,0.0,1.0,46.79,46.84,46.11,46.45,20947798.0 134 | 2015-07-23,46.46,46.62,46.17,46.35,13647263.0,0.0,1.0,46.46,46.62,46.17,46.35,13647263.0 135 | 2015-07-24,46.44,46.48,45.96,46.04,19493808.0,0.0,1.0,46.44,46.48,45.96,46.04,19493808.0 136 | 2015-07-27,45.94,46.25,45.71,45.83,15521134.0,0.0,1.0,45.94,46.25,45.71,45.83,15521134.0 137 | 2015-07-28,45.99,46.035,45.66,45.89,15930761.0,0.0,1.0,45.99,46.035,45.66,45.89,15930761.0 138 | 2015-07-29,46.0,46.9,45.97,46.56,15855683.0,0.0,1.0,46.0,46.9,45.97,46.56,15855683.0 139 | 2015-07-30,46.66,46.8,46.405,46.67,9537316.0,0.0,1.0,46.66,46.8,46.405,46.67,9537316.0 140 | 2015-07-31,46.85,47.17,46.71,46.79,12323940.0,0.0,1.0,46.85,47.17,46.71,46.79,12323940.0 141 | 2015-08-03,47.18,47.2,46.6,46.97,10184940.0,0.0,1.0,47.18,47.2,46.6,46.97,10184940.0 142 | 2015-08-04,47.02,47.0845,46.56,46.67,9197303.0,0.0,1.0,47.02,47.0845,46.56,46.67,9197303.0 143 | 2015-08-05,46.9,47.15,46.6,46.64,11900172.0,0.0,1.0,46.9,47.15,46.6,46.64,11900172.0 144 | 2015-08-06,46.59,46.6951,46.29,46.63,9899151.0,0.0,1.0,46.59,46.6951,46.29,46.63,9899151.0 145 | 2015-08-07,46.57,46.745,46.17,46.36,10513983.0,0.0,1.0,46.57,46.745,46.17,46.36,10513983.0 146 | 2015-08-10,46.52,47.34,46.52,47.23,13473415.0,0.0,1.0,46.52,47.34,46.52,47.23,13473415.0 147 | 2015-08-11,47.54,48.21,47.475,47.6,18455446.0,0.0,1.0,47.54,48.21,47.475,47.6,18455446.0 148 | 2015-08-12,47.3,47.885,47.1,47.85,15939817.0,0.0,1.0,47.3,47.885,47.1,47.85,15939817.0 149 | 2015-08-13,47.77,47.94,47.49,47.66,11046501.0,0.0,1.0,47.77,47.94,47.49,47.66,11046501.0 150 | 2015-08-14,47.62,47.63,47.43,47.49,8768185.0,0.0,1.0,47.62,47.63,47.43,47.49,8768185.0 151 | 2015-08-17,47.28,47.62,47.2,47.52,7756015.0,0.0,1.0,47.28,47.62,47.2,47.52,7756015.0 152 | 2015-08-18,47.56,47.69,47.33,47.46,8562137.0,0.0,1.0,47.56,47.69,47.33,47.46,8562137.0 153 | 2015-08-19,47.39,47.7,47.08,47.44,12543778.0,0.0,1.0,47.39,47.7,47.08,47.44,12543778.0 154 | 2015-08-20,47.05,47.39,46.88,46.88,13730662.0,0.0,1.0,47.05,47.39,46.88,46.88,13730662.0 155 | 2015-08-21,46.45,46.85,46.1,46.1,21184855.0,0.0,1.0,46.45,46.85,46.1,46.1,21184855.0 156 | 2015-08-24,44.35,45.87,38.06,45.005,31705637.0,0.0,1.0,44.35,45.87,38.06,45.005,31705637.0 157 | 2015-08-25,45.76,45.76,43.5,43.5,27065000.0,0.0,1.0,45.76,45.76,43.5,43.5,27065000.0 158 | 2015-08-26,44.38,45.31,44.0,45.16,30490241.0,0.0,1.0,44.38,45.31,44.0,45.16,30490241.0 159 | 2015-08-27,45.83,46.29,45.165,46.19,20886988.0,0.0,1.0,45.83,46.29,45.165,46.19,20886988.0 160 | 2015-08-28,46.05,46.16,45.65,46.07,12712668.0,0.0,1.0,46.05,46.16,45.65,46.07,12712668.0 161 | 2015-08-31,45.93,46.1,45.61,46.01,14780814.0,0.0,1.0,45.93,46.1,45.61,46.01,14780814.0 162 | 2015-09-01,45.04,45.55,44.675,44.9,20977451.0,0.0,1.0,45.04,45.55,44.675,44.9,20977451.0 163 | 2015-09-02,45.44,45.5,44.77,45.35,17143845.0,0.0,1.0,45.44,45.5,44.77,45.35,17143845.0 164 | 2015-09-03,45.63,46.15,45.52,45.72,12402797.0,0.0,1.0,45.63,46.15,45.52,45.72,12402797.0 165 | 2015-09-04,45.35,45.35,44.64,44.82,16011548.0,0.0,1.0,45.35,45.35,44.64,44.82,16011548.0 166 | 2015-09-08,45.58,45.9,45.22,45.88,13886550.0,0.0,1.0,45.58,45.9,45.22,45.88,13886550.0 167 | 2015-09-09,46.25,46.27,45.305,45.39,14423647.0,0.0,1.0,46.25,46.27,45.305,45.39,14423647.0 168 | 2015-09-10,45.37,45.61,45.025,45.46,16412853.0,0.0,1.0,45.37,45.61,45.025,45.46,16412853.0 169 | 2015-09-11,45.44,45.75,45.26,45.73,11227446.0,0.0,1.0,45.44,45.75,45.26,45.73,11227446.0 170 | 2015-09-14,45.78,45.89,45.6,45.65,9608712.0,0.0,1.0,45.78,45.89,45.6,45.65,9608712.0 171 | 2015-09-15,45.92,46.55,45.725,46.37,11892545.0,0.0,1.0,45.92,46.55,45.725,46.37,11892545.0 172 | 2015-09-16,46.44,46.47,46.1,46.19,11900804.0,0.0,1.0,46.44,46.47,46.1,46.19,11900804.0 173 | 2015-09-17,45.4,45.746,44.53,45.23,31437892.0,0.0,1.0,45.4,45.746,44.53,45.23,31437892.0 174 | 2015-09-18,45.16,45.26,44.42,44.57,26319879.0,0.0,1.0,45.16,45.26,44.42,44.57,26319879.0 175 | 2015-09-21,44.62,44.8867,44.53,44.8,10533300.0,0.0,1.0,44.62,44.8867,44.53,44.8,10533300.0 176 | 2015-09-22,44.43,44.533,44.11,44.43,12303715.0,0.0,1.0,44.43,44.533,44.11,44.43,12303715.0 177 | 2015-09-23,44.36,44.48,43.9,43.98,11632746.0,0.0,1.0,44.36,44.48,43.9,43.98,11632746.0 178 | 2015-09-24,43.79,44.2,43.76,44.09,14210005.0,0.0,1.0,43.79,44.2,43.76,44.09,14210005.0 179 | 2015-09-25,44.32,44.53,44.07,44.22,17457547.0,0.0,1.0,44.32,44.53,44.07,44.22,17457547.0 180 | 2015-09-28,44.01,44.175,43.69,43.74,15146661.0,0.0,1.0,44.01,44.175,43.69,43.74,15146661.0 181 | 2015-09-29,43.78,44.0,43.34,43.53,15618348.0,0.0,1.0,43.78,44.0,43.34,43.53,15618348.0 182 | 2015-09-30,43.83,44.0,43.2845,43.51,20277728.0,0.0,1.0,43.83,44.0,43.2845,43.51,20277728.0 183 | 2015-10-01,43.49,43.64,42.69,42.96,22108133.0,0.0,1.0,43.49,43.64,42.69,42.96,22108133.0 184 | 2015-10-02,42.55,42.9,42.2,42.84,21943610.0,0.0,1.0,42.55,42.9,42.2,42.84,21943610.0 185 | 2015-10-05,43.24,44.02,43.24,44.0,14400900.0,0.0,1.0,43.24,44.02,43.24,44.0,14400900.0 186 | 2015-10-06,44.0,44.43,43.98,44.06,14917372.0,0.0,1.0,44.0,44.43,43.98,44.06,14917372.0 187 | 2015-10-07,43.78,43.99,43.46,43.85,11897024.0,0.0,1.0,43.78,43.99,43.46,43.85,11897024.0 188 | 2015-10-08,43.68,44.31,43.55,44.23,10106194.0,0.0,1.0,43.68,44.31,43.55,44.23,10106194.0 189 | 2015-10-09,44.28,44.53,44.0,44.16,11938273.0,0.0,1.0,44.28,44.53,44.0,44.16,11938273.0 190 | 2015-10-12,44.18,44.31,44.01,44.3,9886668.0,0.0,1.0,44.18,44.31,44.01,44.3,9886668.0 191 | 2015-10-13,44.14,44.5,44.14,44.36,11422530.0,0.0,1.0,44.14,44.5,44.14,44.36,11422530.0 192 | 2015-10-14,44.26,44.54,43.93,43.99,19532417.0,0.0,1.0,44.26,44.54,43.93,43.99,19532417.0 193 | 2015-10-15,44.24,44.7,44.06,44.67,11696306.0,0.0,1.0,44.24,44.7,44.06,44.67,11696306.0 194 | 2015-10-16,44.92,44.97,44.45,44.7,15355464.0,0.0,1.0,44.92,44.97,44.45,44.7,15355464.0 195 | 2015-10-19,44.48,44.82,44.26,44.7,17474347.0,0.0,1.0,44.48,44.82,44.26,44.7,17474347.0 196 | 2015-10-20,44.92,45.8,44.79,45.24,19627853.0,0.0,1.0,44.92,45.8,44.79,45.24,19627853.0 197 | 2015-10-21,45.44,45.71,44.71,44.86,17081827.0,0.0,1.0,45.44,45.71,44.71,44.86,17081827.0 198 | 2015-10-22,44.98,45.9,44.98,45.89,15203849.0,0.0,1.0,44.98,45.9,44.98,45.89,15203849.0 199 | 2015-10-23,46.14,46.33,45.94,46.16,13261819.0,0.0,1.0,46.14,46.33,45.94,46.16,13261819.0 200 | 2015-10-26,46.32,46.545,46.1468,46.36,10798709.0,0.0,1.0,46.32,46.545,46.1468,46.36,10798709.0 201 | 2015-10-27,46.19,46.29600000000001,46.0143,46.17,9527837.0,0.0,1.0,46.19,46.29600000000001,46.0143,46.17,9527837.0 202 | 2015-10-28,46.44,46.8,46.055,46.48,11424146.0,0.0,1.0,46.44,46.8,46.055,46.48,11424146.0 203 | 2015-10-29,46.49,46.56,46.0,46.4,7886533.0,0.0,1.0,46.49,46.56,46.0,46.4,7886533.0 204 | 2015-10-30,46.43,46.98,46.28,46.88,14661724.0,0.0,1.0,46.43,46.98,46.28,46.88,14661724.0 205 | 2015-11-02,47.02,47.08,46.52,46.78,11677580.0,0.0,1.0,47.02,47.08,46.52,46.78,11677580.0 206 | 2015-11-03,46.7,46.745,46.18,46.45,11838757.0,0.0,1.0,46.7,46.745,46.18,46.45,11838757.0 207 | 2015-11-04,46.58,46.65,46.04,46.14,9700770.0,0.0,1.0,46.58,46.65,46.04,46.14,9700770.0 208 | 2015-11-05,46.2,46.43,46.1,46.2,11640667.0,0.0,1.0,46.2,46.43,46.1,46.2,11640667.0 209 | 2015-11-06,45.99,46.03,45.29,45.78,14118657.0,0.0,1.0,45.99,46.03,45.29,45.78,14118657.0 210 | 2015-11-09,45.53,45.54,45.03,45.3,10694791.0,0.0,1.0,45.53,45.54,45.03,45.3,10694791.0 211 | 2015-11-10,45.27,45.33,44.8,45.1,9926733.0,0.0,1.0,45.27,45.33,44.8,45.1,9926733.0 212 | 2015-11-11,45.36,45.54,45.13,45.32,7887138.0,0.0,1.0,45.36,45.54,45.13,45.32,7887138.0 213 | 2015-11-12,45.02,45.09,44.77,44.83,10869340.0,0.0,1.0,45.02,45.09,44.77,44.83,10869340.0 214 | 2015-11-13,44.73,44.99,44.22,44.23,11219155.0,0.0,1.0,44.73,44.99,44.22,44.23,11219155.0 215 | 2015-11-16,44.26,45.07,44.1849,45.04,10073188.0,0.0,1.0,44.26,45.07,44.1849,45.04,10073188.0 216 | 2015-11-17,45.01,45.32,44.93,45.08,10592418.0,0.0,1.0,45.01,45.32,44.93,45.08,10592418.0 217 | 2015-11-18,45.08,45.4273,44.58,45.38,13525380.0,0.0,1.0,45.08,45.4273,44.58,45.38,13525380.0 218 | 2015-11-19,45.44,45.8701,45.35,45.76,9294588.0,0.0,1.0,45.44,45.8701,45.35,45.76,9294588.0 219 | 2015-11-20,45.96,45.99,45.32,45.39,12191670.0,0.0,1.0,45.96,45.99,45.32,45.39,12191670.0 220 | 2015-11-23,45.31,45.5,44.94,44.99,10278612.0,0.0,1.0,45.31,45.5,44.94,44.99,10278612.0 221 | 2015-11-24,44.75,45.34,44.68,45.19,11124934.0,0.0,1.0,44.75,45.34,44.68,45.19,11124934.0 222 | 2015-11-25,45.11,45.13,44.89,44.92,7013933.0,0.0,1.0,45.11,45.13,44.89,44.92,7013933.0 223 | 2015-11-27,44.84,45.39,44.83,45.23,4108274.0,0.0,1.0,44.84,45.39,44.83,45.23,4108274.0 224 | 2015-11-30,45.25,45.64,44.96,45.45,18333481.0,0.0,1.0,45.25,45.64,44.96,45.45,18333481.0 225 | 2015-12-01,45.51,45.89,45.33,45.58,10531395.0,0.0,1.0,45.51,45.89,45.33,45.58,10531395.0 226 | 2015-12-02,45.45,45.551,44.87,44.92,11819477.0,0.0,1.0,45.45,45.551,44.87,44.92,11819477.0 227 | 2015-12-03,44.88,45.05,44.33,44.56,17062675.0,0.0,1.0,44.88,45.05,44.33,44.56,17062675.0 228 | 2015-12-04,44.74,45.78,44.71,45.71,14153436.0,0.0,1.0,44.74,45.78,44.71,45.71,14153436.0 229 | 2015-12-07,45.46,46.12,45.45,46.06,13156459.0,0.0,1.0,45.46,46.12,45.45,46.06,13156459.0 230 | 2015-12-08,45.67,45.99,45.44,45.7,13755344.0,0.0,1.0,45.67,45.99,45.44,45.7,13755344.0 231 | 2015-12-09,45.58,46.13,45.12,45.36,13461633.0,0.0,1.0,45.58,46.13,45.12,45.36,13461633.0 232 | 2015-12-10,45.47,45.655,45.2,45.32,10347075.0,0.0,1.0,45.47,45.655,45.2,45.32,10347075.0 233 | 2015-12-11,44.995,45.35,44.73,44.82,16380554.0,0.0,1.0,44.995,45.35,44.73,44.82,16380554.0 234 | 2015-12-14,44.84,45.5,44.68,45.45,16615225.0,0.0,1.0,44.84,45.5,44.68,45.45,16615225.0 235 | 2015-12-15,45.52,45.86,45.205,45.55,16578421.0,0.0,1.0,45.52,45.86,45.205,45.55,16578421.0 236 | 2015-12-16,45.93,46.57,45.7,46.51,18674369.0,0.0,1.0,45.93,46.57,45.7,46.51,18674369.0 237 | 2015-12-17,46.49,46.69,46.025,46.1,15351167.0,0.0,1.0,46.49,46.69,46.025,46.1,15351167.0 238 | 2015-12-18,45.9,46.04,45.56,45.56,27308155.0,0.0,1.0,45.9,46.04,45.56,45.56,27308155.0 239 | 2015-12-21,45.73,45.92,45.52,45.9,9543040.0,0.0,1.0,45.73,45.92,45.52,45.9,9543040.0 240 | 2015-12-22,46.2,46.46,45.85,46.34,11138045.0,0.0,1.0,46.2,46.46,45.85,46.34,11138045.0 241 | 2015-12-23,46.51,47.15,46.39,46.95,12633873.0,0.0,1.0,46.51,47.15,46.39,46.95,12633873.0 242 | 2015-12-24,46.91,46.97,46.6,46.71,4279919.0,0.0,1.0,46.91,46.97,46.6,46.71,4279919.0 243 | 2015-12-28,46.62,46.84,46.56,46.75,6254876.0,0.0,1.0,46.62,46.84,46.56,46.75,6254876.0 244 | 2015-12-29,46.98,47.23,46.8436,47.21,7660914.0,0.0,1.0,46.98,47.23,46.8436,47.21,7660914.0 245 | 2015-12-30,47.2,47.2,46.62,46.77,8956701.0,0.0,1.0,47.2,47.2,46.62,46.77,8956701.0 246 | 2015-12-31,46.52,46.65,46.205,46.22,11394760.0,0.0,1.0,46.52,46.65,46.205,46.22,11394760.0 247 | 2016-01-04,45.67,45.905,45.36,45.87,17733435.0,0.0,1.0,45.67,45.905,45.36,45.87,17733435.0 248 | 2016-01-05,46.2,46.55,45.63,46.5,15607943.0,0.0,1.0,46.2,46.55,45.63,46.5,15607943.0 249 | 2016-01-06,45.49,45.95,45.28,45.52,19004260.0,0.0,1.0,45.49,45.95,45.28,45.52,19004260.0 250 | 2016-01-07,45.12,45.67,45.0,45.27,19275201.0,0.0,1.0,45.12,45.67,45.0,45.27,19275201.0 251 | 2016-01-08,45.66,45.74,44.7,44.83,16507575.0,0.0,1.0,45.66,45.74,44.7,44.83,16507575.0 252 | 2016-01-11,45.11,45.23,44.6025,45.09,14194504.0,0.0,1.0,45.11,45.23,44.6025,45.09,14194504.0 253 | 2016-01-12,45.24,45.25,44.53,44.93,15101181.0,0.0,1.0,45.24,45.25,44.53,44.93,15101181.0 254 | 2016-01-13,45.11,45.27,44.08,44.15,19159603.0,0.0,1.0,45.11,45.27,44.08,44.15,19159603.0 255 | 2016-01-14,44.22,45.19,44.05,44.87,18386212.0,0.0,1.0,44.22,45.19,44.05,44.87,18386212.0 256 | 2016-01-15,44.04,44.55,43.86,44.43,27774525.0,0.0,1.0,44.04,44.55,43.86,44.43,27774525.0 257 | 2016-01-19,44.74,45.01,44.53,44.87,20179011.0,0.0,1.0,44.74,45.01,44.53,44.87,20179011.0 258 | 2016-01-20,44.38,44.77,43.79,44.42,28070811.0,0.0,1.0,44.38,44.77,43.79,44.42,28070811.0 259 | 2016-01-21,45.0,46.33,44.43,45.87,31325511.0,0.0,1.0,45.0,46.33,44.43,45.87,31325511.0 260 | 2016-01-22,46.41,47.12,46.0,47.04,22988868.0,0.0,1.0,46.41,47.12,46.0,47.04,22988868.0 261 | 2016-01-25,47.08,47.78,46.54,47.03,24061070.0,0.0,1.0,47.08,47.78,46.54,47.03,24061070.0 262 | 2016-01-26,47.13,48.265,47.05,48.25,22594854.0,0.0,1.0,47.13,48.265,47.05,48.25,22594854.0 263 | 2016-01-27,48.29,49.49,48.25,49.03,33736794.0,0.0,1.0,48.29,49.49,48.25,49.03,33736794.0 264 | 2016-01-28,49.06,49.46,48.47,49.01,19962984.0,0.0,1.0,49.06,49.46,48.47,49.01,19962984.0 265 | 2016-01-29,49.39,49.99,49.22,49.97,28605629.0,0.0,1.0,49.39,49.99,49.22,49.97,28605629.0 266 | 2016-02-01,49.94,51.02,49.69,50.76,28366458.0,0.0,1.0,49.94,51.02,49.69,50.76,28366458.0 267 | 2016-02-02,50.61,50.63,49.65,49.91,21392306.0,0.0,1.0,50.61,50.63,49.65,49.91,21392306.0 268 | 2016-02-03,50.25,50.62,49.42,50.62,20289155.0,0.0,1.0,50.25,50.62,49.42,50.62,20289155.0 269 | 2016-02-04,50.37,50.6,49.67,50.43,19308176.0,0.0,1.0,50.37,50.6,49.67,50.43,19308176.0 270 | 2016-02-05,50.32,51.2,50.31,50.97,25548425.0,0.0,1.0,50.32,51.2,50.31,50.97,25548425.0 271 | 2016-02-08,50.6,50.8,49.77,50.74,26978703.0,0.0,1.0,50.6,50.8,49.77,50.74,26978703.0 272 | 2016-02-09,50.06,50.61,49.35,50.15,22106298.0,0.0,1.0,50.06,50.61,49.35,50.15,22106298.0 273 | 2016-02-10,50.19,50.3236,49.62,49.98,16722548.0,0.0,1.0,50.19,50.3236,49.62,49.98,16722548.0 274 | 2016-02-11,49.6,50.1,49.265,49.39,30313794.0,0.0,1.0,49.6,50.1,49.265,49.39,30313794.0 275 | 2016-02-12,49.54,50.19,49.35,50.11,20876547.0,0.0,1.0,49.54,50.19,49.35,50.11,20876547.0 276 | 2016-02-16,50.24,50.3,49.58,50.24,15054481.0,0.0,1.0,50.24,50.3,49.58,50.24,15054481.0 277 | 2016-02-17,50.41,50.6,50.08,50.32,15152127.0,0.0,1.0,50.41,50.6,50.08,50.32,15152127.0 278 | 2016-02-18,50.12,51.1,49.96,50.94,19674039.0,0.0,1.0,50.12,51.1,49.96,50.94,19674039.0 279 | 2016-02-19,50.74,51.07,50.31,50.86,15292937.0,0.0,1.0,50.74,51.07,50.31,50.86,15292937.0 280 | 2016-02-22,51.02,51.15,50.77,51.07,12373260.0,0.0,1.0,51.02,51.15,50.77,51.07,12373260.0 281 | 2016-02-23,50.97,50.99,50.36,50.63,11431151.0,0.0,1.0,50.97,50.99,50.36,50.63,11431151.0 282 | 2016-02-24,50.27,50.87,50.17,50.82,11216426.0,0.0,1.0,50.27,50.87,50.17,50.82,11216426.0 283 | 2016-02-25,50.9,51.3,50.78,51.11,12336465.0,0.0,1.0,50.9,51.3,50.78,51.11,12336465.0 284 | 2016-02-26,51.15,51.34,50.92,51.02,13001883.0,0.0,1.0,51.15,51.34,50.92,51.02,13001883.0 285 | 2016-02-29,50.86,51.38,50.685,50.73,15484928.0,0.0,1.0,50.86,51.38,50.685,50.73,15484928.0 286 | 2016-03-01,50.99,51.47,50.98,51.46,11904188.0,0.0,1.0,50.99,51.47,50.98,51.46,11904188.0 287 | 2016-03-02,51.37,52.2,51.19,52.12,14686453.0,0.0,1.0,51.37,52.2,51.19,52.12,14686453.0 288 | 2016-03-03,52.14,52.22,51.61,51.89,15336402.0,0.0,1.0,52.14,52.22,51.61,51.89,15336402.0 289 | 2016-03-04,51.75,52.0,51.5,51.81,13913268.0,0.0,1.0,51.75,52.0,51.5,51.81,13913268.0 290 | 2016-03-07,51.53,52.35,51.4,52.21,14826783.0,0.0,1.0,51.53,52.35,51.4,52.21,14826783.0 291 | 2016-03-08,52.05,52.75,51.93,52.46,14225986.0,0.0,1.0,52.05,52.75,51.93,52.46,14225986.0 292 | 2016-03-09,52.55,52.96,52.0,52.34,15457728.0,0.0,1.0,52.55,52.96,52.0,52.34,15457728.0 293 | 2016-03-11,52.65,52.78,52.24,52.53,15134988.0,0.0,1.0,52.65,52.78,52.24,52.53,15134988.0 294 | 2016-03-14,52.55,52.75,52.23,52.54,11701781.0,0.0,1.0,52.55,52.75,52.23,52.54,11701781.0 295 | 2016-03-15,52.24,52.7401,52.24,52.67,11291540.0,0.0,1.0,52.24,52.7401,52.24,52.67,11291540.0 296 | 2016-03-16,52.67,53.38,52.4,53.21,11840540.0,0.0,1.0,52.67,53.38,52.4,53.21,11840540.0 297 | 2016-03-17,53.28,53.805,53.19,53.63,16400622.0,0.0,1.0,53.28,53.805,53.19,53.63,16400622.0 298 | 2016-03-18,53.81,53.85,53.24,53.24,23207899.0,0.0,1.0,53.81,53.85,53.24,53.24,23207899.0 299 | 2016-03-21,53.19,53.59,53.02,53.44,10678884.0,0.0,1.0,53.19,53.59,53.02,53.44,10678884.0 300 | 2016-03-22,53.42,53.46,53.1,53.21,10852024.0,0.0,1.0,53.42,53.46,53.1,53.21,10852024.0 301 | 2016-03-23,53.13,53.2299,52.82,52.91,9716116.0,0.0,1.0,53.13,53.2299,52.82,52.91,9716116.0 302 | 2016-03-24,52.74,53.62,52.66,53.56,15052030.0,0.0,1.0,52.74,53.62,52.66,53.56,15052030.0 303 | 2016-03-28,53.56,53.73,53.2,53.4,8509548.0,0.0,1.0,53.56,53.73,53.2,53.4,8509548.0 304 | 2016-03-29,53.51,54.08,53.3,54.05,10720503.0,0.0,1.0,53.51,54.08,53.3,54.05,10720503.0 305 | 2016-03-30,54.17,54.37,53.7,54.04,14465483.0,0.0,1.0,54.17,54.37,53.7,54.04,14465483.0 306 | 2016-03-31,54.01,54.26,53.92,54.08,12212998.0,0.0,1.0,54.01,54.26,53.92,54.08,12212998.0 307 | 2016-04-01,53.32,54.09,53.1,54.01,13785049.0,0.0,1.0,53.32,54.09,53.1,54.01,13785049.0 308 | 2016-04-04,54.03,54.42,53.8,54.42,11352982.0,0.0,1.0,54.03,54.42,53.8,54.42,11352982.0 309 | 2016-04-05,54.38,54.49,53.95,54.09,12910952.0,0.0,1.0,54.38,54.49,53.95,54.09,12910952.0 310 | 2016-04-06,53.61600000000001,53.62,53.13,53.52,12984286.0,0.0,1.0,53.61600000000001,53.62,53.13,53.52,12984286.0 311 | 2016-04-07,52.52,52.7,51.77,52.0,23015930.0,0.0,1.0,52.52,52.7,51.77,52.0,23015930.0 312 | 2016-04-08,52.2,52.58,52.05,52.18,11919886.0,0.0,1.0,52.2,52.58,52.05,52.18,11919886.0 313 | 2016-04-11,52.36,52.4,51.5,51.61,14939024.0,0.0,1.0,52.36,52.4,51.5,51.61,14939024.0 314 | 2016-04-12,51.66,52.19,51.605,51.95,12255135.0,0.0,1.0,51.66,52.19,51.605,51.95,12255135.0 315 | 2016-04-13,52.07,52.09,50.84,51.285,18050060.0,0.0,1.0,52.07,52.09,50.84,51.285,18050060.0 316 | 2016-04-14,51.28,51.55,51.24,51.36,10046855.0,0.0,1.0,51.28,51.55,51.24,51.36,10046855.0 317 | 2016-04-15,51.28,51.49,51.1,51.35,11831101.0,0.0,1.0,51.28,51.49,51.1,51.35,11831101.0 318 | 2016-04-18,51.37,51.895,51.18,51.73,14313853.0,0.0,1.0,51.37,51.895,51.18,51.73,14313853.0 319 | 2016-04-19,51.8,52.17,51.79,52.08,11359315.0,0.0,1.0,51.8,52.17,51.79,52.08,11359315.0 320 | 2016-04-20,52.15,52.22,51.66,51.75,15315745.0,0.0,1.0,52.15,52.22,51.66,51.75,15315745.0 321 | 2016-04-21,50.56,50.68,49.47,50.03,32139102.0,0.0,1.0,50.56,50.68,49.47,50.03,32139102.0 322 | 2016-04-22,50.15,50.63,50.05,50.55,17776082.0,0.0,1.0,50.15,50.63,50.05,50.55,17776082.0 323 | 2016-04-25,50.53,50.95,50.275,50.76,12387996.0,0.0,1.0,50.53,50.95,50.275,50.76,12387996.0 324 | 2016-04-26,50.98,51.0,50.28,50.44,10045759.0,0.0,1.0,50.98,51.0,50.28,50.44,10045759.0 325 | 2016-04-27,50.46,51.8099,50.46,51.69,17012392.0,0.0,1.0,50.46,51.8099,50.46,51.69,17012392.0 326 | 2016-04-28,51.3,51.56,50.92,51.02,12861210.0,0.0,1.0,51.3,51.56,50.92,51.02,12861210.0 327 | 2016-04-29,50.95,51.05,50.64,50.94,13650055.0,0.0,1.0,50.95,51.05,50.64,50.94,13650055.0 328 | 2016-05-02,51.22,51.45,51.04,51.32,11006096.0,0.0,1.0,51.22,51.45,51.04,51.32,11006096.0 329 | 2016-05-03,51.11,51.32,50.36,50.68,12815283.0,0.0,1.0,51.11,51.32,50.36,50.68,12815283.0 330 | 2016-05-04,50.48,50.985,50.2,50.84,8989830.0,0.0,1.0,50.48,50.985,50.2,50.84,8989830.0 331 | 2016-05-05,50.99,51.04,50.6327,50.84,10787904.0,0.0,1.0,50.99,51.04,50.6327,50.84,10787904.0 332 | 2016-05-06,50.91,51.14,50.6137,51.12,9777954.0,0.0,1.0,50.91,51.14,50.6137,51.12,9777954.0 333 | 2016-05-09,51.22,51.43,51.01,51.08,8602410.0,0.0,1.0,51.22,51.43,51.01,51.08,8602410.0 334 | 2016-05-10,51.38,51.55,51.27,51.54,7899064.0,0.0,1.0,51.38,51.55,51.27,51.54,7899064.0 335 | 2016-05-11,51.48,51.695,51.08,51.15,8330874.0,0.0,1.0,51.48,51.695,51.08,51.15,8330874.0 336 | 2016-05-12,51.22,51.6,51.085,51.47,9888227.0,0.0,1.0,51.22,51.6,51.085,51.47,9888227.0 337 | 2016-05-13,51.41,51.49,50.85,50.94,9503023.0,0.0,1.0,51.41,51.49,50.85,50.94,9503023.0 338 | 2016-05-16,50.77,51.33,50.64,51.23,7840184.0,0.0,1.0,50.77,51.33,50.64,51.23,7840184.0 339 | 2016-05-17,51.2,51.35,50.67,50.9,10424764.0,0.0,1.0,51.2,51.35,50.67,50.9,10424764.0 340 | 2016-05-18,50.92,51.03,50.06,50.39,10443060.0,0.0,1.0,50.92,51.03,50.06,50.39,10443060.0 341 | 2016-05-19,50.0,50.02,49.12,49.63,15964822.0,0.0,1.0,50.0,50.02,49.12,49.63,15964822.0 342 | 2016-05-20,49.8,49.8,49.47,49.66,15164245.0,0.0,1.0,49.8,49.8,49.47,49.66,15164245.0 343 | 2016-05-23,49.66,49.78,49.045,49.14,13214246.0,0.0,1.0,49.66,49.78,49.045,49.14,13214246.0 344 | 2016-05-24,49.36,49.62,49.2,49.58,11822132.0,0.0,1.0,49.36,49.62,49.2,49.58,11822132.0 345 | 2016-05-25,49.63,50.0078,49.4,49.85,9487627.0,0.0,1.0,49.63,50.0078,49.4,49.85,9487627.0 346 | -------------------------------------------------------------------------------- /thalesians_zrh_20160609/3-option pricing/impvol.py: -------------------------------------------------------------------------------- 1 | import xlwings as xw 2 | from math import log, sqrt, exp 3 | from scipy.stats import norm 4 | from scipy.optimize import bisect 5 | import QuantLib as ql 6 | 7 | 8 | @xw.func 9 | def black_scholes(today, expiry, discount_factor, forward, parity, strike, vol): 10 | ttm = (expiry - today).days / 365 11 | dp = 1.0 / (vol * sqrt(ttm)) * (log(forward / strike) + 0.5 * vol ** 2 * ttm) 12 | dm = 1.0 / (vol * sqrt(ttm)) * (log(forward / strike) - 0.5 * vol ** 2 * ttm) 13 | return discount_factor * parity * (forward * norm.cdf(parity * dp) - strike * norm.cdf(parity * dm)) 14 | 15 | 16 | @xw.func 17 | @xw.arg('parity', ndim=1) 18 | @xw.arg('strike', ndim=1) 19 | @xw.arg('premium', ndim=1) 20 | @xw.ret(transpose=True) 21 | def imp_vol(today, expiry, underlying, riskfree, dividend_yield, parity, strike, premium): 22 | ttm = (expiry - today).days / 365 23 | forward = underlying * exp((riskfree - dividend_yield) * ttm) 24 | discount_factor = exp(-riskfree * ttm) 25 | res = [] 26 | for i in range(len(parity)): 27 | vol = bisect( 28 | lambda vol: premium[i] - black_scholes( 29 | today, 30 | expiry, 31 | discount_factor, 32 | forward, 33 | parity[i], 34 | strike[i], 35 | vol 36 | ), 37 | 0.0000001, 38 | 100.0 39 | ) 40 | res.append(vol) 41 | return res 42 | 43 | 44 | @xw.func 45 | @xw.arg('parity', ndim=1) 46 | @xw.arg('strike', ndim=1) 47 | @xw.arg('premium', ndim=1) 48 | @xw.ret(transpose=True) 49 | def imp_vol_ql(today, settlement, expiry, underlying, riskfree, dividend_yield, parity, strike, premium): 50 | # Dates 51 | today = ql.Date(today.day, today.month, today.year) 52 | settlement = ql.Date(settlement.day, settlement.month, settlement.year) 53 | expiry = ql.Date(expiry.day, expiry.month, expiry.year) 54 | ql.Settings.instance().evaluationDate = today 55 | 56 | # Market data 57 | underlying = ql.SimpleQuote(underlying) 58 | r = ql.SimpleQuote(riskfree) # risk-free rate 59 | q = ql.SimpleQuote(dividend_yield) # dividend yield 0.016 60 | vol = ql.SimpleQuote(0.20) # only needed for price process, not relevant for implied vol 61 | dcc = ql.Actual365Fixed() 62 | 63 | risk_free_curve = ql.FlatForward(settlement, ql.QuoteHandle(r), dcc) 64 | div_yield_curve = ql.FlatForward(settlement, ql.QuoteHandle(q), dcc) 65 | vol_curve = ql.BlackConstantVol(today, ql.UnitedStates(ql.UnitedStates.NYSE), ql.QuoteHandle(vol), dcc) 66 | 67 | res = [] 68 | for i in range(len(parity)): 69 | # Instantiating the option 70 | exercise = ql.AmericanExercise(settlement, expiry) 71 | if parity[i] == 1: 72 | type = ql.Option.Call 73 | elif parity[i] == -1: 74 | type = ql.Option.Put 75 | payoff = ql.PlainVanillaPayoff(type, strike[i]) 76 | option = ql.VanillaOption(payoff, exercise) 77 | 78 | # Set up price process 79 | process = ql.BlackScholesMertonProcess(s0=ql.QuoteHandle(underlying), 80 | dividendTS=ql.YieldTermStructureHandle(div_yield_curve), 81 | riskFreeTS=ql.YieldTermStructureHandle(risk_free_curve), 82 | volTS=ql.BlackVolTermStructureHandle(vol_curve) 83 | ) 84 | 85 | res.append(option.impliedVolatility(premium[i], process)) 86 | return res 87 | 88 | if __name__ == '__main__': 89 | xw.serve() 90 | -------------------------------------------------------------------------------- /thalesians_zrh_20160609/3-option pricing/impvol.xlsm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xlwings/talks/6573104eb0a959a9e563144b6e66da49770f87df/thalesians_zrh_20160609/3-option pricing/impvol.xlsm -------------------------------------------------------------------------------- /thalesians_zrh_20160609/3-option pricing/quantlib option pricing.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# QuantLib" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": true 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "import QuantLib as ql\n", 19 | "import datetime as dt" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": {}, 25 | "source": [ 26 | "## A simple calendar sample" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": null, 32 | "metadata": { 33 | "collapsed": false 34 | }, 35 | "outputs": [], 36 | "source": [ 37 | "nyse = ql.UnitedStates(ql.UnitedStates.NYSE)\n", 38 | "fra = ql.Germany(ql.Germany.FrankfurtStockExchange)" 39 | ] 40 | }, 41 | { 42 | "cell_type": "code", 43 | "execution_count": null, 44 | "metadata": { 45 | "collapsed": true 46 | }, 47 | "outputs": [], 48 | "source": [ 49 | "first_date = ql.Date(1,1,2016)\n", 50 | "second_date = ql.Date(1,6,2016)" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "execution_count": null, 56 | "metadata": { 57 | "collapsed": false 58 | }, 59 | "outputs": [], 60 | "source": [ 61 | "nyse.businessDaysBetween(first_date, second_date)" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": null, 67 | "metadata": { 68 | "collapsed": false 69 | }, 70 | "outputs": [], 71 | "source": [ 72 | "fra.businessDaysBetween(first_date, second_date)" 73 | ] 74 | }, 75 | { 76 | "cell_type": "markdown", 77 | "metadata": {}, 78 | "source": [ 79 | "## Option Pricing" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": null, 85 | "metadata": { 86 | "collapsed": false 87 | }, 88 | "outputs": [], 89 | "source": [ 90 | "today = dt.datetime(2016, 5, 30)\n", 91 | "settlement = dt.datetime(2016, 6, 1)\n", 92 | "expiry = dt.datetime(2016, 9, 16)\n", 93 | "underlying = 100.35\n", 94 | "riskfree = 0.05\n", 95 | "vol = 0.20\n", 96 | "dividend_yield = 0.0\n", 97 | "option_type = 'call'\n", 98 | "strike = 100" 99 | ] 100 | }, 101 | { 102 | "cell_type": "markdown", 103 | "metadata": {}, 104 | "source": [ 105 | "### Transform Dates" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": null, 111 | "metadata": { 112 | "collapsed": false 113 | }, 114 | "outputs": [], 115 | "source": [ 116 | "today = ql.Date(today.day, today.month, today.year)\n", 117 | "settlement = ql.Date(settlement.day, settlement.month, settlement.year)\n", 118 | "expiry = ql.Date(expiry.day, expiry.month, expiry.year)\n", 119 | "ql.Settings.instance().evaluationDate = today" 120 | ] 121 | }, 122 | { 123 | "cell_type": "markdown", 124 | "metadata": {}, 125 | "source": [ 126 | "### Market Data" 127 | ] 128 | }, 129 | { 130 | "cell_type": "code", 131 | "execution_count": null, 132 | "metadata": { 133 | "collapsed": false 134 | }, 135 | "outputs": [], 136 | "source": [ 137 | "underlying = ql.SimpleQuote(underlying)\n", 138 | "r = ql.SimpleQuote(riskfree)\n", 139 | "q = ql.SimpleQuote(dividend_yield)\n", 140 | "vol = ql.SimpleQuote(vol)\n", 141 | "dcc = ql.Actual365Fixed()\n", 142 | "\n", 143 | "risk_free_curve = ql.FlatForward(settlement, ql.QuoteHandle(r), dcc)\n", 144 | "div_yield_curve = ql.FlatForward(settlement, ql.QuoteHandle(q), dcc)\n", 145 | "vol_curve = ql.BlackConstantVol(today, ql.UnitedStates(ql.UnitedStates.NYSE), ql.QuoteHandle(vol), dcc)" 146 | ] 147 | }, 148 | { 149 | "cell_type": "markdown", 150 | "metadata": {}, 151 | "source": [ 152 | "### Instantiating the option" 153 | ] 154 | }, 155 | { 156 | "cell_type": "code", 157 | "execution_count": null, 158 | "metadata": { 159 | "collapsed": true 160 | }, 161 | "outputs": [], 162 | "source": [ 163 | "exercise = ql.AmericanExercise(settlement, expiry)\n", 164 | "if option_type == 'call':\n", 165 | " payoff = ql.PlainVanillaPayoff(type=ql.Option.Call, strike=strike)\n", 166 | "elif option_type == 'put':\n", 167 | " payoff = ql.PlainVanillaPayoff(type=ql.Option.Put, strike=strike)\n", 168 | "\n", 169 | "option = ql.VanillaOption(payoff, exercise)" 170 | ] 171 | }, 172 | { 173 | "cell_type": "markdown", 174 | "metadata": {}, 175 | "source": [ 176 | "### Price process" 177 | ] 178 | }, 179 | { 180 | "cell_type": "code", 181 | "execution_count": null, 182 | "metadata": { 183 | "collapsed": true 184 | }, 185 | "outputs": [], 186 | "source": [ 187 | "process = ql.BlackScholesMertonProcess(s0=ql.QuoteHandle(underlying),\n", 188 | " dividendTS=ql.YieldTermStructureHandle(div_yield_curve),\n", 189 | " riskFreeTS=ql.YieldTermStructureHandle(risk_free_curve),\n", 190 | " volTS=ql.BlackVolTermStructureHandle(vol_curve)\n", 191 | " )" 192 | ] 193 | }, 194 | { 195 | "cell_type": "markdown", 196 | "metadata": {}, 197 | "source": [ 198 | "### Calculation Methods\n", 199 | "* **Analytical**" 200 | ] 201 | }, 202 | { 203 | "cell_type": "code", 204 | "execution_count": null, 205 | "metadata": { 206 | "collapsed": false 207 | }, 208 | "outputs": [], 209 | "source": [ 210 | "option.setPricingEngine(ql.BaroneAdesiWhaleyEngine(process))\n", 211 | "option.NPV()" 212 | ] 213 | }, 214 | { 215 | "cell_type": "markdown", 216 | "metadata": {}, 217 | "source": [ 218 | "* **Binomial (Jarrow-Rudd)**" 219 | ] 220 | }, 221 | { 222 | "cell_type": "code", 223 | "execution_count": null, 224 | "metadata": { 225 | "collapsed": false 226 | }, 227 | "outputs": [], 228 | "source": [ 229 | "option.setPricingEngine(ql.BinomialVanillaEngine(process, type='jr', steps=801))\n", 230 | "option.NPV()" 231 | ] 232 | }, 233 | { 234 | "cell_type": "markdown", 235 | "metadata": {}, 236 | "source": [ 237 | " **... and many more:**" 238 | ] 239 | }, 240 | { 241 | "cell_type": "markdown", 242 | "metadata": {}, 243 | "source": [ 244 | "* Black-Scholes (for european options only)\n", 245 | "* Barone-Adesi/Whaley (american-only)\n", 246 | "* Bjerksund/Stensland (american)\n", 247 | "* Integral (european)\n", 248 | "* Finite differences\n", 249 | "* Binomial Jarrow-Rudd\n", 250 | "* Binomial Cox-Ross-Rubinstein\n", 251 | "* Additive equiprobabilities\n", 252 | "* Binomial Trigeorgis\n", 253 | "* Binomial Tian\n", 254 | "* Binomial Leisen-Reimer\n", 255 | "* crude Monte Carlo (european-only)\n", 256 | "* Sobol-sequence Monte Carlo (european-only)" 257 | ] 258 | } 259 | ], 260 | "metadata": { 261 | "kernelspec": { 262 | "display_name": "Python 3", 263 | "language": "python", 264 | "name": "python3" 265 | }, 266 | "language_info": { 267 | "codemirror_mode": { 268 | "name": "ipython", 269 | "version": 3 270 | }, 271 | "file_extension": ".py", 272 | "mimetype": "text/x-python", 273 | "name": "python", 274 | "nbconvert_exporter": "python", 275 | "pygments_lexer": "ipython3", 276 | "version": "3.5.1" 277 | }, 278 | "toc": { 279 | "toc_cell": false, 280 | "toc_number_sections": false, 281 | "toc_threshold": 6, 282 | "toc_window_display": false 283 | } 284 | }, 285 | "nbformat": 4, 286 | "nbformat_minor": 0 287 | } 288 | -------------------------------------------------------------------------------- /thalesians_zrh_20160609/4-unit tests/prime_numbers.xlsm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xlwings/talks/6573104eb0a959a9e563144b6e66da49770f87df/thalesians_zrh_20160609/4-unit tests/prime_numbers.xlsm -------------------------------------------------------------------------------- /thalesians_zrh_20160609/4-unit tests/test_prime_numbers.py: -------------------------------------------------------------------------------- 1 | import os 2 | import unittest 3 | import xlwings as xw 4 | 5 | this_dir = os.path.dirname(os.path.abspath(__file__)) 6 | 7 | 8 | class TestPrime(unittest.TestCase): 9 | def setUp(self): 10 | xl_file = os.path.join(this_dir, 'prime_numbers.xlsm') 11 | self.wb = xw.Workbook(xl_file, app_visible=True) 12 | 13 | # Map functions 14 | self.is_prime = self.wb.macro('Module1.is_prime') 15 | 16 | def tearDown(self): 17 | pass 18 | # self.wb.close() 19 | 20 | @staticmethod 21 | def is_prime2(number): 22 | """Alternative implementation of the VBA function""" 23 | if number <= 1: 24 | return False 25 | 26 | for i in range(2, number): 27 | if number % i == 0: 28 | return False 29 | 30 | return True 31 | 32 | def test_negative(self): 33 | self.assertFalse(self.is_prime(-5)) 34 | 35 | def test_zero(self): 36 | self.assertFalse(self.is_prime(0)) 37 | 38 | def test_100(self): 39 | """Tests all number numbers from 1 to 100, taken from https://en.wikipedia.org/wiki/Prime_number""" 40 | prime_numbers = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] 41 | for n in range(1, 101): 42 | if n in prime_numbers: 43 | self.assertTrue(self.is_prime(n)) 44 | else: 45 | self.assertFalse(self.is_prime(n)) 46 | 47 | def test_100_alternative(self): 48 | """Compare the VBA implementation with an alternative implementation in Python""" 49 | for n in range(1, 101): 50 | self.assertEqual(self.is_prime(n), self.is_prime2(n)) 51 | 52 | 53 | if __name__ == '__main__': 54 | unittest.main() 55 | --------------------------------------------------------------------------------