├── 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 | 
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 | 
25 | 
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 | 
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 | 
42 | 
43 | 
44 | 
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 | 
52 | 
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 |
--------------------------------------------------------------------------------