├── 1) Backtest - Multi time-frame - Nifty stocks.ipynb
├── 2) Crossover strategy in OOPs.ipynb
├── Alice Blue Api Connection
├── 1. Getting Live data Alice.ipynb
├── 2. SMA Buy sell signal - Aliceblue live data.ipynb
└── account_details.py
├── Data_Analytics_works
├── .ipynb_checkpoints
│ └── Tick data to Minutes OHLC data -checkpoint.ipynb
└── Tick data to Minutes OHLC data .ipynb
├── Frequently used Technical_indicators.txt
├── Install Ta-Lib on Linux.txt
├── Moving_Average_Crossover strategy
├── 50-200 EMA and RSI - Signal generator.ipynb
├── 8-20 EMA strategy.ipynb
└── Reliance dual moving average cross over buy and sell signal.ipynb
├── README.md
└── exploratory-data-analysis-on-5-minute-data.ipynb
/1) Backtest - Multi time-frame - Nifty stocks.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | " This strategy, checked with multi time frame and different indicators\n",
8 | " are used. And checked with stocks from Nifty 50\n",
9 | " Last update Dec 2021"
10 | ]
11 | },
12 | {
13 | "cell_type": "code",
14 | "execution_count": 1,
15 | "metadata": {},
16 | "outputs": [],
17 | "source": [
18 | "import pandas as pd\n",
19 | "import numpy as np\n",
20 | "from time import sleep\n",
21 | "import datetime\n",
22 | "import talib\n",
23 | "import indicators"
24 | ]
25 | },
26 | {
27 | "cell_type": "code",
28 | "execution_count": 2,
29 | "metadata": {},
30 | "outputs": [],
31 | "source": [
32 | "def read_data_backetesting(path, name, time_frame, start_date, end_date):\n",
33 | " df = pd.read_csv(path+time_frame+'/'+name+'.csv')\n",
34 | " df = df.set_index(df['date'])\n",
35 | " df = df[start_date:end_date]\n",
36 | " return df\n",
37 | "\n",
38 | "def apply_indicators(df, ema_small, ema_big, ema_bigger, rsi_param, atr_param, ):\n",
39 | " df['masmall'] = talib.EMA(df['close'], timeperiod = ema_small)\n",
40 | " df['mabig'] = talib.EMA(df['close'], timeperiod = ema_big)\n",
41 | " df['mabigger'] = talib.EMA(df['close'], timeperiod = ema_bigger)\n",
42 | " df['rsi'] = talib.RSI(df['close'], timeperiod = rsi_param)\n",
43 | " df['atr'] = talib.ATR(df['high'], df['low'], df['close'], timeperiod = atr_param)\n",
44 | " df['adx'] = talib.ADX(df['high'], df['low'], df['close'])\n",
45 | " df['previous_candle_close'] = df['close'].shift(1)\n",
46 | " indicators.SuperTrend(df=df, period=7, multiplier=3, ohlc=['open', 'high', 'low', 'close'])\n",
47 | " return df\n",
48 | "\n",
49 | "def check_entry_condition(index, candle1, df3, df5, df15, dfday, rsi_bull_level, rsi_bear_level):\n",
50 | " empty_series = {'masmall':0, 'mabig':0, 'mabigger':0, 'rsi':0, 'atr':0, 'adx':0, 'previous_candle_close':0, \n",
51 | " 'STX_7_3':0, 'close':0}\n",
52 | " candle3 = pd.Series(empty_series)\n",
53 | " candle5 = pd.Series(empty_series)\n",
54 | " candle15 = pd.Series(empty_series)\n",
55 | " if (int(dtime[14:16]) % 3 == 0):\n",
56 | "# print('Checking actual 3min candle')\n",
57 | " candle3 = df3.loc[dtime]\n",
58 | "# print(candle3)\n",
59 | " if (int(dtime[14:16]) % 5 == 0):\n",
60 | " candle5 = df5.loc[dtime]\n",
61 | " if (int(dtime[14:16]) % 15 == 0):\n",
62 | " candle15 = df15.loc[dtime]\n",
63 | " \n",
64 | " # buy condition on 3 min timeframe\n",
65 | " buy_condition1 = candle3['masmall'] > candle3['mabig'] > candle3['mabigger']\n",
66 | " buy_condition2 = candle3['rsi'] > rsi_bull_level\n",
67 | " buy_condition3 = candle3['STX_7_3'] == 'up'\n",
68 | " buy_condition4 = candle3['adx'] > 25\n",
69 | "# buy_condition4 = True\n",
70 | " buy_condition5 = candle3['close'] > candle3['previous_candle_close']\n",
71 | " buy_condition6 = candle3['close'] > dfday.loc[index[:11] + '00:00:00+05:30']['yh']\n",
72 | " \n",
73 | " # buy condition on 5 min timeframe\n",
74 | " buy_condition7 = candle5['masmall'] > candle5['mabig'] > candle5['mabigger']\n",
75 | " buy_condition8 = candle5['rsi'] > rsi_bull_level\n",
76 | " buy_condition9 = candle5['STX_7_3'] == 'up'\n",
77 | " buy_condition10 = candle5['adx'] > 22.5\n",
78 | "# buy_condition10 = True\n",
79 | " buy_condition11 = candle5['close'] > candle5['previous_candle_close']\n",
80 | " buy_condition12 = candle5['close'] > dfday.loc[index[:11] + '00:00:00+05:30']['yh']\n",
81 | " \n",
82 | " # buy condition on 15 min timeframe\n",
83 | " buy_condition13 = candle15['masmall'] > candle15['mabig'] > candle15['mabigger']\n",
84 | " buy_condition14 = candle15['STX_7_3'] == 'up'\n",
85 | " buy_condition15 = candle15['adx'] > 19\n",
86 | "# buy_condition15 = True\n",
87 | " buy_condition16 = candle15['close'] > candle15['previous_candle_close']\n",
88 | " \n",
89 | " return buy_condition1, buy_condition2, buy_condition3, buy_condition4, buy_condition5, buy_condition6, buy_condition7, buy_condition8, buy_condition9, buy_condition10, buy_condition11, buy_condition12, buy_condition13, buy_condition14, buy_condition15, buy_condition16"
90 | ]
91 | },
92 | {
93 | "cell_type": "code",
94 | "execution_count": 3,
95 | "metadata": {},
96 | "outputs": [],
97 | "source": [
98 | "# watchlist = ['NIFTY BANK', 'NIFTY 50']\n",
99 | "watchlist = ['ADANIPORTS', 'ASIANPAINT', 'AXISBANK', 'BAJAJ-AUTO', 'BAJAJFINSV', \n",
100 | " 'BAJFINANCE', 'BHARTIARTL', 'BPCL', 'BRITANNIA', 'CIPLA', 'COALINDIA','DIVISLAB','DRREDDY',\n",
101 | " 'GRASIM','HCLTECH','HDFC','HDFCBANK','HEROMOTOCO','HINDALCO','HINDUNILVR','ICICIBANK','INDUSINDBK',\n",
102 | " 'INFY','IOC','ITC','JSWSTEEL','KOTAKBANK','LT','M&M','MARUTI','NESTLEIND','NTPC','ONGC','POWERGRID',\n",
103 | " 'RELIANCE','SBILIFE','SBIN','SHREECEM','SUNPHARMA','TATACONSUM','TATAMOTORS','TATASTEEL','TCS',\n",
104 | " 'TECHM','TITAN','ULTRACEMCO','UPL','WIPRO']\n",
105 | "path = './Historical_saved_data/'"
106 | ]
107 | },
108 | {
109 | "cell_type": "code",
110 | "execution_count": 4,
111 | "metadata": {},
112 | "outputs": [],
113 | "source": [
114 | "status = {'name':None, 'date':None, 'entry_time': None, 'entry_price': None, 'buy_sell': None, 'qty':None, \n",
115 | " 'target':None, 'sl':None, 'exit_time': None, 'exit_price':None, 'pnl':None, 'remark' : None, 'traded' : None}\n",
116 | "risk_per_trade = 1000\n",
117 | "final_results = {}\n",
118 | "tradeno = 0"
119 | ]
120 | },
121 | {
122 | "cell_type": "code",
123 | "execution_count": 5,
124 | "metadata": {},
125 | "outputs": [],
126 | "source": [
127 | "# required_date = '2020-06-01 09:15:00+05:30'\n",
128 | "start_date = '2021-01-01'\n",
129 | "end_date = '2021-06-24'\n",
130 | "ema_small = 8\n",
131 | "ema_big = 20\n",
132 | "ema_bigger = 50\n",
133 | "rsi_param = 7\n",
134 | "atr_param = 7\n",
135 | "rsi_bull_level = 60\n",
136 | "rsi_bear_level = 40\n",
137 | "atr_multiplier = 0.5*2"
138 | ]
139 | },
140 | {
141 | "cell_type": "code",
142 | "execution_count": 9,
143 | "metadata": {
144 | "scrolled": false
145 | },
146 | "outputs": [
147 | {
148 | "name": "stdout",
149 | "output_type": "stream",
150 | "text": [
151 | "Backtesting for: ADANIPORTS\n",
152 | "Total Trades: 92\n",
153 | "Total SL: 42 SL trade percentage: 45.65\n",
154 | "Total P&L: 1553.71\n",
155 | "Total investment: 643527.0\n",
156 | "Profit percentage: 0.24\n",
157 | "############## ***** ##############\n",
158 | "Backtesting for: ASIANPAINT\n",
159 | "Total Trades: 54\n",
160 | "Total SL: 32 SL trade percentage: 59.26\n",
161 | "Total P&L: -6.55\n",
162 | "Total investment: 1443278.0\n",
163 | "Profit percentage: -0.0\n",
164 | "############## ***** ##############\n",
165 | "Backtesting for: AXISBANK\n",
166 | "Total Trades: 56\n",
167 | "Total SL: 26 SL trade percentage: 46.43\n",
168 | "Total P&L: 674.3\n",
169 | "Total investment: 398895.5\n",
170 | "Profit percentage: 0.17\n",
171 | "############## ***** ##############\n",
172 | "Backtesting for: BAJAJ-AUTO\n",
173 | "Total Trades: 50\n",
174 | "Total SL: 28 SL trade percentage: 56.0\n",
175 | "Total P&L: 1449.33\n",
176 | "Total investment: 1931549.0\n",
177 | "Profit percentage: 0.08\n",
178 | "############## ***** ##############\n",
179 | "Backtesting for: BAJAJFINSV\n",
180 | "Total Trades: 68\n",
181 | "Total SL: 33 SL trade percentage: 48.53\n",
182 | "Total P&L: 13615.02\n",
183 | "Total investment: 7019803.5\n",
184 | "Profit percentage: 0.19\n",
185 | "############## ***** ##############\n",
186 | "Backtesting for: BAJFINANCE\n",
187 | "Total Trades: 77\n",
188 | "Total SL: 34 SL trade percentage: 44.16\n",
189 | "Total P&L: 3798.99\n",
190 | "Total investment: 4177559.5\n",
191 | "Profit percentage: 0.09\n",
192 | "############## ***** ##############\n",
193 | "Backtesting for: BHARTIARTL\n",
194 | "Total Trades: 37\n",
195 | "Total SL: 28 SL trade percentage: 75.68\n",
196 | "Total P&L: -118.49\n",
197 | "Total investment: 206017.0\n",
198 | "Profit percentage: -0.06\n",
199 | "############## ***** ##############\n",
200 | "Backtesting for: BPCL\n",
201 | "Total Trades: 41\n",
202 | "Total SL: 23 SL trade percentage: 56.1\n",
203 | "Total P&L: 252.29\n",
204 | "Total investment: 178871.0\n",
205 | "Profit percentage: 0.14\n",
206 | "############## ***** ##############\n",
207 | "Backtesting for: BRITANNIA\n",
208 | "Total Trades: 35\n",
209 | "Total SL: 19 SL trade percentage: 54.29\n",
210 | "Total P&L: 420.9\n",
211 | "Total investment: 1240794.5\n",
212 | "Profit percentage: 0.03\n",
213 | "############## ***** ##############\n",
214 | "Backtesting for: CIPLA\n",
215 | "Total Trades: 28\n",
216 | "Total SL: 18 SL trade percentage: 64.29\n",
217 | "Total P&L: 223.23\n",
218 | "Total investment: 247764.0\n",
219 | "Profit percentage: 0.09\n",
220 | "############## ***** ##############\n"
221 | ]
222 | }
223 | ],
224 | "source": [
225 | "for name in watchlist[:10]:\n",
226 | " status = {'name':None, 'date':None, 'entry_time': None, 'entry_price': None, 'buy_sell': None, 'qty':None, \n",
227 | " 'target':None, 'sl':None, 'exit_time': None, 'exit_price':None, 'pnl':None, 'remark' : None, 'traded' : None}\n",
228 | " total_pl = 0\n",
229 | " total_sl, profitable_trades = 0, 0\n",
230 | " total_investment = 0\n",
231 | " print('Backtesting for: ', name)\n",
232 | " \n",
233 | " # Read 1, 3, 5, 15 minutes and daily data\n",
234 | " df1 = read_data_backetesting(path, name, 'minute', start_date, end_date)\n",
235 | " df3 = read_data_backetesting(path, name, '3minute', start_date, end_date)\n",
236 | " df5 = read_data_backetesting(path, name, '5minute', start_date, end_date)\n",
237 | " df15 = read_data_backetesting(path, name, '15minute', start_date, end_date)\n",
238 | " dfday = read_data_backetesting(path, name, 'day', start_date, end_date)\n",
239 | " \n",
240 | " # apply indicators to required data \n",
241 | " df1 = apply_indicators(df1, ema_small, ema_big, ema_bigger, rsi_param, atr_param)\n",
242 | " df3 = apply_indicators(df3, ema_small, ema_big, ema_bigger, rsi_param, atr_param)\n",
243 | " df5 = apply_indicators(df5, ema_small, ema_big, ema_bigger, rsi_param, atr_param)\n",
244 | " df15 = apply_indicators(df15, ema_small, ema_big, ema_bigger, rsi_param, atr_param)\n",
245 | " dfday = apply_indicators(dfday, ema_small, ema_big, ema_bigger, rsi_param, atr_param)\n",
246 | " \n",
247 | " dfday['yh'] = dfday['high'].shift(1)\n",
248 | " dfday['yl'] = dfday['low'].shift(1)\n",
249 | " \n",
250 | " try:\n",
251 | " for dtime, candle in df1[:].iterrows():\n",
252 | " entry_values = check_entry_condition(dtime, candle, df3, df5, df15, dfday, rsi_bull_level, rsi_bear_level)\n",
253 | " bc1, bc2, bc3, bc4, bc5, bc6, bc7, bc8, bc9, bc10, bc11, bc12, bc13, bc14, bc15, bc16 = entry_values\n",
254 | "\n",
255 | " # Entry condition\n",
256 | " if bc1 and bc2 and bc3 and bc4 and bc5 and bc6 and bc7 and bc8 and bc9 and bc10 and bc11 and bc12 and bc13 and bc14 and bc15 and bc16:\n",
257 | " tradeno += 1\n",
258 | " status['name'] = name\n",
259 | " status['date'] = dtime[:10] \n",
260 | " status['entry_time'] = dtime[:16]\n",
261 | " status['entry_price'] = candle['close']\n",
262 | " status['buy_sell'] = 'buy'\n",
263 | " status['sl'] = round((candle['close'] - (atr_multiplier*candle['atr'])), 1)\n",
264 | " status['target'] = candle['close'] * 1.01\n",
265 | " status['qty'] = 10\n",
266 | " status['traded'] = 'yes'\n",
267 | " total_investment += status['entry_price'] * status['qty']\n",
268 | "# print(f\"Buy {name}, time {dtime[:16]}, price {candle['close']}\")\n",
269 | " continue\n",
270 | "\n",
271 | " # Exit condition\n",
272 | " if status['traded'] == 'yes':\n",
273 | "\n",
274 | " if (status['buy_sell'] == 'buy') and ((candle['low'] < status['sl']) or (dtime[11:16] == \"15:15\") or (candle['high'] >= status['target'])):\n",
275 | "\n",
276 | " # if target is achieved\n",
277 | " if (candle['high'] >= status['target']):\n",
278 | " status['pnl'] = round((status['target'] - status['entry_price'])*status['qty'] , 2)\n",
279 | " status['remark'] = 'buy_target'\n",
280 | " status['exit_price'] = status['target']\n",
281 | " status['exit_time'] = dtime[:16]\n",
282 | " total_pl += ((status['target'] - status['entry_price']))*status['qty']\n",
283 | "# print(f\"Sell at Target {name}, time {dtime[:16]}, price {status['target']}\")\n",
284 | "# print(f\"Profit: {round((status['target'] - status['entry_price'])*status['qty'] , 2)}\")\n",
285 | "\n",
286 | " # if sl is hit\n",
287 | " if (candle['low'] <= status['sl']):\n",
288 | " status['pnl'] = round(((status['sl'] - status['entry_price']))*status['qty'], 2)\n",
289 | " status['remark'] = 'buy_sl_hit'\n",
290 | " status['exit_price'] = status['sl']\n",
291 | " status['exit_time'] = dtime[:16]\n",
292 | " total_pl += ((status['sl'] - status['entry_price']))*status['qty']\n",
293 | "# print(f\"Sell at SL {name}, time {dtime[:16]}, price {status['sl']}\")\n",
294 | "# print('Loss: ', round(((status['sl'] - status['entry_price']))*status['qty'], 2))\n",
295 | " total_sl += 1\n",
296 | "\n",
297 | " # if no sl hit, then exit at 15:15\n",
298 | " if (dtime[11:16] == '15:15'):\n",
299 | " status['pnl'] = round(((candle['close'] - status['entry_price']))*status['qty'], 2)\n",
300 | " status['remark'] = 'market_over'\n",
301 | " status['exit_price'] = candle['close']\n",
302 | " status['exit_time'] = dtime[:16]\n",
303 | " total_pl += ((candle['close'] - status['entry_price']))*status['qty']\n",
304 | "# print(f\"Sell at Market close {name}, time {dtime[:16]}, price {candle['close']}\")\n",
305 | "# print('Profit: ', round(((candle['close'] - status['entry_price']))*status['qty'], 2))\n",
306 | "\n",
307 | " final_results[tradeno] = status\n",
308 | " status = {'name':None, 'date':None, 'entry_time': None, 'entry_price': None, 'buy_sell': None, 'qty':None, \n",
309 | " 'target':None, 'sl':None, 'exit_time': None, 'exit_price':None, 'pnl':None, 'remark' : None, 'traded' : None}\n",
310 | " \n",
311 | " except Exception as e:\n",
312 | " print('Error: ', e)\n",
313 | " \n",
314 | " print('Total Trades: ', tradeno)\n",
315 | " print('Total SL: ', total_sl, 'SL trade percentage: ', round((total_sl/tradeno)*100 , 2))\n",
316 | " print('Total P&L: ', round(total_pl, 2))\n",
317 | " print('Total investment: ', total_investment)\n",
318 | " print('Profit percentage: ', round((total_pl / total_investment) * 100, 2))\n",
319 | " \n",
320 | " # reset status\n",
321 | " status = {'name':None, 'date':None, 'entry_time': None, 'entry_price': None, 'buy_sell': None, 'qty':None, \n",
322 | "\n",
323 | " 'target':None, 'sl':None, 'exit_time': None, 'exit_price':None, 'pnl':None, 'remark' : None, 'traded' : None}\n",
324 | "\n",
325 | " pd.DataFrame(final_results).T.to_csv('./BT_results/bt3.1/'+name+'.csv', index = None)\n",
326 | " final_results = {}\n",
327 | " tradeno = 0\n",
328 | " print('############## ***** ##############')"
329 | ]
330 | },
331 | {
332 | "cell_type": "code",
333 | "execution_count": null,
334 | "metadata": {},
335 | "outputs": [],
336 | "source": []
337 | },
338 | {
339 | "cell_type": "code",
340 | "execution_count": null,
341 | "metadata": {},
342 | "outputs": [],
343 | "source": []
344 | },
345 | {
346 | "cell_type": "code",
347 | "execution_count": null,
348 | "metadata": {},
349 | "outputs": [],
350 | "source": []
351 | },
352 | {
353 | "cell_type": "code",
354 | "execution_count": null,
355 | "metadata": {},
356 | "outputs": [],
357 | "source": []
358 | },
359 | {
360 | "cell_type": "code",
361 | "execution_count": null,
362 | "metadata": {},
363 | "outputs": [],
364 | "source": []
365 | },
366 | {
367 | "cell_type": "code",
368 | "execution_count": null,
369 | "metadata": {},
370 | "outputs": [],
371 | "source": []
372 | },
373 | {
374 | "cell_type": "code",
375 | "execution_count": null,
376 | "metadata": {},
377 | "outputs": [],
378 | "source": []
379 | },
380 | {
381 | "cell_type": "code",
382 | "execution_count": null,
383 | "metadata": {},
384 | "outputs": [],
385 | "source": []
386 | }
387 | ],
388 | "metadata": {
389 | "kernelspec": {
390 | "display_name": "Python 3",
391 | "language": "python",
392 | "name": "python3"
393 | },
394 | "language_info": {
395 | "codemirror_mode": {
396 | "name": "ipython",
397 | "version": 3
398 | },
399 | "file_extension": ".py",
400 | "mimetype": "text/x-python",
401 | "name": "python",
402 | "nbconvert_exporter": "python",
403 | "pygments_lexer": "ipython3",
404 | "version": "3.6.9"
405 | }
406 | },
407 | "nbformat": 4,
408 | "nbformat_minor": 4
409 | }
410 |
--------------------------------------------------------------------------------
/Alice Blue Api Connection/1. Getting Live data Alice.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "from alice_blue import *\n",
10 | "import time\n",
11 | "import pandas as pd\n",
12 | "import numpy as np\n",
13 | "import datetime\n",
14 | "import account_details"
15 | ]
16 | },
17 | {
18 | "cell_type": "code",
19 | "execution_count": 3,
20 | "metadata": {},
21 | "outputs": [],
22 | "source": [
23 | "usr_name = account_details.usr_name\n",
24 | "pwd = account_details.pwd\n",
25 | "tfa = account_details.tfa\n",
26 | "app_id = account_details.app_id\n",
27 | "api_scrt = account_details.api_scrt\n",
28 | "\n",
29 | "# redirect url = 'https://ant.aliceblueonline.com/plugin/callback'"
30 | ]
31 | },
32 | {
33 | "cell_type": "code",
34 | "execution_count": 4,
35 | "metadata": {},
36 | "outputs": [
37 | {
38 | "name": "stdout",
39 | "output_type": "stream",
40 | "text": [
41 | "5OoOVGxCzVavNyaDE-8nuFRo5tZAmE97CAL0pU8jiwo.T30FtUHnQOD2Uz84sDR3Vy_sLLYMMgHNhP_yrbbK3lU\n"
42 | ]
43 | }
44 | ],
45 | "source": [
46 | "access_token = AliceBlue.login_and_get_access_token(username= usr_name, password= pwd, twoFA=tfa, \n",
47 | " api_secret=api_scrt, app_id = app_id)\n",
48 | "print(access_token)"
49 | ]
50 | },
51 | {
52 | "cell_type": "code",
53 | "execution_count": 5,
54 | "metadata": {},
55 | "outputs": [],
56 | "source": [
57 | "alice = AliceBlue(username=usr_name, password=pwd, access_token=access_token)"
58 | ]
59 | },
60 | {
61 | "cell_type": "code",
62 | "execution_count": 6,
63 | "metadata": {},
64 | "outputs": [
65 | {
66 | "name": "stdout",
67 | "output_type": "stream",
68 | "text": [
69 | "Available balance: 208.38\n"
70 | ]
71 | }
72 | ],
73 | "source": [
74 | "# get balance\n",
75 | "print('Available balance: ', alice.get_balance()['data']['cash_positions'][0]['available']['cashmarginavailable'])"
76 | ]
77 | },
78 | {
79 | "cell_type": "code",
80 | "execution_count": 6,
81 | "metadata": {},
82 | "outputs": [],
83 | "source": [
84 | "# df_reliance = pd.DataFrame(columns=['timestamp', 'ltp', 'volume'])\n",
85 | "# timestamp = []\n",
86 | "# ltp = []\n",
87 | "# volume = []\n",
88 | "\n",
89 | "df_reliance = pd.DataFrame(columns=['timestamp', 'ltp', 'volume'])\n",
90 | "timestamp_reliance = []\n",
91 | "ltp_reliance = []\n",
92 | "volume_reliance = []\n",
93 | "\n",
94 | "df_hdfcbank = pd.DataFrame(columns=['timestamp', 'ltp', 'volume'])\n",
95 | "timestamp_hdfcbank = []\n",
96 | "ltp_hdfcbank = []\n",
97 | "volume_hdfcbank = []"
98 | ]
99 | },
100 | {
101 | "cell_type": "code",
102 | "execution_count": 7,
103 | "metadata": {
104 | "scrolled": true
105 | },
106 | "outputs": [],
107 | "source": [
108 | "socket_opened = False\n",
109 | "# ltp = []\n",
110 | "def event_handler_quote_update(message):\n",
111 | "# print(f\"quote update {message}\")\n",
112 | "# print('time: ', datetime.datetime.fromtimestamp(message['exchange_time_stamp']).strftime('%Y-%m-%d %H:%M:%S'))\n",
113 | "# print('price: ', message['ltp'])\n",
114 | "\n",
115 | " if message['instrument'].symbol == 'RELIANCE': \n",
116 | " # save data\n",
117 | " timestamp_reliance.append(datetime.datetime.fromtimestamp(message['exchange_time_stamp']).strftime('%Y-%m-%d %H:%M:%S'))\n",
118 | " ltp_reliance.append(message['ltp'])\n",
119 | " volume_reliance.append(message['volume'])\n",
120 | " \n",
121 | "# print('Reliance data: ')\n",
122 | "# print('LTP: ', message['ltp'])\n",
123 | "# print('Volume: ', message['volume'])\n",
124 | " \n",
125 | " if message['instrument'].symbol == 'HDFCBANK': \n",
126 | " # save data\n",
127 | " timestamp_hdfcbank.append(datetime.datetime.fromtimestamp(message['exchange_time_stamp']).strftime('%Y-%m-%d %H:%M:%S'))\n",
128 | " ltp_hdfcbank.append(message['ltp'])\n",
129 | " volume_hdfcbank.append(message['volume'])\n",
130 | " \n",
131 | "# print('HDFC Bank data: ')\n",
132 | "# print('LTP: ', message['ltp'])\n",
133 | "# print('Volume: ', message['volume'])\n",
134 | "\n",
135 | " \n",
136 | "\n",
137 | "def open_callback():\n",
138 | " global socket_opened\n",
139 | " socket_opened = True\n",
140 | "\n",
141 | "alice.start_websocket(subscribe_callback=event_handler_quote_update,\n",
142 | " socket_open_callback=open_callback,\n",
143 | " run_in_background=True)\n",
144 | "while(socket_opened==False):\n",
145 | " pass\n",
146 | "\n",
147 | "# alice.subscribe(alice.get_instrument_by_symbol('NSE', 'RELIANCE'), LiveFeedType.MARKET_DATA)\n",
148 | "# alice.subscribe(alice.get_instrument_by_symbol('NSE', 'Nifty Bank'), LiveFeedType.COMPACT)\n",
149 | "# alice.subscribe(alice.get_instrument_by_symbol('NSE', 'RELIANCE'), LiveFeedType.COMPACT)\n",
150 | "instrument = [alice.get_instrument_by_symbol('NSE', 'RELIANCE'), \n",
151 | " alice.get_instrument_by_symbol('NSE', 'HDFCBANK')]\n",
152 | "\n",
153 | "alice.subscribe(instrument, LiveFeedType.MARKET_DATA)\n"
154 | ]
155 | },
156 | {
157 | "cell_type": "code",
158 | "execution_count": 8,
159 | "metadata": {
160 | "scrolled": true
161 | },
162 | "outputs": [],
163 | "source": [
164 | "# while True:\n",
165 | "# if ((len(ltp) % 60) == 0):\n",
166 | "# df_reliance['timestamp'] = timestamp\n",
167 | "# df_reliance['ltp'] = ltp\n",
168 | "# df_reliance['volume'] = volume\n",
169 | "# df_reliance.to_csv('Reliance_24_march.csv', index=False)\n",
170 | "# print('Data saved')\n",
171 | "# print('Amount of data saved: ', len(ltp))"
172 | ]
173 | },
174 | {
175 | "cell_type": "code",
176 | "execution_count": null,
177 | "metadata": {
178 | "scrolled": true
179 | },
180 | "outputs": [
181 | {
182 | "name": "stdout",
183 | "output_type": "stream",
184 | "text": [
185 | "Data saved\n",
186 | "Amount of data saved: 30\n",
187 | "Data saved\n",
188 | "Amount of data saved: 30\n",
189 | "Data saved\n",
190 | "Amount of data saved: 89\n",
191 | "Data saved\n",
192 | "Amount of data saved: 90\n"
193 | ]
194 | }
195 | ],
196 | "source": [
197 | "from time import sleep\n",
198 | "while(True):\n",
199 | " df_reliance = pd.DataFrame(columns=['timestamp', 'ltp', 'volume'])\n",
200 | " df_reliance['timestamp'] = timestamp_reliance\n",
201 | " df_reliance['ltp'] = ltp_reliance\n",
202 | " df_reliance['volume'] = volume_reliance\n",
203 | " df_reliance.to_csv('./Tick_data/Reliance_08_April.csv', index=False)\n",
204 | " print('Data saved')\n",
205 | " print('Amount of data saved: ', len(ltp_reliance))\n",
206 | " \n",
207 | " df_hdfcbank = pd.DataFrame(columns=['timestamp', 'ltp', 'volume'])\n",
208 | " df_hdfcbank['timestamp'] = timestamp_hdfcbank\n",
209 | " df_hdfcbank['ltp'] = ltp_hdfcbank\n",
210 | " df_hdfcbank['volume'] = volume_hdfcbank\n",
211 | " df_hdfcbank.to_csv('./Tick_data/Hdfcbank_08_April.csv', index = False)\n",
212 | " print('Data saved')\n",
213 | " print('Amount of data saved: ', len(ltp_hdfcbank))\n",
214 | " sleep(60)"
215 | ]
216 | },
217 | {
218 | "cell_type": "code",
219 | "execution_count": 13,
220 | "metadata": {
221 | "scrolled": true
222 | },
223 | "outputs": [],
224 | "source": [
225 | "# alice.unsubscribe(alice.get_instrument_by_symbol('NSE', 'Nifty Bank'), LiveFeedType.MARKET_DATA)"
226 | ]
227 | },
228 | {
229 | "cell_type": "code",
230 | "execution_count": 14,
231 | "metadata": {},
232 | "outputs": [],
233 | "source": [
234 | "# alice.subscribe([alice.get_instrument_by_symbol('NSE', 'TATASTEEL'), alice.get_instrument_by_symbol('NSE', 'RELIANCE')], LiveFeedType.MARKET_DATA)"
235 | ]
236 | },
237 | {
238 | "cell_type": "code",
239 | "execution_count": null,
240 | "metadata": {},
241 | "outputs": [],
242 | "source": []
243 | },
244 | {
245 | "cell_type": "code",
246 | "execution_count": null,
247 | "metadata": {},
248 | "outputs": [],
249 | "source": []
250 | },
251 | {
252 | "cell_type": "code",
253 | "execution_count": null,
254 | "metadata": {},
255 | "outputs": [],
256 | "source": []
257 | },
258 | {
259 | "cell_type": "code",
260 | "execution_count": null,
261 | "metadata": {},
262 | "outputs": [],
263 | "source": []
264 | }
265 | ],
266 | "metadata": {
267 | "kernelspec": {
268 | "display_name": "Python 3",
269 | "language": "python",
270 | "name": "python3"
271 | },
272 | "language_info": {
273 | "codemirror_mode": {
274 | "name": "ipython",
275 | "version": 3
276 | },
277 | "file_extension": ".py",
278 | "mimetype": "text/x-python",
279 | "name": "python",
280 | "nbconvert_exporter": "python",
281 | "pygments_lexer": "ipython3",
282 | "version": "3.6.9"
283 | }
284 | },
285 | "nbformat": 4,
286 | "nbformat_minor": 2
287 | }
288 |
--------------------------------------------------------------------------------
/Alice Blue Api Connection/2. SMA Buy sell signal - Aliceblue live data.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | " For Infosys, Live buy sell signals generated \n",
8 | " based on 5-20 SMA cross-over"
9 | ]
10 | },
11 | {
12 | "cell_type": "markdown",
13 | "metadata": {},
14 | "source": [
15 | " My respect towrds - krishnavelu@aliceblue - for this program and\n",
16 | " implementing aliceblue library in a very simple manner. \n",
17 | " \n",
18 | " And special thanks to Aliceblue, for providing this API in free of cost. "
19 | ]
20 | },
21 | {
22 | "cell_type": "code",
23 | "execution_count": 1,
24 | "metadata": {},
25 | "outputs": [],
26 | "source": [
27 | "# importing packages \n",
28 | "import logging\n",
29 | "import datetime\n",
30 | "import statistics\n",
31 | "from time import sleep\n",
32 | "import account_details # this contains username, password, api details\n",
33 | "from alice_blue import *"
34 | ]
35 | },
36 | {
37 | "cell_type": "code",
38 | "execution_count": null,
39 | "metadata": {},
40 | "outputs": [],
41 | "source": [
42 | "# Config - Username, password, API details loaded from account_details file\n",
43 | "username = account_details.usr_name\n",
44 | "password = account_details.pwd\n",
45 | "app_id = account_details.app_id\n",
46 | "api_secret = account_details.api_scrt\n",
47 | "twoFA = account_details.tfa\n",
48 | "EMA_CROSS_SCRIP = 'INFY'\n",
49 | "logging.basicConfig(level=logging.DEBUG) # Optional for getting debug messages.\n",
50 | "# Config"
51 | ]
52 | },
53 | {
54 | "cell_type": "code",
55 | "execution_count": null,
56 | "metadata": {},
57 | "outputs": [],
58 | "source": [
59 | "ltp = 0\n",
60 | "socket_opened = False\n",
61 | "alice = None\n",
62 | "def event_handler_quote_update(message):\n",
63 | " global ltp\n",
64 | " ltp = message['ltp']"
65 | ]
66 | },
67 | {
68 | "cell_type": "code",
69 | "execution_count": null,
70 | "metadata": {},
71 | "outputs": [],
72 | "source": [
73 | "def open_callback():\n",
74 | " global socket_opened\n",
75 | " socket_opened = True"
76 | ]
77 | },
78 | {
79 | "cell_type": "code",
80 | "execution_count": null,
81 | "metadata": {},
82 | "outputs": [],
83 | "source": [
84 | "# Buy order \n",
85 | "def buy_signal(ins_scrip):\n",
86 | " global alice\n",
87 | " alice.place_order(transaction_type = TransactionType.Buy,\n",
88 | " instrument = ins_scrip,\n",
89 | " quantity = 1,\n",
90 | " order_type = OrderType.Market,\n",
91 | " product_type = ProductType.Intraday,\n",
92 | " price = 0.0,\n",
93 | " trigger_price = None,\n",
94 | " stop_loss = None,\n",
95 | " square_off = None,\n",
96 | " trailing_sl = None,\n",
97 | " is_amo = False)"
98 | ]
99 | },
100 | {
101 | "cell_type": "code",
102 | "execution_count": null,
103 | "metadata": {},
104 | "outputs": [],
105 | "source": [
106 | "# Sell order\n",
107 | "def sell_signal(ins_scrip):\n",
108 | " global alice\n",
109 | " alice.place_order(transaction_type = TransactionType.Sell,\n",
110 | " instrument = ins_scrip,\n",
111 | " quantity = 1,\n",
112 | " order_type = OrderType.Market,\n",
113 | " product_type = ProductType.Intraday,\n",
114 | " price = 0.0,\n",
115 | " trigger_price = None,\n",
116 | " stop_loss = None,\n",
117 | " square_off = None,\n",
118 | " trailing_sl = None,\n",
119 | " is_amo = False)"
120 | ]
121 | },
122 | {
123 | "cell_type": "code",
124 | "execution_count": null,
125 | "metadata": {},
126 | "outputs": [],
127 | "source": [
128 | "def main():\n",
129 | " global socket_opened\n",
130 | " global alice\n",
131 | " global username\n",
132 | " global password\n",
133 | " global twoFA\n",
134 | " global api_secret\n",
135 | " global EMA_CROSS_SCRIP\n",
136 | " \n",
137 | " minute_close = []\n",
138 | " \n",
139 | " # Access token is fetched from aliceblue\n",
140 | " access_token = AliceBlue.login_and_get_access_token(username=username, password=password, twoFA=twoFA, \n",
141 | " api_secret=api_secret, app_id = app_id)\n",
142 | " # alice object is created\n",
143 | " alice = AliceBlue(username=username, password=password, access_token=access_token, \n",
144 | " master_contracts_to_download=['NSE'])\n",
145 | " \n",
146 | " \n",
147 | " print('User Profile: ', alice.get_profile()) # get profile\n",
148 | " print('User Balance: ', alice.get_balance()) # get balance / margin limits\n",
149 | " # print(alice.get_daywise_positions()) # get daywise positions\n",
150 | " # print(alice.get_netwise_positions()) # get netwise positions\n",
151 | " # print(alice.get_holding_positions()) # get holding positions\n",
152 | " \n",
153 | " ins_scrip = alice.get_instrument_by_symbol('NSE', EMA_CROSS_SCRIP)\n",
154 | " \n",
155 | " # Open the socket\n",
156 | " socket_opened = False\n",
157 | " alice.start_websocket(subscribe_callback=event_handler_quote_update,\n",
158 | " socket_open_callback=open_callback,\n",
159 | " run_in_background=True)\n",
160 | " \n",
161 | " while(socket_opened==False): # wait till socket open & then subscribe\n",
162 | " pass\n",
163 | " alice.subscribe(ins_scrip, LiveFeedType.COMPACT) # instrument is subscribed\n",
164 | " \n",
165 | " # Each minute data is recorded here.\n",
166 | " # Logic for buy - if SMA5 > SMA20\n",
167 | " # Logic for Sell - if SMA20 > SMA5\n",
168 | " # Sleep() is used program will not letgo in between\n",
169 | " current_signal = ''\n",
170 | " while True:\n",
171 | " if(datetime.datetime.now().second == 0): # recorded data in each minute\n",
172 | " minute_close.append(ltp)\n",
173 | " print('Minute data: ', ltp)\n",
174 | " if(len(minute_close) > 20):\n",
175 | " sma_5 = statistics.mean(minute_close[-5:])\n",
176 | " sma_20 = statistics.mean(minute_close[-20:])\n",
177 | " if(current_signal != 'buy'):\n",
178 | " # if(sma_5 > sma_20):\n",
179 | " # buy_signal(ins_scrip)\n",
180 | " current_signal = 'buy'\n",
181 | " print('Buy')\n",
182 | " if(current_signal != 'sell'):\n",
183 | " # if(sma_5 < sma_20):\n",
184 | " # sell_signal(ins_scrip)\n",
185 | " current_signal = 'sell'\n",
186 | " print('Sell')\n",
187 | " sleep(1)\n",
188 | " sleep(0.2) # sleep for 200ms"
189 | ]
190 | },
191 | {
192 | "cell_type": "code",
193 | "execution_count": null,
194 | "metadata": {},
195 | "outputs": [],
196 | "source": [
197 | "if(__name__ == '__main__'):\n",
198 | " main()"
199 | ]
200 | },
201 | {
202 | "cell_type": "code",
203 | "execution_count": null,
204 | "metadata": {},
205 | "outputs": [],
206 | "source": []
207 | },
208 | {
209 | "cell_type": "code",
210 | "execution_count": null,
211 | "metadata": {},
212 | "outputs": [],
213 | "source": []
214 | },
215 | {
216 | "cell_type": "code",
217 | "execution_count": null,
218 | "metadata": {},
219 | "outputs": [],
220 | "source": []
221 | },
222 | {
223 | "cell_type": "code",
224 | "execution_count": null,
225 | "metadata": {},
226 | "outputs": [],
227 | "source": []
228 | },
229 | {
230 | "cell_type": "code",
231 | "execution_count": null,
232 | "metadata": {},
233 | "outputs": [],
234 | "source": []
235 | },
236 | {
237 | "cell_type": "code",
238 | "execution_count": null,
239 | "metadata": {},
240 | "outputs": [],
241 | "source": []
242 | }
243 | ],
244 | "metadata": {
245 | "kernelspec": {
246 | "display_name": "Python 3",
247 | "language": "python",
248 | "name": "python3"
249 | },
250 | "language_info": {
251 | "codemirror_mode": {
252 | "name": "ipython",
253 | "version": 3
254 | },
255 | "file_extension": ".py",
256 | "mimetype": "text/x-python",
257 | "name": "python",
258 | "nbconvert_exporter": "python",
259 | "pygments_lexer": "ipython3",
260 | "version": "3.6.9"
261 | }
262 | },
263 | "nbformat": 4,
264 | "nbformat_minor": 2
265 | }
266 |
--------------------------------------------------------------------------------
/Alice Blue Api Connection/account_details.py:
--------------------------------------------------------------------------------
1 | usr_name = 'your_aliceblue_username'
2 | pwd = 'your_aliceblue_password'
3 | tfa = 'your_two_fector_authentication@aliceblue'
4 | app_id = 'your_appid'
5 | api_scrt = 'your_api_secret_generated_at_creation_of_app_at_aliceblue'
6 |
7 | # redirect url = 'https://ant.aliceblueonline.com/plugin/callback'
8 |
--------------------------------------------------------------------------------
/Data_Analytics_works/.ipynb_checkpoints/Tick data to Minutes OHLC data -checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | " Here seconds tick data is converted to per minute OHLC"
8 | ]
9 | },
10 | {
11 | "cell_type": "code",
12 | "execution_count": 125,
13 | "metadata": {},
14 | "outputs": [],
15 | "source": [
16 | "import pandas as pd\n",
17 | "import numpy as np\n",
18 | "from datetime import date"
19 | ]
20 | },
21 | {
22 | "cell_type": "code",
23 | "execution_count": 126,
24 | "metadata": {
25 | "scrolled": true
26 | },
27 | "outputs": [
28 | {
29 | "data": {
30 | "text/html": [
31 | "
\n",
32 | "\n",
45 | "
\n",
46 | " \n",
47 | " \n",
48 | " | \n",
49 | " timestamp | \n",
50 | " ltp | \n",
51 | " volume | \n",
52 | "
\n",
53 | " \n",
54 | " \n",
55 | " \n",
56 | " 0 | \n",
57 | " 2021-03-26 09:15:49 | \n",
58 | " 14487.70 | \n",
59 | " 0 | \n",
60 | "
\n",
61 | " \n",
62 | " 1 | \n",
63 | " 2021-03-26 09:15:50 | \n",
64 | " 14489.60 | \n",
65 | " 0 | \n",
66 | "
\n",
67 | " \n",
68 | " 2 | \n",
69 | " 2021-03-26 09:15:51 | \n",
70 | " 14490.35 | \n",
71 | " 0 | \n",
72 | "
\n",
73 | " \n",
74 | " 3 | \n",
75 | " 2021-03-26 09:15:52 | \n",
76 | " 14492.20 | \n",
77 | " 0 | \n",
78 | "
\n",
79 | " \n",
80 | " 4 | \n",
81 | " 2021-03-26 09:15:53 | \n",
82 | " 14493.95 | \n",
83 | " 0 | \n",
84 | "
\n",
85 | " \n",
86 | "
\n",
87 | "
"
88 | ],
89 | "text/plain": [
90 | " timestamp ltp volume\n",
91 | "0 2021-03-26 09:15:49 14487.70 0\n",
92 | "1 2021-03-26 09:15:50 14489.60 0\n",
93 | "2 2021-03-26 09:15:51 14490.35 0\n",
94 | "3 2021-03-26 09:15:52 14492.20 0\n",
95 | "4 2021-03-26 09:15:53 14493.95 0"
96 | ]
97 | },
98 | "execution_count": 126,
99 | "metadata": {},
100 | "output_type": "execute_result"
101 | }
102 | ],
103 | "source": [
104 | "# Here I have kept tick data in the dataframe\n",
105 | "path = '/home/debashis/Data/Finance_Data/Live_data_work/scripts/Tick_data3/'\n",
106 | "df_nifty_bank = pd.read_csv(path+'Nifty_26_march.csv', low_memory=False)\n",
107 | "df_nifty_bank.head()"
108 | ]
109 | },
110 | {
111 | "cell_type": "code",
112 | "execution_count": 127,
113 | "metadata": {},
114 | "outputs": [
115 | {
116 | "data": {
117 | "text/html": [
118 | "\n",
119 | "\n",
132 | "
\n",
133 | " \n",
134 | " \n",
135 | " | \n",
136 | " timestamp | \n",
137 | " ltp | \n",
138 | " volume | \n",
139 | "
\n",
140 | " \n",
141 | " \n",
142 | " \n",
143 | " 0 | \n",
144 | " 2021-03-26 09:15:49 | \n",
145 | " 14487.70 | \n",
146 | " 0 | \n",
147 | "
\n",
148 | " \n",
149 | " 1 | \n",
150 | " 2021-03-26 09:15:50 | \n",
151 | " 14489.60 | \n",
152 | " 0 | \n",
153 | "
\n",
154 | " \n",
155 | " 2 | \n",
156 | " 2021-03-26 09:15:51 | \n",
157 | " 14490.35 | \n",
158 | " 0 | \n",
159 | "
\n",
160 | " \n",
161 | " 3 | \n",
162 | " 2021-03-26 09:15:52 | \n",
163 | " 14492.20 | \n",
164 | " 0 | \n",
165 | "
\n",
166 | " \n",
167 | " 4 | \n",
168 | " 2021-03-26 09:15:53 | \n",
169 | " 14493.95 | \n",
170 | " 0 | \n",
171 | "
\n",
172 | " \n",
173 | "
\n",
174 | "
"
175 | ],
176 | "text/plain": [
177 | " timestamp ltp volume\n",
178 | "0 2021-03-26 09:15:49 14487.70 0\n",
179 | "1 2021-03-26 09:15:50 14489.60 0\n",
180 | "2 2021-03-26 09:15:51 14490.35 0\n",
181 | "3 2021-03-26 09:15:52 14492.20 0\n",
182 | "4 2021-03-26 09:15:53 14493.95 0"
183 | ]
184 | },
185 | "execution_count": 127,
186 | "metadata": {},
187 | "output_type": "execute_result"
188 | }
189 | ],
190 | "source": [
191 | "# timestamp is treated as date_time here\n",
192 | "df_nifty_bank['timestamp'] = pd.to_datetime(df_nifty_bank['timestamp'])\n",
193 | "df_nifty_bank.head()"
194 | ]
195 | },
196 | {
197 | "cell_type": "code",
198 | "execution_count": 128,
199 | "metadata": {},
200 | "outputs": [],
201 | "source": [
202 | "# df_nifty_bank.timestamp.values[0]"
203 | ]
204 | },
205 | {
206 | "cell_type": "markdown",
207 | "metadata": {},
208 | "source": [
209 | " Task:\n",
210 | " - Present data in each seconds\n",
211 | " - Generate OHLC for each minute\n",
212 | " "
213 | ]
214 | },
215 | {
216 | "cell_type": "code",
217 | "execution_count": 129,
218 | "metadata": {},
219 | "outputs": [
220 | {
221 | "name": "stdout",
222 | "output_type": "stream",
223 | "text": [
224 | "Today date is: 2021-03-26\n"
225 | ]
226 | }
227 | ],
228 | "source": [
229 | "# Returns the current local date\n",
230 | "# today = date.today()\n",
231 | "today = '2021-03-26'\n",
232 | "print(\"Today date is: \", today)"
233 | ]
234 | },
235 | {
236 | "cell_type": "code",
237 | "execution_count": 130,
238 | "metadata": {},
239 | "outputs": [
240 | {
241 | "name": "stdout",
242 | "output_type": "stream",
243 | "text": [
244 | "Start time: 2021-03-26 09:15:00, End time: 2021-03-26 15:29:00\n"
245 | ]
246 | }
247 | ],
248 | "source": [
249 | "start_time = str(today)+' 09:15:00'\n",
250 | "end_time = str(today)+' 15:29:00'\n",
251 | "print('Start time: {0}, End time: {1}'.format(start_time, end_time))"
252 | ]
253 | },
254 | {
255 | "cell_type": "code",
256 | "execution_count": 131,
257 | "metadata": {},
258 | "outputs": [
259 | {
260 | "name": "stdout",
261 | "output_type": "stream",
262 | "text": [
263 | "Length of Minutes data: 375\n"
264 | ]
265 | }
266 | ],
267 | "source": [
268 | "# create minute-wise timestamp\n",
269 | "time_bin_1_min = pd.date_range(start=start_time, end = end_time, freq='1min')\n",
270 | "print('Length of Minutes data: ', len(time_bin_1_min))"
271 | ]
272 | },
273 | {
274 | "cell_type": "code",
275 | "execution_count": 132,
276 | "metadata": {},
277 | "outputs": [],
278 | "source": [
279 | "# Create the data frame\n",
280 | "required_columns = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume']\n",
281 | "df_minute_data = pd.DataFrame(columns=required_columns)\n",
282 | "df_minute_data.head()\n",
283 | "\n",
284 | "# Create empty lists to store data\n",
285 | "date, open_, high, low, close, volume = [], [], [], [], [], []\n",
286 | "\n",
287 | "for x in range(len(time_bin_1_min)-1):\n",
288 | " # Collect all LTP data for this minute\n",
289 | " start_minute = time_bin_1_min[x]\n",
290 | " end_minute = time_bin_1_min[x+1]\n",
291 | "# print('Time Range: {0} to {1}'.format(start_minute, end_minute))\n",
292 | " \n",
293 | " # Create the mask\n",
294 | " mask = ((df_nifty_bank['timestamp'] >= start_minute) & (df_nifty_bank['timestamp'] < end_minute))\n",
295 | " \n",
296 | " df_temp = df_nifty_bank.loc[mask]\n",
297 | " temp_open = df_temp.ltp.values[0]\n",
298 | " temp_low = min(df_temp.ltp.values)\n",
299 | " temp_high = max(df_temp.ltp.values)\n",
300 | " temp_close = df_temp.ltp.values[-1]\n",
301 | " temp_volume = np.mean(df_temp.volume.values)\n",
302 | "# print('Open, High, Low, Close: ', temp_open, temp_high, temp_low, temp_close)\n",
303 | " date.append(start_minute)\n",
304 | " open_.append(temp_open)\n",
305 | " high.append(temp_high)\n",
306 | " low.append(temp_low)\n",
307 | " close.append(temp_close)\n",
308 | " volume.append(temp_volume)\n",
309 | " \n",
310 | "df_minute_data.Date = date\n",
311 | "df_minute_data.Open = open_\n",
312 | "df_minute_data.High = high\n",
313 | "df_minute_data.Low = low\n",
314 | "df_minute_data.Close = close\n",
315 | "df_minute_data.Volume = volume"
316 | ]
317 | },
318 | {
319 | "cell_type": "code",
320 | "execution_count": 133,
321 | "metadata": {},
322 | "outputs": [
323 | {
324 | "data": {
325 | "text/html": [
326 | "\n",
327 | "\n",
340 | "
\n",
341 | " \n",
342 | " \n",
343 | " | \n",
344 | " Open | \n",
345 | " High | \n",
346 | " Low | \n",
347 | " Close | \n",
348 | " Volume | \n",
349 | "
\n",
350 | " \n",
351 | " \n",
352 | " \n",
353 | " count | \n",
354 | " 374.000000 | \n",
355 | " 374.00000 | \n",
356 | " 374.000000 | \n",
357 | " 374.000000 | \n",
358 | " 374.0 | \n",
359 | "
\n",
360 | " \n",
361 | " mean | \n",
362 | " 14508.464973 | \n",
363 | " 14513.25762 | \n",
364 | " 14503.904144 | \n",
365 | " 14508.375267 | \n",
366 | " 0.0 | \n",
367 | "
\n",
368 | " \n",
369 | " std | \n",
370 | " 33.371092 | \n",
371 | " 32.47818 | \n",
372 | " 33.687727 | \n",
373 | " 33.204302 | \n",
374 | " 0.0 | \n",
375 | "
\n",
376 | " \n",
377 | " min | \n",
378 | " 14419.850000 | \n",
379 | " 14426.55000 | \n",
380 | " 14415.350000 | \n",
381 | " 14420.150000 | \n",
382 | " 0.0 | \n",
383 | "
\n",
384 | " \n",
385 | " 25% | \n",
386 | " 14482.612500 | \n",
387 | " 14486.02500 | \n",
388 | " 14478.575000 | \n",
389 | " 14482.637500 | \n",
390 | " 0.0 | \n",
391 | "
\n",
392 | " \n",
393 | " 50% | \n",
394 | " 14518.725000 | \n",
395 | " 14523.07500 | \n",
396 | " 14514.600000 | \n",
397 | " 14517.775000 | \n",
398 | " 0.0 | \n",
399 | "
\n",
400 | " \n",
401 | " 75% | \n",
402 | " 14534.987500 | \n",
403 | " 14538.43750 | \n",
404 | " 14529.975000 | \n",
405 | " 14535.000000 | \n",
406 | " 0.0 | \n",
407 | "
\n",
408 | " \n",
409 | " max | \n",
410 | " 14566.550000 | \n",
411 | " 14572.65000 | \n",
412 | " 14562.950000 | \n",
413 | " 14567.200000 | \n",
414 | " 0.0 | \n",
415 | "
\n",
416 | " \n",
417 | "
\n",
418 | "
"
419 | ],
420 | "text/plain": [
421 | " Open High Low Close Volume\n",
422 | "count 374.000000 374.00000 374.000000 374.000000 374.0\n",
423 | "mean 14508.464973 14513.25762 14503.904144 14508.375267 0.0\n",
424 | "std 33.371092 32.47818 33.687727 33.204302 0.0\n",
425 | "min 14419.850000 14426.55000 14415.350000 14420.150000 0.0\n",
426 | "25% 14482.612500 14486.02500 14478.575000 14482.637500 0.0\n",
427 | "50% 14518.725000 14523.07500 14514.600000 14517.775000 0.0\n",
428 | "75% 14534.987500 14538.43750 14529.975000 14535.000000 0.0\n",
429 | "max 14566.550000 14572.65000 14562.950000 14567.200000 0.0"
430 | ]
431 | },
432 | "execution_count": 133,
433 | "metadata": {},
434 | "output_type": "execute_result"
435 | }
436 | ],
437 | "source": [
438 | "df_minute_data.describe()"
439 | ]
440 | },
441 | {
442 | "cell_type": "code",
443 | "execution_count": 134,
444 | "metadata": {},
445 | "outputs": [
446 | {
447 | "data": {
448 | "text/html": [
449 | "\n",
450 | "\n",
463 | "
\n",
464 | " \n",
465 | " \n",
466 | " | \n",
467 | " Date | \n",
468 | " Open | \n",
469 | " High | \n",
470 | " Low | \n",
471 | " Close | \n",
472 | " Volume | \n",
473 | "
\n",
474 | " \n",
475 | " \n",
476 | " \n",
477 | " 0 | \n",
478 | " 2021-03-26 09:15:00 | \n",
479 | " 14487.70 | \n",
480 | " 14496.2 | \n",
481 | " 14487.70 | \n",
482 | " 14493.25 | \n",
483 | " 0.0 | \n",
484 | "
\n",
485 | " \n",
486 | " 1 | \n",
487 | " 2021-03-26 09:16:00 | \n",
488 | " 14494.10 | \n",
489 | " 14494.1 | \n",
490 | " 14461.25 | \n",
491 | " 14468.90 | \n",
492 | " 0.0 | \n",
493 | "
\n",
494 | " \n",
495 | " 2 | \n",
496 | " 2021-03-26 09:17:00 | \n",
497 | " 14468.40 | \n",
498 | " 14474.7 | \n",
499 | " 14458.65 | \n",
500 | " 14464.30 | \n",
501 | " 0.0 | \n",
502 | "
\n",
503 | " \n",
504 | " 3 | \n",
505 | " 2021-03-26 09:18:00 | \n",
506 | " 14464.60 | \n",
507 | " 14487.7 | \n",
508 | " 14464.60 | \n",
509 | " 14482.75 | \n",
510 | " 0.0 | \n",
511 | "
\n",
512 | " \n",
513 | " 4 | \n",
514 | " 2021-03-26 09:19:00 | \n",
515 | " 14481.25 | \n",
516 | " 14483.2 | \n",
517 | " 14461.45 | \n",
518 | " 14462.55 | \n",
519 | " 0.0 | \n",
520 | "
\n",
521 | " \n",
522 | "
\n",
523 | "
"
524 | ],
525 | "text/plain": [
526 | " Date Open High Low Close Volume\n",
527 | "0 2021-03-26 09:15:00 14487.70 14496.2 14487.70 14493.25 0.0\n",
528 | "1 2021-03-26 09:16:00 14494.10 14494.1 14461.25 14468.90 0.0\n",
529 | "2 2021-03-26 09:17:00 14468.40 14474.7 14458.65 14464.30 0.0\n",
530 | "3 2021-03-26 09:18:00 14464.60 14487.7 14464.60 14482.75 0.0\n",
531 | "4 2021-03-26 09:19:00 14481.25 14483.2 14461.45 14462.55 0.0"
532 | ]
533 | },
534 | "execution_count": 134,
535 | "metadata": {},
536 | "output_type": "execute_result"
537 | }
538 | ],
539 | "source": [
540 | "df_minute_data.head()"
541 | ]
542 | },
543 | {
544 | "cell_type": "code",
545 | "execution_count": 135,
546 | "metadata": {},
547 | "outputs": [
548 | {
549 | "data": {
550 | "text/html": [
551 | "\n",
552 | "\n",
565 | "
\n",
566 | " \n",
567 | " \n",
568 | " | \n",
569 | " Date | \n",
570 | " Open | \n",
571 | " High | \n",
572 | " Low | \n",
573 | " Close | \n",
574 | " Volume | \n",
575 | "
\n",
576 | " \n",
577 | " \n",
578 | " \n",
579 | " 369 | \n",
580 | " 2021-03-26 15:24:00 | \n",
581 | " 14524.45 | \n",
582 | " 14530.55 | \n",
583 | " 14520.40 | \n",
584 | " 14522.65 | \n",
585 | " 0.0 | \n",
586 | "
\n",
587 | " \n",
588 | " 370 | \n",
589 | " 2021-03-26 15:25:00 | \n",
590 | " 14523.00 | \n",
591 | " 14528.10 | \n",
592 | " 14520.75 | \n",
593 | " 14528.10 | \n",
594 | " 0.0 | \n",
595 | "
\n",
596 | " \n",
597 | " 371 | \n",
598 | " 2021-03-26 15:26:00 | \n",
599 | " 14528.35 | \n",
600 | " 14537.30 | \n",
601 | " 14526.90 | \n",
602 | " 14530.35 | \n",
603 | " 0.0 | \n",
604 | "
\n",
605 | " \n",
606 | " 372 | \n",
607 | " 2021-03-26 15:27:00 | \n",
608 | " 14532.50 | \n",
609 | " 14532.85 | \n",
610 | " 14526.50 | \n",
611 | " 14528.10 | \n",
612 | " 0.0 | \n",
613 | "
\n",
614 | " \n",
615 | " 373 | \n",
616 | " 2021-03-26 15:28:00 | \n",
617 | " 14528.70 | \n",
618 | " 14530.05 | \n",
619 | " 14522.70 | \n",
620 | " 14524.45 | \n",
621 | " 0.0 | \n",
622 | "
\n",
623 | " \n",
624 | "
\n",
625 | "
"
626 | ],
627 | "text/plain": [
628 | " Date Open High Low Close Volume\n",
629 | "369 2021-03-26 15:24:00 14524.45 14530.55 14520.40 14522.65 0.0\n",
630 | "370 2021-03-26 15:25:00 14523.00 14528.10 14520.75 14528.10 0.0\n",
631 | "371 2021-03-26 15:26:00 14528.35 14537.30 14526.90 14530.35 0.0\n",
632 | "372 2021-03-26 15:27:00 14532.50 14532.85 14526.50 14528.10 0.0\n",
633 | "373 2021-03-26 15:28:00 14528.70 14530.05 14522.70 14524.45 0.0"
634 | ]
635 | },
636 | "execution_count": 135,
637 | "metadata": {},
638 | "output_type": "execute_result"
639 | }
640 | ],
641 | "source": [
642 | "df_minute_data.tail()"
643 | ]
644 | },
645 | {
646 | "cell_type": "code",
647 | "execution_count": 137,
648 | "metadata": {},
649 | "outputs": [],
650 | "source": [
651 | "# Save per minute data to disk\n",
652 | "\n",
653 | "# df_minute_data.to_csv('/home/debashis/Data/Finance_Data/Live_data_work/Minutes_data/'+str(today)+'_per_minutes_NIFTY_.csv',\n",
654 | "# index=False)"
655 | ]
656 | },
657 | {
658 | "cell_type": "code",
659 | "execution_count": null,
660 | "metadata": {},
661 | "outputs": [],
662 | "source": []
663 | },
664 | {
665 | "cell_type": "code",
666 | "execution_count": null,
667 | "metadata": {},
668 | "outputs": [],
669 | "source": []
670 | }
671 | ],
672 | "metadata": {
673 | "kernelspec": {
674 | "display_name": "Python 3",
675 | "language": "python",
676 | "name": "python3"
677 | },
678 | "language_info": {
679 | "codemirror_mode": {
680 | "name": "ipython",
681 | "version": 3
682 | },
683 | "file_extension": ".py",
684 | "mimetype": "text/x-python",
685 | "name": "python",
686 | "nbconvert_exporter": "python",
687 | "pygments_lexer": "ipython3",
688 | "version": "3.6.9"
689 | }
690 | },
691 | "nbformat": 4,
692 | "nbformat_minor": 2
693 | }
694 |
--------------------------------------------------------------------------------
/Data_Analytics_works/Tick data to Minutes OHLC data .ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | " Here seconds tick data is converted to per minute OHLC"
8 | ]
9 | },
10 | {
11 | "cell_type": "code",
12 | "execution_count": 125,
13 | "metadata": {},
14 | "outputs": [],
15 | "source": [
16 | "import pandas as pd\n",
17 | "import numpy as np\n",
18 | "from datetime import date"
19 | ]
20 | },
21 | {
22 | "cell_type": "code",
23 | "execution_count": 126,
24 | "metadata": {
25 | "scrolled": true
26 | },
27 | "outputs": [
28 | {
29 | "data": {
30 | "text/html": [
31 | "\n",
32 | "\n",
45 | "
\n",
46 | " \n",
47 | " \n",
48 | " | \n",
49 | " timestamp | \n",
50 | " ltp | \n",
51 | " volume | \n",
52 | "
\n",
53 | " \n",
54 | " \n",
55 | " \n",
56 | " 0 | \n",
57 | " 2021-03-26 09:15:49 | \n",
58 | " 14487.70 | \n",
59 | " 0 | \n",
60 | "
\n",
61 | " \n",
62 | " 1 | \n",
63 | " 2021-03-26 09:15:50 | \n",
64 | " 14489.60 | \n",
65 | " 0 | \n",
66 | "
\n",
67 | " \n",
68 | " 2 | \n",
69 | " 2021-03-26 09:15:51 | \n",
70 | " 14490.35 | \n",
71 | " 0 | \n",
72 | "
\n",
73 | " \n",
74 | " 3 | \n",
75 | " 2021-03-26 09:15:52 | \n",
76 | " 14492.20 | \n",
77 | " 0 | \n",
78 | "
\n",
79 | " \n",
80 | " 4 | \n",
81 | " 2021-03-26 09:15:53 | \n",
82 | " 14493.95 | \n",
83 | " 0 | \n",
84 | "
\n",
85 | " \n",
86 | "
\n",
87 | "
"
88 | ],
89 | "text/plain": [
90 | " timestamp ltp volume\n",
91 | "0 2021-03-26 09:15:49 14487.70 0\n",
92 | "1 2021-03-26 09:15:50 14489.60 0\n",
93 | "2 2021-03-26 09:15:51 14490.35 0\n",
94 | "3 2021-03-26 09:15:52 14492.20 0\n",
95 | "4 2021-03-26 09:15:53 14493.95 0"
96 | ]
97 | },
98 | "execution_count": 126,
99 | "metadata": {},
100 | "output_type": "execute_result"
101 | }
102 | ],
103 | "source": [
104 | "# Here I have kept tick data in the dataframe\n",
105 | "path = '/home/debashis/Data/Finance_Data/Live_data_work/scripts/Tick_data3/'\n",
106 | "df_nifty_bank = pd.read_csv(path+'Nifty_26_march.csv', low_memory=False)\n",
107 | "df_nifty_bank.head()"
108 | ]
109 | },
110 | {
111 | "cell_type": "code",
112 | "execution_count": 127,
113 | "metadata": {},
114 | "outputs": [
115 | {
116 | "data": {
117 | "text/html": [
118 | "\n",
119 | "\n",
132 | "
\n",
133 | " \n",
134 | " \n",
135 | " | \n",
136 | " timestamp | \n",
137 | " ltp | \n",
138 | " volume | \n",
139 | "
\n",
140 | " \n",
141 | " \n",
142 | " \n",
143 | " 0 | \n",
144 | " 2021-03-26 09:15:49 | \n",
145 | " 14487.70 | \n",
146 | " 0 | \n",
147 | "
\n",
148 | " \n",
149 | " 1 | \n",
150 | " 2021-03-26 09:15:50 | \n",
151 | " 14489.60 | \n",
152 | " 0 | \n",
153 | "
\n",
154 | " \n",
155 | " 2 | \n",
156 | " 2021-03-26 09:15:51 | \n",
157 | " 14490.35 | \n",
158 | " 0 | \n",
159 | "
\n",
160 | " \n",
161 | " 3 | \n",
162 | " 2021-03-26 09:15:52 | \n",
163 | " 14492.20 | \n",
164 | " 0 | \n",
165 | "
\n",
166 | " \n",
167 | " 4 | \n",
168 | " 2021-03-26 09:15:53 | \n",
169 | " 14493.95 | \n",
170 | " 0 | \n",
171 | "
\n",
172 | " \n",
173 | "
\n",
174 | "
"
175 | ],
176 | "text/plain": [
177 | " timestamp ltp volume\n",
178 | "0 2021-03-26 09:15:49 14487.70 0\n",
179 | "1 2021-03-26 09:15:50 14489.60 0\n",
180 | "2 2021-03-26 09:15:51 14490.35 0\n",
181 | "3 2021-03-26 09:15:52 14492.20 0\n",
182 | "4 2021-03-26 09:15:53 14493.95 0"
183 | ]
184 | },
185 | "execution_count": 127,
186 | "metadata": {},
187 | "output_type": "execute_result"
188 | }
189 | ],
190 | "source": [
191 | "# timestamp is treated as date_time here\n",
192 | "df_nifty_bank['timestamp'] = pd.to_datetime(df_nifty_bank['timestamp'])\n",
193 | "df_nifty_bank.head()"
194 | ]
195 | },
196 | {
197 | "cell_type": "code",
198 | "execution_count": 128,
199 | "metadata": {},
200 | "outputs": [],
201 | "source": [
202 | "# df_nifty_bank.timestamp.values[0]"
203 | ]
204 | },
205 | {
206 | "cell_type": "markdown",
207 | "metadata": {},
208 | "source": [
209 | " Task:\n",
210 | " - Present data in each seconds\n",
211 | " - Generate OHLC for each minute\n",
212 | " "
213 | ]
214 | },
215 | {
216 | "cell_type": "code",
217 | "execution_count": 129,
218 | "metadata": {},
219 | "outputs": [
220 | {
221 | "name": "stdout",
222 | "output_type": "stream",
223 | "text": [
224 | "Today date is: 2021-03-26\n"
225 | ]
226 | }
227 | ],
228 | "source": [
229 | "# Returns the current local date\n",
230 | "# today = date.today()\n",
231 | "today = '2021-03-26'\n",
232 | "print(\"Today date is: \", today)"
233 | ]
234 | },
235 | {
236 | "cell_type": "code",
237 | "execution_count": 130,
238 | "metadata": {},
239 | "outputs": [
240 | {
241 | "name": "stdout",
242 | "output_type": "stream",
243 | "text": [
244 | "Start time: 2021-03-26 09:15:00, End time: 2021-03-26 15:29:00\n"
245 | ]
246 | }
247 | ],
248 | "source": [
249 | "start_time = str(today)+' 09:15:00'\n",
250 | "end_time = str(today)+' 15:29:00'\n",
251 | "print('Start time: {0}, End time: {1}'.format(start_time, end_time))"
252 | ]
253 | },
254 | {
255 | "cell_type": "code",
256 | "execution_count": 131,
257 | "metadata": {},
258 | "outputs": [
259 | {
260 | "name": "stdout",
261 | "output_type": "stream",
262 | "text": [
263 | "Length of Minutes data: 375\n"
264 | ]
265 | }
266 | ],
267 | "source": [
268 | "# create minute-wise timestamp\n",
269 | "time_bin_1_min = pd.date_range(start=start_time, end = end_time, freq='1min')\n",
270 | "print('Length of Minutes data: ', len(time_bin_1_min))"
271 | ]
272 | },
273 | {
274 | "cell_type": "code",
275 | "execution_count": 132,
276 | "metadata": {},
277 | "outputs": [],
278 | "source": [
279 | "# Create the data frame\n",
280 | "required_columns = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume']\n",
281 | "df_minute_data = pd.DataFrame(columns=required_columns)\n",
282 | "df_minute_data.head()\n",
283 | "\n",
284 | "# Create empty lists to store data\n",
285 | "date, open_, high, low, close, volume = [], [], [], [], [], []\n",
286 | "\n",
287 | "for x in range(len(time_bin_1_min)-1):\n",
288 | " # Collect all LTP data for this minute\n",
289 | " start_minute = time_bin_1_min[x]\n",
290 | " end_minute = time_bin_1_min[x+1]\n",
291 | "# print('Time Range: {0} to {1}'.format(start_minute, end_minute))\n",
292 | " \n",
293 | " # Create the mask\n",
294 | " mask = ((df_nifty_bank['timestamp'] >= start_minute) & (df_nifty_bank['timestamp'] < end_minute))\n",
295 | " \n",
296 | " df_temp = df_nifty_bank.loc[mask]\n",
297 | " temp_open = df_temp.ltp.values[0]\n",
298 | " temp_low = min(df_temp.ltp.values)\n",
299 | " temp_high = max(df_temp.ltp.values)\n",
300 | " temp_close = df_temp.ltp.values[-1]\n",
301 | " temp_volume = np.mean(df_temp.volume.values)\n",
302 | "# print('Open, High, Low, Close: ', temp_open, temp_high, temp_low, temp_close)\n",
303 | " date.append(start_minute)\n",
304 | " open_.append(temp_open)\n",
305 | " high.append(temp_high)\n",
306 | " low.append(temp_low)\n",
307 | " close.append(temp_close)\n",
308 | " volume.append(temp_volume)\n",
309 | " \n",
310 | "df_minute_data.Date = date\n",
311 | "df_minute_data.Open = open_\n",
312 | "df_minute_data.High = high\n",
313 | "df_minute_data.Low = low\n",
314 | "df_minute_data.Close = close\n",
315 | "df_minute_data.Volume = volume"
316 | ]
317 | },
318 | {
319 | "cell_type": "code",
320 | "execution_count": 133,
321 | "metadata": {},
322 | "outputs": [
323 | {
324 | "data": {
325 | "text/html": [
326 | "\n",
327 | "\n",
340 | "
\n",
341 | " \n",
342 | " \n",
343 | " | \n",
344 | " Open | \n",
345 | " High | \n",
346 | " Low | \n",
347 | " Close | \n",
348 | " Volume | \n",
349 | "
\n",
350 | " \n",
351 | " \n",
352 | " \n",
353 | " count | \n",
354 | " 374.000000 | \n",
355 | " 374.00000 | \n",
356 | " 374.000000 | \n",
357 | " 374.000000 | \n",
358 | " 374.0 | \n",
359 | "
\n",
360 | " \n",
361 | " mean | \n",
362 | " 14508.464973 | \n",
363 | " 14513.25762 | \n",
364 | " 14503.904144 | \n",
365 | " 14508.375267 | \n",
366 | " 0.0 | \n",
367 | "
\n",
368 | " \n",
369 | " std | \n",
370 | " 33.371092 | \n",
371 | " 32.47818 | \n",
372 | " 33.687727 | \n",
373 | " 33.204302 | \n",
374 | " 0.0 | \n",
375 | "
\n",
376 | " \n",
377 | " min | \n",
378 | " 14419.850000 | \n",
379 | " 14426.55000 | \n",
380 | " 14415.350000 | \n",
381 | " 14420.150000 | \n",
382 | " 0.0 | \n",
383 | "
\n",
384 | " \n",
385 | " 25% | \n",
386 | " 14482.612500 | \n",
387 | " 14486.02500 | \n",
388 | " 14478.575000 | \n",
389 | " 14482.637500 | \n",
390 | " 0.0 | \n",
391 | "
\n",
392 | " \n",
393 | " 50% | \n",
394 | " 14518.725000 | \n",
395 | " 14523.07500 | \n",
396 | " 14514.600000 | \n",
397 | " 14517.775000 | \n",
398 | " 0.0 | \n",
399 | "
\n",
400 | " \n",
401 | " 75% | \n",
402 | " 14534.987500 | \n",
403 | " 14538.43750 | \n",
404 | " 14529.975000 | \n",
405 | " 14535.000000 | \n",
406 | " 0.0 | \n",
407 | "
\n",
408 | " \n",
409 | " max | \n",
410 | " 14566.550000 | \n",
411 | " 14572.65000 | \n",
412 | " 14562.950000 | \n",
413 | " 14567.200000 | \n",
414 | " 0.0 | \n",
415 | "
\n",
416 | " \n",
417 | "
\n",
418 | "
"
419 | ],
420 | "text/plain": [
421 | " Open High Low Close Volume\n",
422 | "count 374.000000 374.00000 374.000000 374.000000 374.0\n",
423 | "mean 14508.464973 14513.25762 14503.904144 14508.375267 0.0\n",
424 | "std 33.371092 32.47818 33.687727 33.204302 0.0\n",
425 | "min 14419.850000 14426.55000 14415.350000 14420.150000 0.0\n",
426 | "25% 14482.612500 14486.02500 14478.575000 14482.637500 0.0\n",
427 | "50% 14518.725000 14523.07500 14514.600000 14517.775000 0.0\n",
428 | "75% 14534.987500 14538.43750 14529.975000 14535.000000 0.0\n",
429 | "max 14566.550000 14572.65000 14562.950000 14567.200000 0.0"
430 | ]
431 | },
432 | "execution_count": 133,
433 | "metadata": {},
434 | "output_type": "execute_result"
435 | }
436 | ],
437 | "source": [
438 | "df_minute_data.describe()"
439 | ]
440 | },
441 | {
442 | "cell_type": "code",
443 | "execution_count": 134,
444 | "metadata": {},
445 | "outputs": [
446 | {
447 | "data": {
448 | "text/html": [
449 | "\n",
450 | "\n",
463 | "
\n",
464 | " \n",
465 | " \n",
466 | " | \n",
467 | " Date | \n",
468 | " Open | \n",
469 | " High | \n",
470 | " Low | \n",
471 | " Close | \n",
472 | " Volume | \n",
473 | "
\n",
474 | " \n",
475 | " \n",
476 | " \n",
477 | " 0 | \n",
478 | " 2021-03-26 09:15:00 | \n",
479 | " 14487.70 | \n",
480 | " 14496.2 | \n",
481 | " 14487.70 | \n",
482 | " 14493.25 | \n",
483 | " 0.0 | \n",
484 | "
\n",
485 | " \n",
486 | " 1 | \n",
487 | " 2021-03-26 09:16:00 | \n",
488 | " 14494.10 | \n",
489 | " 14494.1 | \n",
490 | " 14461.25 | \n",
491 | " 14468.90 | \n",
492 | " 0.0 | \n",
493 | "
\n",
494 | " \n",
495 | " 2 | \n",
496 | " 2021-03-26 09:17:00 | \n",
497 | " 14468.40 | \n",
498 | " 14474.7 | \n",
499 | " 14458.65 | \n",
500 | " 14464.30 | \n",
501 | " 0.0 | \n",
502 | "
\n",
503 | " \n",
504 | " 3 | \n",
505 | " 2021-03-26 09:18:00 | \n",
506 | " 14464.60 | \n",
507 | " 14487.7 | \n",
508 | " 14464.60 | \n",
509 | " 14482.75 | \n",
510 | " 0.0 | \n",
511 | "
\n",
512 | " \n",
513 | " 4 | \n",
514 | " 2021-03-26 09:19:00 | \n",
515 | " 14481.25 | \n",
516 | " 14483.2 | \n",
517 | " 14461.45 | \n",
518 | " 14462.55 | \n",
519 | " 0.0 | \n",
520 | "
\n",
521 | " \n",
522 | "
\n",
523 | "
"
524 | ],
525 | "text/plain": [
526 | " Date Open High Low Close Volume\n",
527 | "0 2021-03-26 09:15:00 14487.70 14496.2 14487.70 14493.25 0.0\n",
528 | "1 2021-03-26 09:16:00 14494.10 14494.1 14461.25 14468.90 0.0\n",
529 | "2 2021-03-26 09:17:00 14468.40 14474.7 14458.65 14464.30 0.0\n",
530 | "3 2021-03-26 09:18:00 14464.60 14487.7 14464.60 14482.75 0.0\n",
531 | "4 2021-03-26 09:19:00 14481.25 14483.2 14461.45 14462.55 0.0"
532 | ]
533 | },
534 | "execution_count": 134,
535 | "metadata": {},
536 | "output_type": "execute_result"
537 | }
538 | ],
539 | "source": [
540 | "df_minute_data.head()"
541 | ]
542 | },
543 | {
544 | "cell_type": "code",
545 | "execution_count": 135,
546 | "metadata": {},
547 | "outputs": [
548 | {
549 | "data": {
550 | "text/html": [
551 | "\n",
552 | "\n",
565 | "
\n",
566 | " \n",
567 | " \n",
568 | " | \n",
569 | " Date | \n",
570 | " Open | \n",
571 | " High | \n",
572 | " Low | \n",
573 | " Close | \n",
574 | " Volume | \n",
575 | "
\n",
576 | " \n",
577 | " \n",
578 | " \n",
579 | " 369 | \n",
580 | " 2021-03-26 15:24:00 | \n",
581 | " 14524.45 | \n",
582 | " 14530.55 | \n",
583 | " 14520.40 | \n",
584 | " 14522.65 | \n",
585 | " 0.0 | \n",
586 | "
\n",
587 | " \n",
588 | " 370 | \n",
589 | " 2021-03-26 15:25:00 | \n",
590 | " 14523.00 | \n",
591 | " 14528.10 | \n",
592 | " 14520.75 | \n",
593 | " 14528.10 | \n",
594 | " 0.0 | \n",
595 | "
\n",
596 | " \n",
597 | " 371 | \n",
598 | " 2021-03-26 15:26:00 | \n",
599 | " 14528.35 | \n",
600 | " 14537.30 | \n",
601 | " 14526.90 | \n",
602 | " 14530.35 | \n",
603 | " 0.0 | \n",
604 | "
\n",
605 | " \n",
606 | " 372 | \n",
607 | " 2021-03-26 15:27:00 | \n",
608 | " 14532.50 | \n",
609 | " 14532.85 | \n",
610 | " 14526.50 | \n",
611 | " 14528.10 | \n",
612 | " 0.0 | \n",
613 | "
\n",
614 | " \n",
615 | " 373 | \n",
616 | " 2021-03-26 15:28:00 | \n",
617 | " 14528.70 | \n",
618 | " 14530.05 | \n",
619 | " 14522.70 | \n",
620 | " 14524.45 | \n",
621 | " 0.0 | \n",
622 | "
\n",
623 | " \n",
624 | "
\n",
625 | "
"
626 | ],
627 | "text/plain": [
628 | " Date Open High Low Close Volume\n",
629 | "369 2021-03-26 15:24:00 14524.45 14530.55 14520.40 14522.65 0.0\n",
630 | "370 2021-03-26 15:25:00 14523.00 14528.10 14520.75 14528.10 0.0\n",
631 | "371 2021-03-26 15:26:00 14528.35 14537.30 14526.90 14530.35 0.0\n",
632 | "372 2021-03-26 15:27:00 14532.50 14532.85 14526.50 14528.10 0.0\n",
633 | "373 2021-03-26 15:28:00 14528.70 14530.05 14522.70 14524.45 0.0"
634 | ]
635 | },
636 | "execution_count": 135,
637 | "metadata": {},
638 | "output_type": "execute_result"
639 | }
640 | ],
641 | "source": [
642 | "df_minute_data.tail()"
643 | ]
644 | },
645 | {
646 | "cell_type": "code",
647 | "execution_count": 137,
648 | "metadata": {},
649 | "outputs": [],
650 | "source": [
651 | "# Save per minute data to disk\n",
652 | "\n",
653 | "# df_minute_data.to_csv('/home/debashis/Data/Finance_Data/Live_data_work/Minutes_data/'+str(today)+'_per_minutes_NIFTY_.csv',\n",
654 | "# index=False)"
655 | ]
656 | },
657 | {
658 | "cell_type": "code",
659 | "execution_count": null,
660 | "metadata": {},
661 | "outputs": [],
662 | "source": []
663 | },
664 | {
665 | "cell_type": "code",
666 | "execution_count": null,
667 | "metadata": {},
668 | "outputs": [],
669 | "source": []
670 | }
671 | ],
672 | "metadata": {
673 | "kernelspec": {
674 | "display_name": "Python 3",
675 | "language": "python",
676 | "name": "python3"
677 | },
678 | "language_info": {
679 | "codemirror_mode": {
680 | "name": "ipython",
681 | "version": 3
682 | },
683 | "file_extension": ".py",
684 | "mimetype": "text/x-python",
685 | "name": "python",
686 | "nbconvert_exporter": "python",
687 | "pygments_lexer": "ipython3",
688 | "version": "3.6.9"
689 | }
690 | },
691 | "nbformat": 4,
692 | "nbformat_minor": 2
693 | }
694 |
--------------------------------------------------------------------------------
/Frequently used Technical_indicators.txt:
--------------------------------------------------------------------------------
1 | ## Technical indicators
2 |
3 | 1) Simple moving averages(SMA),
4 | 2) Exponential moving average(EMA),
5 | 3) Kaufman's adaptive moving average(KAMA),
6 | 4) Stop or reversal(SAR),
7 | 5) Triangular moving average(TRIMA),
8 | 6) Average directional index(ADX),
9 | 7) Absolute price oscillator(APO),
10 | 8) Commodity channel index(CCI),
11 | 9) Moving average convergence divergence(MACD),
12 | 10) Money flow index(MFI),
13 | 11) Momentum indicator (MOM),
14 | 12) Rate-of-change(ROC),
15 | 13) percentage price oscillator(PPO),
16 | 14) Relative Strength Index (RSI)
17 | 15) Stochastic Oscillator (STOCH)
18 | 16) Ultimate Oscillator (ULTOSC)
19 | 17) Williams % R (WillR)
20 | 18) Average true range (ATR)
21 | 19) True Range - (TRANGE)
22 | 20) Price Transform Functions (TYPPRICE)
23 | 21) Median Price (MEDPRICE)
24 | 22) Typical Price (TYPPRICE)
25 | 23) Weighted Close Price (WCLPRICE)
26 | 24) Hilbert Transform - Dominant Cycle Period (HT_DCPERIOD)
27 | 25) Hilbert Transform - Dominant Cycle Phase (HT_DCPHASE)
28 | 26) Hilbert Transform - Phasor Components (HT_PHASOR)
29 | 27) Hilbert Transform - SineWave (HT_SINE)
30 | 28) Hilbert Transform - Trend vs Cycle Mode (HT_TRENDMODE)
31 | 29) Beta - (BETA)
32 |
33 |
34 | Ref: https://mrjbq7.github.io/ta-lib/
35 |
36 |
--------------------------------------------------------------------------------
/Install Ta-Lib on Linux.txt:
--------------------------------------------------------------------------------
1 | Install Ta-Lib on Linux
2 | -------------------------
3 | sudo apt-get -y install gcc build-essential
4 |
5 |
6 | Install using Anaconda
7 | ----------------------
8 | wget -O inst_conda.sh "https://repo.anaconda.com/archive/Anaconda3-2020.11-Linux-x86_64.sh" \
9 | && /bin/bash inst_conda.sh -b \
10 | && rm inst_conda.sh \
11 | && ./anaconda3/bin/conda init \
12 | && source ~/.bashrc \
13 | && conda create -n quantra python=3.6.8 -y \
14 | && conda activate quantra
15 |
16 |
17 | Install using PIP
18 | ------------------
19 | wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz \
20 | && sudo tar -xzf ta-lib-0.4.0-src.tar.gz \
21 | && sudo rm ta-lib-0.4.0-src.tar.gz \
22 | && cd ta-lib/ \
23 | && sudo ./configure --prefix=/usr \
24 | && sudo make \
25 | && sudo make install \
26 | && cd ~ \
27 | && sudo rm -rf ta-lib/ \
28 | && pip install ta-lib
29 |
30 |
31 |
32 |
33 | Ref: https://blog.quantinsti.com/install-ta-lib-python/
34 |
--------------------------------------------------------------------------------
/Moving_Average_Crossover strategy/50-200 EMA and RSI - Signal generator.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | " Run this program every morning to get Buy and Sell signal\n",
8 | " Based on Moving average and RSI value"
9 | ]
10 | },
11 | {
12 | "cell_type": "code",
13 | "execution_count": 1,
14 | "metadata": {},
15 | "outputs": [],
16 | "source": [
17 | "from nsepy import get_history\n",
18 | "import datetime\n",
19 | "import talib"
20 | ]
21 | },
22 | {
23 | "cell_type": "code",
24 | "execution_count": 2,
25 | "metadata": {},
26 | "outputs": [
27 | {
28 | "name": "stdout",
29 | "output_type": "stream",
30 | "text": [
31 | "Number of stocks in watchlist: 50\n"
32 | ]
33 | }
34 | ],
35 | "source": [
36 | "# Include Nifty50 stocks to watchlist\n",
37 | "watchlist = ['ADANIPORTS', 'ASIANPAINT', 'AXISBANK', 'BAJAJ-AUTO', \n",
38 | " 'BAJFINANCE', 'BAJAJFINSV', 'BPCL', 'BHARTIARTL', \n",
39 | " 'BRITANNIA', 'CIPLA', 'COALINDIA', 'DIVISLAB', \n",
40 | " 'DRREDDY', 'EICHERMOT', 'GAIL', 'GRASIM', \n",
41 | " 'HCLTECH', 'HDFCBANK', 'HDFCLIFE', 'HEROMOTOCO', \n",
42 | " 'HINDALCO', 'HINDUNILVR', 'HDFC', 'ICICIBANK', \n",
43 | " 'ITC', 'IOC', 'INDUSINDBK', 'INFY', 'JSWSTEEL', \n",
44 | " 'KOTAKBANK', 'LT', 'M&M', 'MARUTI', 'NTPC', \n",
45 | " 'NESTLEIND', 'ONGC', 'POWERGRID', 'RELIANCE', \n",
46 | " 'SBILIFE', 'SHREECEM', 'SBIN', 'SUNPHARMA', \n",
47 | " 'TCS', 'TATAMOTORS', 'TATASTEEL', 'TECHM', \n",
48 | " 'TITAN', 'UPL', 'ULTRACEMCO', 'WIPRO']\n",
49 | "print('Number of stocks in watchlist: ', len(watchlist))"
50 | ]
51 | },
52 | {
53 | "cell_type": "markdown",
54 | "metadata": {},
55 | "source": [
56 | " ## Buy Logic\n",
57 | " --------------------\n",
58 | " When MA-50 > MA-200 and RSI above 60\n",
59 | " \n",
60 | " ## Sell Logic\n",
61 | " --------------------\n",
62 | " When MA-50 < MA-200 and RSI below 40"
63 | ]
64 | },
65 | {
66 | "cell_type": "markdown",
67 | "metadata": {},
68 | "source": [
69 | " We can change MA and RSI values according to our requirement"
70 | ]
71 | },
72 | {
73 | "cell_type": "code",
74 | "execution_count": 3,
75 | "metadata": {},
76 | "outputs": [],
77 | "source": [
78 | "short_ema = 50\n",
79 | "long_ema = 200\n",
80 | "\n",
81 | "# Find yesterday date\n",
82 | "today_date = datetime.date.today()\n",
83 | "yesterday_date = today_date - datetime.timedelta(days = 1)\n",
84 | "\n",
85 | "# date format in YYYY,MM,DD\n",
86 | "start_date = datetime.date(2020,1,1)\n",
87 | "end_date = yesterday_date"
88 | ]
89 | },
90 | {
91 | "cell_type": "code",
92 | "execution_count": 4,
93 | "metadata": {},
94 | "outputs": [
95 | {
96 | "name": "stdout",
97 | "output_type": "stream",
98 | "text": [
99 | "Buy signal in ASIANPAINT\n",
100 | "Buy signal in BAJFINANCE\n",
101 | "Buy signal in BPCL\n",
102 | "Buy signal in BRITANNIA\n",
103 | "Buy signal in DIVISLAB\n",
104 | "Buy signal in DRREDDY\n",
105 | "Buy signal in HCLTECH\n",
106 | "Buy signal in HDFCLIFE\n",
107 | "Buy signal in IOC\n",
108 | "Buy signal in INFY\n",
109 | "Buy signal in NTPC\n",
110 | "Buy signal in NESTLEIND\n",
111 | "Buy signal in ONGC\n",
112 | "Buy signal in POWERGRID\n",
113 | "Buy signal in RELIANCE\n",
114 | "Buy signal in SBIN\n",
115 | "Buy signal in TCS\n",
116 | "Buy signal in TATAMOTORS\n",
117 | "Buy signal in TECHM\n",
118 | "Buy signal in TITAN\n",
119 | "Buy signal in UPL\n",
120 | "Buy signal in WIPRO\n"
121 | ]
122 | }
123 | ],
124 | "source": [
125 | "for name in watchlist[:]:\n",
126 | "\n",
127 | " df = get_history(symbol=name, start=start_date, end=yesterday_date) # fetch data for specified date\n",
128 | " df['ma50'] = talib.EMA(df['Close'], timeperiod=short_ema)\n",
129 | " df['ma200'] = talib.EMA(df['Close'], timeperiod=long_ema)\n",
130 | " df['rsi14'] = talib.RSI(df['Close'], timeperiod=14)\n",
131 | "\n",
132 | " last_candle = df.iloc[-1]\n",
133 | "# print((last_candle))\n",
134 | "\n",
135 | " # buy signal\n",
136 | " if (last_candle['ma50'] > last_candle['ma200']) and (last_candle['rsi14'] > 60):\n",
137 | " print(\"Buy signal in \", name)\n",
138 | "\n",
139 | " # sell signal\n",
140 | " if (last_candle['ma50'] < last_candle['ma200']) and (last_candle['rsi14'] < 40):\n",
141 | " print(\"sell signal in \", name)\n",
142 | "\n"
143 | ]
144 | },
145 | {
146 | "cell_type": "code",
147 | "execution_count": 23,
148 | "metadata": {},
149 | "outputs": [],
150 | "source": [
151 | "# df.head(10)"
152 | ]
153 | },
154 | {
155 | "cell_type": "code",
156 | "execution_count": 36,
157 | "metadata": {},
158 | "outputs": [],
159 | "source": [
160 | "# We can also findout, for a particular stock, when was the crossover happened. \n",
161 | "# i.e. on which date this strategy actually generated the buy or sell signal"
162 | ]
163 | },
164 | {
165 | "cell_type": "code",
166 | "execution_count": null,
167 | "metadata": {},
168 | "outputs": [],
169 | "source": [
170 | "# we can also mantain our buy and sell histroy, so that, we can introduce our hold position"
171 | ]
172 | },
173 | {
174 | "cell_type": "code",
175 | "execution_count": null,
176 | "metadata": {},
177 | "outputs": [],
178 | "source": []
179 | },
180 | {
181 | "cell_type": "code",
182 | "execution_count": null,
183 | "metadata": {},
184 | "outputs": [],
185 | "source": []
186 | },
187 | {
188 | "cell_type": "code",
189 | "execution_count": null,
190 | "metadata": {},
191 | "outputs": [],
192 | "source": []
193 | },
194 | {
195 | "cell_type": "code",
196 | "execution_count": null,
197 | "metadata": {},
198 | "outputs": [],
199 | "source": []
200 | },
201 | {
202 | "cell_type": "code",
203 | "execution_count": null,
204 | "metadata": {},
205 | "outputs": [],
206 | "source": []
207 | },
208 | {
209 | "cell_type": "code",
210 | "execution_count": null,
211 | "metadata": {},
212 | "outputs": [],
213 | "source": []
214 | },
215 | {
216 | "cell_type": "code",
217 | "execution_count": null,
218 | "metadata": {},
219 | "outputs": [],
220 | "source": []
221 | },
222 | {
223 | "cell_type": "code",
224 | "execution_count": null,
225 | "metadata": {},
226 | "outputs": [],
227 | "source": []
228 | },
229 | {
230 | "cell_type": "code",
231 | "execution_count": null,
232 | "metadata": {},
233 | "outputs": [],
234 | "source": []
235 | },
236 | {
237 | "cell_type": "code",
238 | "execution_count": null,
239 | "metadata": {},
240 | "outputs": [],
241 | "source": []
242 | }
243 | ],
244 | "metadata": {
245 | "kernelspec": {
246 | "display_name": "Python 3",
247 | "language": "python",
248 | "name": "python3"
249 | },
250 | "language_info": {
251 | "codemirror_mode": {
252 | "name": "ipython",
253 | "version": 3
254 | },
255 | "file_extension": ".py",
256 | "mimetype": "text/x-python",
257 | "name": "python",
258 | "nbconvert_exporter": "python",
259 | "pygments_lexer": "ipython3",
260 | "version": "3.6.9"
261 | }
262 | },
263 | "nbformat": 4,
264 | "nbformat_minor": 4
265 | }
266 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | #
--------------------------------------------------------------------------------
/exploratory-data-analysis-on-5-minute-data.ipynb:
--------------------------------------------------------------------------------
1 | {"cells":[{"source":"
","metadata":{},"cell_type":"markdown","outputs":[],"execution_count":0},{"cell_type":"markdown","id":"8468e5b5","metadata":{"papermill":{"duration":0.005046,"end_time":"2022-08-21T10:00:07.420678","exception":false,"start_time":"2022-08-21T10:00:07.415632","status":"completed"},"tags":[]},"source":["### This is initial data analysis about this dataset. \n","\n"," This contains how to load this dataset and start doing analysis. "]},{"cell_type":"markdown","id":"1f425c0d","metadata":{"papermill":{"duration":0.003621,"end_time":"2022-08-21T10:00:07.428524","exception":false,"start_time":"2022-08-21T10:00:07.424903","status":"completed"},"tags":[]},"source":["# **Steps for EDA**\n","\n","* **Missing values or data**\n"," - Relationship of missing values with target variable\n","* **Check how many are numerical values and categorical values**\n","* **Check for data distribution**\n","* **Check for outliers present in data**\n","* **If any extra features can be created out of the present data**\n","* **Apply feature selection techniques to justify each feature for target value**\n"]},{"cell_type":"code","execution_count":1,"id":"3e52ba19","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","execution":{"iopub.execute_input":"2022-08-21T10:00:07.43914Z","iopub.status.busy":"2022-08-21T10:00:07.4382Z","iopub.status.idle":"2022-08-21T10:00:07.450594Z","shell.execute_reply":"2022-08-21T10:00:07.449579Z"},"papermill":{"duration":0.020745,"end_time":"2022-08-21T10:00:07.453119","exception":false,"start_time":"2022-08-21T10:00:07.432374","status":"completed"},"tags":[]},"outputs":[],"source":["# Import necessary libraries\n","\n","import numpy as np # linear algebra\n","import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n","import os\n","\n","from matplotlib import pyplot as plt # for plotting purposes"]},{"cell_type":"code","execution_count":2,"id":"94dbda8a","metadata":{"execution":{"iopub.execute_input":"2022-08-21T10:00:07.464153Z","iopub.status.busy":"2022-08-21T10:00:07.462857Z","iopub.status.idle":"2022-08-21T10:00:07.480622Z","shell.execute_reply":"2022-08-21T10:00:07.4784Z"},"papermill":{"duration":0.025778,"end_time":"2022-08-21T10:00:07.483063","exception":false,"start_time":"2022-08-21T10:00:07.457285","status":"completed"},"tags":[]},"outputs":[{"name":"stdout","output_type":"stream","text":["/kaggle/input/nifty-50-minute-data/NIFTY 50 - Hourly data.csv\n","/kaggle/input/nifty-50-minute-data/NIFTY 50 - 5minute data.csv\n","/kaggle/input/nifty-50-minute-data/NIFTY 50 - 3 minute data.csv\n","/kaggle/input/nifty-50-minute-data/NIFTY 50 - 15minute data.csv\n","/kaggle/input/nifty-50-minute-data/NIFTY 50 - Minute data.csv\n","/kaggle/input/nifty-50-minute-data/NIFTY 50 - Daily data.csv\n"]}],"source":["# List of files availeble in the current directory\n","for dirname, _, filenames in os.walk('/kaggle/input'):\n"," for filename in filenames:\n"," print(os.path.join(dirname, filename))"]},{"cell_type":"code","execution_count":3,"id":"2fa6d42d","metadata":{"execution":{"iopub.execute_input":"2022-08-21T10:00:07.493712Z","iopub.status.busy":"2022-08-21T10:00:07.492954Z","iopub.status.idle":"2022-08-21T10:00:07.500212Z","shell.execute_reply":"2022-08-21T10:00:07.49835Z"},"papermill":{"duration":0.015567,"end_time":"2022-08-21T10:00:07.502842","exception":false,"start_time":"2022-08-21T10:00:07.487275","status":"completed"},"tags":[]},"outputs":[{"name":"stdout","output_type":"stream","text":["NIFTY 50 - 5minute data.csv\n","Data path: /kaggle/input/nifty-50-minute-data/NIFTY 50 - 5minute data.csv\n"]}],"source":["# Here clarify about the data is loaded or not\n","filename = 'NIFTY 50 - 5minute data.csv'\n","print(filename)\n","data_path = os.path.join(dirname, filename)\n","print('Data path: ', data_path)"]},{"cell_type":"code","execution_count":4,"id":"8ed2b4cb","metadata":{"execution":{"iopub.execute_input":"2022-08-21T10:00:07.513459Z","iopub.status.busy":"2022-08-21T10:00:07.512957Z","iopub.status.idle":"2022-08-21T10:00:07.806508Z","shell.execute_reply":"2022-08-21T10:00:07.804671Z"},"papermill":{"duration":0.301936,"end_time":"2022-08-21T10:00:07.80912","exception":false,"start_time":"2022-08-21T10:00:07.507184","status":"completed"},"tags":[]},"outputs":[{"name":"stdout","output_type":"stream","text":[" date open high low close volume\n","0 2015-01-09 09:15:00+05:30 8285.45 8301.30 8285.45 8301.20 0\n","1 2015-01-09 09:20:00+05:30 8300.50 8303.00 8293.25 8301.00 0\n","2 2015-01-09 09:25:00+05:30 8301.65 8302.55 8286.80 8294.15 0\n","3 2015-01-09 09:30:00+05:30 8294.10 8295.75 8280.65 8288.50 0\n","4 2015-01-09 09:35:00+05:30 8289.10 8290.45 8278.00 8283.45 0\n"]}],"source":["# Read dataset into dataframe\n","dataset = pd.read_csv(data_path)\n","print(dataset.head())"]},{"cell_type":"markdown","id":"d98f29f3","metadata":{"papermill":{"duration":0.00402,"end_time":"2022-08-21T10:00:07.81754","exception":false,"start_time":"2022-08-21T10:00:07.81352","status":"completed"},"tags":[]},"source":["### Since this data belongs to index category, so volume data is not available"]},{"cell_type":"code","execution_count":5,"id":"a03216b3","metadata":{"execution":{"iopub.execute_input":"2022-08-21T10:00:07.82816Z","iopub.status.busy":"2022-08-21T10:00:07.827669Z","iopub.status.idle":"2022-08-21T10:00:08.129519Z","shell.execute_reply":"2022-08-21T10:00:08.128457Z"},"papermill":{"duration":0.310342,"end_time":"2022-08-21T10:00:08.132128","exception":false,"start_time":"2022-08-21T10:00:07.821786","status":"completed"},"tags":[]},"outputs":[{"data":{"text/plain":["[]"]},"execution_count":5,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAuAAAAGDCAYAAABqVqVgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAABgaElEQVR4nO3dd3hUxfoH8O+bnpAKCb2E3nukShGQqmK91+5Vr91rL0ERFBWxXP3ptberXhULdukKSJEWkF4DBAgdAklISJ/fH3u2Zc9udpPds5vN9/M8eThnZs7Z2WUD787OvCNKKRARERERkTFC/N0BIiIiIqK6hAE4EREREZGBGIATERERERmIATgRERERkYEYgBMRERERGYgBOBERERGRgRiAExHVIiJyVkTaaMfRIvKLiOSKyLf+7psrIrJERP7p734QEQUCBuBERAFCRLJE5LiI1LMp+6eILDGfK6VilVJ7tdMrATQC0EApdZWIfCIiz9Xg8ZeISJEW5J8VkZ2V6q8Vkf0iUiAiP4pI/eo+VhX9yBKRUb64NxFRIGAATkQUWEIB3O9m21YAdimlyrz4+PdqQX6sUqqjuVBEugJ4D8ANMAX9hQDe9uLjEhHVGQzAiYgCy8sAHhGRRL1KEVEi0k5EngEwBcDftdHqOwBcB+Ax7fwXEXlURL6rdP0bIvJ6Nfp1HYBflFJLlVJnATwF4HIRiXPSzwtFZIc2PeZNAGJT11ZEFonIKRE5KSJfmJ+viPwPQEsAv2jP4zGt/FsROardb6n2gYCIqFZiAE5EFFgyACwB8IirRkqpqQCmA/haG61+D8AXAF7Szi8G8DmAsTbBbRiAqwF85uLWL2hB8QoRGW5T3hXARpvH3wOgBECHyjcQkWQA3wOYDCAZwB4Ag22bAHgBQFMAnQG0APC0dt8bABwAcLH2PF7SrpkLoD2AhgDWa8+ViKhWYgBORBR4pgD4l4ik1OQmSqkjAJYCuEorGgvgpFJqnZNLHgfQBkAzAO/DNArdVquLBZBbqX0uAL0R8PEAtiqlZimlSgH8H4CjNv3KVEotVEoVK6VOAHgVwLAqnsvHSql8pVQxTMF6TxFJcHUNEVGgYgBORBRglFJbAPwKIN0Lt/sUwPXa8fUA/uficVebg1yl1KcAVsAUTAPAWQDxlS6JB5Cvc6umAA7a3FfZnotIIxH5SkQOiUgeTCP1yc76JSKhIjJDRPZo7bO0KqfXEBEFMgbgRESBaSqA22AajXaX0in7EUAPEekG4CJ4NnVDwTp3eyuAnuYKLRViJIBdOtcdgWlaibmt2J7DNHVGAeiulIqH6YOB2NRXfh7XApgIYBSABACp5lt78FyIiAIGA3AiogCklMoE8DWA+zy47BhMU0hs71MEYBaALwGsUUod0LtQRBJFZIyIRIlImIhcB2AogHlaky8AXCwiQ7Q0idMAfK+U0hsBnw2gq4hcrs07vw9AY5v6OJhG1HNFpBmAR6t4HnEAigGcAhADUwBPRFRrMQAnIgpc0wDUq7KV1UcAuojIGRH50ab8UwDd4WL6CYBwAM8BOAHgJIB/AbhUKbULAJRSWwHcCVMgfhymoPhuvRsppU7CNO98BkxBc3uYprOYPQOgD0xzyGfDtGDT1gsAJmvP4xGYFo3uB3AIwDYAq1w8DyKigCemqXlERBSsRKQlgB0AGiul8vzdHyKiuo4j4EREQUxEQgA8BOArBt9ERIEhzN8dICIi39Dmah+DafrGWD93h4iINJyCQkRERERkIE5BISIiIiIyEANwIiIiIiID1bk54MnJySo1NdXf3SAiIiKiILZu3bqTSqkUvbo6F4CnpqYiIyPD390gIiIioiAmIvud1XEKChERERGRgRiAExEREREZiAE4EREREZGBGIATERERERmIATgRERERkYEYgBMRERERGYgBOBERERGRgRiAExEREREZiAE4EREREZGBGIATERERERmIATgRERERkYEYgBMRERGRz2Uez/d3FwIGA3AiIiIi8qk5m49g1KtLMW/LUX93JSAwACciIiIin7r7i/UAgB1H8/zck8DAAJyIiIiIDHEsr8jfXQgIDMCJiIiIyBAz1xz0dxcCAgNwIiIiIiIDMQAnIiIiolqpqLQcpeUV/u6GxxiAExEREZFhUtNnY/2B0165V6en5uH8Fxd55V5GYgBORERERD5TXqEcyi5/+88a33fd/hwAwLG84hrfy2gMwImIiIjIZ4pKy31y3yveWemT+xqBATgRERER+UxxmfM52rnnSpGRlePxPSt0RtVrEwbgREREROQz7yzJdFp3zxfrceW7K1FQXObRPRduP1bTbvkVA3AiIiIi8pkPlu1zWrc88yQA4Ou1nuUHb5IQVaM++ZvPAnAR+VhEjovIFpuyXiKySkQ2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uEeEhViCbyIicq5+DTZ4I6pLGICTV9mOgNeU7XxrvQ1vzHK0HTMf+dYUVH+Tke20bUFxGTpOnufQxnZEe93+09XqLxFRXfePQakAgMt7N/NvR4gCHANw8opFDw8DADxzSVev3jdrxgTdhY/X9m9pd55TUILkWOsodWr6bN0pJl2nzncoy5oxAU9d1MWrHx6IiOqiS3s3w1V9m+OJCTXf8I0omIkvNjMJZGlpaSojI8Pf3aAaOpZXhP7Tf3fZ5v0b+mJ018aW88NnzmHQjEV2bUIE2PuCNcDPLypFeGgI89kSERFRjYjIOqVUml4dR8CpVmoUH4X+reu7bHNKm5piZp6iYuubOwbancdFhTP4JiIiIp9iAE611rvX93VZn1MpAI/WCazbpHDaCRERERmLaQip1kqqF4HrB7TE56sOAABGdW6I37Yft9SfPGufCuv3Haa6NU+ORIN6kTiRX8wV+0RERGQ4joBTrXb/yA6W43X7T2PbtDGW8/+uyNK9pmFcFEJDxGGzHyIiIiIjMACnWs02P3dBSTliIsLwt7Tmdm3WHziNE9wYgoiIiAIEp6BQ0Jh+WXcAwEtX9rTk+Z696Qju+XK9P7tFREREZIcBONV626aNwaHT59C+UZxDHYNvIiIiCjScgkK1XkxEmG7wradeBFMMEhERkX8xAKc6paCk3N9dICIiojqOATgFpRev6O7vLhARERHpYgBOQSk2MtzfXSAiIiLSxQCcglJ4qPi7C0RERES6GIBTUPp10xHL8Y0DW/mxJ0RERET2GIBTUOraNN5y/PTFXTGuW2MAwL0XtPNXl4iIiIgAMACnIDWycyMAQMdGcQgJEXRqbArI60Uy9T0RERH5F6MRCkptkuvhn+e3xrX9WwIAbhvaGgUlZbh5cKp/O0ZERER1niil/N0HQ6WlpamMjAx/d4OIiIiIgpiIrFNKpenVcQoKEREREZGBGIATERERERmIATgRERERkYEYgBMRERERGYgBOBERERGRgRiAExEREREZiAE4EREREZGBGIATERERERmIATgRERERkYEYgBMRERERGYgBOBERERGRgRiAExEREREZiAE4EREREZGBRCnl7z4YSkROANjvh4dOBnDSD49bl/E1NxZfb+PxNTcWX2/j8TU3Fl9v72qllErRq6hzAbi/iEiGUirN3/2oS/iaG4uvt/H4mhuL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\n","text/plain":[""]},"metadata":{"needs_background":"light"},"output_type":"display_data"}],"source":["plt.figure(figsize = (12, 6))\n","plt.title('Nifty 50 data')\n","plt.rcParams.update({'font.size': 14})\n","plt.xlabel('Time in 5 minutes')\n","plt.ylabel('Price')\n","plt.plot(dataset['close'])\n"]},{"cell_type":"markdown","id":"bb027ee5","metadata":{"papermill":{"duration":0.004954,"end_time":"2022-08-21T10:00:08.142357","exception":false,"start_time":"2022-08-21T10:00:08.137403","status":"completed"},"tags":[]},"source":["### Categorical and Numerical data\n","* Categorical data refers to a data type that can be stored and identified based on the names or labels given to them.\n","* Numerical data refers to the data that is in the form of numbers, and not in any language or descriptive form."]},{"cell_type":"code","execution_count":6,"id":"d8c32866","metadata":{"execution":{"iopub.execute_input":"2022-08-21T10:00:08.155207Z","iopub.status.busy":"2022-08-21T10:00:08.154401Z","iopub.status.idle":"2022-08-21T10:00:08.160445Z","shell.execute_reply":"2022-08-21T10:00:08.159346Z"},"papermill":{"duration":0.015244,"end_time":"2022-08-21T10:00:08.162818","exception":false,"start_time":"2022-08-21T10:00:08.147574","status":"completed"},"tags":[]},"outputs":[{"name":"stdout","output_type":"stream","text":["hi\n"]}],"source":["print('hi')"]},{"cell_type":"code","execution_count":null,"id":"df0655a8","metadata":{"papermill":{"duration":0.004808,"end_time":"2022-08-21T10:00:08.172717","exception":false,"start_time":"2022-08-21T10:00:08.167909","status":"completed"},"tags":[]},"outputs":[],"source":[]},{"cell_type":"code","execution_count":null,"id":"67c602a5","metadata":{"papermill":{"duration":0.004862,"end_time":"2022-08-21T10:00:08.182536","exception":false,"start_time":"2022-08-21T10:00:08.177674","status":"completed"},"tags":[]},"outputs":[],"source":[]},{"cell_type":"code","execution_count":null,"id":"e111c887","metadata":{"papermill":{"duration":0.006474,"end_time":"2022-08-21T10:00:08.194158","exception":false,"start_time":"2022-08-21T10:00:08.187684","status":"completed"},"tags":[]},"outputs":[],"source":[]},{"cell_type":"code","execution_count":null,"id":"a9e8b35c","metadata":{"papermill":{"duration":0.004957,"end_time":"2022-08-21T10:00:08.204537","exception":false,"start_time":"2022-08-21T10:00:08.19958","status":"completed"},"tags":[]},"outputs":[],"source":[]},{"cell_type":"code","execution_count":null,"id":"452f0350","metadata":{"papermill":{"duration":0.004779,"end_time":"2022-08-21T10:00:08.214536","exception":false,"start_time":"2022-08-21T10:00:08.209757","status":"completed"},"tags":[]},"outputs":[],"source":[]},{"cell_type":"code","execution_count":null,"id":"9c88b726","metadata":{"papermill":{"duration":0.004589,"end_time":"2022-08-21T10:00:08.22408","exception":false,"start_time":"2022-08-21T10:00:08.219491","status":"completed"},"tags":[]},"outputs":[],"source":[]},{"cell_type":"code","execution_count":null,"id":"e4cebbec","metadata":{"papermill":{"duration":0.006369,"end_time":"2022-08-21T10:00:08.235769","exception":false,"start_time":"2022-08-21T10:00:08.2294","status":"completed"},"tags":[]},"outputs":[],"source":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.7.12"},"papermill":{"default_parameters":{},"duration":11.486519,"end_time":"2022-08-21T10:00:08.970986","environment_variables":{},"exception":null,"input_path":"__notebook__.ipynb","output_path":"__notebook__.ipynb","parameters":{},"start_time":"2022-08-21T09:59:57.484467","version":"2.3.4"}},"nbformat":4,"nbformat_minor":5}
--------------------------------------------------------------------------------