Skip to content

Commit 3249e0c

Browse files
committed
Add origTransactionID and relatedTransactionID fields to the Lot
(Trade Lots) type, along with a new test for TradeLot types. I've forked the Trade test case for Lots since they share many fields.
1 parent de04011 commit 3249e0c

File tree

2 files changed

+108
-0
lines changed

2 files changed

+108
-0
lines changed

ibflex/Types.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1250,6 +1250,8 @@ class Lot(FlexElement):
12501250
commodityType: Optional[str] = None
12511251
fineness: Optional[decimal.Decimal] = None
12521252
weight: Optional[str] = None
1253+
origTransactionID: Optional[str] = None
1254+
relatedTransactionID: Optional[str] = None
12531255

12541256

12551257
@dataclass(frozen=True)

tests/test_types.py

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,112 @@ def testParse(self):
623623
self.assertEqual(instance.weight, "0.0 ()")
624624

625625

626+
class TradeLotTestCase(unittest.TestCase):
627+
data = ET.fromstring(
628+
('<Lot accountId="U123456" acctAlias="ibflex test" model="" currency="USD" '
629+
'fxRateToBase="1" assetCategory="STK" symbol="VXX 110917C00005000" '
630+
'description="VXX 17SEP11 5.0 C" conid="83615386" securityID="" '
631+
'securityIDType="" cusip="" isin="" underlyingConid="80789235" '
632+
'underlyingSymbol="VXX" issuer="" multiplier="100" strike="5" '
633+
'expiry="2011-09-17" putCall="C" principalAdjustFactor="" tradeID="594763148" '
634+
'reportDate="2011-08-12" tradeDate="2011-08-11" tradeTime="162000" '
635+
'settleDateTarget="2011-08-12" transactionType="BookTrade" exchange="--" '
636+
'quantity="3" tradePrice="0" tradeMoney="0" proceeds="-0" taxes="0" '
637+
'ibCommission="0" ibCommissionCurrency="USD" netCash="0" '
638+
'closePrice="29.130974" openCloseIndicator="C" notes="A" cost="8398.81122" '
639+
'fifoPnlRealized="0" fxPnl="0" mtmPnl="8739.2922" origTradePrice="0" '
640+
'origTradeDate="" origTradeID="" origOrderID="0" clearingFirmID="" '
641+
'transactionID="2381339439" buySell="BUY" ibOrderID="2381339439" ibExecID="" '
642+
'brokerageOrderID="" orderReference="" volatilityOrderLink="" '
643+
'exchOrderId="N/A" extExecID="N/A" orderTime="" openDateTime="" '
644+
'holdingPeriodDateTime="" whenRealized="" whenReopened="" '
645+
'levelOfDetail="EXECUTION" changeInPrice="0" changeInQuantity="0" '
646+
'orderType="" traderID="" isAPIOrder="N" accruedInt="0" serialNumber="" '
647+
'deliveryType="" commodityType="" fineness="0.0" weight="0.0 ()" '
648+
'origTransactionID="1234" relatedTransactionID="3456"/>')
649+
)
650+
651+
def testParse(self):
652+
instance = parser.parse_data_element(self.data)
653+
self.assertIsInstance(instance, Types.Lot)
654+
self.assertEqual(instance.accountId, "U123456")
655+
self.assertEqual(instance.acctAlias, "ibflex test")
656+
self.assertEqual(instance.model, None)
657+
self.assertEqual(instance.currency, "USD")
658+
self.assertEqual(instance.fxRateToBase, decimal.Decimal('1'))
659+
self.assertEqual(instance.assetCategory, enums.AssetClass.STOCK)
660+
self.assertEqual(instance.symbol, "VXX 110917C00005000")
661+
self.assertEqual(instance.description, "VXX 17SEP11 5.0 C")
662+
self.assertEqual(instance.conid, "83615386")
663+
self.assertEqual(instance.securityID, None)
664+
self.assertEqual(instance.securityIDType, None)
665+
self.assertEqual(instance.cusip, None)
666+
self.assertEqual(instance.isin, None)
667+
self.assertEqual(instance.underlyingConid, "80789235")
668+
self.assertEqual(instance.underlyingSymbol, "VXX")
669+
self.assertEqual(instance.issuer, None)
670+
self.assertEqual(instance.multiplier, decimal.Decimal('100'))
671+
self.assertEqual(instance.strike, decimal.Decimal('5'))
672+
self.assertEqual(instance.expiry, datetime.date(2011, 9, 17))
673+
self.assertEqual(instance.putCall, enums.PutCall.CALL)
674+
self.assertEqual(instance.principalAdjustFactor, None)
675+
self.assertEqual(instance.tradeID, "594763148")
676+
self.assertEqual(instance.reportDate, datetime.date(2011, 8, 12))
677+
self.assertEqual(instance.tradeDate, datetime.date(2011, 8, 11))
678+
self.assertEqual(instance.tradeTime, datetime.time(16, 20, 0))
679+
self.assertEqual(instance.settleDateTarget, datetime.date(2011, 8, 12))
680+
self.assertEqual(instance.transactionType, enums.TradeType.BOOKTRADE)
681+
self.assertEqual(instance.exchange, None)
682+
self.assertEqual(instance.quantity, decimal.Decimal("3"))
683+
self.assertEqual(instance.tradePrice, decimal.Decimal("0"))
684+
self.assertEqual(instance.tradeMoney, decimal.Decimal("0"))
685+
self.assertEqual(instance.proceeds, decimal.Decimal("-0"))
686+
self.assertEqual(instance.taxes, decimal.Decimal("0"))
687+
self.assertEqual(instance.ibCommission, decimal.Decimal("0"))
688+
self.assertEqual(instance.ibCommissionCurrency, "USD")
689+
self.assertEqual(instance.netCash, decimal.Decimal("0"))
690+
self.assertEqual(instance.closePrice, decimal.Decimal("29.130974"))
691+
self.assertEqual(instance.openCloseIndicator, enums.OpenClose.CLOSE)
692+
self.assertEqual(instance.notes, (enums.Code.ASSIGNMENT, ))
693+
self.assertEqual(instance.cost, decimal.Decimal("8398.81122"))
694+
self.assertEqual(instance.fifoPnlRealized, decimal.Decimal("0"))
695+
self.assertEqual(instance.fxPnl, decimal.Decimal("0"))
696+
self.assertEqual(instance.mtmPnl, decimal.Decimal("8739.2922"))
697+
self.assertEqual(instance.origTradePrice, decimal.Decimal("0"))
698+
self.assertEqual(instance.origTradeDate, None)
699+
self.assertEqual(instance.origTradeID, None)
700+
self.assertEqual(instance.origOrderID, "0")
701+
self.assertEqual(instance.clearingFirmID, None)
702+
self.assertEqual(instance.transactionID, "2381339439")
703+
self.assertEqual(instance.buySell, enums.BuySell.BUY)
704+
self.assertEqual(instance.ibOrderID, "2381339439")
705+
self.assertEqual(instance.ibExecID, None)
706+
self.assertEqual(instance.brokerageOrderID, None)
707+
self.assertEqual(instance.orderReference, None)
708+
self.assertEqual(instance.volatilityOrderLink, None)
709+
self.assertEqual(instance.exchOrderId, None)
710+
self.assertEqual(instance.extExecID, None)
711+
self.assertEqual(instance.orderTime, None)
712+
self.assertEqual(instance.openDateTime, None)
713+
self.assertEqual(instance.holdingPeriodDateTime, None)
714+
self.assertEqual(instance.whenRealized, None)
715+
self.assertEqual(instance.whenReopened, None)
716+
self.assertEqual(instance.levelOfDetail, "EXECUTION")
717+
self.assertEqual(instance.changeInPrice, decimal.Decimal("0"))
718+
self.assertEqual(instance.changeInQuantity, decimal.Decimal("0"))
719+
self.assertEqual(instance.orderType, None)
720+
self.assertEqual(instance.traderID, None)
721+
self.assertEqual(instance.isAPIOrder, False)
722+
self.assertEqual(instance.accruedInt, decimal.Decimal("0"))
723+
self.assertEqual(instance.serialNumber, None)
724+
self.assertEqual(instance.deliveryType, None)
725+
self.assertEqual(instance.commodityType, None)
726+
self.assertEqual(instance.fineness, decimal.Decimal("0"))
727+
self.assertEqual(instance.weight, "0.0 ()")
728+
self.assertEqual(instance.origTransactionID, "1234")
729+
self.assertEqual(instance.relatedTransactionID, "3456")
730+
731+
626732
class OptionEAETestCase(unittest.TestCase):
627733
data = ET.fromstring(
628734
('<OptionEAE accountId="U123456" acctAlias="ibflex test" model="" '

0 commit comments

Comments
 (0)