├── ARIMA & LSTM on Time Series Data with Fourier Filtering - Colaboratory.pdf ├── ARIMA_&_LSTM_on_Time_Series_Data_with_Fourier_Filtering.ipynb ├── Fourier Decomposition into component Signals - Colaboratory.pdf ├── Fourier_Decomposition_into_component_Signals.ipynb ├── README.md ├── Stock_Market_Prediction.ipynb ├── images ├── ARIMA_Prediction.png ├── ARIMA_Prediction_zoomed.png ├── Autocorr_snp.png ├── LR.png ├── autoCorrelation_tcs.png ├── cari2.jpg ├── caricature.jpeg ├── fourier_filtering.png ├── freq_decompose.png ├── freq_decomposed.png ├── freq_decomposed_sum.png ├── lstm_fourier_filtered.png ├── prediction_snp_lstm.png └── psd.png ├── sphist.csv └── tcs_stock.csv /ARIMA & LSTM on Time Series Data with Fourier Filtering - Colaboratory.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdroitAnandAI/Algo-Trading-Math-Models/0ecb9d9805ce46b0bb83ba0d3493ca6c969acb5b/ARIMA & LSTM on Time Series Data with Fourier Filtering - Colaboratory.pdf -------------------------------------------------------------------------------- /Fourier Decomposition into component Signals - Colaboratory.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdroitAnandAI/Algo-Trading-Math-Models/0ecb9d9805ce46b0bb83ba0d3493ca6c969acb5b/Fourier Decomposition into component Signals - Colaboratory.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Algo-Trading-Math-Models 2 | ## Math Techniques viz. ARIMA, Frequency Decomposition, Fourier Filtering, Linear Regression & Bi-directional LSTMs on Feature Engineered Stock Market Data. 3 | 4 | 5 | **Quant Trading** 6 | Quant strategies follow a data-driven approach to pick stocks. **This approach which seeks to reduce the role of human bias conceptually fall in between active and passive trading.** The stock data is a classic example of " time series" where the prices are sampled at regular intervals. 7 | 8 | 9 | **Fourier Filtering** 10 | 11 | Fourier Filtering helps to **de-noise the signal** in order to find out the significant curve. This technique can be used before feeding the prediction model **or even to smooth the model output.** 12 | ![alt text](images/fourier_filtering.png) 13 | 14 | 15 | **ARIMA Model on TCS Stock Data** 16 | 17 | aka. Box-Jenkins model, ARIMA was created in 1976. It is conceptually similar to a linear regression model applied on time series data. 

18 | 19 | **ARIMA has 3 parts:** 20 | **- Auto Regression** 21 | **- Integration (Differencing)** 22 | **- Moving Average** 23 | 24 | ![alt text](images/ARIMA_Prediction.png) 25 | ![alt text](images/ARIMA_Prediction_zoomed.png) 26 | 27 | **Linear Regression**
28 | 29 | We were using **only 'p' previous values and 'q' errors to predict.** But we can use other features such as day of week, time of day, holidays etc. This technique, known as Feature Engineering is more of an art than science.
30 | 31 | Here we take a CSV file containing daily record of the price of the S&P500 Index from 1950 to 2015. Lets try to predict response variable, i.e. closing price, prior to a day. We can use features the features below:
32 | 1) **Average Price** of past 365 days. 33 | 2) Ratio of average price for the past 5 days & past 365 days. 34 | 3) **Mean and Standard Deviation** of previous 365 days. 35 | 36 | ![alt text](images/LR.png) 37 | 38 | **Frequency Decomposition using Power Spectral Density Curve**
39 | Auto correlation is one way to compute periodicity. But a more scientific way to find periodicity is Fourier Transform. This technique can be used to find out the **most significant periodic changes in historical data,** which gives a dependable hint about future.
40 | 41 | ![alt text](images/freq_decompose.png) 42 | ![alt text](images/psd.png) 43 | ![alt text](images/freq_decomposed.png) 44 | ![alt text](images/freq_decomposed_sum.png) 45 | 46 | **LSTM on S&P500 Time Series with Fourier Filering** 47 |
48 | Long Short-Term Memory networks, can be used to learn from the series of past observations to predict the next value in the sequence.

49 | A vanilla LSTM model has a single hidden layer of LSTM units, and an output layer used to make prediction. Here we are working with a uni-variate series, so the number of features is one.

50 | **We apply LSTM on the same S&P 500 data taken for Fourier filtering.** First we draw the auto correlation graph to estimate the lag.

51 | ![alt text](images/prediction_snp_lstm.png) 52 | ![alt text](images/lstm_fourier_filtered.png) 53 | 54 | We tried to model stock market behaviour using supervised learning approaches viz. Linear Regression or LSTM. But Reinforcement Learning is more robust to account for various environmental factors that affects stock market, as it aims to maximise reward in a given situation. 55 | 56 | Fourier analysis works best with waves or wavelets that are regular and predictable, for which stock market is an antithesis. Hence it is beneficial to look into spectral analysis and signal extraction also. 57 | -------------------------------------------------------------------------------- /Stock_Market_Prediction.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# An Attempt to Predict Stock Market Prices" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "### **Data Description:** \n", 15 | "\n", 16 | "In this mission, we'll be working with a csv file containing index prices. Each row in the file contains a **daily record of the price of the S&P500 Index from 1950 to 2015**. The dataset is stored in sphist.csv.\n", 17 | "\n", 18 | "The columns of the dataset are:\n", 19 | "\n", 20 | " Date -- The date of the record.\n", 21 | " Open -- The opening price of the day (when trading starts).\n", 22 | " High -- The highest trade price during the day.\n", 23 | " Low -- The lowest trade price during the day.\n", 24 | " Close -- The closing price for the day (when trading is finished).\n", 25 | " Volume -- The number of shares traded.\n", 26 | " Adj Close -- The daily closing price, adjusted for corporate actions.\n", 27 | "\n", 28 | "**We'll be using this dataset to develop a predictive model. We'll train the model with data from 1950-2012, and try to make predictions from 2013-2015.**" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 36, 34 | "metadata": {}, 35 | "outputs": [], 36 | "source": [ 37 | "# To calculate Linear Regression, do plotting and calculate error\n", 38 | "\n", 39 | "# Importing necessary modules\n", 40 | "from sklearn.linear_model import LinearRegression\n", 41 | "import matplotlib.pyplot as plt\n", 42 | "\n", 43 | "# Importing the statistics module\n", 44 | "from statistics import mean\n", 45 | "from statistics import median\n", 46 | "\n", 47 | "def linearReg(x_train, y_train, x_test, y_test):\n", 48 | " \n", 49 | " lm = LinearRegression()\n", 50 | " lm.fit(x_train, y_train)\n", 51 | "\n", 52 | " y_pred = lm.predict(x_test)\n", 53 | "\n", 54 | " plt.scatter(y_test, y_pred)\n", 55 | " plt.xlabel(\"Actual Prices: $Y_i$\")\n", 56 | " plt.ylabel(\"Predicted Prices: $\\hat{Y}_i$\")\n", 57 | " plt.title(\"Actual Prices vs Predicted prices: $Y_i$ vs $\\hat{Y}_i$\")\n", 58 | " plt.show()\n", 59 | "\n", 60 | " # Calculating the error\n", 61 | " delta_y = y_test - y_pred;\n", 62 | " print(\"Mean Absolute Error (MAE) = \" + str(mean(abs(delta_y))))\n", 63 | "\n", 64 | " # Calculating the percentage error\n", 65 | " delta_y_percentage = (y_test - y_pred)/ y_test;\n", 66 | "\n", 67 | " print(bold + \"Median Absolute Percentage Error (MAPE) = \" + \n", 68 | " str(round(median(abs(delta_y_percentage)), 2)*100) + \"%\" + end)" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": 37, 74 | "metadata": {}, 75 | "outputs": [], 76 | "source": [ 77 | "# To split the data into train and split based on date.\n", 78 | "\n", 79 | "from sklearn.preprocessing import StandardScaler\n", 80 | "\n", 81 | "def trainTestSplit(sp_augmented, predictWeek = False):\n", 82 | " \n", 83 | " # Train dataset would contain rows with a date less than 2013-01-01\n", 84 | " train = sp_augmented[sp_augmented[\"Date\"] < datetime(year=2013, month=1, day=1)]\n", 85 | " test = sp_augmented[sp_augmented[\"Date\"] >= datetime(year=2013, month=1, day=1)]\n", 86 | "\n", 87 | " \n", 88 | " # Separate Train dataset & remove unusable columns for prediction\n", 89 | " # if % change in a week is to be predicted, then response variable \n", 90 | " # should be set to percentage change in closing price over a week.\n", 91 | " if predictWeek:\n", 92 | " y_train = train['closePerChange']\n", 93 | " x_train = train.drop(\n", 94 | " ['closePerChange', 'Close', 'High', 'Low', \n", 95 | " 'Open', 'Volume', 'Adj Close', 'Date'], axis=1)\n", 96 | " else:\n", 97 | " y_train = train['Close']\n", 98 | " x_train = train.drop(\n", 99 | " ['Close', 'High', 'Low', 'Open', \n", 100 | " 'Volume', 'Adj Close', 'Date'], axis=1)\n", 101 | "\n", 102 | " # Separate Test dataset & remove unusable columns for prediction\n", 103 | " if predictWeek:\n", 104 | " y_test = test['closePerChange']\n", 105 | " x_test = test.drop(\n", 106 | " ['closePerChange', 'Close', 'High', 'Low', \n", 107 | " 'Open', 'Volume', 'Adj Close', 'Date'], axis=1)\n", 108 | " else:\n", 109 | " y_test = test['Close']\n", 110 | " x_test = test.drop(\n", 111 | " ['Close', 'High', 'Low', 'Open', \n", 112 | " 'Volume', 'Adj Close', 'Date'], axis=1)\n", 113 | "\n", 114 | "# # Standardisation.\n", 115 | "# scaler = StandardScaler(copy=False).fit(x_train)\n", 116 | "# x_train = scaler.transform(x_train)\n", 117 | " \n", 118 | "# scaler = StandardScaler(copy=False)\n", 119 | "# y_train = np.squeeze(scaler.fit_transform(y_train.reshape(-1, 1)))\n", 120 | "\n", 121 | "# scaler = StandardScaler(copy=False).fit(x_test)\n", 122 | "# x_test = scaler.transform(x_test)\n", 123 | " \n", 124 | "# scaler = StandardScaler(copy=False)\n", 125 | "# y_test = np.squeeze(scaler.fit_transform(y_test.reshape(-1, 1)))\n", 126 | "\n", 127 | " print(\"\\n\\n*** Train Dataset Outcome Variables ***\")\n", 128 | " print(y_train.head(5))\n", 129 | " print(\"\\n\\n*** Train Dataset Input Variables ***\")\n", 130 | " print(x_train.head(5))\n", 131 | " print(\"\\n\\n*** Test Dataset Outcome Variables ***\")\n", 132 | " print(y_test.head(5))\n", 133 | " print(\"\\n\\n*** Test Dataset Input Variables ***\")\n", 134 | " print(x_test.head(5))\n", 135 | " \n", 136 | " return x_train, y_train, x_test, y_test\n" 137 | ] 138 | }, 139 | { 140 | "cell_type": "markdown", 141 | "metadata": {}, 142 | "source": [ 143 | "# Loading the Data" 144 | ] 145 | }, 146 | { 147 | "cell_type": "code", 148 | "execution_count": 38, 149 | "metadata": {}, 150 | "outputs": [ 151 | { 152 | "name": "stdout", 153 | "output_type": "stream", 154 | "text": [ 155 | " Date Open High Low Close Volume Adj Close\n", 156 | "16589 1950-01-03 16.66 16.66 16.66 16.66 1260000.0 16.66\n", 157 | "16588 1950-01-04 16.85 16.85 16.85 16.85 1890000.0 16.85\n", 158 | "16587 1950-01-05 16.93 16.93 16.93 16.93 2550000.0 16.93\n" 159 | ] 160 | } 161 | ], 162 | "source": [ 163 | "# To load the input data\n", 164 | "import pandas as pd\n", 165 | "import numpy as np\n", 166 | "from datetime import datetime\n", 167 | "\n", 168 | "# used to format headings \n", 169 | "bold = '\\033[1m'\n", 170 | "end = '\\033[0m'\n", 171 | "\n", 172 | "# Read the s&p 500 input data set and sorting based on date.\n", 173 | "sp500 = pd.read_csv(\"sphist.csv\", index_col=False)\n", 174 | "sp500[\"Date\"] = pd.to_datetime(sp500[\"Date\"])\n", 175 | "sp_sorted = sp500.sort_values(\"Date\")\n", 176 | "\n", 177 | "print(sp_sorted.head(3))\n", 178 | "# print(sp_sorted.tail(3))" 179 | ] 180 | }, 181 | { 182 | "cell_type": "markdown", 183 | "metadata": {}, 184 | "source": [ 185 | "From the sorted data, we can see that data since Jan 1950 is there in the input dataset." 186 | ] 187 | }, 188 | { 189 | "cell_type": "markdown", 190 | "metadata": {}, 191 | "source": [ 192 | "# Prediction of Stock Prices: Week Ahead" 193 | ] 194 | }, 195 | { 196 | "cell_type": "markdown", 197 | "metadata": {}, 198 | "source": [ 199 | "To predict % change in stock price after a week, we can use features averaging previous 'n' days coupled with % change in stock price after a week, as the response variable, y as training data. In test data also, a 7-day forward shift in the closing price is introduced to compare the % change against prediction." 200 | ] 201 | }, 202 | { 203 | "cell_type": "code", 204 | "execution_count": 39, 205 | "metadata": { 206 | "scrolled": false 207 | }, 208 | "outputs": [ 209 | { 210 | "name": "stdout", 211 | "output_type": "stream", 212 | "text": [ 213 | "\n", 214 | "\n", 215 | "*** Dataset After Augmented Values ***\n", 216 | " Date Open High Low Close Volume \\\n", 217 | "16559 1950-02-15 17.059999 17.059999 17.059999 17.059999 1730000.0 \n", 218 | "16558 1950-02-16 16.990000 16.990000 16.990000 16.990000 1920000.0 \n", 219 | "16557 1950-02-17 17.150000 17.150000 17.150000 17.150000 1940000.0 \n", 220 | "16556 1950-02-20 17.200001 17.200001 17.200001 17.200001 1420000.0 \n", 221 | "16555 1950-02-21 17.170000 17.170000 17.170000 17.170000 1260000.0 \n", 222 | "16554 1950-02-23 17.209999 17.209999 17.209999 17.209999 1310000.0 \n", 223 | "16553 1950-02-24 17.280001 17.280001 17.280001 17.280001 1710000.0 \n", 224 | "16552 1950-02-27 17.280001 17.280001 17.280001 17.280001 1410000.0 \n", 225 | "16551 1950-02-28 17.219999 17.219999 17.219999 17.219999 1310000.0 \n", 226 | "16550 1950-03-01 17.240000 17.240000 17.240000 17.240000 1410000.0 \n", 227 | "\n", 228 | " Adj Close closePerChange mean_7by30 std_7by30 mean_7by14 std_7by14 \n", 229 | "16559 17.059999 1.289578 1.015091 0.430297 1.008317 0.418336 \n", 230 | "16558 16.990000 1.353732 1.012360 0.539901 1.005050 0.575361 \n", 231 | "16557 17.150000 0.524781 1.009308 0.603704 1.001209 0.780380 \n", 232 | "16556 17.200001 0.174413 1.008201 0.570982 0.999167 0.948967 \n", 233 | "16555 17.170000 0.698899 1.007682 0.555840 0.998336 0.997527 \n", 234 | "16554 17.209999 0.639169 1.006581 0.461385 0.996923 0.881609 \n", 235 | "16553 17.280001 -0.462963 1.005974 0.423582 0.996011 0.880520 \n", 236 | "16552 17.280001 -0.520833 1.007446 0.480805 0.997632 0.999394 \n", 237 | "16551 17.219999 -0.871074 1.008265 0.488918 0.999501 1.018030 \n", 238 | "16550 17.240000 -0.870070 1.009108 0.260923 1.001829 0.554389 \n", 239 | "\n", 240 | "\n", 241 | "*** Train Dataset Outcome Variables ***\n", 242 | "16559 1.289578\n", 243 | "16558 1.353732\n", 244 | "16557 0.524781\n", 245 | "16556 0.174413\n", 246 | "16555 0.698899\n", 247 | "Name: closePerChange, dtype: float64\n", 248 | "\n", 249 | "\n", 250 | "*** Train Dataset Input Variables ***\n", 251 | " mean_7by30 std_7by30 mean_7by14 std_7by14\n", 252 | "16559 1.015091 0.430297 1.008317 0.418336\n", 253 | "16558 1.012360 0.539901 1.005050 0.575361\n", 254 | "16557 1.009308 0.603704 1.001209 0.780380\n", 255 | "16556 1.008201 0.570982 0.999167 0.948967\n", 256 | "16555 1.007682 0.555840 0.998336 0.997527\n", 257 | "\n", 258 | "\n", 259 | "*** Test Dataset Outcome Variables ***\n", 260 | "738 0.658498\n", 261 | "737 0.774996\n", 262 | "736 0.400281\n", 263 | "735 0.734665\n", 264 | "734 1.632633\n", 265 | "Name: closePerChange, dtype: float64\n", 266 | "\n", 267 | "\n", 268 | "*** Test Dataset Input Variables ***\n", 269 | " mean_7by30 std_7by30 mean_7by14 std_7by14\n", 270 | "738 1.006792 0.707287 0.998234 1.090721\n", 271 | "737 1.006252 1.082845 0.998381 1.211434\n", 272 | "736 1.007480 1.267217 0.999759 1.292730\n", 273 | "735 1.009620 1.403724 1.001383 1.343386\n", 274 | "734 1.012163 1.399322 1.003158 1.342442\n" 275 | ] 276 | }, 277 | { 278 | "data": { 279 | "image/png": "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\n", 280 | "text/plain": [ 281 | "" 282 | ] 283 | }, 284 | "metadata": {}, 285 | "output_type": "display_data" 286 | }, 287 | { 288 | "name": "stdout", 289 | "output_type": "stream", 290 | "text": [ 291 | "Mean Absolute Error (MAE) = 1.4680642947173421\n", 292 | "\u001b[1mMedian Absolute Percentage Error (MAPE) = 93.0%\u001b[0m\n" 293 | ] 294 | } 295 | ], 296 | "source": [ 297 | "\n", 298 | "# Taking a copy of sorted data so that \n", 299 | "# it can be used for other predictions\n", 300 | "sortedData = pd.DataFrame(sp_sorted)\n", 301 | "\n", 302 | "# closePrices.shift(-7) would give the closing price after a week.\n", 303 | "closePrices = pd.DataFrame(sortedData.Close)\n", 304 | "shiftedByWeek = closePrices.shift(-7)\n", 305 | "\n", 306 | "# to find the % change in closing price after a week\n", 307 | "closePriceChange = 100 * (shiftedByWeek - closePrices)/closePrices \n", 308 | "sortedData['closePerChange'] = closePriceChange\n", 309 | "\n", 310 | "# The average price for the past 7 days.\n", 311 | "# The standard deviation of the price over the past 7 days\n", 312 | "shifted = closePrices.shift(1)\n", 313 | "window = shifted.rolling(window=7)\n", 314 | "means_7 = window.mean()\n", 315 | "std_7 = window.std()\n", 316 | "# sp_augmented['mean_7'] = means_7\n", 317 | "# sp_augmented['std_7'] = std_7\n", 318 | "\n", 319 | "window = shifted.rolling(window=30)\n", 320 | "means_30 = window.mean()\n", 321 | "std_30 = window.std()\n", 322 | "sortedData['mean_7by30'] = means_7/ means_30\n", 323 | "sortedData['std_7by30'] = std_7/ std_30\n", 324 | "\n", 325 | "# The ratio between the average price \n", 326 | "# for the past 7 days, and the average \n", 327 | "# price for the past 14 days.\n", 328 | "window = shifted.rolling(window=14)\n", 329 | "means_14 = window.mean()\n", 330 | "std_14 = window.std()\n", 331 | "sortedData['mean_7by14'] = means_7/ means_14\n", 332 | "sortedData['std_7by14'] = std_7/ std_14\n", 333 | "\n", 334 | "\n", 335 | "# Some of the indicators use 30 days of historical data, and the dataset starts \n", 336 | "# on 1950-01-03. Thus, any rows that fall before 1950-02-04 don't have enough \n", 337 | "# historical data to compute all the indicators. \n", 338 | "sp_augmented = sortedData[sortedData[\"Date\"] > datetime(year=1950, month=2, day=4)]\n", 339 | "\n", 340 | "# Use the dropna method to remove any rows with NaN values. \n", 341 | "# Pass in the axis=0 argument to drop rows.\n", 342 | "sp_augmented = sp_augmented.dropna(axis = 0)\n", 343 | "\n", 344 | "print(\"\\n\\n*** Dataset After Augmented Values ***\")\n", 345 | "print(sp_augmented.head(10))\n", 346 | "\n", 347 | "# To split into train and test data to do linear regression\n", 348 | "x_train, y_train, x_test, y_test = trainTestSplit(sp_augmented, predictWeek = True)\n", 349 | "linearReg(x_train, y_train, x_test, y_test)" 350 | ] 351 | }, 352 | { 353 | "cell_type": "markdown", 354 | "metadata": {}, 355 | "source": [ 356 | "# MAE vs MAPE Error Metric\n", 357 | "\n", 358 | "MAE error metric is not interpretable, since the value of MAE can range from 0 to infinity. We can't understand how good the model performed. Hence it would be better to compute Percentage error and even better would be to compute median (instead of mean) so that the perturbation caused by outliers could be eliminated.\n", 359 | "\n", 360 | "Median Absolute Percentage Error (MAPE) would be a far more intrepretable metric, resilient to outliers." 361 | ] 362 | }, 363 | { 364 | "cell_type": "markdown", 365 | "metadata": {}, 366 | "source": [ 367 | "# Prediction of Stock Prices: Day Ahead\n", 368 | "\n", 369 | "Percentage error for weekly prediction is unacceptably high. This was expected as stock prediction is an extremely hard problem, to get even a better than random model. \n", 370 | "\n", 371 | "Lets try to predict % change in stock price prior to a day. We can use features, mean and standard deviation of previous 365 days & The ratio between the average price for the past 5 days, and the average price for the past 365 days. The response variable, y, would be the closing price. A 1-day forward shift in the closing price, so that the closing price of the present day (future data) shouldn't be included in prediction." 372 | ] 373 | }, 374 | { 375 | "cell_type": "code", 376 | "execution_count": 40, 377 | "metadata": {}, 378 | "outputs": [ 379 | { 380 | "name": "stdout", 381 | "output_type": "stream", 382 | "text": [ 383 | "\n", 384 | "\n", 385 | "*** Dataset After Augmented Values ***\n", 386 | " Date Open High Low Close Volume \\\n", 387 | "16224 1951-06-19 22.020000 22.020000 22.020000 22.020000 1100000.0 \n", 388 | "16223 1951-06-20 21.910000 21.910000 21.910000 21.910000 1120000.0 \n", 389 | "16222 1951-06-21 21.780001 21.780001 21.780001 21.780001 1100000.0 \n", 390 | "16221 1951-06-22 21.549999 21.549999 21.549999 21.549999 1340000.0 \n", 391 | "16220 1951-06-25 21.290001 21.290001 21.290001 21.290001 2440000.0 \n", 392 | "\n", 393 | " Adj Close closePerChange mean_7by30 std_7by30 mean_7by14 \\\n", 394 | "16224 22.020000 -4.178020 1.001163 0.516555 1.007085 \n", 395 | "16223 21.910000 -4.335924 1.005594 0.540823 1.008357 \n", 396 | "16222 21.780001 -3.122135 1.008656 0.550248 1.009039 \n", 397 | "16221 21.549999 -1.484914 1.011709 0.489668 1.009755 \n", 398 | "16220 21.290001 1.643955 1.013208 0.548262 1.008725 \n", 399 | "\n", 400 | " std_7by14 mean_365 std_365 mean_5by365 \n", 401 | "16224 1.006277 19.447726 1.790253 1.120954 \n", 402 | "16223 0.922850 19.462411 1.789307 1.125246 \n", 403 | "16222 0.840531 19.476274 1.788613 1.128142 \n", 404 | "16221 0.676890 19.489562 1.787659 1.126757 \n", 405 | "16220 0.753914 19.502082 1.786038 1.121008 \n", 406 | "\n", 407 | "\n", 408 | "*** Train Dataset Outcome Variables ***\n", 409 | "16224 22.020000\n", 410 | "16223 21.910000\n", 411 | "16222 21.780001\n", 412 | "16221 21.549999\n", 413 | "16220 21.290001\n", 414 | "Name: Close, dtype: float64\n", 415 | "\n", 416 | "\n", 417 | "*** Train Dataset Input Variables ***\n", 418 | " closePerChange mean_7by30 std_7by30 mean_7by14 std_7by14 \\\n", 419 | "16224 -4.178020 1.001163 0.516555 1.007085 1.006277 \n", 420 | "16223 -4.335924 1.005594 0.540823 1.008357 0.922850 \n", 421 | "16222 -3.122135 1.008656 0.550248 1.009039 0.840531 \n", 422 | "16221 -1.484914 1.011709 0.489668 1.009755 0.676890 \n", 423 | "16220 1.643955 1.013208 0.548262 1.008725 0.753914 \n", 424 | "\n", 425 | " mean_365 std_365 mean_5by365 \n", 426 | "16224 19.447726 1.790253 1.120954 \n", 427 | "16223 19.462411 1.789307 1.125246 \n", 428 | "16222 19.476274 1.788613 1.128142 \n", 429 | "16221 19.489562 1.787659 1.126757 \n", 430 | "16220 19.502082 1.786038 1.121008 \n", 431 | "\n", 432 | "\n", 433 | "*** Test Dataset Outcome Variables ***\n", 434 | "738 1462.420044\n", 435 | "737 1459.369995\n", 436 | "736 1466.469971\n", 437 | "735 1461.890015\n", 438 | "734 1457.150024\n", 439 | "Name: Close, dtype: float64\n", 440 | "\n", 441 | "\n", 442 | "*** Test Dataset Input Variables ***\n", 443 | " closePerChange mean_7by30 std_7by30 mean_7by14 std_7by14 \\\n", 444 | "738 0.658498 1.006792 0.707287 0.998234 1.090721 \n", 445 | "737 0.774996 1.006252 1.082845 0.998381 1.211434 \n", 446 | "736 0.400281 1.007480 1.267217 0.999759 1.292730 \n", 447 | "735 0.734665 1.009620 1.403724 1.001383 1.343386 \n", 448 | "734 1.632633 1.012163 1.399322 1.003158 1.342442 \n", 449 | "\n", 450 | " mean_365 std_365 mean_5by365 \n", 451 | "738 1327.534055 90.463948 1.068629 \n", 452 | "737 1327.908247 90.738976 1.073714 \n", 453 | "736 1328.224877 90.995857 1.079412 \n", 454 | "735 1328.557617 91.279049 1.086423 \n", 455 | "734 1328.898603 91.544368 1.095093 \n" 456 | ] 457 | }, 458 | { 459 | "data": { 460 | "image/png": "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\n", 461 | "text/plain": [ 462 | "" 463 | ] 464 | }, 465 | "metadata": {}, 466 | "output_type": "display_data" 467 | }, 468 | { 469 | "name": "stdout", 470 | "output_type": "stream", 471 | "text": [ 472 | "Mean Absolute Error (MAE) = 99.43097824659425\n", 473 | "\u001b[1mMedian Absolute Percentage Error (MAPE) = 6.0%\u001b[0m\n" 474 | ] 475 | } 476 | ], 477 | "source": [ 478 | "\n", 479 | "\n", 480 | "# Taking a copy of sorted data so that \n", 481 | "# it can be used for other predictions\n", 482 | "sortedData = pd.DataFrame(sp_sorted)\n", 483 | "\n", 484 | "# To do feature engineering - take mean of previous rows\n", 485 | "closePrices = pd.DataFrame(sortedData.Close)\n", 486 | "\n", 487 | "# Need to shift by 1 coz otherwise it will add up present value also\n", 488 | "# Adding present value to the mean is same as giving the \n", 489 | "# predicted value (outcome)along with the training data.\n", 490 | "# This will hurt prediction model\n", 491 | "shifted = closePrices.shift(1)\n", 492 | "\n", 493 | "# The average price for the past 365 days.\n", 494 | "# The standard deviation of the price over the past 365 days\n", 495 | "window = shifted.rolling(window=365)\n", 496 | "means_365 = window.mean()\n", 497 | "std_365 = window.std()\n", 498 | "sortedData['mean_365'] = means_365\n", 499 | "sortedData['std_365'] = std_365\n", 500 | "\n", 501 | "# The ratio between the average price \n", 502 | "# for the past 5 days, and the average \n", 503 | "# price for the past 365 days.\n", 504 | "window = shifted.rolling(window=5)\n", 505 | "means_5 = window.mean()\n", 506 | "sortedData['mean_5by365'] = means_5/ means_365\n", 507 | "\n", 508 | "# Some of the indicators use 365 days of historical data, and the dataset starts \n", 509 | "# on 1950-01-03. Thus, any rows that fall before 1951-01-03 don't have enough \n", 510 | "# historical data to compute all the indicators. \n", 511 | "sp_augmented = sortedData[sortedData[\"Date\"] > datetime(year=1951, month=1, day=2)]\n", 512 | "\n", 513 | "# Use the dropna method to remove any rows with NaN values. \n", 514 | "# Pass in the axis=0 argument to drop rows.\n", 515 | "sp_augmented = sp_augmented.dropna(axis = 0)\n", 516 | "\n", 517 | "print(\"\\n\\n*** Dataset After Augmented Values ***\")\n", 518 | "print(sp_augmented.head(5))\n", 519 | "\n", 520 | "# To split into train and test data to do linear regression\n", 521 | "x_train, y_train, x_test, y_test = trainTestSplit(sp_augmented, predictWeek = False)\n", 522 | "linearReg(x_train, y_train, x_test, y_test)" 523 | ] 524 | }, 525 | { 526 | "cell_type": "markdown", 527 | "metadata": {}, 528 | "source": [ 529 | "MAPE of 6.0% is a much better prediction result than the previous weekly prediction attempt." 530 | ] 531 | }, 532 | { 533 | "cell_type": "markdown", 534 | "metadata": {}, 535 | "source": [ 536 | "# Conclusion\n", 537 | "\n", 538 | "1) **In daily forecast, Actual and Predicted prices are almost linear. Hence the daily prediction model is working fine**, though the error can be further reduced with a better model such as randomforest or using feature engineering techniques such as previous volume, highest/ lowest price in the past year etc.\n", 539 | "\n", 540 | "2) For a financial company, another way to reframe this problem would be **to perceive the problem as a classification problem, instead of regression problem.** If we can predict, whether the price of a particular stock would go up or down, on next day or a period of time then such a system is very useful.\n", 541 | "\n", 542 | "3) There was a Kaggle competition on similar lines and all of the good solutions just predicted 0% change in price most of the times.\n", 543 | "\n", 544 | "# Potential Improvements\n", 545 | "\n", 546 | "a) Learn the domain more and engineer very domain specific features. \n", 547 | "\n", 548 | "b) Implement this paper for a Deep Learning based momentum trading strategy: Applying Deep Learning To Enhance Momentum Trading Strategies In Stocks by Lawrence Takeuchi & Yu-Ying (Albert) Lee (publicly available at http://cs229.stanford.edu)" 549 | ] 550 | } 551 | ], 552 | "metadata": { 553 | "kernelspec": { 554 | "display_name": "Python 3", 555 | "language": "python", 556 | "name": "python3" 557 | }, 558 | "language_info": { 559 | "codemirror_mode": { 560 | "name": "ipython", 561 | "version": 3 562 | }, 563 | "file_extension": ".py", 564 | "mimetype": "text/x-python", 565 | "name": "python", 566 | "nbconvert_exporter": "python", 567 | "pygments_lexer": "ipython3", 568 | "version": "3.6.4" 569 | } 570 | }, 571 | "nbformat": 4, 572 | "nbformat_minor": 2 573 | } 574 | -------------------------------------------------------------------------------- /images/ARIMA_Prediction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdroitAnandAI/Algo-Trading-Math-Models/0ecb9d9805ce46b0bb83ba0d3493ca6c969acb5b/images/ARIMA_Prediction.png -------------------------------------------------------------------------------- /images/ARIMA_Prediction_zoomed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdroitAnandAI/Algo-Trading-Math-Models/0ecb9d9805ce46b0bb83ba0d3493ca6c969acb5b/images/ARIMA_Prediction_zoomed.png -------------------------------------------------------------------------------- /images/Autocorr_snp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdroitAnandAI/Algo-Trading-Math-Models/0ecb9d9805ce46b0bb83ba0d3493ca6c969acb5b/images/Autocorr_snp.png -------------------------------------------------------------------------------- /images/LR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdroitAnandAI/Algo-Trading-Math-Models/0ecb9d9805ce46b0bb83ba0d3493ca6c969acb5b/images/LR.png -------------------------------------------------------------------------------- /images/autoCorrelation_tcs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdroitAnandAI/Algo-Trading-Math-Models/0ecb9d9805ce46b0bb83ba0d3493ca6c969acb5b/images/autoCorrelation_tcs.png -------------------------------------------------------------------------------- /images/cari2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdroitAnandAI/Algo-Trading-Math-Models/0ecb9d9805ce46b0bb83ba0d3493ca6c969acb5b/images/cari2.jpg -------------------------------------------------------------------------------- /images/caricature.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdroitAnandAI/Algo-Trading-Math-Models/0ecb9d9805ce46b0bb83ba0d3493ca6c969acb5b/images/caricature.jpeg -------------------------------------------------------------------------------- /images/fourier_filtering.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdroitAnandAI/Algo-Trading-Math-Models/0ecb9d9805ce46b0bb83ba0d3493ca6c969acb5b/images/fourier_filtering.png -------------------------------------------------------------------------------- /images/freq_decompose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdroitAnandAI/Algo-Trading-Math-Models/0ecb9d9805ce46b0bb83ba0d3493ca6c969acb5b/images/freq_decompose.png -------------------------------------------------------------------------------- /images/freq_decomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdroitAnandAI/Algo-Trading-Math-Models/0ecb9d9805ce46b0bb83ba0d3493ca6c969acb5b/images/freq_decomposed.png -------------------------------------------------------------------------------- /images/freq_decomposed_sum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdroitAnandAI/Algo-Trading-Math-Models/0ecb9d9805ce46b0bb83ba0d3493ca6c969acb5b/images/freq_decomposed_sum.png -------------------------------------------------------------------------------- /images/lstm_fourier_filtered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdroitAnandAI/Algo-Trading-Math-Models/0ecb9d9805ce46b0bb83ba0d3493ca6c969acb5b/images/lstm_fourier_filtered.png -------------------------------------------------------------------------------- /images/prediction_snp_lstm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdroitAnandAI/Algo-Trading-Math-Models/0ecb9d9805ce46b0bb83ba0d3493ca6c969acb5b/images/prediction_snp_lstm.png -------------------------------------------------------------------------------- /images/psd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdroitAnandAI/Algo-Trading-Math-Models/0ecb9d9805ce46b0bb83ba0d3493ca6c969acb5b/images/psd.png -------------------------------------------------------------------------------- /tcs_stock.csv: -------------------------------------------------------------------------------- 1 | Date,Symbol,Series,Prev Close,Open,High,Low,Last,Close,VWAP,Volume,Turnover,Trades,Deliverable Volume,%Deliverble 2 | 2015-01-01,TCS,EQ,2558.25,2567.0,2567.0,2541.0,2550.0,2545.55,2548.51,183415,46743445615000.0,8002,52870,0.2883 3 | 2015-01-02,TCS,EQ,2545.55,2551.0,2590.95,2550.6,2588.4,2579.45,2568.19,462870,118874010950000.0,27585,309350,0.6683 4 | 2015-01-05,TCS,EQ,2579.45,2581.0,2599.9,2524.65,2538.1,2540.25,2563.94,877121,224888554094999.97,43234,456728,0.5207 5 | 2015-01-06,TCS,EQ,2540.25,2529.1,2529.1,2440.0,2450.05,2446.6,2466.9,1211892,298961535645000.0,84503,714306,0.5894 6 | 2015-01-07,TCS,EQ,2446.6,2470.0,2479.15,2407.45,2426.9,2417.7,2433.96,1318166,320836246205000.0,101741,886368,0.6724 7 | 2015-01-08,TCS,EQ,2417.7,2442.4,2449.0,2420.55,2446.0,2443.8,2434.81,782704,190573934495000.0,47699,450768,0.5759000000000001 8 | 2015-01-09,TCS,EQ,2443.8,2455.0,2519.9,2450.0,2510.0,2512.3,2490.01,1598821,398108220610000.0,81743,865777,0.5415 9 | 2015-01-12,TCS,EQ,2512.3,2517.0,2528.0,2480.25,2527.95,2509.7,2497.82,798003,199326599700000.0,58810,451228,0.5654 10 | 2015-01-13,TCS,EQ,2509.7,2520.0,2530.4,2480.1,2498.0,2497.9,2509.4,734216,184244037280000.0,49993,386133,0.5259 11 | 2015-01-14,TCS,EQ,2497.9,2516.0,2531.8,2500.5,2525.05,2521.95,2517.54,893548,224954619585000.0,69237,498193,0.5575 12 | 2015-01-15,TCS,EQ,2521.95,2533.0,2581.75,2523.25,2542.05,2539.1,2550.97,2504960,639007618510000.0,96363,1598846,0.6383 13 | 2015-01-16,TCS,EQ,2539.1,2543.7,2545.0,2484.3,2526.0,2532.15,2511.39,2646915,664744442100000.0,127847,1372200,0.5184000000000001 14 | 2015-01-19,TCS,EQ,2532.15,2536.0,2551.0,2503.0,2509.0,2511.0,2516.06,567537,142795431225000.0,38860,309156,0.5447 15 | 2015-01-20,TCS,EQ,2511.0,2520.0,2530.0,2483.25,2498.0,2500.45,2498.94,1029283,257212122080000.03,58066,733487,0.7126 16 | 2015-01-21,TCS,EQ,2500.45,2522.0,2522.0,2488.25,2518.0,2513.8,2507.75,1155240,289705457555000.0,75976,771316,0.6677 17 | 2015-01-22,TCS,EQ,2513.8,2516.5,2521.25,2495.5,2511.0,2513.55,2509.31,1056607,265135460265000.0,74837,742399,0.7026000000000001 18 | 2015-01-23,TCS,EQ,2513.55,2514.0,2532.05,2496.1,2504.1,2503.6,2507.34,1575190,394952968250000.0,94619,1205911,0.7656000000000001 19 | 2015-01-27,TCS,EQ,2503.6,2512.35,2515.0,2489.55,2504.2,2502.05,2502.26,1369368,342651028760000.0,71406,1079233,0.7881 20 | 2015-01-28,TCS,EQ,2502.05,2503.0,2544.9,2502.9,2533.4,2539.6,2529.32,1560990,394824002920000.0,101994,1142166,0.7317 21 | 2015-01-29,TCS,EQ,2539.6,2538.0,2568.7,2512.9,2560.7,2544.65,2531.88,1867196,472751989170000.0,67497,1547590,0.8288 22 | 2015-01-30,TCS,EQ,2544.65,2560.7,2575.0,2470.0,2484.0,2482.05,2494.94,2908701,725702544890000.0,119200,2355497,0.8098000000000001 23 | 2015-02-02,TCS,EQ,2482.05,2482.0,2521.45,2462.05,2516.0,2514.2,2500.6,1590901,397821062750000.0,89485,1171718,0.7365 24 | 2015-02-03,TCS,EQ,2514.2,2511.65,2565.0,2507.1,2552.25,2558.25,2536.23,1172527,297379337690000.0,75106,701449,0.5982000000000001 25 | 2015-02-04,TCS,EQ,2558.25,2568.0,2571.7,2502.1,2514.95,2514.3,2523.08,1122709,283268662695000.0,60615,807091,0.7189 26 | 2015-02-05,TCS,EQ,2514.3,2520.0,2591.7,2519.0,2553.0,2552.4,2558.13,2265084,579438634615000.0,77935,1638106,0.7232 27 | 2015-02-06,TCS,EQ,2552.4,2553.0,2594.8,2550.85,2576.1,2575.75,2578.4,1068208,275426472850000.0,82449,582019,0.5449 28 | 2015-02-09,TCS,EQ,2575.75,2561.5,2569.1,2500.0,2512.0,2512.9,2531.83,1038216,262858506450000.0,72967,695542,0.6698999999999999 29 | 2015-02-10,TCS,EQ,2512.9,2510.0,2526.25,2433.0,2445.5,2441.15,2473.88,1899527,469920109095000.0,114773,1383973,0.7286 30 | 2015-02-11,TCS,EQ,2441.15,2455.05,2487.25,2447.25,2460.0,2459.9,2468.94,1468761,362628302270000.0,115345,1143243,0.7784000000000001 31 | 2015-02-12,TCS,EQ,2459.9,2479.8,2479.8,2447.0,2469.0,2462.15,2462.56,1553990,382678652105000.0,113845,1269759,0.8170999999999999 32 | 2015-02-13,TCS,EQ,2462.15,2470.0,2547.75,2460.25,2540.0,2538.75,2508.49,2079163,521556316975000.0,132132,1521051,0.7316 33 | 2015-02-16,TCS,EQ,2538.75,2560.0,2595.0,2555.0,2581.7,2584.8,2576.98,1182196,304649182215000.0,82111,831991,0.7038 34 | 2015-02-18,TCS,EQ,2584.8,2585.05,2643.0,2565.25,2640.0,2635.65,2605.04,1330007,346471599800000.0,70475,792678,0.596 35 | 2015-02-19,TCS,EQ,2635.65,2636.0,2687.3,2635.0,2674.55,2681.05,2660.47,1309001,348256421615000.0,80730,831048,0.6349 36 | 2015-02-20,TCS,EQ,2681.05,2698.8,2698.8,2642.25,2664.65,2675.55,2672.56,900794,240742310540000.0,43830,537225,0.5964 37 | 2015-02-23,TCS,EQ,2675.55,2671.0,2722.0,2671.0,2700.0,2696.65,2701.93,807446,218165997730000.03,47641,362669,0.44920000000000004 38 | 2015-02-24,TCS,EQ,2696.65,2694.0,2730.0,2679.0,2699.35,2704.75,2709.36,1099961,298018637415000.0,46480,685771,0.6235 39 | 2015-02-25,TCS,EQ,2704.75,2710.0,2722.0,2667.85,2669.7,2672.2,2694.16,883997,238162963394999.97,43048,546944,0.6187 40 | 2015-02-26,TCS,EQ,2672.2,2679.0,2692.75,2625.35,2649.5,2656.45,2655.31,995997,264468013900000.0,56829,565254,0.5675 41 | 2015-02-27,TCS,EQ,2656.45,2659.45,2675.75,2616.3,2668.0,2662.35,2647.84,1438688,380942113730000.0,74413,1003079,0.6972 42 | 2015-02-28,TCS,EQ,2662.35,2677.0,2687.1,2643.0,2679.55,2675.25,2668.12,589498,157284897685000.0,30189,271598,0.4607 43 | 2015-03-02,TCS,EQ,2675.25,2679.7,2708.95,2652.55,2673.95,2669.4,2664.97,1088019,289953630685000.0,64343,770649,0.7083 44 | 2015-03-03,TCS,EQ,2669.4,2682.0,2790.0,2676.15,2785.1,2776.0,2748.34,1712154,470557654689999.94,74770,1068918,0.6243 45 | 2015-03-04,TCS,EQ,2776.0,2788.0,2812.1,2715.65,2740.0,2746.0,2763.04,1931497,533680616539999.94,71983,1405748,0.7278 46 | 2015-03-05,TCS,EQ,2746.0,2750.0,2770.7,2681.05,2690.1,2696.45,2713.59,1086757,294901337805000.0,45126,677138,0.6231 47 | 2015-03-09,TCS,EQ,2696.45,2640.0,2679.8,2610.0,2649.0,2646.8,2647.72,1441587,381692236075000.0,64488,864858,0.5999 48 | 2015-03-10,TCS,EQ,2646.8,2648.9,2678.25,2595.25,2638.85,2642.7,2632.78,1518526,399794140460000.0,89030,910422,0.5995 49 | 2015-03-11,TCS,EQ,2642.7,2642.0,2659.95,2597.8,2605.15,2606.55,2622.9,1120100,293790867555000.0,52147,616835,0.5507 50 | 2015-03-12,TCS,EQ,2606.55,2623.9,2624.9,2590.1,2618.2,2619.05,2606.76,913818,238210017760000.0,62767,582972,0.638 51 | 2015-03-13,TCS,EQ,2619.05,2638.0,2639.95,2575.0,2585.0,2582.35,2594.75,793419,205872125680000.0,67541,481480,0.6068 52 | 2015-03-16,TCS,EQ,2582.35,2585.2,2610.0,2552.0,2560.6,2562.3,2579.88,778148,200753225295000.0,44209,484279,0.6223 53 | 2015-03-17,TCS,EQ,2562.3,2582.5,2606.7,2557.75,2583.65,2583.7,2582.66,633659,163652693925000.0,56639,368300,0.5811999999999999 54 | 2015-03-18,TCS,EQ,2583.7,2590.95,2599.45,2551.7,2556.0,2559.35,2561.86,627585,160778503890000.0,38991,364010,0.58 55 | 2015-03-19,TCS,EQ,2559.35,2576.0,2605.85,2568.1,2602.0,2596.25,2596.45,1224482,317930347245000.0,71701,888461,0.7256 56 | 2015-03-20,TCS,EQ,2596.25,2596.0,2618.0,2578.85,2610.85,2610.95,2608.5,981954,256142270235000.0,74415,714293,0.7273999999999999 57 | 2015-03-23,TCS,EQ,2610.95,2616.0,2631.0,2606.0,2616.0,2617.15,2616.73,783304,204969532200000.0,59518,575211,0.7343000000000001 58 | 2015-03-24,TCS,EQ,2617.15,2630.0,2637.0,2582.1,2600.0,2591.3,2617.59,1197439,313440933310000.0,58016,848633,0.7087000000000001 59 | 2015-03-25,TCS,EQ,2591.3,2591.4,2614.0,2545.2,2569.85,2573.75,2575.29,1112429,286482690440000.0,75792,825133,0.7417 60 | 2015-03-26,TCS,EQ,2573.75,2553.3,2586.7,2501.0,2515.0,2513.1,2535.65,1545821,391966545665000.0,82115,1110655,0.7184999999999999 61 | 2015-03-27,TCS,EQ,2513.1,2531.0,2571.9,2504.1,2519.9,2514.8,2536.73,1375888,349025716790000.0,76990,947653,0.6888 62 | 2015-03-30,TCS,EQ,2514.8,2525.0,2569.9,2520.0,2554.2,2564.15,2546.18,669503,170467464790000.0,64141,461568,0.6894 63 | 2015-03-31,TCS,EQ,2564.15,2569.45,2569.45,2521.0,2560.0,2553.95,2548.15,1213514,309221533160000.0,88908,862309,0.7106 64 | 2015-04-01,TCS,EQ,2553.95,2558.0,2563.6,2522.25,2544.05,2542.65,2538.81,1037879,263498131744999.97,54078,784911,0.7563 65 | 2015-04-06,TCS,EQ,2542.65,2558.0,2562.9,2500.1,2548.3,2547.3,2531.53,784271,198540479680000.0,45408,485665,0.6193 66 | 2015-04-07,TCS,EQ,2547.3,2562.45,2599.0,2544.0,2588.95,2585.0,2571.5,943461,242611136905000.03,77106,562689,0.5964 67 | 2015-04-08,TCS,EQ,2585.0,2594.0,2656.5,2590.85,2646.0,2641.4,2632.0,826067,217420827940000.0,61358,496296,0.6008 68 | 2015-04-09,TCS,EQ,2641.4,2659.0,2687.45,2635.15,2662.6,2664.55,2658.35,1272225,338201771475000.0,62583,902143,0.7091 69 | 2015-04-10,TCS,EQ,2664.55,2648.5,2670.8,2628.0,2651.1,2653.75,2648.39,907772,240413514280000.03,63471,625228,0.6888 70 | 2015-04-13,TCS,EQ,2653.75,2664.0,2665.0,2628.0,2653.85,2655.5,2650.09,654321,173401144210000.0,54293,451036,0.6893000000000001 71 | 2015-04-15,TCS,EQ,2655.5,2654.7,2713.9,2609.4,2618.95,2627.75,2646.26,1456967,385551302470000.0,74856,927588,0.6367 72 | 2015-04-16,TCS,EQ,2627.75,2626.95,2627.0,2571.35,2574.0,2582.8,2589.79,1608785,416641607920000.0,71768,1002627,0.6232 73 | 2015-04-17,TCS,EQ,2582.8,2557.1,2560.0,2470.0,2473.9,2474.85,2495.54,4834371,1206434982295000.0,167402,2989132,0.6183 74 | 2015-04-20,TCS,EQ,2474.85,2480.05,2483.9,2424.85,2426.0,2428.8,2439.46,1445361,352590267395000.0,84591,916671,0.6342 75 | 2015-04-21,TCS,EQ,2428.8,2428.8,2452.0,2401.0,2427.05,2427.05,2430.81,1273016,309446530515000.0,83843,816116,0.6411 76 | 2015-04-22,TCS,EQ,2427.05,2431.5,2473.0,2407.55,2470.6,2445.1,2428.26,2093406,508334211700000.0,101821,1643446,0.7851 77 | 2015-04-23,TCS,EQ,2445.1,2472.0,2479.8,2431.7,2455.0,2457.25,2460.81,2171495,534363755360000.06,80541,1743765,0.8029999999999999 78 | 2015-04-24,TCS,EQ,2457.25,2455.3,2514.0,2447.55,2509.6,2493.05,2488.25,1812579,451014638785000.06,130453,1306431,0.7208 79 | 2015-04-27,TCS,EQ,2493.05,2499.5,2520.0,2486.0,2500.0,2500.2,2501.44,1366526,341828002790000.0,81966,986807,0.7221 80 | 2015-04-28,TCS,EQ,2500.2,2510.0,2510.0,2455.1,2493.0,2495.0,2477.16,1544149,382510591630000.0,128979,1197833,0.7757 81 | 2015-04-29,TCS,EQ,2495.0,2484.0,2495.0,2451.05,2481.0,2487.3,2472.31,1009810,249655948465000.0,100184,626278,0.6202000000000001 82 | 2015-04-30,TCS,EQ,2487.3,2480.0,2490.0,2427.1,2476.0,2463.7,2461.06,1869027,459977844870000.0,101021,1353129,0.7240000000000001 83 | 2015-05-04,TCS,EQ,2463.7,2491.0,2504.8,2457.2,2482.25,2481.55,2476.14,945315,234073697215000.0,83359,655734,0.6937000000000001 84 | 2015-05-05,TCS,EQ,2481.55,2501.0,2536.45,2500.0,2519.0,2517.85,2518.94,1627535,409966148545000.0,69702,1015019,0.6237 85 | 2015-05-06,TCS,EQ,2517.85,2515.0,2515.0,2455.8,2463.0,2463.05,2468.46,1697203,418947716170000.0,97392,1156742,0.6816 86 | 2015-05-07,TCS,EQ,2463.05,2464.9,2553.75,2453.7,2550.0,2545.25,2522.63,1602514,404255751035000.0,63417,1086092,0.6777 87 | 2015-05-08,TCS,EQ,2545.25,2560.0,2588.0,2516.3,2530.0,2527.25,2552.07,1501832,383278539450000.0,53709,1023782,0.6817000000000001 88 | 2015-05-11,TCS,EQ,2527.25,2535.0,2563.05,2525.0,2559.0,2556.0,2550.07,1286541,328076548915000.0,73023,931788,0.7243 89 | 2015-05-12,TCS,EQ,2556.0,2560.0,2565.0,2513.0,2523.95,2522.9,2524.91,1233693,311495784250000.0,71964,949366,0.7695000000000001 90 | 2015-05-13,TCS,EQ,2522.9,2547.0,2547.0,2480.45,2523.1,2515.4,2510.43,931887,233944172500000.0,53692,473256,0.5078 91 | 2015-05-14,TCS,EQ,2515.4,2520.0,2520.0,2485.0,2499.0,2499.25,2495.09,654525,163309628080000.0,40174,381895,0.5835 92 | 2015-05-15,TCS,EQ,2499.25,2515.0,2532.4,2501.0,2511.0,2511.15,2512.17,730727,183571305660000.0,32934,515976,0.7061000000000001 93 | 2015-05-18,TCS,EQ,2511.15,2514.1,2525.25,2497.1,2515.15,2520.4,2505.41,2253876,564689060255000.0,50845,2006146,0.8901000000000001 94 | 2015-05-19,TCS,EQ,2520.4,2519.4,2530.0,2496.75,2512.0,2512.7,2511.97,978861,245887370644999.97,37527,686093,0.7009000000000001 95 | 2015-05-20,TCS,EQ,2512.7,2520.0,2569.9,2516.9,2557.0,2557.05,2550.08,948907,241979005775000.0,41995,571725,0.6025 96 | 2015-05-21,TCS,EQ,2557.05,2557.0,2580.0,2548.15,2551.9,2555.5,2565.83,789789,202646360790000.0,40459,563782,0.7138 97 | 2015-05-22,TCS,EQ,2555.5,2550.0,2628.75,2539.25,2621.8,2617.9,2594.64,1345816,349190591545000.0,52428,992008,0.7371 98 | 2015-05-25,TCS,EQ,2617.9,2620.0,2636.9,2585.7,2600.05,2601.0,2606.03,491489,128083358180000.0,30375,263444,0.536 99 | 2015-05-26,TCS,EQ,2601.0,2605.0,2623.25,2588.9,2614.95,2608.85,2610.17,980870,256024103810000.0,34315,705361,0.7191 100 | 2015-05-27,TCS,EQ,2608.85,2608.0,2633.15,2592.0,2610.0,2615.25,2615.75,810345,211966247105000.0,50501,600904,0.7415 101 | 2015-05-28,TCS,EQ,2615.25,2603.9,2623.0,2582.25,2615.9,2609.5,2606.6,1381804,360180969170000.0,52267,1070716,0.7748999999999999 102 | 2015-05-29,TCS,EQ,2609.5,2617.0,2648.6,2597.25,2621.55,2610.3,2614.52,2211766,578269551475000.0,83932,1686200,0.7624 103 | 2015-06-01,TCS,EQ,2610.3,2609.45,2647.1,2608.35,2615.2,2617.75,2622.43,441132,115683989800000.0,35794,251151,0.5693 104 | 2015-06-02,TCS,EQ,2617.75,2616.0,2630.0,2590.5,2605.0,2599.9,2605.54,1967910,512747187110000.06,54815,1605076,0.8156 105 | 2015-06-03,TCS,EQ,2599.9,2604.0,2625.6,2590.5,2612.0,2610.9,2611.6,902342,235655199660000.0,41440,635538,0.7043 106 | 2015-06-04,TCS,EQ,2610.9,2617.1,2622.8,2588.5,2600.2,2605.65,2606.81,2065734,538497445995000.0,44653,1816025,0.8791 107 | 2015-06-05,TCS,EQ,2605.65,2592.0,2609.0,2570.0,2577.5,2575.85,2583.52,1154267,298206645760000.0,52168,848596,0.7352 108 | 2015-06-08,TCS,EQ,2575.85,2590.0,2590.0,2561.65,2580.0,2577.45,2576.28,785160,202278895920000.0,62168,543370,0.6920999999999999 109 | 2015-06-09,TCS,EQ,2577.45,2585.0,2590.0,2551.0,2561.95,2561.65,2574.52,1289457,331973563270000.0,63744,1099487,0.8527 110 | 2015-06-10,TCS,EQ,2561.65,2566.0,2610.0,2563.8,2600.0,2600.75,2586.57,1381675,357380330830000.0,42817,1122720,0.8126000000000001 111 | 2015-06-11,TCS,EQ,2600.75,2605.5,2613.0,2556.75,2564.25,2571.3,2585.02,923668,238769812969999.97,37803,658949,0.7134 112 | 2015-06-12,TCS,EQ,2571.3,2571.9,2588.95,2476.8,2520.0,2505.8,2526.7,1285728,324865219385000.0,80056,700457,0.5448 113 | 2015-06-15,TCS,EQ,2505.8,2505.3,2520.45,2481.0,2509.5,2504.8,2503.06,1262588,316033534025000.0,57691,1008687,0.7989 114 | 2015-06-16,TCS,EQ,2504.8,2500.0,2519.3,2494.45,2508.0,2512.0,2510.7,633698,159102618710000.0,41162,481883,0.7604000000000001 115 | 2015-06-17,TCS,EQ,2512.0,2521.0,2529.15,2501.8,2512.0,2513.8,2516.05,987860,248550405310000.0,88734,698348,0.7069 116 | 2015-06-18,TCS,EQ,2513.8,2515.0,2546.3,2508.0,2522.0,2530.05,2533.09,1082523,274212353610000.0,83019,764949,0.7066 117 | 2015-06-19,TCS,EQ,2530.05,2535.0,2555.0,2527.1,2550.0,2549.55,2546.79,999805,254629633765000.0,50051,769320,0.7695000000000001 118 | 2015-06-22,TCS,EQ,2549.55,2547.0,2600.0,2547.0,2598.3,2591.5,2587.1,551001,142549477735000.0,43692,317646,0.5765 119 | 2015-06-23,TCS,EQ,2591.5,2600.0,2608.0,2567.2,2585.9,2574.6,2582.03,449159,115974000365000.02,30619,280403,0.6243 120 | 2015-06-24,TCS,EQ,2574.6,2580.0,2587.9,2558.85,2568.7,2570.3,2573.22,585123,150565166150000.0,39464,331254,0.5661 121 | 2015-06-25,TCS,EQ,2570.3,2562.0,2573.0,2544.15,2552.0,2550.0,2553.8,965496,246568219255000.03,36543,728243,0.7543000000000001 122 | 2015-06-26,TCS,EQ,2550.0,2550.2,2596.35,2550.2,2590.1,2592.8,2579.82,645051,166411238155000.0,34240,356380,0.5525 123 | 2015-06-29,TCS,EQ,2592.8,2572.0,2604.0,2543.4,2599.0,2592.9,2569.67,686378,176376823470000.0,35008,263984,0.3846 124 | 2015-06-30,TCS,EQ,2592.9,2585.0,2588.75,2540.0,2555.0,2550.95,2557.03,774976,198163432605000.0,34960,468575,0.6046 125 | 2015-07-01,TCS,EQ,2550.95,2563.9,2608.0,2556.75,2600.0,2593.1,2584.41,639854,165364373950000.0,50229,405105,0.6331 126 | 2015-07-02,TCS,EQ,2593.1,2600.0,2602.95,2571.05,2582.0,2577.75,2583.81,722940,186793958395000.0,63066,441786,0.6111 127 | 2015-07-03,TCS,EQ,2577.75,2573.05,2610.0,2570.0,2603.1,2603.9,2595.18,481735,125019006759999.98,34612,263852,0.5477000000000001 128 | 2015-07-06,TCS,EQ,2603.9,2580.3,2645.0,2580.3,2629.7,2633.3,2613.46,591169,154499884340000.0,31304,280866,0.47509999999999997 129 | 2015-07-07,TCS,EQ,2633.3,2632.75,2646.9,2603.0,2623.9,2616.25,2627.79,821418,215851041305000.03,51719,531468,0.647 130 | 2015-07-08,TCS,EQ,2616.25,2597.95,2621.7,2580.5,2591.7,2595.1,2596.66,1333925,346374532860000.0,85552,956051,0.7167 131 | 2015-07-09,TCS,EQ,2595.1,2595.0,2598.25,2506.65,2529.35,2522.5,2540.37,1967061,499706943689999.94,142048,1156795,0.5881000000000001 132 | 2015-07-10,TCS,EQ,2522.5,2559.0,2559.0,2455.0,2467.0,2474.35,2489.45,4131827,1028599040490000.0,211247,2279427,0.5517000000000001 133 | 2015-07-13,TCS,EQ,2474.35,2475.4,2518.6,2475.4,2506.1,2509.55,2502.25,1140154,285294609545000.0,53024,672149,0.5895 134 | 2015-07-14,TCS,EQ,2509.55,2511.0,2515.0,2490.0,2498.85,2499.5,2499.62,851637,212876735585000.0,49611,583671,0.6854000000000001 135 | 2015-07-15,TCS,EQ,2499.5,2501.0,2549.95,2500.0,2548.0,2545.75,2534.53,1001830,253916925965000.0,76369,665637,0.6644 136 | 2015-07-16,TCS,EQ,2545.75,2543.7,2558.85,2526.6,2534.9,2540.2,2543.54,728304,185246930105000.0,58974,449458,0.6171 137 | 2015-07-17,TCS,EQ,2540.2,2546.8,2570.1,2543.3,2563.25,2564.4,2558.02,535263,136921246255000.0,39534,299824,0.5601 138 | 2015-07-20,TCS,EQ,2564.4,2564.0,2583.9,2551.9,2579.95,2579.15,2571.54,426893,109777396755000.0,38037,243186,0.5697 139 | 2015-07-21,TCS,EQ,2579.15,2576.0,2600.35,2555.1,2561.7,2561.4,2574.93,637250,164087481180000.0,52304,399441,0.6268 140 | 2015-07-22,TCS,EQ,2561.4,2561.0,2569.0,2521.05,2530.9,2528.05,2532.4,660314,167218024840000.0,44395,450257,0.6819 141 | 2015-07-23,TCS,EQ,2528.05,2517.5,2537.85,2483.0,2492.05,2488.6,2505.27,748390,187491648540000.0,34659,491798,0.6570999999999999 142 | 2015-07-24,TCS,EQ,2488.6,2497.5,2516.5,2492.1,2507.1,2505.15,2506.09,787486,197350844460000.0,38528,512154,0.6504000000000001 143 | 2015-07-27,TCS,EQ,2505.15,2488.0,2505.0,2481.15,2501.15,2497.05,2496.91,1001869,250157842365000.0,65507,798854,0.7974 144 | 2015-07-28,TCS,EQ,2497.05,2499.5,2519.0,2492.15,2509.7,2502.05,2509.48,945594,237294797575000.0,48484,759857,0.8036 145 | 2015-07-29,TCS,EQ,2502.05,2511.0,2515.05,2483.5,2515.0,2506.75,2501.68,1206659,301867154530000.0,85826,966402,0.8009000000000001 146 | 2015-07-30,TCS,EQ,2506.75,2516.05,2516.8,2472.8,2472.8,2480.65,2490.3,1385287,344978285045000.0,77684,1230247,0.8881 147 | 2015-07-31,TCS,EQ,2480.65,2489.9,2519.0,2487.0,2511.45,2510.75,2502.23,981888,245690701980000.03,67496,675985,0.6885 148 | 2015-08-03,TCS,EQ,2510.75,2503.4,2525.0,2500.9,2508.0,2509.6,2514.14,589662,148249201475000.0,50976,404877,0.6866 149 | 2015-08-04,TCS,EQ,2509.6,2510.4,2523.0,2486.0,2510.0,2508.9,2500.32,1171346,292873711380000.0,82052,973725,0.8312999999999999 150 | 2015-08-05,TCS,EQ,2508.9,2520.0,2550.0,2511.0,2544.55,2547.15,2539.25,494497,125565200155000.0,46758,339571,0.6867 151 | 2015-08-06,TCS,EQ,2547.15,2565.0,2583.0,2550.1,2569.3,2573.3,2566.25,1105683,283746097370000.0,67097,888664,0.8037000000000001 152 | 2015-08-07,TCS,EQ,2573.3,2573.0,2573.0,2547.0,2559.0,2552.05,2558.6,594253,152045796810000.0,51065,457333,0.7696 153 | 2015-08-10,TCS,EQ,2552.05,2572.0,2589.0,2556.6,2575.0,2572.1,2576.47,715591,184370154265000.0,45499,563414,0.7873000000000001 154 | 2015-08-11,TCS,EQ,2572.1,2578.0,2610.0,2542.1,2600.8,2604.2,2595.57,1100153,285552687690000.0,60746,777937,0.7071 155 | 2015-08-12,TCS,EQ,2604.2,2603.1,2691.4,2602.0,2670.0,2671.7,2658.48,1739892,462546014314999.94,116770,1317431,0.7572 156 | 2015-08-13,TCS,EQ,2671.7,2670.0,2684.0,2556.0,2638.35,2635.6,2652.19,703213,186505713810000.0,47820,460590,0.655 157 | 2015-08-14,TCS,EQ,2635.6,2638.0,2719.35,2637.1,2692.05,2703.2,2688.81,1146982,308401606740000.0,82195,766818,0.6686 158 | 2015-08-17,TCS,EQ,2703.2,2690.1,2696.8,2655.0,2685.9,2684.75,2673.6,386822,103420779720000.0,30502,206955,0.535 159 | 2015-08-18,TCS,EQ,2684.75,2706.9,2749.9,2690.0,2745.95,2740.9,2736.66,958463,262298463255000.03,100314,623865,0.6509 160 | 2015-08-19,TCS,EQ,2740.9,2750.0,2752.85,2721.9,2727.0,2733.6,2739.06,845035,231460037350000.0,90389,588336,0.6962 161 | 2015-08-20,TCS,EQ,2733.6,2745.0,2745.0,2672.0,2686.5,2686.85,2702.74,1174649,317477177120000.0,105196,842334,0.7171 162 | 2015-08-21,TCS,EQ,2686.85,2712.0,2729.9,2655.1,2671.0,2676.15,2684.3,1768040,474594336130000.0,113746,1315006,0.7438 163 | 2015-08-24,TCS,EQ,2676.15,2639.0,2645.0,2569.1,2586.0,2578.65,2599.95,2346172,609992831760000.0,98288,1766434,0.7529000000000001 164 | 2015-08-25,TCS,EQ,2578.65,2587.9,2622.0,2535.5,2564.8,2567.15,2574.64,1962900,505375128475000.0,90437,1340952,0.6831 165 | 2015-08-26,TCS,EQ,2567.15,2558.05,2639.0,2511.95,2579.8,2576.75,2591.93,1608079,416803329530000.0,92978,1139025,0.7083 166 | 2015-08-27,TCS,EQ,2576.75,2614.9,2614.9,2545.8,2567.0,2574.65,2572.91,2632399,677291640590000.0,126702,2065390,0.7846 167 | 2015-08-28,TCS,EQ,2574.65,2609.0,2609.0,2557.7,2563.1,2570.85,2581.92,1372076,354258511895000.0,102566,1063723,0.7753 168 | 2015-08-31,TCS,EQ,2570.85,2590.0,2590.0,2531.05,2575.0,2564.05,2566.03,1846022,473694451870000.0,109961,1434044,0.7768 169 | 2015-09-01,TCS,EQ,2564.05,2556.0,2611.2,2530.0,2533.2,2537.4,2574.5,1493801,384578953050000.0,96695,981661,0.6572 170 | 2015-09-02,TCS,EQ,2537.4,2559.7,2620.45,2548.0,2600.0,2591.8,2595.11,1882975,488652294545000.0,114103,1263275,0.6709 171 | 2015-09-03,TCS,EQ,2591.8,2596.1,2615.0,2576.25,2606.0,2605.6,2594.76,1132537,293865969020000.0,91703,745864,0.6586 172 | 2015-09-04,TCS,EQ,2605.6,2611.4,2614.9,2539.15,2544.0,2547.45,2568.96,1213198,311665198535000.0,124154,800848,0.6601 173 | 2015-09-07,TCS,EQ,2547.45,2553.0,2559.95,2532.7,2539.6,2539.75,2546.5,879592,223988315980000.03,73248,638480,0.7259000000000001 174 | 2015-09-08,TCS,EQ,2539.75,2545.0,2564.1,2523.5,2540.3,2540.3,2540.52,893873,227089993094999.97,64944,616912,0.6901999999999999 175 | 2015-09-09,TCS,EQ,2540.3,2562.95,2574.0,2544.0,2551.0,2549.75,2558.04,1022538,261569201425000.0,62654,625155,0.6114 176 | 2015-09-10,TCS,EQ,2549.75,2542.0,2578.5,2527.0,2550.0,2545.4,2553.83,1332909,340401963810000.0,96715,916263,0.6874 177 | 2015-09-11,TCS,EQ,2545.4,2546.5,2568.4,2540.6,2549.8,2552.0,2553.59,796336,203351663785000.0,60997,560414,0.7037000000000001 178 | 2015-09-14,TCS,EQ,2552.0,2565.0,2565.0,2543.0,2548.0,2551.65,2552.98,794659,202875015155000.0,57713,577291,0.7265 179 | 2015-09-15,TCS,EQ,2551.65,2551.65,2558.9,2536.0,2537.25,2547.6,2548.86,689950,175858396195000.0,64604,485074,0.7031000000000001 180 | 2015-09-16,TCS,EQ,2547.6,2555.0,2565.0,2541.05,2548.0,2550.35,2553.8,878408,224327605165000.0,69451,634884,0.7228 181 | 2015-09-18,TCS,EQ,2550.35,2565.0,2586.0,2539.0,2545.0,2551.25,2565.18,1227647,314914130585000.0,70579,870927,0.7094 182 | 2015-09-21,TCS,EQ,2551.25,2550.0,2557.1,2533.2,2555.65,2551.05,2545.78,554420,141142975740000.0,59635,370607,0.6685 183 | 2015-09-22,TCS,EQ,2551.05,2557.5,2572.4,2490.0,2522.55,2526.8,2545.14,1040623,264853628415000.0,72612,671655,0.6454000000000001 184 | 2015-09-23,TCS,EQ,2526.8,2534.3,2557.75,2512.6,2534.6,2532.65,2533.36,614176,155593159675000.0,37626,345011,0.5617 185 | 2015-09-24,TCS,EQ,2532.65,2535.5,2590.0,2529.9,2579.0,2580.4,2561.8,1177127,301556264485000.0,71506,824902,0.7008 186 | 2015-09-28,TCS,EQ,2580.4,2594.0,2619.0,2579.5,2600.0,2593.7,2603.35,1183406,308082083395000.0,77392,894029,0.7555 187 | 2015-09-29,TCS,EQ,2593.7,2583.35,2634.0,2569.85,2592.0,2588.25,2603.73,1662976,432994617064999.94,103754,1244496,0.7484000000000001 188 | 2015-09-30,TCS,EQ,2588.25,2643.7,2643.7,2570.95,2585.0,2588.05,2585.98,1684168,435522706805000.0,81073,1273762,0.7563 189 | 2015-10-01,TCS,EQ,2588.05,2599.0,2649.95,2592.2,2641.1,2644.6,2630.47,1417204,372791411480000.0,94874,1002629,0.7075 190 | 2015-10-05,TCS,EQ,2644.6,2652.7,2770.0,2652.7,2719.9,2711.65,2711.39,2403653,651724834320000.0,146358,1616394,0.6725 191 | 2015-10-06,TCS,EQ,2711.65,2725.0,2726.0,2684.0,2686.2,2700.0,2704.9,1989795,538218936520000.0,96553,1635016,0.8217 192 | 2015-10-07,TCS,EQ,2700.0,2693.95,2717.0,2646.95,2655.0,2653.95,2677.99,1032765,276573077340000.0,102318,683381,0.6617000000000001 193 | 2015-10-08,TCS,EQ,2653.95,2670.0,2678.35,2620.0,2631.9,2633.8,2642.62,1178775,311504944130000.0,102041,865714,0.7343999999999999 194 | 2015-10-09,TCS,EQ,2633.8,2650.5,2650.6,2608.0,2630.0,2629.65,2628.83,1124862,295707334525000.0,68120,837088,0.7442000000000001 195 | 2015-10-12,TCS,EQ,2629.65,2655.0,2660.35,2587.0,2597.7,2592.6,2612.17,1227956,320762545435000.0,84883,675044,0.5497 196 | 2015-10-13,TCS,EQ,2592.6,2602.8,2612.0,2567.6,2586.85,2598.55,2589.61,3089856,800153587760000.0,129714,1303446,0.4218 197 | 2015-10-14,TCS,EQ,2598.55,2548.0,2548.0,2480.0,2480.9,2483.7,2502.59,4168564,1043222048029999.9,175646,2297432,0.5511 198 | 2015-10-15,TCS,EQ,2483.7,2490.0,2503.5,2465.0,2468.8,2467.75,2478.15,1607855,398451186685000.0,107563,1101822,0.6853 199 | 2015-10-16,TCS,EQ,2467.75,2480.9,2492.0,2470.0,2472.0,2473.75,2477.86,1166914,289145171010000.0,68190,791055,0.6779000000000001 200 | 2015-10-19,TCS,EQ,2473.75,2490.0,2494.95,2455.85,2493.95,2488.75,2473.9,1565321,387244983110000.0,55224,1047364,0.6691 201 | 2015-10-20,TCS,EQ,2488.75,2496.25,2530.0,2495.6,2523.2,2526.75,2520.95,1347542,339708985545000.0,60572,942992,0.6998000000000001 202 | 2015-10-21,TCS,EQ,2526.75,2535.0,2542.0,2522.25,2526.0,2530.0,2532.48,964844,244344915855000.03,80004,691629,0.7168000000000001 203 | 2015-10-23,TCS,EQ,2530.0,2548.0,2548.0,2527.3,2536.95,2537.15,2534.65,1167699,295971346590000.0,39962,862305,0.7384999999999999 204 | 2015-10-26,TCS,EQ,2537.15,2549.0,2549.0,2515.1,2540.0,2536.55,2530.16,707315,178962175530000.0,58521,469883,0.6643000000000001 205 | 2015-10-27,TCS,EQ,2536.55,2530.05,2544.9,2520.35,2528.9,2531.1,2531.42,765210,193706744275000.0,47064,541265,0.7073 206 | 2015-10-28,TCS,EQ,2531.1,2510.05,2533.55,2510.05,2528.0,2529.1,2524.11,627671,158431178780000.0,43535,444506,0.7081999999999999 207 | 2015-10-29,TCS,EQ,2529.1,2533.55,2535.4,2490.05,2496.0,2495.35,2500.06,1565158,391298645560000.0,61541,1065888,0.6809999999999999 208 | 2015-10-30,TCS,EQ,2495.35,2500.0,2511.9,2485.0,2500.0,2495.2,2495.93,758348,189278696745000.0,41071,519557,0.6851 209 | 2015-11-02,TCS,EQ,2495.2,2500.0,2522.8,2487.55,2518.0,2517.35,2507.96,659647,165436876290000.0,48056,480522,0.7284999999999999 210 | 2015-11-03,TCS,EQ,2517.35,2528.0,2547.8,2518.5,2538.85,2543.45,2536.88,682453,173130298455000.0,39895,502388,0.7362000000000001 211 | 2015-11-04,TCS,EQ,2543.45,2545.0,2547.2,2520.0,2526.75,2533.8,2532.27,495717,125528959109999.98,41282,284406,0.5737 212 | 2015-11-05,TCS,EQ,2533.8,2530.8,2534.95,2480.0,2485.0,2482.65,2496.94,798049,199267674145000.0,38722,556372,0.6972 213 | 2015-11-06,TCS,EQ,2482.65,2492.0,2518.25,2483.45,2505.2,2505.75,2507.54,454012,113845260605000.0,26028,298424,0.6573000000000001 214 | 2015-11-09,TCS,EQ,2505.75,2495.0,2502.75,2468.6,2474.0,2471.35,2477.88,1010778,250458950850000.0,42927,819330,0.8106 215 | 2015-11-10,TCS,EQ,2471.35,2472.95,2477.0,2450.0,2455.0,2458.15,2463.3,680960,167740779595000.0,53282,479205,0.7037000000000001 216 | 2015-11-11,TCS,EQ,2458.15,2475.0,2475.0,2450.0,2472.0,2468.8,2467.45,67582,16675497755000.002,5197,34003,0.5031 217 | 2015-11-13,TCS,EQ,2468.8,2438.05,2438.05,2386.55,2396.0,2397.4,2405.31,1371616,329915530345000.0,77174,958618,0.6989 218 | 2015-11-16,TCS,EQ,2397.4,2390.0,2390.0,2356.0,2376.0,2374.6,2371.62,1021764,242323759710000.0,67518,701532,0.6866 219 | 2015-11-17,TCS,EQ,2374.6,2380.5,2398.45,2375.0,2390.0,2390.55,2385.85,992514,236798902785000.0,58593,755518,0.7612000000000001 220 | 2015-11-18,TCS,EQ,2390.55,2388.9,2388.9,2346.0,2349.65,2351.45,2358.29,760176,179271701600000.0,43678,506662,0.6665000000000001 221 | 2015-11-19,TCS,EQ,2351.45,2365.35,2381.6,2352.0,2367.0,2362.55,2366.14,933453,220868074955000.03,55764,632570,0.6777 222 | 2015-11-20,TCS,EQ,2362.55,2366.5,2423.55,2361.95,2394.5,2398.35,2403.22,1006063,241779041840000.0,60130,575994,0.5725 223 | 2015-11-23,TCS,EQ,2398.35,2405.3,2413.4,2382.25,2389.3,2391.05,2397.62,544041,130440539184999.98,42359,351815,0.6467 224 | 2015-11-24,TCS,EQ,2391.05,2380.05,2392.45,2365.5,2366.0,2367.95,2378.62,499320,118769459609999.98,35776,342427,0.6858 225 | 2015-11-26,TCS,EQ,2367.95,2377.9,2382.4,2337.85,2346.0,2345.55,2355.52,1457646,343350889610000.0,77452,969589,0.6652 226 | 2015-11-27,TCS,EQ,2345.55,2348.0,2359.45,2332.5,2354.95,2353.35,2348.7,868603,204008616375000.0,62719,518858,0.5972999999999999 227 | 2015-11-30,TCS,EQ,2353.35,2365.0,2391.25,2350.15,2373.55,2364.7,2365.21,2050024,484874478220000.0,85439,1102521,0.5378000000000001 228 | 2015-12-01,TCS,EQ,2364.7,2362.9,2378.05,2357.05,2359.75,2361.9,2363.85,860997,203526711000000.0,51511,672976,0.7816 229 | 2015-12-02,TCS,EQ,2361.9,2378.0,2378.1,2346.5,2367.0,2365.2,2362.86,820148,193789603975000.0,38694,580713,0.7081000000000001 230 | 2015-12-03,TCS,EQ,2365.2,2360.0,2373.0,2347.0,2350.0,2350.75,2356.59,1141679,269046759875000.0,41715,765969,0.6709 231 | 2015-12-04,TCS,EQ,2350.75,2340.0,2347.3,2321.1,2330.0,2328.4,2330.08,623046,145174734845000.0,32999,426970,0.6853 232 | 2015-12-07,TCS,EQ,2328.4,2332.2,2343.9,2315.25,2321.0,2319.8,2322.27,691302,160539041210000.0,52150,487587,0.7053 233 | 2015-12-08,TCS,EQ,2319.8,2319.4,2349.0,2317.3,2326.25,2329.0,2332.95,569982,132973919555000.0,47957,336913,0.5911 234 | 2015-12-09,TCS,EQ,2329.0,2337.9,2372.8,2320.0,2370.0,2367.65,2361.23,2641403,623695383025000.0,59592,1365071,0.5168 235 | 2015-12-10,TCS,EQ,2367.65,2369.0,2391.2,2352.0,2380.95,2384.55,2374.82,861994,204708426650000.0,52429,556996,0.6462000000000001 236 | 2015-12-11,TCS,EQ,2384.55,2383.0,2391.95,2363.25,2383.15,2386.0,2384.13,826189,196974581820000.0,53651,598804,0.7248 237 | 2015-12-14,TCS,EQ,2386.0,2335.2,2387.0,2330.6,2375.0,2378.45,2364.84,1359266,321444335375000.0,58637,758806,0.5582 238 | 2015-12-15,TCS,EQ,2378.45,2378.45,2385.0,2363.05,2379.5,2375.85,2375.03,567934,134885915130000.0,52585,421587,0.7423000000000001 239 | 2015-12-16,TCS,EQ,2375.85,2384.0,2414.5,2384.0,2407.5,2408.4,2402.07,717967,172460935580000.0,48074,494205,0.6883 240 | 2015-12-17,TCS,EQ,2408.4,2415.0,2445.0,2393.35,2434.1,2439.75,2418.57,809422,195764707825000.0,46818,569320,0.7034 241 | 2015-12-18,TCS,EQ,2439.75,2420.0,2434.2,2400.65,2409.8,2416.8,2416.02,1512485,365419788625000.0,47644,1052042,0.6956 242 | 2015-12-21,TCS,EQ,2416.8,2419.95,2450.0,2406.85,2443.0,2446.4,2428.4,805052,195498897035000.0,41004,425890,0.529 243 | 2015-12-22,TCS,EQ,2446.4,2440.0,2440.0,2400.0,2407.0,2405.05,2413.33,780429,188343036260000.0,30995,476137,0.6101 244 | 2015-12-23,TCS,EQ,2405.05,2415.0,2435.0,2410.55,2418.8,2425.8,2425.06,424917,103044935060000.0,31057,253475,0.5965 245 | 2015-12-24,TCS,EQ,2425.8,2421.0,2438.2,2404.0,2435.0,2434.25,2424.03,421580,102192401425000.0,21932,188670,0.4475 246 | 2015-12-28,TCS,EQ,2434.25,2428.0,2466.4,2420.2,2456.95,2462.7,2455.0,1852099,454689566400000.0,43390,1060100,0.5724 247 | 2015-12-29,TCS,EQ,2462.7,2458.35,2465.3,2445.75,2449.35,2455.8,2452.26,854262,209487508650000.0,26975,433986,0.508 248 | 2015-12-30,TCS,EQ,2455.8,2453.05,2459.0,2412.3,2421.7,2418.3,2442.06,802881,196068199690000.0,49464,632180,0.7874 249 | 2015-12-31,TCS,EQ,2418.3,2415.75,2448.5,2407.5,2430.0,2436.85,2428.9,620159,150630258720000.0,42600,400391,0.6456000000000001 250 | --------------------------------------------------------------------------------