ibapi.common

Copyright (C) 2025 Interactive Brokers LLC. All rights reserved. This code is subject to the terms and conditions of the IB API Non-Commercial License or the IB API Commercial License, as applicable.

  1"""
  2Copyright (C) 2025 Interactive Brokers LLC. All rights reserved. This code is subject to the terms
  3 and conditions of the IB API Non-Commercial License or the IB API Commercial License, as applicable.
  4"""
  5
  6
  7from ibapi.const import UNSET_INTEGER, UNSET_DECIMAL
  8from ibapi.enum_implem import Enum
  9from ibapi.object_implem import Object
 10from ibapi.utils import floatMaxString, decimalMaxString, intMaxString
 11from ibapi.message import OUT
 12from ibapi.server_versions import (
 13    MIN_SERVER_VER_PROTOBUF,
 14    MIN_SERVER_VER_PROTOBUF_PLACE_ORDER,
 15    MIN_SERVER_VER_PROTOBUF_COMPLETED_ORDER,
 16    MIN_SERVER_VER_PROTOBUF_CONTRACT_DATA,
 17    MIN_SERVER_VER_PROTOBUF_MARKET_DATA,
 18    MIN_SERVER_VER_PROTOBUF_ACCOUNTS_POSITIONS,
 19    MIN_SERVER_VER_PROTOBUF_HISTORICAL_DATA,
 20    MIN_SERVER_VER_PROTOBUF_NEWS_DATA,
 21    MIN_SERVER_VER_PROTOBUF_SCAN_DATA,
 22    MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_1,
 23    MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_2,
 24    MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_3
 25)
 26
 27TickerId = int
 28OrderId = int
 29TagValueList = list
 30
 31FaDataType = int
 32FaDataTypeEnum = Enum("N/A", "GROUPS", "N/A", "ALIASES")
 33
 34MarketDataType = int
 35MarketDataTypeEnum = Enum("N/A", "REALTIME", "FROZEN", "DELAYED", "DELAYED_FROZEN")
 36
 37Liquidities = int
 38LiquiditiesEnum = Enum("None", "Added", "Remove", "RoudedOut")
 39
 40SetOfString = set
 41SetOfFloat = set
 42ListOfOrder = list
 43ListOfFamilyCode = list
 44ListOfContractDescription = list
 45ListOfDepthExchanges = list
 46ListOfNewsProviders = list
 47SmartComponentMap = dict
 48HistogramDataList = list
 49ListOfPriceIncrements = list
 50ListOfHistoricalTick = list
 51ListOfHistoricalTickBidAsk = list
 52ListOfHistoricalTickLast = list
 53ListOfHistoricalSessions = list
 54
 55PROTOBUF_MSG_ID = 200
 56PROTOBUF_MSG_IDS = {
 57    OUT.REQ_EXECUTIONS :  MIN_SERVER_VER_PROTOBUF,
 58    OUT.PLACE_ORDER :  MIN_SERVER_VER_PROTOBUF_PLACE_ORDER,
 59    OUT.CANCEL_ORDER :  MIN_SERVER_VER_PROTOBUF_PLACE_ORDER,
 60    OUT.REQ_GLOBAL_CANCEL :  MIN_SERVER_VER_PROTOBUF_PLACE_ORDER,
 61    OUT.REQ_ALL_OPEN_ORDERS :  MIN_SERVER_VER_PROTOBUF_COMPLETED_ORDER,
 62    OUT.REQ_AUTO_OPEN_ORDERS :  MIN_SERVER_VER_PROTOBUF_COMPLETED_ORDER,
 63    OUT.REQ_OPEN_ORDERS :  MIN_SERVER_VER_PROTOBUF_COMPLETED_ORDER,
 64    OUT.REQ_COMPLETED_ORDERS :  MIN_SERVER_VER_PROTOBUF_COMPLETED_ORDER,
 65    OUT.REQ_CONTRACT_DATA :  MIN_SERVER_VER_PROTOBUF_CONTRACT_DATA,
 66    OUT.REQ_MKT_DATA :  MIN_SERVER_VER_PROTOBUF_MARKET_DATA,
 67    OUT.CANCEL_MKT_DATA :  MIN_SERVER_VER_PROTOBUF_MARKET_DATA,
 68    OUT.REQ_MKT_DEPTH :  MIN_SERVER_VER_PROTOBUF_MARKET_DATA,
 69    OUT.CANCEL_MKT_DEPTH :  MIN_SERVER_VER_PROTOBUF_MARKET_DATA,
 70    OUT.REQ_MARKET_DATA_TYPE :  MIN_SERVER_VER_PROTOBUF_MARKET_DATA,
 71    OUT.REQ_ACCT_DATA :  MIN_SERVER_VER_PROTOBUF_ACCOUNTS_POSITIONS,
 72    OUT.REQ_MANAGED_ACCTS :  MIN_SERVER_VER_PROTOBUF_ACCOUNTS_POSITIONS,
 73    OUT.REQ_POSITIONS :  MIN_SERVER_VER_PROTOBUF_ACCOUNTS_POSITIONS,
 74    OUT.CANCEL_POSITIONS :  MIN_SERVER_VER_PROTOBUF_ACCOUNTS_POSITIONS,
 75    OUT.REQ_ACCOUNT_SUMMARY :  MIN_SERVER_VER_PROTOBUF_ACCOUNTS_POSITIONS,
 76    OUT.CANCEL_ACCOUNT_SUMMARY :  MIN_SERVER_VER_PROTOBUF_ACCOUNTS_POSITIONS,
 77    OUT.REQ_POSITIONS_MULTI :  MIN_SERVER_VER_PROTOBUF_ACCOUNTS_POSITIONS,
 78    OUT.CANCEL_POSITIONS_MULTI :  MIN_SERVER_VER_PROTOBUF_ACCOUNTS_POSITIONS,
 79    OUT.REQ_ACCOUNT_UPDATES_MULTI :  MIN_SERVER_VER_PROTOBUF_ACCOUNTS_POSITIONS,
 80    OUT.CANCEL_ACCOUNT_UPDATES_MULTI :  MIN_SERVER_VER_PROTOBUF_ACCOUNTS_POSITIONS,
 81    OUT.REQ_HISTORICAL_DATA : MIN_SERVER_VER_PROTOBUF_HISTORICAL_DATA,
 82    OUT.CANCEL_HISTORICAL_DATA : MIN_SERVER_VER_PROTOBUF_HISTORICAL_DATA,
 83    OUT.REQ_REAL_TIME_BARS : MIN_SERVER_VER_PROTOBUF_HISTORICAL_DATA,
 84    OUT.CANCEL_REAL_TIME_BARS : MIN_SERVER_VER_PROTOBUF_HISTORICAL_DATA,
 85    OUT.REQ_HEAD_TIMESTAMP : MIN_SERVER_VER_PROTOBUF_HISTORICAL_DATA,
 86    OUT.CANCEL_HEAD_TIMESTAMP : MIN_SERVER_VER_PROTOBUF_HISTORICAL_DATA,
 87    OUT.REQ_HISTOGRAM_DATA : MIN_SERVER_VER_PROTOBUF_HISTORICAL_DATA,
 88    OUT.CANCEL_HISTOGRAM_DATA : MIN_SERVER_VER_PROTOBUF_HISTORICAL_DATA,
 89    OUT.REQ_HISTORICAL_TICKS : MIN_SERVER_VER_PROTOBUF_HISTORICAL_DATA,
 90    OUT.REQ_TICK_BY_TICK_DATA : MIN_SERVER_VER_PROTOBUF_HISTORICAL_DATA,
 91    OUT.CANCEL_TICK_BY_TICK_DATA : MIN_SERVER_VER_PROTOBUF_HISTORICAL_DATA,
 92    OUT.REQ_NEWS_BULLETINS: MIN_SERVER_VER_PROTOBUF_NEWS_DATA,
 93    OUT.CANCEL_NEWS_BULLETINS: MIN_SERVER_VER_PROTOBUF_NEWS_DATA,
 94    OUT.REQ_NEWS_ARTICLE: MIN_SERVER_VER_PROTOBUF_NEWS_DATA,
 95    OUT.REQ_NEWS_PROVIDERS: MIN_SERVER_VER_PROTOBUF_NEWS_DATA,
 96    OUT.REQ_HISTORICAL_NEWS: MIN_SERVER_VER_PROTOBUF_NEWS_DATA,
 97    OUT.REQ_WSH_META_DATA: MIN_SERVER_VER_PROTOBUF_NEWS_DATA,
 98    OUT.CANCEL_WSH_META_DATA: MIN_SERVER_VER_PROTOBUF_NEWS_DATA,
 99    OUT.REQ_WSH_EVENT_DATA: MIN_SERVER_VER_PROTOBUF_NEWS_DATA,
100    OUT.CANCEL_WSH_EVENT_DATA: MIN_SERVER_VER_PROTOBUF_NEWS_DATA,
101    OUT.REQ_SCANNER_PARAMETERS: MIN_SERVER_VER_PROTOBUF_SCAN_DATA,
102    OUT.REQ_SCANNER_SUBSCRIPTION: MIN_SERVER_VER_PROTOBUF_SCAN_DATA,
103    OUT.CANCEL_SCANNER_SUBSCRIPTION: MIN_SERVER_VER_PROTOBUF_SCAN_DATA,
104    OUT.REQ_FUNDAMENTAL_DATA: MIN_SERVER_VER_PROTOBUF_SCAN_DATA,
105    OUT.CANCEL_FUNDAMENTAL_DATA: MIN_SERVER_VER_PROTOBUF_SCAN_DATA,
106    OUT.REQ_PNL: MIN_SERVER_VER_PROTOBUF_SCAN_DATA,
107    OUT.CANCEL_PNL: MIN_SERVER_VER_PROTOBUF_SCAN_DATA,
108    OUT.REQ_PNL_SINGLE: MIN_SERVER_VER_PROTOBUF_SCAN_DATA,
109    OUT.CANCEL_PNL_SINGLE: MIN_SERVER_VER_PROTOBUF_SCAN_DATA,
110    OUT.REQ_FA: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_1,
111    OUT.REPLACE_FA: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_1,
112    OUT.EXERCISE_OPTIONS: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_1,
113    OUT.REQ_CALC_IMPLIED_VOLAT: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_1,
114    OUT.CANCEL_CALC_IMPLIED_VOLAT: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_1,
115    OUT.REQ_CALC_OPTION_PRICE: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_1,
116    OUT.CANCEL_CALC_OPTION_PRICE: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_1,
117    OUT.REQ_SEC_DEF_OPT_PARAMS: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_2,
118    OUT.REQ_SOFT_DOLLAR_TIERS: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_2,
119    OUT.REQ_FAMILY_CODES: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_2,
120    OUT.REQ_MATCHING_SYMBOLS: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_2,
121    OUT.REQ_SMART_COMPONENTS: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_2,
122    OUT.REQ_MARKET_RULE: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_2,
123    OUT.REQ_USER_INFO: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_2,
124    OUT.REQ_IDS: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_3,
125    OUT.REQ_CURRENT_TIME: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_3,
126    OUT.REQ_CURRENT_TIME_IN_MILLIS: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_3,
127    OUT.START_API: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_3,
128    OUT.SET_SERVER_LOGLEVEL: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_3,
129    OUT.VERIFY_REQUEST: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_3,
130    OUT.VERIFY_MESSAGE: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_3,
131    OUT.QUERY_DISPLAY_GROUPS: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_3,
132    OUT.SUBSCRIBE_TO_GROUP_EVENTS: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_3,
133    OUT.UPDATE_DISPLAY_GROUP: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_3,
134    OUT.UNSUBSCRIBE_FROM_GROUP_EVENTS: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_3,
135    OUT.REQ_MKT_DEPTH_EXCHANGES: MIN_SERVER_VER_PROTOBUF_REST_MESSAGES_3
136}
137
138class BarData(Object):
139    def __init__(self):
140        self.date = ""
141        self.open = 0.0
142        self.high = 0.0
143        self.low = 0.0
144        self.close = 0.0
145        self.volume = UNSET_DECIMAL
146        self.wap = UNSET_DECIMAL
147        self.barCount = 0
148
149    def __str__(self):
150        return (
151            f"Date: {self.date}, "
152            f"Open: {floatMaxString(self.open)}, "
153            f"High: {floatMaxString(self.high)}, "
154            f"Low: {floatMaxString(self.low)}, "
155            f"Close: {floatMaxString(self.close)}, "
156            f"Volume: {decimalMaxString(self.volume)}, "
157            f"WAP: {decimalMaxString(self.wap)}, "
158            f"BarCount: {intMaxString(self.barCount)}"
159        )
160
161
162class RealTimeBar(Object):
163    def __init__(
164        self,
165        time=0,
166        endTime=-1,
167        open_=0.0,
168        high=0.0,
169        low=0.0,
170        close=0.0,
171        volume=UNSET_DECIMAL,
172        wap=UNSET_DECIMAL,
173        count=0,
174    ):
175        self.time = time
176        self.endTime = endTime
177        self.open_ = open_
178        self.high = high
179        self.low = low
180        self.close = close
181        self.volume = volume
182        self.wap = wap
183        self.count = count
184
185    def __str__(self):
186        return (
187            "Time: %s, Open: %s, High: %s, Low: %s, Close: %s, Volume: %s, WAP: %s, Count: %s"
188            % (
189                intMaxString(self.time),
190                floatMaxString(self.open_),
191                floatMaxString(self.high),
192                floatMaxString(self.low),
193                floatMaxString(self.close),
194                decimalMaxString(self.volume),
195                decimalMaxString(self.wap),
196                intMaxString(self.count),
197            )
198        )
199
200
201class HistogramData(Object):
202    def __init__(self):
203        self.price = 0.0
204        self.size = UNSET_DECIMAL
205
206    def __str__(self):
207        return "Price: %s, Size: %s" % (
208            floatMaxString(self.price),
209            decimalMaxString(self.size),
210        )
211
212
213class NewsProvider(Object):
214    def __init__(self):
215        self.code = ""
216        self.name = ""
217
218    def __str__(self):
219        return f"Code: {self.code}, Name: {self.name}"
220
221
222class DepthMktDataDescription(Object):
223    def __init__(self):
224        self.exchange = ""
225        self.secType = ""
226        self.listingExch = ""
227        self.serviceDataType = ""
228        self.aggGroup = UNSET_INTEGER
229
230    def __str__(self):
231        if self.aggGroup != UNSET_INTEGER:
232            aggGroup = self.aggGroup
233        else:
234            aggGroup = ""
235        return (
236            "Exchange: %s, SecType: %s, ListingExchange: %s, ServiceDataType: %s, AggGroup: %s, "
237            % (
238                self.exchange,
239                self.secType,
240                self.listingExch,
241                self.serviceDataType,
242                intMaxString(aggGroup),
243            )
244        )
245
246
247class SmartComponent(Object):
248    def __init__(self):
249        self.bitNumber = 0
250        self.exchange = ""
251        self.exchangeLetter = ""
252
253    def __str__(self):
254        return "BitNumber: %d, Exchange: %s, ExchangeLetter: %s" % (
255            self.bitNumber,
256            self.exchange,
257            self.exchangeLetter,
258        )
259
260
261class TickAttrib(Object):
262    def __init__(self):
263        self.canAutoExecute = False
264        self.pastLimit = False
265        self.preOpen = False
266
267    def __str__(self):
268        return "CanAutoExecute: %d, PastLimit: %d, PreOpen: %d" % (
269            self.canAutoExecute,
270            self.pastLimit,
271            self.preOpen,
272        )
273
274
275class TickAttribBidAsk(Object):
276    def __init__(self):
277        self.bidPastLow = False
278        self.askPastHigh = False
279
280    def __str__(self):
281        return "BidPastLow: %d, AskPastHigh: %d" % (self.bidPastLow, self.askPastHigh)
282
283
284class TickAttribLast(Object):
285    def __init__(self):
286        self.pastLimit = False
287        self.unreported = False
288
289    def __str__(self):
290        return "PastLimit: %d, Unreported: %d" % (self.pastLimit, self.unreported)
291
292
293class FamilyCode(Object):
294    def __init__(self):
295        self.accountID = ""
296        self.familyCodeStr = ""
297
298    def __str__(self):
299        return f"AccountId: {self.accountID}, FamilyCodeStr: {self.familyCodeStr}"
300
301
302class PriceIncrement(Object):
303    def __init__(self):
304        self.lowEdge = 0.0
305        self.increment = 0.0
306
307    def __str__(self):
308        return "LowEdge: %s, Increment: %s" % (
309            floatMaxString(self.lowEdge),
310            floatMaxString(self.increment),
311        )
312
313
314class HistoricalTick(Object):
315    def __init__(self):
316        self.time = 0
317        self.price = 0.0
318        self.size = UNSET_DECIMAL
319
320    def __str__(self):
321        return "Time: %s, Price: %s, Size: %s" % (
322            intMaxString(self.time),
323            floatMaxString(self.price),
324            decimalMaxString(self.size),
325        )
326
327
328class HistoricalTickBidAsk(Object):
329    def __init__(self):
330        self.time = 0
331        self.tickAttribBidAsk = TickAttribBidAsk()
332        self.priceBid = 0.0
333        self.priceAsk = 0.0
334        self.sizeBid = UNSET_DECIMAL
335        self.sizeAsk = UNSET_DECIMAL
336
337    def __str__(self):
338        return (
339            f"Time: {intMaxString(self.time)}, "
340            f"TickAttriBidAsk: {self.tickAttribBidAsk}, "
341            f"PriceBid: {floatMaxString(self.priceBid)}, "
342            f"PriceAsk: {floatMaxString(self.priceAsk)}, "
343            f"SizeBid: {decimalMaxString(self.sizeBid)}, "
344            f"SizeAsk: {decimalMaxString(self.sizeAsk)}"
345        )
346
347
348class HistoricalTickLast(Object):
349    def __init__(self):
350        self.time = 0
351        self.tickAttribLast = TickAttribLast()
352        self.price = 0.0
353        self.size = UNSET_DECIMAL
354        self.exchange = ""
355        self.specialConditions = ""
356
357    def __str__(self):
358        return (
359            f"Time: {intMaxString(self.time)}, "
360            f"TickAttribLast: {self.tickAttribLast}, "
361            f"Price: {floatMaxString(self.price)}, "
362            f"Size: {decimalMaxString(self.size)}, "
363            f"Exchange: {self.exchange}, "
364            f"SpecialConditions: {self.specialConditions}"
365        )
366
367
368class HistoricalSession(Object):
369    def __init__(self):
370        self.startDateTime = ""
371        self.endDateTime = ""
372        self.refDate = ""
373
374    def __str__(self):
375        return "Start: %s, End: %s, Ref Date: %s" % (
376            self.startDateTime,
377            self.endDateTime,
378            self.refDate,
379        )
380
381
382class WshEventData(Object):
383    def __init__(self):
384        self.conId = UNSET_INTEGER
385        self.filter = ""
386        self.fillWatchlist = False
387        self.fillPortfolio = False
388        self.fillCompetitors = False
389        self.startDate = ""
390        self.endDate = ""
391        self.totalLimit = UNSET_INTEGER
392
393    def __str__(self):
394        return (
395            f"WshEventData. ConId: {intMaxString(self.conId)}, "
396            f"Filter: {self.filter}, "
397            f"Fill Watchlist: {self.fillWatchlist:d}, "
398            f"Fill Portfolio: {self.fillPortfolio:d}, "
399            f"Fill Competitors: {self.fillCompetitors:d}"
400        )
TickerId = <class 'int'>
OrderId = <class 'int'>
TagValueList = <class 'list'>
FaDataType = <class 'int'>
FaDataTypeEnum = <ibapi.enum_implem.Enum object>
MarketDataType = <class 'int'>
MarketDataTypeEnum = <ibapi.enum_implem.Enum object>
Liquidities = <class 'int'>
LiquiditiesEnum = <ibapi.enum_implem.Enum object>
SetOfString = <class 'set'>
SetOfFloat = <class 'set'>
ListOfOrder = <class 'list'>
ListOfFamilyCode = <class 'list'>
ListOfContractDescription = <class 'list'>
ListOfDepthExchanges = <class 'list'>
ListOfNewsProviders = <class 'list'>
SmartComponentMap = <class 'dict'>
HistogramDataList = <class 'list'>
ListOfPriceIncrements = <class 'list'>
ListOfHistoricalTick = <class 'list'>
ListOfHistoricalTickBidAsk = <class 'list'>
ListOfHistoricalTickLast = <class 'list'>
ListOfHistoricalSessions = <class 'list'>
PROTOBUF_MSG_ID = 200
PROTOBUF_MSG_IDS = {7: 201, 3: 203, 4: 203, 58: 203, 16: 204, 15: 204, 5: 204, 99: 204, 9: 205, 1: 206, 2: 206, 10: 206, 11: 206, 59: 206, 6: 207, 17: 207, 61: 207, 64: 207, 62: 207, 63: 207, 74: 207, 75: 207, 76: 207, 77: 207, 20: 208, 25: 208, 50: 208, 51: 208, 87: 208, 90: 208, 88: 208, 89: 208, 96: 208, 97: 208, 98: 208, 12: 209, 13: 209, 84: 209, 85: 209, 86: 209, 100: 209, 101: 209, 102: 209, 103: 209, 24: 210, 22: 210, 23: 210, 52: 210, 53: 210, 92: 210, 93: 210, 94: 210, 95: 210, 18: 211, 19: 211, 21: 211, 54: 211, 56: 211, 55: 211, 57: 211, 78: 212, 79: 212, 80: 212, 81: 212, 83: 212, 91: 212, 104: 212, 8: 213, 49: 213, 105: 213, 71: 213, 14: 213, 65: 213, 66: 213, 67: 213, 68: 213, 69: 213, 70: 213, 82: 213}
class BarData(ibapi.object_implem.Object):
139class BarData(Object):
140    def __init__(self):
141        self.date = ""
142        self.open = 0.0
143        self.high = 0.0
144        self.low = 0.0
145        self.close = 0.0
146        self.volume = UNSET_DECIMAL
147        self.wap = UNSET_DECIMAL
148        self.barCount = 0
149
150    def __str__(self):
151        return (
152            f"Date: {self.date}, "
153            f"Open: {floatMaxString(self.open)}, "
154            f"High: {floatMaxString(self.high)}, "
155            f"Low: {floatMaxString(self.low)}, "
156            f"Close: {floatMaxString(self.close)}, "
157            f"Volume: {decimalMaxString(self.volume)}, "
158            f"WAP: {decimalMaxString(self.wap)}, "
159            f"BarCount: {intMaxString(self.barCount)}"
160        )
date
open
high
low
close
volume
wap
barCount
class RealTimeBar(ibapi.object_implem.Object):
163class RealTimeBar(Object):
164    def __init__(
165        self,
166        time=0,
167        endTime=-1,
168        open_=0.0,
169        high=0.0,
170        low=0.0,
171        close=0.0,
172        volume=UNSET_DECIMAL,
173        wap=UNSET_DECIMAL,
174        count=0,
175    ):
176        self.time = time
177        self.endTime = endTime
178        self.open_ = open_
179        self.high = high
180        self.low = low
181        self.close = close
182        self.volume = volume
183        self.wap = wap
184        self.count = count
185
186    def __str__(self):
187        return (
188            "Time: %s, Open: %s, High: %s, Low: %s, Close: %s, Volume: %s, WAP: %s, Count: %s"
189            % (
190                intMaxString(self.time),
191                floatMaxString(self.open_),
192                floatMaxString(self.high),
193                floatMaxString(self.low),
194                floatMaxString(self.close),
195                decimalMaxString(self.volume),
196                decimalMaxString(self.wap),
197                intMaxString(self.count),
198            )
199        )
RealTimeBar( time=0, endTime=-1, open_=0.0, high=0.0, low=0.0, close=0.0, volume=Decimal('170141183460469231731687303715884105727'), wap=Decimal('170141183460469231731687303715884105727'), count=0)
164    def __init__(
165        self,
166        time=0,
167        endTime=-1,
168        open_=0.0,
169        high=0.0,
170        low=0.0,
171        close=0.0,
172        volume=UNSET_DECIMAL,
173        wap=UNSET_DECIMAL,
174        count=0,
175    ):
176        self.time = time
177        self.endTime = endTime
178        self.open_ = open_
179        self.high = high
180        self.low = low
181        self.close = close
182        self.volume = volume
183        self.wap = wap
184        self.count = count
time
endTime
open_
high
low
close
volume
wap
count
class HistogramData(ibapi.object_implem.Object):
202class HistogramData(Object):
203    def __init__(self):
204        self.price = 0.0
205        self.size = UNSET_DECIMAL
206
207    def __str__(self):
208        return "Price: %s, Size: %s" % (
209            floatMaxString(self.price),
210            decimalMaxString(self.size),
211        )
price
size
class NewsProvider(ibapi.object_implem.Object):
214class NewsProvider(Object):
215    def __init__(self):
216        self.code = ""
217        self.name = ""
218
219    def __str__(self):
220        return f"Code: {self.code}, Name: {self.name}"
code
name
class DepthMktDataDescription(ibapi.object_implem.Object):
223class DepthMktDataDescription(Object):
224    def __init__(self):
225        self.exchange = ""
226        self.secType = ""
227        self.listingExch = ""
228        self.serviceDataType = ""
229        self.aggGroup = UNSET_INTEGER
230
231    def __str__(self):
232        if self.aggGroup != UNSET_INTEGER:
233            aggGroup = self.aggGroup
234        else:
235            aggGroup = ""
236        return (
237            "Exchange: %s, SecType: %s, ListingExchange: %s, ServiceDataType: %s, AggGroup: %s, "
238            % (
239                self.exchange,
240                self.secType,
241                self.listingExch,
242                self.serviceDataType,
243                intMaxString(aggGroup),
244            )
245        )
exchange
secType
listingExch
serviceDataType
aggGroup
class SmartComponent(ibapi.object_implem.Object):
248class SmartComponent(Object):
249    def __init__(self):
250        self.bitNumber = 0
251        self.exchange = ""
252        self.exchangeLetter = ""
253
254    def __str__(self):
255        return "BitNumber: %d, Exchange: %s, ExchangeLetter: %s" % (
256            self.bitNumber,
257            self.exchange,
258            self.exchangeLetter,
259        )
bitNumber
exchange
exchangeLetter
class TickAttrib(ibapi.object_implem.Object):
262class TickAttrib(Object):
263    def __init__(self):
264        self.canAutoExecute = False
265        self.pastLimit = False
266        self.preOpen = False
267
268    def __str__(self):
269        return "CanAutoExecute: %d, PastLimit: %d, PreOpen: %d" % (
270            self.canAutoExecute,
271            self.pastLimit,
272            self.preOpen,
273        )
canAutoExecute
pastLimit
preOpen
class TickAttribBidAsk(ibapi.object_implem.Object):
276class TickAttribBidAsk(Object):
277    def __init__(self):
278        self.bidPastLow = False
279        self.askPastHigh = False
280
281    def __str__(self):
282        return "BidPastLow: %d, AskPastHigh: %d" % (self.bidPastLow, self.askPastHigh)
bidPastLow
askPastHigh
class TickAttribLast(ibapi.object_implem.Object):
285class TickAttribLast(Object):
286    def __init__(self):
287        self.pastLimit = False
288        self.unreported = False
289
290    def __str__(self):
291        return "PastLimit: %d, Unreported: %d" % (self.pastLimit, self.unreported)
pastLimit
unreported
class FamilyCode(ibapi.object_implem.Object):
294class FamilyCode(Object):
295    def __init__(self):
296        self.accountID = ""
297        self.familyCodeStr = ""
298
299    def __str__(self):
300        return f"AccountId: {self.accountID}, FamilyCodeStr: {self.familyCodeStr}"
accountID
familyCodeStr
class PriceIncrement(ibapi.object_implem.Object):
303class PriceIncrement(Object):
304    def __init__(self):
305        self.lowEdge = 0.0
306        self.increment = 0.0
307
308    def __str__(self):
309        return "LowEdge: %s, Increment: %s" % (
310            floatMaxString(self.lowEdge),
311            floatMaxString(self.increment),
312        )
lowEdge
increment
class HistoricalTick(ibapi.object_implem.Object):
315class HistoricalTick(Object):
316    def __init__(self):
317        self.time = 0
318        self.price = 0.0
319        self.size = UNSET_DECIMAL
320
321    def __str__(self):
322        return "Time: %s, Price: %s, Size: %s" % (
323            intMaxString(self.time),
324            floatMaxString(self.price),
325            decimalMaxString(self.size),
326        )
time
price
size
class HistoricalTickBidAsk(ibapi.object_implem.Object):
329class HistoricalTickBidAsk(Object):
330    def __init__(self):
331        self.time = 0
332        self.tickAttribBidAsk = TickAttribBidAsk()
333        self.priceBid = 0.0
334        self.priceAsk = 0.0
335        self.sizeBid = UNSET_DECIMAL
336        self.sizeAsk = UNSET_DECIMAL
337
338    def __str__(self):
339        return (
340            f"Time: {intMaxString(self.time)}, "
341            f"TickAttriBidAsk: {self.tickAttribBidAsk}, "
342            f"PriceBid: {floatMaxString(self.priceBid)}, "
343            f"PriceAsk: {floatMaxString(self.priceAsk)}, "
344            f"SizeBid: {decimalMaxString(self.sizeBid)}, "
345            f"SizeAsk: {decimalMaxString(self.sizeAsk)}"
346        )
time
tickAttribBidAsk
priceBid
priceAsk
sizeBid
sizeAsk
class HistoricalTickLast(ibapi.object_implem.Object):
349class HistoricalTickLast(Object):
350    def __init__(self):
351        self.time = 0
352        self.tickAttribLast = TickAttribLast()
353        self.price = 0.0
354        self.size = UNSET_DECIMAL
355        self.exchange = ""
356        self.specialConditions = ""
357
358    def __str__(self):
359        return (
360            f"Time: {intMaxString(self.time)}, "
361            f"TickAttribLast: {self.tickAttribLast}, "
362            f"Price: {floatMaxString(self.price)}, "
363            f"Size: {decimalMaxString(self.size)}, "
364            f"Exchange: {self.exchange}, "
365            f"SpecialConditions: {self.specialConditions}"
366        )
time
tickAttribLast
price
size
exchange
specialConditions
class HistoricalSession(ibapi.object_implem.Object):
369class HistoricalSession(Object):
370    def __init__(self):
371        self.startDateTime = ""
372        self.endDateTime = ""
373        self.refDate = ""
374
375    def __str__(self):
376        return "Start: %s, End: %s, Ref Date: %s" % (
377            self.startDateTime,
378            self.endDateTime,
379            self.refDate,
380        )
startDateTime
endDateTime
refDate
class WshEventData(ibapi.object_implem.Object):
383class WshEventData(Object):
384    def __init__(self):
385        self.conId = UNSET_INTEGER
386        self.filter = ""
387        self.fillWatchlist = False
388        self.fillPortfolio = False
389        self.fillCompetitors = False
390        self.startDate = ""
391        self.endDate = ""
392        self.totalLimit = UNSET_INTEGER
393
394    def __str__(self):
395        return (
396            f"WshEventData. ConId: {intMaxString(self.conId)}, "
397            f"Filter: {self.filter}, "
398            f"Fill Watchlist: {self.fillWatchlist:d}, "
399            f"Fill Portfolio: {self.fillPortfolio:d}, "
400            f"Fill Competitors: {self.fillCompetitors:d}"
401        )
conId
filter
fillWatchlist
fillPortfolio
fillCompetitors
startDate
endDate
totalLimit