tradx 0.1.2__py3-none-any.whl → 0.1.3__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:
@@ -370,23 +371,35 @@ class BaseAlgo(ABC):
370
371
  5. If the order is not filled, modifies the order with updated market data.
371
372
  """
372
373
  OrderUniqueIdentifier = self.order_no()
373
- Data: TouchLineData = await self.marketDataEngine.fetch_ltp(
374
- [
375
- {
376
- "exchangeSegment": ExchangeSegment,
377
- "exchangeInstrumentID": ExchangeInstrumentID,
378
- }
379
- ]
374
+ _adjust = Decimal("0.05")
375
+ Data: TouchLineData = (
376
+ await self.marketDataEngine.fetch_ltp(
377
+ [
378
+ {
379
+ "exchangeSegment": ExchangeSegment,
380
+ "exchangeInstrumentID": ExchangeInstrumentID,
381
+ }
382
+ ]
383
+ )
380
384
  )[0]
385
+
381
386
  await self.interactiveEngine.limit_order(
382
387
  ExchangeSegment,
383
388
  ExchangeInstrumentID,
384
389
  ProductType,
385
390
  Quantity,
386
- (Data.AskInfo.Price + 0.05 if Quantity > 0 else Data.BidInfo.Price - 0.05),
391
+ (
392
+ (Data.AskInfo.Price + _adjust).to_eng_string()
393
+ if Quantity > 0
394
+ else (Data.BidInfo.Price - _adjust).to_eng_string()
395
+ ),
387
396
  OrderUniqueIdentifier,
388
397
  )
389
-
398
+ if self.interactiveEngine.user_logger:
399
+ self.interactiveEngine.user_logger.info(
400
+ f"Placing Limit Order for {ExchangeInstrumentID} with Quantity {Quantity}",
401
+ caller=f"{self.__class__.__name__}.safe_market_order",
402
+ )
390
403
  await asyncio.sleep(0.1)
391
404
  order = next(
392
405
  (
@@ -406,15 +419,25 @@ class BaseAlgo(ABC):
406
419
  ),
407
420
  None,
408
421
  )
422
+ if order is not None and order.OrderStatus == "Rejected":
423
+ if self.interactiveEngine.user_logger:
424
+ self.interactiveEngine.user_logger.info(
425
+ f"Order Rejected for {ExchangeInstrumentID} with Quantity {Quantity}",
426
+ caller=f"{self.__class__.__name__}.safe_market_order",
427
+ )
428
+ break
409
429
  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
- ]
430
+ Data: TouchLineData = (
431
+ await self.marketDataEngine.fetch_ltp(
432
+ [
433
+ {
434
+ "exchangeSegment": ExchangeSegment,
435
+ "exchangeInstrumentID": ExchangeInstrumentID,
436
+ }
437
+ ]
438
+ )
417
439
  )[0]
440
+
418
441
  await self.interactiveEngine.xt.modify_order(
419
442
  order.AppOrderID,
420
443
  order.ProductType,
@@ -422,15 +445,22 @@ class BaseAlgo(ABC):
422
445
  order.OrderQuantity,
423
446
  order.OrderDisclosedQuantity,
424
447
  (
425
- Data.AskInfo.Price + 0.05
448
+ (Data.AskInfo.Price + _adjust).to_eng_string()
426
449
  if Quantity > 0
427
- else Data.BidInfo.Price - 0.05
450
+ else (Data.BidInfo.Price - _adjust).to_eng_string()
428
451
  ),
429
- order.OrderStopPrice,
452
+ order.OrderStopPrice.to_eng_string(),
430
453
  order.TimeInForce,
431
454
  order.OrderUniqueIdentifier,
455
+ "*****",
432
456
  )
433
- await asyncio.sleep(0.3)
457
+ if self.interactiveEngine.user_logger:
458
+ self.interactiveEngine.user_logger.info(
459
+ f"Modifying Order for {ExchangeInstrumentID} with Quantity {Quantity} and Price "
460
+ f"{(Data.AskInfo.Price + _adjust).to_eng_string() if Quantity > 0 else (Data.BidInfo.Price - _adjust).to_eng_string()}",
461
+ caller=f"{self.__class__.__name__}.safe_market_order",
462
+ )
463
+ await asyncio.sleep(0.7)
434
464
 
435
465
  async def safeLiquidateIntraday(self) -> None:
436
466
  """
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.3
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=AoguFsuAwJwnfWL20bnp3eZP92JXskrLDYIoENCbJ6c,20639
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.3.dist-info/METADATA,sha256=KGAGYRn_xFNqUR5t0v8wRn6kMZo3iHWYLEaRCvwxqUo,2627
32
+ tradx-0.1.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
33
+ tradx-0.1.3.dist-info/RECORD,,
File without changes