wiz-trader 0.26.0__py3-none-any.whl → 0.28.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wiz_trader/__init__.py +1 -1
- wiz_trader/quotes/client.py +87 -16
- {wiz_trader-0.26.0.dist-info → wiz_trader-0.28.0.dist-info}/METADATA +269 -12
- wiz_trader-0.28.0.dist-info/RECORD +9 -0
- wiz_trader-0.26.0.dist-info/RECORD +0 -9
- {wiz_trader-0.26.0.dist-info → wiz_trader-0.28.0.dist-info}/WHEEL +0 -0
- {wiz_trader-0.26.0.dist-info → wiz_trader-0.28.0.dist-info}/top_level.txt +0 -0
wiz_trader/__init__.py
CHANGED
wiz_trader/quotes/client.py
CHANGED
@@ -25,10 +25,26 @@ class QuotesClient:
|
|
25
25
|
base_url (str): WebSocket URL of the quotes server.
|
26
26
|
token (str): JWT token for authentication.
|
27
27
|
log_level (str): Logging level. Options: "error", "info", "debug".
|
28
|
+
on_tick (Callable): Callback for tick messages (type='ticks' or no type field).
|
29
|
+
on_stats (Callable): Callback for stats/greeks messages (type='greeks').
|
30
|
+
on_connect (Callable): Callback when connection is established.
|
31
|
+
on_close (Callable): Callback when connection is closed.
|
32
|
+
on_error (Callable): Callback for errors.
|
33
|
+
|
34
|
+
Message Routing:
|
35
|
+
- Messages with type='ticks' are routed to on_tick callback
|
36
|
+
- Messages with type='greeks' are routed to on_stats callback
|
37
|
+
- Messages without type field are routed to on_tick for backward compatibility
|
38
|
+
- Messages are silently dropped if the appropriate handler is not registered
|
28
39
|
"""
|
29
40
|
|
30
41
|
ACTION_SUBSCRIBE = "subscribe"
|
31
42
|
ACTION_UNSUBSCRIBE = "unsubscribe"
|
43
|
+
|
44
|
+
# Subscription modes
|
45
|
+
MODE_GREEKS = "greeks"
|
46
|
+
MODE_TICKS = "ticks"
|
47
|
+
MODE_FULL = "full"
|
32
48
|
|
33
49
|
def __init__(
|
34
50
|
self,
|
@@ -57,6 +73,7 @@ class QuotesClient:
|
|
57
73
|
self.url = f"{self.base_url}?token={self.token}"
|
58
74
|
self.ws: Optional[websockets.WebSocketClientProtocol] = None
|
59
75
|
self.subscribed_instruments: set = set()
|
76
|
+
self.subscription_modes: dict = {} # instrument -> mode mapping
|
60
77
|
self._running = False
|
61
78
|
self._background_task = None
|
62
79
|
self._loop: Optional[asyncio.AbstractEventLoop] = None
|
@@ -67,6 +84,7 @@ class QuotesClient:
|
|
67
84
|
|
68
85
|
# Callbacks are plain synchronous functions
|
69
86
|
self.on_tick: Optional[Callable[[Any, dict], None]] = None
|
87
|
+
self.on_stats: Optional[Callable[[Any, dict], None]] = None
|
70
88
|
self.on_connect: Optional[Callable[[Any], None]] = None
|
71
89
|
self.on_close: Optional[Callable[[Any, Optional[int], Optional[str]], None]] = None
|
72
90
|
self.on_error: Optional[Callable[[Any, Exception], None]] = None
|
@@ -94,13 +112,26 @@ class QuotesClient:
|
|
94
112
|
except Exception as e:
|
95
113
|
logger.error("Error in on_connect callback: %s", e, exc_info=True)
|
96
114
|
|
97
|
-
# re-subscribe on reconnect
|
115
|
+
# re-subscribe on reconnect with modes
|
98
116
|
if self.subscribed_instruments:
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
117
|
+
# Group instruments by mode for efficient re-subscription
|
118
|
+
mode_groups = {}
|
119
|
+
for instrument in self.subscribed_instruments:
|
120
|
+
mode = self.subscription_modes.get(instrument, self.MODE_TICKS)
|
121
|
+
if mode not in mode_groups:
|
122
|
+
mode_groups[mode] = []
|
123
|
+
mode_groups[mode].append(instrument)
|
124
|
+
|
125
|
+
for mode, instruments in mode_groups.items():
|
126
|
+
for batch in self._chunk_list(instruments, self.batch_size):
|
127
|
+
msg = {
|
128
|
+
"action": self.ACTION_SUBSCRIBE,
|
129
|
+
"instruments": batch,
|
130
|
+
"mode": mode
|
131
|
+
}
|
132
|
+
await self.ws.send(json.dumps(msg))
|
133
|
+
logger.info("Re-subscribed to %d instruments with mode '%s'", len(batch), mode)
|
134
|
+
await asyncio.sleep(0.1)
|
104
135
|
|
105
136
|
backoff = self._backoff_base
|
106
137
|
await self._handle_messages()
|
@@ -142,9 +173,26 @@ class QuotesClient:
|
|
142
173
|
if not chunk:
|
143
174
|
continue
|
144
175
|
try:
|
145
|
-
|
146
|
-
|
147
|
-
|
176
|
+
data = json.loads(chunk)
|
177
|
+
# Route based on message type
|
178
|
+
message_type = data.get('type')
|
179
|
+
|
180
|
+
if message_type == 'greeks':
|
181
|
+
if self.on_stats:
|
182
|
+
self.on_stats(self, data)
|
183
|
+
else:
|
184
|
+
logger.debug("Received greeks message but no on_stats handler registered")
|
185
|
+
elif message_type == 'ticks':
|
186
|
+
if self.on_tick:
|
187
|
+
self.on_tick(self, data)
|
188
|
+
else:
|
189
|
+
logger.debug("Received ticks message but no on_tick handler registered")
|
190
|
+
else:
|
191
|
+
# No type field - send to on_tick for backward compatibility
|
192
|
+
if self.on_tick:
|
193
|
+
self.on_tick(self, data)
|
194
|
+
else:
|
195
|
+
logger.debug("Received message without type field and no on_tick handler registered")
|
148
196
|
except json.JSONDecodeError as e:
|
149
197
|
logger.error("JSON parse error: %s", e)
|
150
198
|
else:
|
@@ -161,26 +209,40 @@ class QuotesClient:
|
|
161
209
|
|
162
210
|
# -- Async core methods (for internal use) --
|
163
211
|
|
164
|
-
async def _subscribe_async(self, instruments: List[str]) -> None:
|
212
|
+
async def _subscribe_async(self, instruments: List[str], mode: str = MODE_TICKS) -> None:
|
165
213
|
if self.ws and self.ws.open:
|
166
214
|
new = set(instruments) - self.subscribed_instruments
|
167
215
|
if new:
|
168
216
|
self.subscribed_instruments |= new
|
217
|
+
# Track mode for each instrument
|
218
|
+
for instrument in new:
|
219
|
+
self.subscription_modes[instrument] = mode
|
220
|
+
|
169
221
|
for batch in self._chunk_list(list(new), self.batch_size):
|
170
|
-
logger.info("Subscribing to %d instruments", len(batch))
|
171
|
-
|
222
|
+
logger.info("Subscribing to %d instruments with mode '%s'", len(batch), mode)
|
223
|
+
message = {
|
172
224
|
"action": self.ACTION_SUBSCRIBE,
|
173
|
-
"instruments": batch
|
174
|
-
|
225
|
+
"instruments": batch,
|
226
|
+
"mode": mode
|
227
|
+
}
|
228
|
+
print(f"Subscribing to {batch} with mode {mode}")
|
229
|
+
await self.ws.send(json.dumps(message))
|
175
230
|
await asyncio.sleep(0.1)
|
176
231
|
else:
|
177
232
|
self.subscribed_instruments |= set(instruments)
|
233
|
+
# Track mode for each instrument
|
234
|
+
for instrument in instruments:
|
235
|
+
self.subscription_modes[instrument] = mode
|
178
236
|
|
179
237
|
async def _unsubscribe_async(self, instruments: List[str]) -> None:
|
180
238
|
if self.ws and self.ws.open:
|
181
239
|
to_remove = set(instruments) & self.subscribed_instruments
|
182
240
|
if to_remove:
|
183
241
|
self.subscribed_instruments -= to_remove
|
242
|
+
# Remove mode tracking for unsubscribed instruments
|
243
|
+
for instrument in to_remove:
|
244
|
+
self.subscription_modes.pop(instrument, None)
|
245
|
+
|
184
246
|
for batch in self._chunk_list(list(to_remove), self.batch_size):
|
185
247
|
logger.info("Unsubscribing from %d instruments", len(batch))
|
186
248
|
await self.ws.send(json.dumps({
|
@@ -190,20 +252,26 @@ class QuotesClient:
|
|
190
252
|
await asyncio.sleep(0.1)
|
191
253
|
else:
|
192
254
|
self.subscribed_instruments -= set(instruments)
|
255
|
+
# Remove mode tracking for unsubscribed instruments
|
256
|
+
for instrument in instruments:
|
257
|
+
self.subscription_modes.pop(instrument, None)
|
193
258
|
|
194
259
|
# -- Public wrappers for plain callback users --
|
195
260
|
|
196
|
-
def subscribe(self, instruments: List[str]) -> None:
|
261
|
+
def subscribe(self, instruments: List[str], mode: str = MODE_TICKS) -> None:
|
197
262
|
"""
|
198
263
|
Schedule subscribe onto the client’s event loop.
|
199
264
|
"""
|
200
265
|
if self._loop:
|
201
266
|
asyncio.run_coroutine_threadsafe(
|
202
|
-
self._subscribe_async(instruments),
|
267
|
+
self._subscribe_async(instruments, mode),
|
203
268
|
self._loop
|
204
269
|
)
|
205
270
|
else:
|
206
271
|
self.subscribed_instruments |= set(instruments)
|
272
|
+
# Track mode for each instrument
|
273
|
+
for instrument in instruments:
|
274
|
+
self.subscription_modes[instrument] = mode
|
207
275
|
|
208
276
|
def unsubscribe(self, instruments: List[str]) -> None:
|
209
277
|
"""
|
@@ -216,6 +284,9 @@ class QuotesClient:
|
|
216
284
|
)
|
217
285
|
else:
|
218
286
|
self.subscribed_instruments -= set(instruments)
|
287
|
+
# Remove mode tracking for unsubscribed instruments
|
288
|
+
for instrument in instruments:
|
289
|
+
self.subscription_modes.pop(instrument, None)
|
219
290
|
|
220
291
|
def unsubscribe_all(self) -> None:
|
221
292
|
"""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: wiz_trader
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.28.0
|
4
4
|
Summary: A Python SDK for connecting to the Wizzer.
|
5
5
|
Home-page: https://bitbucket.org/wizzer-tech/quotes_sdk.git
|
6
6
|
Author: Pawan Wagh
|
@@ -186,17 +186,25 @@ client.stop()
|
|
186
186
|
|
187
187
|
All callbacks are **plain `def`** functions. Inside them you can call `subscribe(...)`, which under the hood schedules the actual async work—so you never `await` in your callbacks.
|
188
188
|
|
189
|
+
The QuotesClient routes messages based on their `type` field:
|
190
|
+
- Messages with `type: 'ticks'` are sent to the `on_tick` callback
|
191
|
+
- Messages with `type: 'greeks'` are sent to the `on_stats` callback
|
192
|
+
- Messages without a `type` field are sent to `on_tick` for backward compatibility
|
193
|
+
|
189
194
|
```python
|
190
195
|
def on_tick(ws, tick):
|
191
196
|
print("Tick:", tick)
|
192
197
|
|
198
|
+
def on_stats(ws, stats):
|
199
|
+
print("Stats:", stats)
|
200
|
+
# Stats/Greek messages contain: {'type': 'greeks', 'identifier': '...', 'rho': 0.1, 'theta': 9.8, ...}
|
201
|
+
|
193
202
|
def on_connect(ws):
|
194
203
|
print("Connected!")
|
195
|
-
#
|
196
|
-
ws.subscribe([
|
197
|
-
|
198
|
-
|
199
|
-
])
|
204
|
+
# Subscribe with different modes
|
205
|
+
ws.subscribe(["NSE:SBIN:3045"], mode="ticks") # Will receive tick messages
|
206
|
+
ws.subscribe(["NSE:NIFTY25JULFUT:53216"], mode="greeks") # Will receive greek messages
|
207
|
+
ws.subscribe(["NSE:RELIANCE:2885"], mode="full") # Will receive both types
|
200
208
|
|
201
209
|
def on_close(ws, code, reason):
|
202
210
|
print(f"Connection closed [{code}]: {reason}")
|
@@ -206,6 +214,7 @@ def on_error(ws, error):
|
|
206
214
|
print("Error:", error)
|
207
215
|
|
208
216
|
client.on_tick = on_tick
|
217
|
+
client.on_stats = on_stats
|
209
218
|
client.on_connect = on_connect
|
210
219
|
client.on_close = on_close
|
211
220
|
client.on_error = on_error
|
@@ -261,9 +270,13 @@ client = QuotesClient(
|
|
261
270
|
def on_tick(ws, tick):
|
262
271
|
logging.debug("Tick: %s", tick)
|
263
272
|
|
273
|
+
def on_stats(ws, stats):
|
274
|
+
logging.debug("Stats: %s", stats)
|
275
|
+
|
264
276
|
def on_connect(ws):
|
265
277
|
logging.info("Connected.")
|
266
|
-
ws.subscribe(["NSE:SBIN:3045", "
|
278
|
+
ws.subscribe(["NSE:SBIN:3045"], mode="ticks")
|
279
|
+
ws.subscribe(["NSE:NIFTY24JUN20100CE:20100"], mode="greeks")
|
267
280
|
|
268
281
|
def on_close(ws, code, reason):
|
269
282
|
logging.warning("Closed: %s", reason)
|
@@ -273,6 +286,7 @@ def on_error(ws, error):
|
|
273
286
|
logging.error("Error: %s", error)
|
274
287
|
|
275
288
|
client.on_tick = on_tick
|
289
|
+
client.on_stats = on_stats
|
276
290
|
client.on_connect = on_connect
|
277
291
|
client.on_close = on_close
|
278
292
|
client.on_error = on_error
|
@@ -307,17 +321,58 @@ async def main():
|
|
307
321
|
asyncio.run(main())
|
308
322
|
```
|
309
323
|
|
310
|
-
####
|
311
|
-
ts = tick timestamp
|
312
|
-
lastTradedTs = timestamp of the last executed trade in this instrument
|
324
|
+
#### Message Data Structures
|
313
325
|
|
314
|
-
|
326
|
+
##### Ticks structure
|
327
|
+
Messages with `type: 'ticks'` contain market data:
|
328
|
+
- `ts`: tick timestamp
|
329
|
+
- `lastTradedTs`: timestamp of the last executed trade in this instrument
|
315
330
|
- `oi`: Current open interest (for futures and options)
|
316
331
|
- `oiDayHigh`: Day's highest open interest value
|
317
332
|
- `oiDayLow`: Day's lowest open interest value
|
318
333
|
|
334
|
+
```json
|
335
|
+
{
|
336
|
+
"type": "ticks",
|
337
|
+
"identifier": "NSE:RELIANCE:2885",
|
338
|
+
"tradingSymbol": "RELIANCE",
|
339
|
+
"exchange": "NSE",
|
340
|
+
"segment": "NSECM",
|
341
|
+
"exchangeToken": 2885,
|
342
|
+
"bids": [{"volume": 1722, "price": 1295.5, "orders": 43}, ...],
|
343
|
+
"offers": [{"volume": 0, "price": 0, "orders": 0}, ...],
|
344
|
+
"ltp": 1295.5,
|
345
|
+
"lastTradedQty": 10,
|
346
|
+
"buyQty": 1722,
|
347
|
+
"sellQty": 0,
|
348
|
+
"volume": 10429964,
|
349
|
+
"avgPrice": 1291.46,
|
350
|
+
"netChange": 0,
|
351
|
+
"ohlc": {"open": 1270, "high": 1300.9, "low": 1267, "close": 1295.5},
|
352
|
+
"oi": 1234567,
|
353
|
+
"oiDayHigh": 1250000,
|
354
|
+
"oiDayLow": 1200000,
|
355
|
+
"lastTradedTs": "2025-04-21T10:29:33Z",
|
356
|
+
"ts": "2025-04-21T10:29:46Z"
|
357
|
+
}
|
319
358
|
```
|
320
|
-
|
359
|
+
|
360
|
+
##### Greeks structure
|
361
|
+
Messages with `type: 'greeks'` contain options Greeks data:
|
362
|
+
|
363
|
+
```json
|
364
|
+
{
|
365
|
+
"type": "greeks",
|
366
|
+
"identifier": "NSE:NIFTY25JULFUT:53216",
|
367
|
+
"tradingSymbol": "NIFTY25JULFUT",
|
368
|
+
"iv": 0.0,
|
369
|
+
"delta": 0.0,
|
370
|
+
"gamma": 0.0,
|
371
|
+
"theta": 0.0,
|
372
|
+
"vega": 0.0,
|
373
|
+
"rho": 0.0,
|
374
|
+
"ts": "2025-04-21T10:29:46Z"
|
375
|
+
}
|
321
376
|
```
|
322
377
|
|
323
378
|
## Wizzer Client
|
@@ -2857,3 +2912,205 @@ All supported environment variables:
|
|
2857
2912
|
- `rebalance_basket(trading_symbol, instruments)`
|
2858
2913
|
- `exit_all_positions()`
|
2859
2914
|
- `exit_strategy_positions(strategy_id)`
|
2915
|
+
|
2916
|
+
# Indian Industry Classification Table
|
2917
|
+
|
2918
|
+
| MacroSector | Sector | Industry | BasicIndustries |
|
2919
|
+
|-------------|---------|----------|-----------------|
|
2920
|
+
| Commodities | Chemicals | Chemicals & Petrochemicals | Commodity Chemicals |
|
2921
|
+
| | | | Specialty Chemicals |
|
2922
|
+
| | | | Carbon Black |
|
2923
|
+
| | | | Dyes And Pigments |
|
2924
|
+
| | | | Explosives |
|
2925
|
+
| | | | Petrochemicals |
|
2926
|
+
| | | | Printing Inks |
|
2927
|
+
| | | | Trading - Chemicals |
|
2928
|
+
| | | | Industrial Gases |
|
2929
|
+
| | | Fertilizers & Agrochemicals | Fertilizers |
|
2930
|
+
| | | | Pesticides & Agrochemicals |
|
2931
|
+
| | Construction Materials | Cement & Cement Products | Cement & Cement Products |
|
2932
|
+
| | | Other Construction Materials | Other Construction Materials |
|
2933
|
+
| | Metals & Mining | Ferrous Metals | Ferro & Silica Manganese |
|
2934
|
+
| | | | Pig Iron |
|
2935
|
+
| | | | Sponge Iron |
|
2936
|
+
| | | | Iron & Steel |
|
2937
|
+
| | | Non - Ferrous Metals | Aluminium |
|
2938
|
+
| | | | Copper |
|
2939
|
+
| | | | Zinc |
|
2940
|
+
| | | | Precious Metals |
|
2941
|
+
| | | Diversified Metals | Diversified Metals |
|
2942
|
+
| | | Minerals & Mining | Industrial Minerals |
|
2943
|
+
| | | Metals & Minerals Trading | Trading - Metals |
|
2944
|
+
| | | | Trading - Minerals |
|
2945
|
+
| | Forest Materials | Paper, Forest & Jute Products | Paper & Paper Products |
|
2946
|
+
| | | | Forest Products |
|
2947
|
+
| | | | Jute & Jute Products |
|
2948
|
+
| Consumer Discretionary | Automobile and Auto Components | Automobiles | Passenger Cars & Utility Vehicles |
|
2949
|
+
| | | | 2/3 Wheelers |
|
2950
|
+
| | | | Auto Dealer |
|
2951
|
+
| | | Auto Components | Auto Components & Equipments |
|
2952
|
+
| | | | Tyres & Rubber Products |
|
2953
|
+
| | | | Trading - Auto Components |
|
2954
|
+
| | Consumer Durables | Consumer Durables | Cycles |
|
2955
|
+
| | | | Consumer Electronics |
|
2956
|
+
| | | | Furniture, Home Furnishing |
|
2957
|
+
| | | | Ceramics |
|
2958
|
+
| | | | Granites & Marbles |
|
2959
|
+
| | | | Gems, Jewellery And Watches |
|
2960
|
+
| | | | Glass - Consumer |
|
2961
|
+
| | | | Household Appliances |
|
2962
|
+
| | | | Houseware |
|
2963
|
+
| | | | Leather And Leather Products |
|
2964
|
+
| | | | Leisure Products |
|
2965
|
+
| | | | Plastic Products - Consumer |
|
2966
|
+
| | | | Plywood Boards/Laminates |
|
2967
|
+
| | | | Sanitary Ware |
|
2968
|
+
| | | | Paints |
|
2969
|
+
| | | | Diversified consumer products |
|
2970
|
+
| | | | Footwear |
|
2971
|
+
| | Textiles | Textiles & Apparels | Garments & Apparels |
|
2972
|
+
| | | | Other Textile Products |
|
2973
|
+
| | | | Trading - Textile Products |
|
2974
|
+
| | Media,Entertainment & Publication | Media | Advertising & Media Agencies |
|
2975
|
+
| | | | Electronic Media |
|
2976
|
+
| | | | Web based media and service |
|
2977
|
+
| | | | Print Media |
|
2978
|
+
| | | Entertainment | Film Production,Distribution & Exhibition |
|
2979
|
+
| | | | Digital Entertainment |
|
2980
|
+
| | | | Media & Entertainment |
|
2981
|
+
| | | | TV Broadcasting & Software Production |
|
2982
|
+
| | | Printing & Publication | Printing & Publication |
|
2983
|
+
| | Realty | Realty | Residential,Commercial Projects |
|
2984
|
+
| | | | Real Estate related services |
|
2985
|
+
| | | | Real Estate Investment Trusts(REITs) |
|
2986
|
+
| | Consumer Services | Leisure Services | Hotels & Resorts |
|
2987
|
+
| | | | Restaurants |
|
2988
|
+
| | | | Amusement Parks/Other Recreation |
|
2989
|
+
| | | | Wellness |
|
2990
|
+
| | | | Tour, Travel Related Services |
|
2991
|
+
| | | Other Consumer Services | Education |
|
2992
|
+
| | | | E-Learning |
|
2993
|
+
| | | | Food Storage Facilities |
|
2994
|
+
| | | | Other Consumer Services |
|
2995
|
+
| | | Retailing | Speciality Retail |
|
2996
|
+
| | | | Pharmacy Retail |
|
2997
|
+
| | | | Diversified Retail |
|
2998
|
+
| | | | E-Retail/ ECommerce |
|
2999
|
+
| | | | Internet & Catalogue Retail |
|
3000
|
+
| | | | Distributors |
|
3001
|
+
| Energy | Oil, Gas & Consumable Fuels | Gas | Gas Transmission/Marketing |
|
3002
|
+
| | | | LPG/CNG/PNG/LNG Supplier |
|
3003
|
+
| | | | Trading - Gas |
|
3004
|
+
| | | Oil | Oil Exploration & Production |
|
3005
|
+
| | | | Offshore Support Solution Drilling |
|
3006
|
+
| | | | Oil Storage & Transportation |
|
3007
|
+
| | | | Oil Equipment & Services |
|
3008
|
+
| | | Petroleum Products | Refineries & Marketing |
|
3009
|
+
| | | | Lubricants |
|
3010
|
+
| | | Consumable Fuels | Coal |
|
3011
|
+
| | | | Trading - Coal |
|
3012
|
+
| Fast Moving Consumer Goods | Fast Moving Consumer Goods | Agricultural Food & other Products | Edible Oil |
|
3013
|
+
| | | | Sugar |
|
3014
|
+
| | | | Tea & Coffee |
|
3015
|
+
| | | | Other Agricultural Products |
|
3016
|
+
| | | | Other Beverages |
|
3017
|
+
| | | Beverages | Breweries & Distilleries |
|
3018
|
+
| | | Cigarettes & Tobacco Products | Cigarettes & Tobacco Products |
|
3019
|
+
| | | Food Products | Animal Feed |
|
3020
|
+
| | | | Dairy Products |
|
3021
|
+
| | | | Other Food Products |
|
3022
|
+
| | | | Packaged Foods |
|
3023
|
+
| | | | Seafood |
|
3024
|
+
| | | | Meat Products including Poultry |
|
3025
|
+
| | | Personal Products | Personal Care |
|
3026
|
+
| | | Household Products | Household Products |
|
3027
|
+
| | | | Stationary |
|
3028
|
+
| | | Diversified FMCG | Diversified FMCG |
|
3029
|
+
| Financial Services | Financial Services | Finance | Financial Institution |
|
3030
|
+
| | | | Housing Finance Company |
|
3031
|
+
| | | | Investment Company |
|
3032
|
+
| | | | Non Banking Financial Company (NBFC) |
|
3033
|
+
| | | | Other Financial Services |
|
3034
|
+
| | | | Holding Company |
|
3035
|
+
| | | | Microfinance Institutions |
|
3036
|
+
| | | | Securitisation |
|
3037
|
+
| | | Banks | Public Sector Bank |
|
3038
|
+
| | | | Private Sector Bank |
|
3039
|
+
| | | | Other Bank |
|
3040
|
+
| | | Capital Markets | Asset Management Company |
|
3041
|
+
| | | | Depositories,Clearing Houses and Other Intermediaries |
|
3042
|
+
| | | | Financial Products Distributor |
|
3043
|
+
| | | | Ratings |
|
3044
|
+
| | | | Exchange and Data Platform |
|
3045
|
+
| | | | Stockbroking & Allied |
|
3046
|
+
| | | | Other Capital Market related Services |
|
3047
|
+
| | | Insurance | General Insurance |
|
3048
|
+
| | | | Life Insurance |
|
3049
|
+
| | | | Other Insurance Companies |
|
3050
|
+
| | | | Insurance Distributors |
|
3051
|
+
| | | Financial Technology (Fintech) | Financial Technology (Fintech) |
|
3052
|
+
| Healthcare | Healthcare | Pharmaceuticals & Biotechnology | Pharmaceuticals |
|
3053
|
+
| | | | Biotechnology |
|
3054
|
+
| | | Healthcare Equipment & Supplies | Medical Equipment & Supplies |
|
3055
|
+
| | | Healthcare Services | Hospital |
|
3056
|
+
| | | | Healthcare Service Provider |
|
3057
|
+
| | | | Healthcare Research, Analytics & Technology |
|
3058
|
+
| Industrials | Construction | Construction | Civil Construction |
|
3059
|
+
| | Capital Goods | Aerospace & Defense | Aerospace & Defense |
|
3060
|
+
| | | Agricultural,Commercial & Construction Vehicles | Tractors |
|
3061
|
+
| | | | Commercial Vehicles |
|
3062
|
+
| | | | Construction Vehicles |
|
3063
|
+
| | | | Dealers-Commercial Vehicles, Tractors, Construction Vehicles |
|
3064
|
+
| | | Electrical Equipment | Heavy Electrical Equipment |
|
3065
|
+
| | | | Other Electrical Equipment |
|
3066
|
+
| | | Industrial Manufacturing | Railway Wagons |
|
3067
|
+
| | | | Ship Building & Allied Services |
|
3068
|
+
| | | | Industrial Products |
|
3069
|
+
| | | Industrial Products | Cables - Electricals |
|
3070
|
+
| | | | Castings & Forgings |
|
3071
|
+
| | | | Packaging |
|
3072
|
+
| | | | Plastic Products - Industrial |
|
3073
|
+
| | | | Rubber |
|
3074
|
+
| | | | Other Industrial Products |
|
3075
|
+
| | | | Glass - Industrial |
|
3076
|
+
| | | | Aluminium, Copper & Zinc Products |
|
3077
|
+
| | | | Iron & Steel Products |
|
3078
|
+
| | | | Abrasives & Bearings |
|
3079
|
+
| | | | Compressors,Pumps & Diesel Engines |
|
3080
|
+
| | | | Electrodes & Refractories |
|
3081
|
+
| Information Technology | Information Technology | IT - Software | Computers - Software & Consulting |
|
3082
|
+
| | | | Software Products |
|
3083
|
+
| | | IT - Services | IT Enabled Services |
|
3084
|
+
| | | IT - Hardware | Computers Hardware & Equipments |
|
3085
|
+
| Services | Services | Engineering Services | Dredging |
|
3086
|
+
| | | Transport Services | Airline |
|
3087
|
+
| | | | Logistics Solution Provider |
|
3088
|
+
| | | | Railways |
|
3089
|
+
| | | | Road Transport |
|
3090
|
+
| | | | Shipping |
|
3091
|
+
| | | | Transport Related Services |
|
3092
|
+
| | | Transport Infrastructure | Airport & Airport services |
|
3093
|
+
| | | | Port & Port services |
|
3094
|
+
| | | | Road Assets-Toll, Annuity, HybridAnnuity |
|
3095
|
+
| | | Commercial Services & Supplies | Trading & Distributors |
|
3096
|
+
| | | | Consulting Services |
|
3097
|
+
| | | | Data Processing Services |
|
3098
|
+
| | | | Diversified Commercial Services |
|
3099
|
+
| | | | Business Process Outsourcing (BPO)/ Knowledge Process Outsourcing (KPO) |
|
3100
|
+
| | | Public Services | Urban Local Bodies |
|
3101
|
+
| | | | Development Authority |
|
3102
|
+
| Telecommunication | Telecommunication | Telecom - Services | Telecom - Cellular & Fixed line services |
|
3103
|
+
| | | | Telecom - Infrastructure |
|
3104
|
+
| | | | Other Telecom Services |
|
3105
|
+
| | | Telecom - Equipment & Accessories | Telecom - Equipment & Accessories |
|
3106
|
+
| Utilities | Power | Power | Power Generation |
|
3107
|
+
| | | | Integrated Power Utilities |
|
3108
|
+
| | | | Power Trading |
|
3109
|
+
| | | | Power - Transmission |
|
3110
|
+
| | | | Power Distribution |
|
3111
|
+
| | Utilities | Other Utilities | Water Supply & Management |
|
3112
|
+
| | | | Waste Management |
|
3113
|
+
| | | | Emergency Services |
|
3114
|
+
| | | | Multi Utilities |
|
3115
|
+
| | | | Other Utilities |
|
3116
|
+
| Diversified | Diversified | Diversified | Diversified |
|
@@ -0,0 +1,9 @@
|
|
1
|
+
wiz_trader/__init__.py,sha256=cVYj3vesO084MUP2n_72WDH_YJ3pwVh7GJEuhkxHGWA,183
|
2
|
+
wiz_trader/apis/__init__.py,sha256=6sUr1nzmplNdld0zryMrQSt0jHT2GhOiFYgKKVHzk8U,133
|
3
|
+
wiz_trader/apis/client.py,sha256=VEotcYfPkjmpp2seJtTWyEdppa6q9NecX89iWxnFQf0,63154
|
4
|
+
wiz_trader/quotes/__init__.py,sha256=RF9g9CNP6bVWlmCh_ad8krm3-EWOIuVfLp0-H9fAeEM,108
|
5
|
+
wiz_trader/quotes/client.py,sha256=VZhWbXns6o46efLx2_buBP-MI_obEd_UWNTL2lDwHGI,14847
|
6
|
+
wiz_trader-0.28.0.dist-info/METADATA,sha256=nqXqELIc2_FOiMp_Iv_NUPqvX90YcgIzCw6qmxoQObY,99294
|
7
|
+
wiz_trader-0.28.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
8
|
+
wiz_trader-0.28.0.dist-info/top_level.txt,sha256=lnYS_g8LlA6ryKYnvY8xIQ6K2K-xzOsd-99AWgnW6VY,11
|
9
|
+
wiz_trader-0.28.0.dist-info/RECORD,,
|
@@ -1,9 +0,0 @@
|
|
1
|
-
wiz_trader/__init__.py,sha256=J8tpFwWCVMnCGEwHmeOLFzA3KvKEF3lNyScNCjZPhZ8,183
|
2
|
-
wiz_trader/apis/__init__.py,sha256=6sUr1nzmplNdld0zryMrQSt0jHT2GhOiFYgKKVHzk8U,133
|
3
|
-
wiz_trader/apis/client.py,sha256=VEotcYfPkjmpp2seJtTWyEdppa6q9NecX89iWxnFQf0,63154
|
4
|
-
wiz_trader/quotes/__init__.py,sha256=RF9g9CNP6bVWlmCh_ad8krm3-EWOIuVfLp0-H9fAeEM,108
|
5
|
-
wiz_trader/quotes/client.py,sha256=EkRxCudEq0J6ReP5nBgDzrL1XbtgWhrzpZT27xXBMBU,10891
|
6
|
-
wiz_trader-0.26.0.dist-info/METADATA,sha256=zlzua-zw8mkNRa5SwnWQLZ-SyIYSPlowcJzTKwKFhIM,89856
|
7
|
-
wiz_trader-0.26.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
8
|
-
wiz_trader-0.26.0.dist-info/top_level.txt,sha256=lnYS_g8LlA6ryKYnvY8xIQ6K2K-xzOsd-99AWgnW6VY,11
|
9
|
-
wiz_trader-0.26.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|