wiz-trader 0.35.0__tar.gz → 0.37.0__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wiz_trader
3
- Version: 0.35.0
3
+ Version: 0.37.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
@@ -38,6 +38,7 @@ Dynamic: requires-python
38
38
  - [Callbacks](#callbacks)
39
39
  - [Subscribing to Instruments](#subscribing-to-instruments)
40
40
  - [Unsubscribing from Instruments](#unsubscribing-from-instruments)
41
+ - [Account Events](#account-events)
41
42
  - [Handling WebSocket Connection](#handling-websocket-connection)
42
43
  - [Complete Examples](#quotes-client-examples)
43
44
  5. [Wizzer Client](#wizzer-client)
@@ -253,6 +254,347 @@ ws.unsubscribe(["NSE:RELIANCE:2885"])
253
254
  - Can be called multiple times for different instrument sets
254
255
  - No callback fired for unsubscribed instruments
255
256
 
257
+ ### Account Events
258
+
259
+ The QuotesClient now supports automatic reception of account-related events (orders, trades, positions, holdings) from the quotes server. These events are automatically pushed to SDK users via dedicated callback handlers based on the event type.
260
+
261
+ #### Event Handlers
262
+
263
+ Register event handlers to receive real-time updates for your account activity:
264
+
265
+ ```python
266
+ def on_order(ws, order):
267
+ print(f"Order event: {order}")
268
+
269
+ def on_trade(ws, trade):
270
+ print(f"Trade event: {trade}")
271
+
272
+ def on_position(ws, position):
273
+ print(f"Position event: {position}")
274
+
275
+ def on_holding(ws, holding):
276
+ print(f"Holding event: {holding}")
277
+
278
+ # Register event handlers
279
+ client.on_order = on_order
280
+ client.on_trade = on_trade
281
+ client.on_position = on_position
282
+ client.on_holding = on_holding
283
+ ```
284
+
285
+ #### Key Features
286
+
287
+ - **Automatic Event Reception**: No explicit subscription needed - events are automatically sent based on your JWT token's account ID and strategy ID
288
+ - **Optional Handlers**: Events are silently dropped if no handler is registered - you only receive what you need
289
+ - **Message Normalization**: The SDK automatically handles different message formats and delivers clean, flattened event data to your handlers
290
+ - **Error Resilience**: Handler exceptions are caught and logged without breaking the event flow
291
+ - **Backward Compatible**: Existing tick and Greeks functionality remains unchanged
292
+
293
+ #### Event Data Structure
294
+
295
+ All event handlers receive flattened event data with the event type preserved:
296
+
297
+ ```python
298
+ # Example order event data
299
+ {
300
+ "_id": "order_01k10np7weemkv812nx55bppw5",
301
+ "accountEntityType": "client",
302
+ "accountId": "user_01j9brznsffphvzqn9gzyj1frw",
303
+ "avgPrice": 72.65,
304
+ "broker": "wizzer",
305
+ "brokerOrderId": "dssorder_175344314711184",
306
+ "brokerTimestamp": "2025-07-25T11:32:28.147Z",
307
+ "cancelledQty": 0,
308
+ "completedAt": "2025-07-25T11:32:28.147Z",
309
+ "createdAt": "2025-07-25T11:32:27.722Z",
310
+ "disclosedQty": 0,
311
+ "exchange": "NSE",
312
+ "exchangeOrderId": "dssx_1753443147",
313
+ "exchangeToken": 11184,
314
+ "exchangeUpdateTimestamp": "2025-07-25T11:32:28.147Z",
315
+ "executionType": "regular",
316
+ "filledQty": 1,
317
+ "guid": "t0lVueivgBgcEh2k_BP",
318
+ "instrumentType": "EQLC",
319
+ "isDealer": false,
320
+ "isOrderModified": false,
321
+ "legs": [],
322
+ "marginUsed": 0,
323
+ "meta": {
324
+ "dss": {"orderId": "order_01k10np7weemkv812nx55bppw5"},
325
+ "source": "wizzer.dss",
326
+ "wizzer": {"mode": "paper_trading"}
327
+ },
328
+ "orderType": "MARKET",
329
+ "parentOrderId": "",
330
+ "pendingQty": 1,
331
+ "placedBy": "user_01j9brznsffphvzqn9gzyj1frw",
332
+ "price": 0,
333
+ "product": "CNC",
334
+ "qty": 1,
335
+ "remarks": "",
336
+ "segment": "NSECM",
337
+ "slPrice": 0,
338
+ "slTriggerPrice": 0,
339
+ "sqOffHoldingId": "",
340
+ "sqOffPositionId": "",
341
+ "status": "COMPLETED",
342
+ "stoploss": 0,
343
+ "stoplossOrderId": "",
344
+ "strategy": {
345
+ "id": "stgy_01jtn7t3erf8ss78spqy40k8en",
346
+ "identifier": "S-608377",
347
+ "name": "Test 1122"
348
+ },
349
+ "target": 0,
350
+ "targetOrderId": "",
351
+ "tradingSymbol": "IDFCFIRSTB",
352
+ "transactionType": "BUY",
353
+ "triggerId": "",
354
+ "triggerPrice": 0,
355
+ "updatedAt": "2025-07-25T11:32:28.254Z",
356
+ "userId": "user_01j9brznsffphvzqn9gzyj1frw",
357
+ "validity": "DAY",
358
+ "variety": "REGULAR"
359
+ }
360
+
361
+ # Example trade event data
362
+ {
363
+ "_id": "trade_01k10np8rqef793zr93ctqj0wt",
364
+ "accountId": "user_01j9brznsffphvzqn9gzyj1frw",
365
+ "avgPrice": 72.65,
366
+ "broker": "wizzer",
367
+ "brokerOrderId": "dssorder_175344314711184",
368
+ "createdAt": "2025-07-25T11:32:28.567Z",
369
+ "exchange": "NSE",
370
+ "exchangeOrderId": "dssx_1753443147",
371
+ "exchangeTimestamp": "2025-07-25T11:32:28.147Z",
372
+ "exchangeToken": 11184,
373
+ "isDividend": false,
374
+ "meta": {
375
+ "dss": {"orderId": "order_01k10np7weemkv812nx55bppw5"},
376
+ "source": "wizzer.dss",
377
+ "wizzer": {"mode": "paper_trading"}
378
+ },
379
+ "orderId": "order_01k10np7weemkv812nx55bppw5",
380
+ "orderType": "MARKET",
381
+ "parentOrderId": "",
382
+ "parentTradeId": "",
383
+ "product": "CNC",
384
+ "qty": 1,
385
+ "segment": "NSECM",
386
+ "strategy": {
387
+ "id": "stgy_01jtn7t3erf8ss78spqy40k8en",
388
+ "identifier": "S-608377",
389
+ "name": "Test 1122"
390
+ },
391
+ "tradeId": "dsstrade_50PccSfWvsCg-Cr5dQE",
392
+ "tradingSymbol": "IDFCFIRSTB",
393
+ "transactionType": "BUY",
394
+ "updatedAt": "2025-07-25T11:32:28.567Z",
395
+ "userId": "user_01j9brznsffphvzqn9gzyj1frw"
396
+ }
397
+
398
+ # Example position event data
399
+ {
400
+ "_id": "pos_01k10np8t7e0fs63q52hacbx8m",
401
+ "accountEntityType": "client",
402
+ "accountId": "user_01j9brznsffphvzqn9gzyj1frw",
403
+ "bep": 0,
404
+ "broker": "wizzer",
405
+ "buyAvgPrice": 72.65,
406
+ "buyOrders": ["order_01k10np7weemkv812nx55bppw5"],
407
+ "buyQty": 1,
408
+ "buyTrades": ["trade_01k10np8rqef793zr93ctqj0wt"],
409
+ "buyValue": 72.65,
410
+ "closePrice": 0,
411
+ "createdAt": "2025-07-25T11:32:28.614Z",
412
+ "exchange": "NSE",
413
+ "exchangeToken": 11184,
414
+ "instrumentType": "EQLC",
415
+ "lotSize": 1,
416
+ "meta": {
417
+ "source": "wizzer.dss",
418
+ "wizzer": {"mode": "paper_trading"}
419
+ },
420
+ "netQty": 1,
421
+ "pnlPercentage": 0,
422
+ "product": "CNC",
423
+ "realisedPnlToday": 0,
424
+ "segment": "NSECM",
425
+ "sellAvgPrice": 0,
426
+ "sellOrders": [],
427
+ "sellQty": 0,
428
+ "sellTrades": [],
429
+ "sellValue": 0,
430
+ "slPrice": null,
431
+ "slTriggerPrice": null,
432
+ "status": "open",
433
+ "stoploss": 0,
434
+ "strategy": {
435
+ "id": "stgy_01jtn7t3erf8ss78spqy40k8en",
436
+ "identifier": "S-608377",
437
+ "name": "Test 1122"
438
+ },
439
+ "target": 0,
440
+ "tradingSymbol": "IDFCFIRSTB",
441
+ "unrealisedPnlToday": 0,
442
+ "updatedAt": "2025-07-25T11:32:28.614Z",
443
+ "userId": "user_01j9brznsffphvzqn9gzyj1frw"
444
+ }
445
+
446
+ # Example holding event data
447
+ {
448
+ "_id": "holding_01k10np8t7e0fs63q52hacbx8m",
449
+ "accountEntityType": "client",
450
+ "accountId": "user_01j9brznsffphvzqn9gzyj1frw",
451
+ "bep": 0,
452
+ "broker": "wizzer",
453
+ "buyAvgPrice": 72.65,
454
+ "buyOrders": ["order_01k10np7weemkv812nx55bppw5"],
455
+ "buyQty": 1,
456
+ "buyTrades": ["trade_01k10np8rqef793zr93ctqj0wt"],
457
+ "buyValue": 72.65,
458
+ "closePrice": 0,
459
+ "createdAt": "2025-07-25T11:32:28.614Z",
460
+ "exchange": "NSE",
461
+ "exchangeToken": 11184,
462
+ "instrumentType": "EQLC",
463
+ "lotSize": 1,
464
+ "meta": {
465
+ "source": "wizzer.dss",
466
+ "wizzer": {"mode": "paper_trading"}
467
+ },
468
+ "netQty": 1,
469
+ "pnlPercentage": 0,
470
+ "product": "CNC",
471
+ "realisedPnlToday": 0,
472
+ "segment": "NSECM",
473
+ "sellAvgPrice": 0,
474
+ "sellOrders": [],
475
+ "sellQty": 0,
476
+ "sellTrades": [],
477
+ "sellValue": 0,
478
+ "slPrice": null,
479
+ "slTriggerPrice": null,
480
+ "status": "open",
481
+ "stoploss": 0,
482
+ "strategy": {
483
+ "id": "stgy_01jtn7t3erf8ss78spqy40k8en",
484
+ "identifier": "S-608377",
485
+ "name": "Test 1122"
486
+ },
487
+ "target": 0,
488
+ "tradingSymbol": "IDFCFIRSTB",
489
+ "unrealisedPnlToday": 0,
490
+ "updatedAt": "2025-07-25T11:32:28.614Z",
491
+ "userId": "user_01j9brznsffphvzqn9gzyj1frw"
492
+ }
493
+ ```
494
+
495
+ #### Complete Event Handling Example
496
+
497
+ ```python
498
+ from wiz_trader import QuotesClient
499
+
500
+ # Initialize client
501
+ client = QuotesClient(
502
+ base_url="wss://websocket-url/quotes",
503
+ token="your-jwt-token",
504
+ log_level="info"
505
+ )
506
+
507
+ def on_order(ws, order):
508
+ # React to order status changes
509
+ if order['status'] == ORDER_STATUS_COMPLETED:
510
+ print(f"Order {order['_id']} completed!")
511
+ elif order['status'] == ORDER_STATUS_REJECTED:
512
+ print(f"Order {order['_id']} rejected: {order.get('remarks', 'Unknown')}")
513
+
514
+ def on_trade(ws, trade):
515
+ print(f"Trade executed: {trade['qty']} x {trade['tradingSymbol']} @ {trade['avgPrice']}")
516
+
517
+ def on_position(ws, position):
518
+ print(f"Position update: {position['tradingSymbol']} = {position['netQty']} (PnL: {position.get('unrealisedPnlToday', 0)})")
519
+
520
+ def on_holding(ws, holding):
521
+ print(f"Holding update: {holding['tradingSymbol']} = {holding['netQty']}")
522
+
523
+ def on_connect(ws):
524
+ print("Connected! Ready to receive events.")
525
+ # Also subscribe to some ticks if needed
526
+ ws.subscribe(["NSE:SBIN:3045"], mode="ticks")
527
+
528
+ # Register all handlers
529
+ client.on_order = on_order
530
+ client.on_trade = on_trade
531
+ client.on_position = on_position
532
+ client.on_holding = on_holding
533
+ client.on_connect = on_connect
534
+
535
+ # Connect and receive events
536
+ client.connect()
537
+ ```
538
+
539
+ #### Event-Driven Trading Strategy Example
540
+
541
+ ```python
542
+ class EventDrivenStrategy:
543
+ def __init__(self):
544
+ self.orders = {}
545
+ self.positions = {}
546
+ self.pending_orders = set()
547
+
548
+ def on_order_event(self, ws, order):
549
+ order_id = order['_id']
550
+ self.orders[order_id] = order
551
+
552
+ # Track pending orders
553
+ if order['status'] == ORDER_STATUS_OPEN:
554
+ self.pending_orders.add(order_id)
555
+ elif order_id in self.pending_orders:
556
+ self.pending_orders.remove(order_id)
557
+
558
+ # Log order lifecycle
559
+ print(f"Order {order_id}: {order['status']}")
560
+
561
+ # React to rejections
562
+ if order['status'] == ORDER_STATUS_REJECTED:
563
+ print(f"Order rejected! Reason: {order.get('remarks', 'Unknown')}")
564
+ # Implement retry logic or alternative strategy
565
+
566
+ def on_position_event(self, ws, position):
567
+ symbol = position['tradingSymbol']
568
+ self.positions[symbol] = position
569
+
570
+ # Monitor position changes
571
+ print(f"Position {symbol}: Qty={position['netQty']}, PnL={position.get('unrealisedPnlToday', 0)}")
572
+
573
+ # Implement stop-loss or take-profit logic
574
+ pnl = position.get('unrealisedPnlToday', 0)
575
+ if pnl < -100: # Stop loss at -100
576
+ print(f"Stop loss triggered for {symbol}")
577
+ # Place exit order
578
+ elif pnl > 200: # Take profit at 200
579
+ print(f"Take profit triggered for {symbol}")
580
+ # Place exit order
581
+
582
+ def on_trade_event(self, ws, trade):
583
+ print(f"Trade executed: {trade['qty']} @ {trade['avgPrice']}")
584
+ # Update internal trade log, calculate VWAP, etc.
585
+
586
+ # Initialize strategy
587
+ strategy = EventDrivenStrategy()
588
+
589
+ # Set up client with strategy handlers
590
+ client = QuotesClient(base_url="wss://...", token="...")
591
+ client.on_order = strategy.on_order_event
592
+ client.on_position = strategy.on_position_event
593
+ client.on_trade = strategy.on_trade_event
594
+
595
+ client.connect()
596
+ ```
597
+
256
598
  ### Complete Examples
257
599
 
258
600
  #### Blocking Example
@@ -425,6 +767,7 @@ Available constants:
425
767
  - Transaction types: `TRANSACTION_TYPE_BUY`, `TRANSACTION_TYPE_SELL`
426
768
  - Product types: `PRODUCT_CNC`, `PRODUCT_MIS`, `PRODUCT_NRML`
427
769
  - Order types: `ORDER_TYPE_MARKET`, `ORDER_TYPE_LIMIT`, `ORDER_TYPE_SL`, `ORDER_TYPE_SLM`
770
+ - Order status: `ORDER_STATUS_OPEN`, `ORDER_STATUS_CANCELLED`, `ORDER_STATUS_REJECTED`, `ORDER_STATUS_PENDING`, `ORDER_STATUS_COMPLETED`
428
771
  - Validity types: `VALIDITY_DAY`, `VALIDITY_IOC`, `VALIDITY_GTT`
429
772
  - Variety types: `VARIETY_REGULAR`, `VARIETY_AMO`, `VARIETY_BO`, `VARIETY_CO`
430
773
  - Exchanges: `EXCHANGE_NSE`, `EXCHANGE_BSE`, `EXCHANGE_WZR`
@@ -3285,7 +3628,23 @@ All supported environment variables:
3285
3628
 
3286
3629
  ## Available Screener Fields
3287
3630
 
3288
- The screener supports filtering instruments using various financial, technical, and fundamental data points. Use `client.get_screener_fields()` to get the complete list of available fields with their metadata.
3631
+ ### Historical Market Data
3632
+
3633
+ | Field | Description | Data Type | Unit | Supported Operations |
3634
+ |--- |--- |--- |--- |--- |
3635
+ | `hmdOpen` | Opening price of the trading session | Float | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3636
+ | `hmdHigh` | Highest price during the trading session | Float | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3637
+ | `hmdLow` | Lowest price during the trading session | Float | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3638
+ | `hmdClose` | Closing price of the trading session | Float | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3639
+ | `hmdLtp` | Last Traded Price | Float | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3640
+ | `hmdPrevClose` | Previous day closing price | Float | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3641
+ | `hmdVolume` | Trading volume (number of shares traded) | UInt64 | shares | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3642
+ | `hmdTurnover` | Trading turnover (total value of shares traded) | Float | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3643
+ | `hmdTotalTrades` | Total number of trades executed | UInt64 | count | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3644
+ | `hmdPriceBandLower` | Lower price band limit | Float | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3645
+ | `hmdPriceBandUpper` | Upper price band limit | Float | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3646
+ | `hmdDate` | Trading date | Date | - | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3647
+ | `MarketCap` | Logarithm of Market Capitalization | Float64 | log_currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3289
3648
 
3290
3649
  ### Instrument Properties
3291
3650
 
@@ -3299,8 +3658,7 @@ The screener supports filtering instruments using various financial, technical,
3299
3658
  | `basicIndustry` | Basic industry classification | String | `$eq`, `$ne`, `$in`, `$nin`, `$like`, `$nlike`, `$ilike` |
3300
3659
  | `indices` | List of indices the instrument belongs to | Array(String) | `$in`, `$nin` |
3301
3660
  | `issuedSize` | Total issued shares (listed shares count) | UInt64 | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3302
- | `marketCap` | Market capitalization (issuedSize × latest closing price) | Float64 | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3303
- | `logMarketCap` | Logarithm of Market Capitalization | Nullable(Float64) | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3661
+ | `marketCap` | Logarithm of Market Capitalization | Nullable(Float64) | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3304
3662
 
3305
3663
  ### Financial Data
3306
3664
 
@@ -3331,7 +3689,6 @@ The screener supports filtering instruments using various financial, technical,
3331
3689
  | `grossNpaRatioAnnual` | Gross NPA Ratio - annual | Float64 | % | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3332
3690
  | `netNpaRatioQuarterly` | Net NPA Ratio - quarterly | Float64 | % | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3333
3691
  | `netNpaRatioAnnual` | Net NPA Ratio - annual | Float64 | % | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3334
- | `gnpaPct` | Gross Non-Performing Assets Percentage | Float | % | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3335
3692
 
3336
3693
  ### Capital Adequacy
3337
3694
  | Field | Description | Data Type | Unit | Supported Operations |
@@ -3440,7 +3797,6 @@ The screener supports filtering instruments using various financial, technical,
3440
3797
  | `taxExpenseAnnual` | Tax Expense - annual | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3441
3798
  | `netProfitQuarterly` | Net Profit - quarterly | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3442
3799
  | `netProfitAnnual` | Net Profit - annual | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3443
- | `ebitda` | Earnings Before Interest, Taxes, Depreciation, and Amortization | Nullable(Float64) | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3444
3800
 
3445
3801
  ## Cash Flow Statement
3446
3802
 
@@ -3457,8 +3813,6 @@ The screener supports filtering instruments using various financial, technical,
3457
3813
  |--- |--- |--- |--- |--- |
3458
3814
  | `investingCashFlowQuarterly` | Investing Cash Flow - quarterly | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3459
3815
  | `investingCashFlowAnnual` | Investing Cash Flow - annual | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3460
- | `netInvestingCashQuarterly` | Net Investing Cash - quarterly | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3461
- | `netInvestingCashAnnual` | Net Investing Cash - annual | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3462
3816
  | `ppePurchasesQuarterly` | PPE Purchases - quarterly | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3463
3817
  | `ppePurchasesAnnual` | PPE Purchases - annual | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3464
3818
  | `ppeSaleProceedsQuarterly` | PPE Sale Proceeds - quarterly | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
@@ -3473,8 +3827,6 @@ The screener supports filtering instruments using various financial, technical,
3473
3827
  |--- |--- |--- |--- |--- |
3474
3828
  | `financingCashFlowQuarterly` | Financing Cash Flow - quarterly | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3475
3829
  | `financingCashFlowAnnual` | Financing Cash Flow - annual | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3476
- | `netFinancingCashQuarterly` | Net Financing Cash - quarterly | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3477
- | `netFinancingCashAnnual` | Net Financing Cash - annual | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3478
3830
  | `borrowingProceedsQuarterly` | Borrowing Proceeds - quarterly | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3479
3831
  | `borrowingProceedsAnnual` | Borrowing Proceeds - annual | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3480
3832
  | `borrowingRepaymentsQuarterly` | Borrowing Repayments - quarterly | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
@@ -3493,8 +3845,6 @@ The screener supports filtering instruments using various financial, technical,
3493
3845
  | `netCashChangeAnnual` | Net Cash Change - annual | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3494
3846
  | `cashCashflowStmtQuarterly` | Cash from Cashflow Statement - quarterly | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3495
3847
  | `cashCashflowStmtAnnual` | Cash from Cashflow Statement - annual | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3496
- | `freeCashFlow` | Free Cash Flow | Nullable(Float64) | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3497
- | `netCash` | Net Cash Position | Float | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3498
3848
 
3499
3849
  ## NBFC-Specific Metrics
3500
3850
 
@@ -3546,25 +3896,17 @@ The screener supports filtering instruments using various financial, technical,
3546
3896
 
3547
3897
  ## Financial Ratios
3548
3898
 
3549
- ### Valuation Ratios
3550
- | Field | Description | Data Type | Unit | Supported Operations |
3551
- |--- |--- |--- |--- |--- |
3552
- | `peRatio` | Price-to-Earnings Ratio | Nullable(Float32) | ratio | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3553
- | `pbRatio` | Price-to-Book Ratio | Nullable(Float32) | ratio | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3554
- | `evEbitda` | Enterprise Value to EBITDA Ratio | Nullable(Float32) | ratio | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3555
- | `fcfYield` | Free Cash Flow Yield | Nullable(Float32) | % | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3899
+
3556
3900
 
3557
3901
  ### Leverage Ratios
3558
3902
  | Field | Description | Data Type | Unit | Supported Operations |
3559
3903
  |--- |--- |--- |--- |--- |
3560
3904
  | `debtEquityRatioQuarterly` | Debt to Equity Ratio - quarterly | Float64 | ratio | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3561
3905
  | `debtEquityRatioAnnual` | Debt to Equity Ratio - annual | Float64 | ratio | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3562
- | `debtEquity` | Debt to Equity Ratio | Float | ratio | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3563
3906
  | `debtServiceRatioQuarterly` | Debt Service Ratio - quarterly | Float64 | ratio | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3564
3907
  | `debtServiceRatioAnnual` | Debt Service Ratio - annual | Float64 | ratio | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3565
3908
  | `interestCoverageRatioQuarterly` | Interest Coverage Ratio - quarterly | Float64 | ratio | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3566
3909
  | `interestCoverageRatioAnnual` | Interest Coverage Ratio - annual | Float64 | ratio | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3567
- | `interestCov` | Interest Coverage Ratio | Float | ratio | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3568
3910
 
3569
3911
  ### Profitability Ratios
3570
3912
  | Field | Description | Data Type | Unit | Supported Operations |
@@ -3573,12 +3915,6 @@ The screener supports filtering instruments using various financial, technical,
3573
3915
  | `basicEpsAnnual` | Basic EPS - annual | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3574
3916
  | `dilutedEpsQuarterly` | Diluted EPS - quarterly | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3575
3917
  | `dilutedEpsAnnual` | Diluted EPS - annual | Float64 | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3576
- | `roe` | Return on Equity | Float | % | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3577
- | `roa` | Return on Assets | Nullable(Float32) | % | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3578
- | `patMargin` | Profit After Tax Margin | Float | % | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3579
- | `grossMargin` | Gross Profit Margin | Nullable(Float32) | % | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3580
- | `operatingMargin` | Operating Profit Margin | Nullable(Float32) | % | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3581
- | `ebitMargin` | Earnings Before Interest and Taxes Margin | Nullable(Float32) | % | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3582
3918
 
3583
3919
  ### Efficiency Ratios
3584
3920
  | Field | Description | Data Type | Unit | Supported Operations |
@@ -3586,24 +3922,6 @@ The screener supports filtering instruments using various financial, technical,
3586
3922
  | `assetTurnover` | Asset Turnover Ratio | Float | ratio | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3587
3923
  | `currentRatio` | Current Ratio | Float | ratio | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3588
3924
  | `ocfPat` | Operating Cash Flow to PAT Ratio | Float | ratio | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3589
- | `ocfNetProfit` | Operating Cash Flow to Net Profit Ratio | Nullable(Float32) | ratio | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3590
-
3591
- ## Technical Indicators
3592
-
3593
- | Field | Description | Data Type | Unit | Supported Operations |
3594
- |--- |--- |--- |--- |--- |
3595
- | `fiftyDayMA` | 50-Day Moving Average | Nullable(Float32) | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3596
- | `hundredDayMA` | 100-Day Moving Average | Nullable(Float32) | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3597
- | `twoHundredDayMA` | 200-Day Moving Average | Nullable(Float32) | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3598
- | `rsi` | Relative Strength Index | Nullable(Float32) | index | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3599
- | `macd` | Moving Average Convergence Divergence | Nullable(Float32) | index | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3600
- | `macdSignal` | MACD Signal Line | Nullable(Float32) | index | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3601
- | `bollingerUpper` | Bollinger Band Upper | Nullable(Float32) | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3602
- | `bollingerLower` | Bollinger Band Lower | Nullable(Float32) | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3603
- | `atr` | Average True Range | Nullable(Float32) | currency | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3604
- | `volumeRatio` | Volume Ratio | Nullable(Float32) | ratio | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3605
- | `thirtyDayVolatility` | 30-Day Volatility | Nullable(Float32) | % | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3606
- | `sixMMaxDrawdown` | Six Month Maximum Drawdown | Nullable(Float32) | % | `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$between` |
3607
3925
 
3608
3926
  ## Segment Analysis
3609
3927