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.
tradx/baseClass/baseAlgo.py
CHANGED
@@ -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
|
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
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
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
|
-
(
|
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 =
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
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 +
|
448
|
+
(Data.AskInfo.Price + _adjust).to_eng_string()
|
426
449
|
if Quantity > 0
|
427
|
-
else Data.BidInfo.Price -
|
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
|
-
|
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
|
)
|
@@ -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=
|
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=
|
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.
|
32
|
-
tradx-0.1.
|
33
|
-
tradx-0.1.
|
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
|