tradx 0.1.2__py3-none-any.whl → 0.1.4__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.
@@ -1,7 +1,7 @@
1
1
  from abc import ABC, abstractmethod
2
2
  import shortuuid
3
3
  from typing import Any, TYPE_CHECKING, List, Dict
4
- from datetime import datetime, timedelta
4
+ from decimal import Decimal
5
5
  from tradx.baseClass.order import Order
6
6
  from tradx.baseClass.position import Position
7
7
 
@@ -167,8 +167,9 @@ class BaseAlgo(ABC):
167
167
  order.OrderDisclosedQuantity,
168
168
  order.OrderPrice,
169
169
  order.OrderStopPrice,
170
- order.OrderStatus,
171
170
  order.OrderSide,
171
+ order.TimeInForce,
172
+ order.OrderStatus,
172
173
  )
173
174
  self.order_diary.append(new_order)
174
175
  if self.interactiveEngine.user_logger:
@@ -198,7 +199,8 @@ class BaseAlgo(ABC):
198
199
  3. Logs the update or insertion of the position.
199
200
  4. Ensures the on_tradeEvent callback is called asynchronously.
200
201
  """
201
-
202
+ if trade.OrderStatus != "Filled":
203
+ return
202
204
  # Check if the trade exists in the position diary
203
205
  existing_position = next(
204
206
  (
@@ -370,23 +372,35 @@ class BaseAlgo(ABC):
370
372
  5. If the order is not filled, modifies the order with updated market data.
371
373
  """
372
374
  OrderUniqueIdentifier = self.order_no()
373
- Data: TouchLineData = await self.marketDataEngine.fetch_ltp(
374
- [
375
- {
376
- "exchangeSegment": ExchangeSegment,
377
- "exchangeInstrumentID": ExchangeInstrumentID,
378
- }
379
- ]
375
+ _adjust = Decimal("0.05")
376
+ Data: TouchLineData = (
377
+ await self.marketDataEngine.fetch_ltp(
378
+ [
379
+ {
380
+ "exchangeSegment": ExchangeSegment,
381
+ "exchangeInstrumentID": ExchangeInstrumentID,
382
+ }
383
+ ]
384
+ )
380
385
  )[0]
386
+
381
387
  await self.interactiveEngine.limit_order(
382
388
  ExchangeSegment,
383
389
  ExchangeInstrumentID,
384
390
  ProductType,
385
391
  Quantity,
386
- (Data.AskInfo.Price + 0.05 if Quantity > 0 else Data.BidInfo.Price - 0.05),
392
+ (
393
+ (Data.AskInfo.Price + _adjust).to_eng_string()
394
+ if Quantity > 0
395
+ else (Data.BidInfo.Price - _adjust).to_eng_string()
396
+ ),
387
397
  OrderUniqueIdentifier,
388
398
  )
389
-
399
+ if self.interactiveEngine.user_logger:
400
+ self.interactiveEngine.user_logger.info(
401
+ f"Placing Limit Order for {ExchangeInstrumentID} with Quantity {Quantity}",
402
+ caller=f"{self.__class__.__name__}.safe_market_order",
403
+ )
390
404
  await asyncio.sleep(0.1)
391
405
  order = next(
392
406
  (
@@ -396,7 +410,7 @@ class BaseAlgo(ABC):
396
410
  ),
397
411
  None,
398
412
  )
399
- while order is None or (order is not None and order.OrderStatus != "Filled"):
413
+ while order is None or (order is not None and "Filled" not in order.OrderStatus):
400
414
  await asyncio.sleep(0.1)
401
415
  order = next(
402
416
  (
@@ -406,15 +420,25 @@ class BaseAlgo(ABC):
406
420
  ),
407
421
  None,
408
422
  )
409
- if order is not None and order.OrderStatus != "Filled":
410
- Data: TouchLineData = await self.marketDataEngine.fetch_ltp(
411
- [
412
- {
413
- "exchangeSegment": ExchangeSegment,
414
- "exchangeInstrumentID": ExchangeInstrumentID,
415
- }
416
- ]
423
+ if order is not None and order.OrderStatus == "Rejected":
424
+ if self.interactiveEngine.user_logger:
425
+ self.interactiveEngine.user_logger.info(
426
+ f"Order Rejected for {ExchangeInstrumentID} with Quantity {Quantity}",
427
+ caller=f"{self.__class__.__name__}.safe_market_order",
428
+ )
429
+ break
430
+ if order is not None and "Filled" not in order.OrderStatus:
431
+ Data: TouchLineData = (
432
+ await self.marketDataEngine.fetch_ltp(
433
+ [
434
+ {
435
+ "exchangeSegment": ExchangeSegment,
436
+ "exchangeInstrumentID": ExchangeInstrumentID,
437
+ }
438
+ ]
439
+ )
417
440
  )[0]
441
+
418
442
  await self.interactiveEngine.xt.modify_order(
419
443
  order.AppOrderID,
420
444
  order.ProductType,
@@ -422,15 +446,22 @@ class BaseAlgo(ABC):
422
446
  order.OrderQuantity,
423
447
  order.OrderDisclosedQuantity,
424
448
  (
425
- Data.AskInfo.Price + 0.05
449
+ (Data.AskInfo.Price + _adjust).to_eng_string()
426
450
  if Quantity > 0
427
- else Data.BidInfo.Price - 0.05
451
+ else (Data.BidInfo.Price - _adjust).to_eng_string()
428
452
  ),
429
- order.OrderStopPrice,
453
+ order.OrderStopPrice.to_eng_string(),
430
454
  order.TimeInForce,
431
455
  order.OrderUniqueIdentifier,
456
+ "*****",
432
457
  )
433
- await asyncio.sleep(0.3)
458
+ if self.interactiveEngine.user_logger:
459
+ self.interactiveEngine.user_logger.info(
460
+ f"Modifying Order for {ExchangeInstrumentID} with Quantity {Quantity} and Price "
461
+ f"{(Data.AskInfo.Price + _adjust).to_eng_string() if Quantity > 0 else (Data.BidInfo.Price - _adjust).to_eng_string()}",
462
+ caller=f"{self.__class__.__name__}.safe_market_order",
463
+ )
464
+ await asyncio.sleep(0.7)
434
465
 
435
466
  async def safeLiquidateIntraday(self) -> None:
436
467
  """
tradx/baseClass/order.py CHANGED
@@ -37,6 +37,7 @@ class Order(BaseModel):
37
37
  OrderPrice: Decimal,
38
38
  OrderStopPrice: Decimal,
39
39
  OrderSide: str,
40
+ TimeInForce: str,
40
41
  OrderStatus: str = "",
41
42
  ):
42
43
  super().__init__(
@@ -50,4 +51,5 @@ class Order(BaseModel):
50
51
  OrderStopPrice=OrderStopPrice,
51
52
  OrderStatus=OrderStatus,
52
53
  OrderSide=OrderSide,
54
+ TimeInForce=TimeInForce,
53
55
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tradx
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Summary: A Package Designed to simplify strategy development on package xts-api-client
5
5
  Author-email: "jatin.kumawat" <jatin.kumawat@rmoneyindia.com>
6
6
  Requires-Python: >=3.12
@@ -4,7 +4,7 @@ tradx/dualHashMap.py,sha256=XsidIc3aMvpVGOvdfV7lOeZaLCWAD5i180BGyAfdYXE,1737
4
4
  tradx/interactiveEngine.py,sha256=DCuEEYJcTn6DEG9pbaZsmGyHeyWGNG2q46Iljel6Drc,34584
5
5
  tradx/marketDataEngine.py,sha256=pIY4dephqzykzPYJk0khYMVmD1QAr-17CtLN1WkcAWM,34597
6
6
  tradx/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- tradx/baseClass/baseAlgo.py,sha256=TP4gh2O0siSwIZazmoMXtJGgg54pjv2Pu87tPCu8luA,19092
7
+ tradx/baseClass/baseAlgo.py,sha256=glbp8aaqEE205EEwM9buE8BLjyHmHqwEef0b0mC7Okg,20708
8
8
  tradx/baseClass/candleData.py,sha256=tS-iAoRGwK2xVSvrqmNZPYeB63qD53oPPHaUDfJBWkk,2947
9
9
  tradx/baseClass/cmInstrument.py,sha256=WpibHdJyVGVs0B8o1COiXr4rNXB8bapzFLyRaIG0w9Q,2408
10
10
  tradx/baseClass/futureInstrument.py,sha256=ygsGfzUg337gSwoSaAb8DB31YhLOI-nOv3ApX3z5CWQ,2186
@@ -17,7 +17,7 @@ tradx/baseClass/marketStatusData.py,sha256=lZKJlYB_Bfc1Rpv4rQ15ZQTXgH5EkBDOvH6RS
17
17
  tradx/baseClass/openInterestData.py,sha256=L-WuxyNwdZAFPoSVhfJPKv8jOy5K0rSB2o5EkWVSv9g,3111
18
18
  tradx/baseClass/openInterestPartialData.py,sha256=vpo18P9VCBuCXbxjggg4ahd0uS5WkP14rBvcLwdrTFw,1673
19
19
  tradx/baseClass/optionsInstrument.py,sha256=O3zhNf1R1wmtdPCUaDr7mOM7co0Aeg8AHmPvVpabP60,9886
20
- tradx/baseClass/order.py,sha256=Xt64sMkp0FCGdckcpDeaieLwcADK7MGng7J5MHdTEwM,1634
20
+ tradx/baseClass/order.py,sha256=1o3AtlysNBs4dRwSjCh11AOoJ97QCNra4D9HLv9vMm4,1699
21
21
  tradx/baseClass/orderEvent.py,sha256=P4sJW3NKi53JDo8RwMVVKpCA_dIpkcE1-sm9ikpFYWk,2901
22
22
  tradx/baseClass/position.py,sha256=6fzm_Mr1GKSaRArRgsZItgw74_8omy-MBXRTfO12Pwk,1551
23
23
  tradx/baseClass/positionEvent.py,sha256=odOMeBqKUKfJ9Zj7IPcipMyfRTMsQyA-hvTJ_NcqKUk,3484
@@ -28,6 +28,6 @@ tradx/baseClass/tradeEvent.py,sha256=djunJW5AzjeMfJZVMlrFprplB7vrYBi-mmaR1TA0MK4
28
28
  tradx/constants/holidays.py,sha256=GCg0xGvXm1EM0n6YF1KYEnldSiC2sbsc09Iekjwn0ww,1547
29
29
  tradx/logger/logger.py,sha256=DfrjzwYkujTq7arksNTPcQeioXnwT1xgN659blhreog,3232
30
30
  tradx/logger/logger2.py,sha256=ebJ-qqnpnCqvyx1Cz1-kGGULtkH-hfrK6UNfa0bSlH8,2654
31
- tradx-0.1.2.dist-info/METADATA,sha256=3xvSJM8d9adxAb_FV92DHMTqNgEeddWe5F74Xz_REEM,2627
32
- tradx-0.1.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
33
- tradx-0.1.2.dist-info/RECORD,,
31
+ tradx-0.1.4.dist-info/METADATA,sha256=zhl0gR2DsVuQkPdyZC3b2ox0CecLvW0MPA9YdBaXu28,2627
32
+ tradx-0.1.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
33
+ tradx-0.1.4.dist-info/RECORD,,
File without changes