def make_contract(symbol='', conID=0, secType='STK', currency='USD', exchange='', primaryExchange='', multiplier=100, tradingClass='', localSymbol='', right='', lastTradeDateOrContractMonth='', strike=0): contract = Contract() contract.symbol = symbol contract.conId = conID contract.secType = secType contract.currency = currency contract.exchange = exchange contract.primaryExchange = primaryExchange contract.multiplier = multiplier contract.tradingClass = tradingClass if tradingClass == '': contract.tradingClass = symbol contract.localSymbol = localSymbol contract.right = right contract.lastTradeDateOrContractMonth = lastTradeDateOrContractMonth contract.strike = strike return contract
def contractDetails(self, reqId: int, contractDetails: ContractDetails): super(IbApp, self).contractDetails(reqId, contractDetails) self.Logger.info('contractDetails received %s ' % contractDetails.summary) if reqId not in self.requestedContracts: self.Logger.warning('Unknown contractDetails reqId: %s' % reqId) return contract = self.requestedContracts[reqId] if contract.symbol == contractDetails.summary.symbol or contract.symbol == contractDetails.marketName: validated = Contract() validated.symbol = contractDetails.summary.symbol validated.secType = contractDetails.summary.secType validated.exchange = contractDetails.summary.exchange validated.tradingClass = contractDetails.summary.tradingClass validated.lastTradeDateOrContractMonth = contractDetails.summary.lastTradeDateOrContractMonth validated.localSymbol = contractDetails.summary.localSymbol if self.__subRealMD: cId = self.nextReqId() self.marketDataLookup[cId] = validated.localSymbol self.requestedMarketData[cId] = validated self.reqMktData(cId, contract, "", True, False, []) if self.__subHistMD: hId = self.nextReqId() self.historicalLookup[hId] = validated.localSymbol self.requestedHistoricalData[hId] = validated self.reqHistoricalData(hId, validated, '', "2 D", "1 day", "TRADES", 1, 1, False, list("XYZ")) else: self.Logger.warning('Unknown contract received %s' % contractDetails.summary)
def get_instrument(inst: str, tbl: str) -> (Contract, dict): """ Retrieves an instrument metadata from Dynamo DB :param inst: symbol string :param tbl: Dynamo DB name :return: """ db = boto3.resource( 'dynamodb', region_name='us-east-1', endpoint_url="https://dynamodb.us-east-1.amazonaws.com") table = db.Table(tbl) response = table.get_item(Key={"symbol": inst}) r = response["Item"] c = Contract() c.symbol = r["symbol"] c.secType = r["type"] c.currency = r["currency"] c.exchange = r["exchange"] c.tradingClass = r["class"] c.multiplier = r["mult"] return { "cont": c, "add_d": { "mon_step": r["mon_step"], "strike_step": r["strike_step"] } }
def processPositionDataMsg(self, fields): sMsgId = next(fields) version = decode(int, fields) account = decode(str, fields) # decode contract fields contract = Contract() contract.conId = decode(int, fields) contract.symbol = decode(str, fields) contract.secType = decode(str, fields) contract.lastTradeDateOrContractMonth = decode(str, fields) contract.strike = decode(float, fields) contract.right = decode(str, fields) contract.multiplier = decode(str, fields) contract.exchange = decode(str, fields) contract.currency = decode(str, fields) contract.localSymbol = decode(str, fields) if version >= 2: contract.tradingClass = decode(str, fields) if self.serverVersion >= MIN_SERVER_VER_FRACTIONAL_POSITIONS: position = decode(float, fields) else: position = decode(int, fields) avgCost = 0. if version >= 3: avgCost = decode(float, fields) self.wrapper.position(account, contract, position, avgCost)
def processPositionMultiMsg(self, fields): sMsgId = next(fields) version = decode(int, fields) reqId = decode(int, fields) account = decode(str, fields) # decode contract fields contract = Contract() contract.conId = decode(int, fields) contract.symbol = decode(str, fields) contract.secType = decode(str, fields) contract.lastTradeDateOrContractMonth = decode(str, fields) contract.strike = decode(float, fields) contract.right = decode(str, fields) contract.multiplier = decode(str, fields) contract.exchange = decode(str, fields) contract.currency = decode(str, fields) contract.localSymbol = decode(str, fields) contract.tradingClass = decode(str, fields) position = decode(float, fields) avgCost = decode(float, fields) modelCode = decode(str, fields) self.wrapper.positionMulti(reqId, account, modelCode, contract, position, avgCost)
def make_contract(symbol, secType, exchange, primaryExchange, currency, lastTradeDateOrContractMonth=None, strike=None, right=None, multiplier=None, tradingClass=None): contract = Contract() contract.symbol = symbol contract.secType = secType contract.exchange = exchange contract.primaryExchange = primaryExchange contract.currency = currency if lastTradeDateOrContractMonth is not None: contract.lastTradeDateOrContractMonth = lastTradeDateOrContractMonth if strike is not None: contract.strike = strike if right is not None: contract.right = strike if multiplier is not None: contract.multiplier = multiplier if tradingClass is not None: contract.tradingClass = tradingClass return contract
def processExecutionDataMsg(self, fields): sMsgId = next(fields) version = decode(int, fields) reqId = -1 if version >= 7: reqId = decode(int, fields) orderId = decode(int, fields) # decode contract fields contract = Contract() contract.conId = decode(int, fields) # ver 5 field contract.symbol = decode(str, fields) contract.secType = decode(str, fields) contract.lastTradeDateOrContractMonth = decode(str, fields) contract.strike = decode(float, fields) contract.right = decode(str, fields) if version >= 9: contract.multiplier = decode(str, fields) contract.exchange = decode(str, fields) contract.currency = decode(str, fields) contract.localSymbol = decode(str, fields) if version >= 10: contract.tradingClass = decode(str, fields) # decode execution fields exec = Execution() exec.orderId = orderId exec.execId = decode(str, fields) exec.time = decode(str, fields) exec.acctNumber = decode(str, fields) exec.exchange = decode(str, fields) exec.side = decode(str, fields) if self.serverVersion >= MIN_SERVER_VER_FRACTIONAL_POSITIONS: exec.shares = decode(float, fields) else: exec.shares = decode(int, fields) exec.price = decode(float, fields) exec.permId = decode(int, fields) # ver 2 field exec.clientId = decode(int, fields) # ver 3 field exec.liquidation = decode(int, fields) # ver 4 field if version >= 6: exec.cumQty = decode(float, fields) exec.avgPrice = decode(float, fields) if version >= 8: exec.orderRef = decode(str, fields) if version >= 9: exec.evRule = decode(str, fields) exec.evMultiplier = decode(float, fields) if self.serverVersion >= MIN_SERVER_VER_MODELS_SUPPORT: exec.modelCode = decode(str, fields) self.wrapper.execDetails(reqId, contract, exec)
def OptionWithTradingClass(): contract = Contract() contract.symbol = "SPX" contract.secType = "OPT" contract.exchange = "SMART" contract.primaryExchange = "SMART" contract.currency = "USD" contract.lastTradeDateOrContractMonth = "20190219" contract.strike = 2520 contract.right = "C" contract.multiplier = "100" contract.tradingClass = "SPX" return contract
def ContractMaker(date, secType='FUT', currency="USD", exchane='CFE', symbol='VXK1', tradingClass='VX'): contrac = Contract() contrac.symbol = symbol contrac.secType = secType contrac.currency = currency contrac.exchange = exchane contrac.tradingClass = tradingClass contrac.lastTradeDateOrContractMonth = date return contrac
def OptionWithTradingClass(): # ! [optcontract_tradingclass] contract = Contract() contract.symbol = "SANT" contract.secType = "OPT" contract.exchange = "MEFFRV" contract.currency = "EUR" contract.lastTradeDateOrContractMonth = "20190621" contract.strike = 7.5 contract.right = "C" contract.multiplier = "100" contract.tradingClass = "SANEU" # ! [optcontract_tradingclass] return contract
def Dict_to_Contract(data: dict): con = Contract() con.symbol = data['symbol'] con.conId = data['conID'] con.secType = data['secType'] con.currency = data['currency'] con.exchange = data['exchange'] con.primaryExchange = data['primaryExchange'] con.multiplier = data['multiplier'] con.tradingClass = data['tradingClass'] con.localSymbol = data['localSymbol'] con.right = data['right'] con.lastTradeDateOrContractMonth = data['lastTradeDateOrContractMonth'] con.strike = data['strike'] return con
def start(self): self.Logger.info('start for read data %s and historical %s' % (self.__subRealMD, self.__subHistMD)) items = self.getSecurities() for sec in items: if sec['SubscriptionEnabled']: contract = Contract() contract.symbol = sec['Symbol'] contract.secType = sec['ProductType'] contract.exchange = sec['Description']['Exchange'] if contract.secType == 'FUT': contract.tradingClass = sec['Symbol'] rId = self.nextReqId() self.requestedContracts[rId] = contract self.reqContractDetails(rId, contract)
def createCallOpt(symbol, strike, contractMonth, sec_type="OPT", currency="INR", exchange="NSE"): contract = Contract() contract.symbol = symbol contract.secType = sec_type contract.currency = currency contract.exchange = exchange contract.right = "C" contract.strike = strike contract.multiplier = 1 contract.tradingClass = 'BANKNIFTY' contract.lastTradeDateOrContractMonth = contractMonth return contract
def processPortfolioValueMsg(self, fields): sMsgId = next(fields) version = decode(int, fields) # read contract fields contract = Contract() contract.conId = decode(int, fields) # ver 6 field contract.symbol = decode(str, fields) contract.secType = decode(str, fields) contract.lastTradeDateOrContractMonth = decode(str, fields) contract.strike = decode(float, fields) contract.right = decode(str, fields) if version >= 7: contract.multiplier = decode(str, fields) contract.primaryExchange = decode(str, fields) contract.currency = decode(str, fields) contract.localSymbol = decode(str, fields) # ver 2 field if version >= 8: contract.tradingClass = decode(str, fields) if self.serverVersion >= MIN_SERVER_VER_FRACTIONAL_POSITIONS: position = decode(float, fields) else: position = decode(int, fields) marketPrice = decode(float, fields) marketValue = decode(float, fields) averageCost = decode(float, fields) # ver 3 field unrealizedPNL = decode(float, fields) # ver 3 field realizedPNL = decode(float, fields) # ver 3 field accountName = decode(str, fields) # ver 4 field if version == 6 and self.serverVersion == 39: contract.primaryExchange = decode(str, fields) self.wrapper.updatePortfolio( contract, position, marketPrice, marketValue, averageCost, unrealizedPNL, realizedPNL, accountName)
def start(self): items = [('VIX', 'IND', 'CBOE', '', '', 'VIX')] nxt = self.__start while nxt < self.__end: contract = self.GetContract(nxt) items.append(contract) nxt = nxt + relativedelta(months=1) for sym, typ, exch, tc, exp, loc in items: validated = Contract() validated.symbol = sym validated.secType = typ validated.exchange = exch validated.tradingClass = tc validated.lastTradeDateOrContractMonth = exp if typ == 'FUT': validated.includeExpired = True validated.localSymbol = loc hId = self.nextReqId() self.historicalLookup[hId] = validated.localSymbol self.requestedHistoricalData[hId] = validated if exp != '': expiry = datetime.datetime.strptime(exp, '%Y%m%d') end = expiry.strftime('%Y%m%d %H:%M:%S') duration = "30 D" else: end = self.__end.strftime('%Y%m%d %H:%M:%S') duration = "%s M" % self.months self.Logger.info( 'ReqId: %s. Requesting Historical %s %s %s %s %s %s' % (hId, sym, typ, exch, tc, exp, loc)) self.reqHistoricalData(hId, validated, end, duration, "1 day", "TRADES", 1, 1, False, list("XYZ"))
def main(): cmdLineParser = argparse.ArgumentParser("api tests") #cmdLineParser.add_option("-c", action="store_true", dest="use_cache", default = False, help = "use the cache") #cmdLineParser.add_option("-f", action="store", type="string", dest="file", default="", help="the input file") cmdLineParser.add_argument("-p", "--port", action="store", type=int, dest="port", default=4005, help="The TCP port to use") args = cmdLineParser.parse_args() print("Using args", args) import logging logging.debug("Using args %s", args) #print(args) logging.debug("now is %s", datetime.datetime.now()) logging.getLogger().setLevel(logging.ERROR) #enable logging when member vars are assigned import ibapi.utils as utils from ibapi.order import Order Order.__setattr__ = utils.setattr_log from ibapi.contract import Contract, UnderComp Contract.__setattr__ = utils.setattr_log UnderComp.__setattr__ = utils.setattr_log from ibapi.tag_value import TagValue TagValue.__setattr__ = utils.setattr_log TimeCondition.__setattr__ = utils.setattr_log ExecutionCondition.__setattr__ = utils.setattr_log MarginCondition.__setattr__ = utils.setattr_log PriceCondition.__setattr__ = utils.setattr_log PercentChangeCondition.__setattr__ = utils.setattr_log VolumeCondition.__setattr__ = utils.setattr_log #from inspect import signature as sig #import code; code.interact(local=dict(globals(), **locals())) #sys.exit(1) app = TestApp() app.connect("127.0.0.1", args.port, 0) app.reqCurrentTime() app.reqManagedAccts() app.reqAccountSummary(reqId=2, groupName="All", tags="NetLiquidation") app.reqAllOpenOrders() contract = Contract() contract.symbol = "AMD" contract.secType = "STK" contract.currency = "USD" contract.exchange = "SMART" #app.reqMarketDataType(1) #app.reqMktData(1001, contract, "", snapshot=True) #app.cancelMktData(1001) #app.reqExecutions(2001, ExecutionFilter()) #app.reqContractDetails(3001, contract) #app.reqPositions() #app.reqIds(2) #app.reqMktDepth(4001, contract, 5, "") #app.cancelMktDepth(4001) #app.reqNewsBulletins(allMsgs=True) #app.cancelNewsBulletins() #app.requestFA(FaDataTypeEnum.GROUPS) #app.reqHistoricalData(5001, contract, "20161215 16:00:00", "2 D", # "1 hour", "TRADES", 0, 1, []) #app.cancelHistoricalData(5001) #app.reqFundamentalData(6001, contract, "ReportSnapshot") #app.cancelFundamentalData(6001) #app.queryDisplayGroups(7001) #app.subscribeToGroupEvents(7002, 1) #app.unsubscribeFromGroupEvents(7002) #app.reqScannerParameters() ss = ScannerSubscription() ss.instrument = "STK" ss.locationCode = "STK.US" ss.scanCode = "TOP_PERC_LOSE" #app.reqScannerSubscription(8001, ss, []) #app.cancelScannerSubscription(8001) #app.reqRealTimeBars(9001, contract, 5, "TRADES", 0, []) #app.cancelRealTimeBars(9001) #app.reqSecDefOptParams(10001, "AMD", "", "STK", 4391) #app.reqSoftDollarTiers(11001) #app.reqFamilyCodes() #app.reqMatchingSymbols(12001, "AMD") contract = Contract() contract.symbol = "AMD" contract.secType = "OPT" contract.exchange = "SMART" contract.currency = "USD" contract.lastTradeDateOrContractMonth = "20170120" contract.strike = 10 contract.right = "C" contract.multiplier = "100" #Often, contracts will also require a trading class to rule out ambiguities contract.tradingClass = "AMD" #app.calculateImpliedVolatility(13001, contract, 1.3, 10.85) #app.calculateOptionPrice(13002, contract, 0.65, 10.85) app.run()
def make_strike_chain(beg: float, end: float, step: float): """ Generates list of strikes for option chain :param beg: :param end: :param step: :return: """ x = ((float(end) - float(beg)) / float(step)) r = list(np.array(range(0, int(round(x)))) * float(step) + float(beg)) r = ["{:g}".format(item) for item in r] return r if __name__ == "__main__": print("Inserting instrument") cnt = Contract() cnt.symbol = "CL" cnt.currency = "USD" cnt.secType = "FOP" cnt.exchange = "NYMEX" cnt.multiplier = 1000 cnt.tradingClass = "LO" add_d = {"mon_step": 1, "strike_step": "0.5"} put_instrument(cnt, add_d, "instData") get_instrument("CL", "instData")
def processOpenOrder(self, fields): sMsgId = next(fields) version = decode(int, fields) order = Order() order.orderId = decode(int, fields) contract = Contract() contract.conId = decode(int, fields) # ver 17 field contract.symbol = decode(str, fields) contract.secType = decode(str, fields) contract.lastTradeDateOrContractMonth = decode(str, fields) contract.strike = decode(float, fields) contract.right = decode(str, fields) if version >= 32: contract.multiplier = decode(str, fields) contract.exchange = decode(str, fields) contract.currency = decode(str, fields) contract.localSymbol = decode(str, fields) # ver 2 field if version >= 32: contract.tradingClass = decode(str, fields) # read order fields order.action = decode(str, fields) if self.serverVersion >= MIN_SERVER_VER_FRACTIONAL_POSITIONS: order.totalQuantity = decode(float, fields) else: order.totalQuantity = decode(int, fields) order.orderType = decode(str, fields) if version < 29: order.lmtPrice = decode(float, fields) else: order.lmtPrice = decode(float, fields, SHOW_UNSET) if version < 30: order.auxPrice = decode(float, fields) else: order.auxPrice = decode(float, fields, SHOW_UNSET) order.tif = decode(str, fields) order.ocaGroup = decode(str, fields) order.account = decode(str, fields) order.openClose = decode(str, fields) order.origin = decode(int, fields) order.orderRef = decode(str, fields) order.clientId = decode(int, fields) # ver 3 field order.permId = decode(int, fields) # ver 4 field order.outsideRth = decode(bool, fields) # ver 18 field order.hidden = decode(bool, fields) # ver 4 field order.discretionaryAmt = decode(float, fields) # ver 4 field order.goodAfterTime = decode(str, fields) # ver 5 field order.sharesAllocation = decode(str, fields) # deprecated ver 6 field order.faGroup = decode(str, fields) # ver 7 field order.faMethod = decode(str, fields) # ver 7 field order.faPercentage = decode(str, fields) # ver 7 field order.faProfile = decode(str, fields) # ver 7 field if self.serverVersion >= MIN_SERVER_VER_MODELS_SUPPORT: order.modelCode = decode(str, fields) order.goodTillDate = decode(str, fields) # ver 8 field order.rule80A = decode(str, fields) # ver 9 field order.percentOffset = decode(float, fields, SHOW_UNSET) # ver 9 field order.settlingFirm = decode(str, fields) # ver 9 field order.shortSaleSlot = decode(int, fields) # ver 9 field order.designatedLocation = decode(str, fields) # ver 9 field if self.serverVersion == MIN_SERVER_VER_SSHORTX_OLD: exemptCode = decode(int, fields) elif version >= 23: order.exemptCode = decode(int, fields) order.auctionStrategy = decode(int, fields) # ver 9 field order.startingPrice = decode(float, fields, SHOW_UNSET) # ver 9 field order.stockRefPrice = decode(float, fields, SHOW_UNSET) # ver 9 field order.delta = decode(float, fields, SHOW_UNSET) # ver 9 field order.stockRangeLower = decode(float, fields, SHOW_UNSET) # ver 9 field order.stockRangeUpper = decode(float, fields, SHOW_UNSET) # ver 9 field order.displaySize = decode(int, fields) # ver 9 field #if( version < 18) { # # will never happen # /* order.rthOnly = */ readBoolFromInt() #} order.blockOrder = decode(bool, fields) # ver 9 field order.sweepToFill = decode(bool, fields) # ver 9 field order.allOrNone = decode(bool, fields) # ver 9 field order.minQty = decode(int, fields, SHOW_UNSET) # ver 9 field order.ocaType = decode(int, fields) # ver 9 field order.eTradeOnly = decode(bool, fields) # ver 9 field order.firmQuoteOnly = decode(bool, fields) # ver 9 field order.nbboPriceCap = decode(float, fields, SHOW_UNSET) # ver 9 field order.parentId = decode(int, fields) # ver 10 field order.triggerMethod = decode(int, fields) # ver 10 field order.volatility = decode(float, fields, SHOW_UNSET) # ver 11 field order.volatilityType = decode(int, fields) # ver 11 field order.deltaNeutralOrderType = decode(str, fields) # ver 11 field (had a hack for ver 11) order.deltaNeutralAuxPrice = decode(float, fields, SHOW_UNSET) # ver 12 field if version >= 27 and order.deltaNeutralOrderType: order.deltaNeutralConId = decode(int, fields) order.deltaNeutralSettlingFirm = decode(str, fields) order.deltaNeutralClearingAccount = decode(str, fields) order.deltaNeutralClearingIntent = decode(str, fields) if version >= 31 and order.deltaNeutralOrderType: order.deltaNeutralOpenClose = decode(str, fields) order.deltaNeutralShortSale = decode(bool, fields) order.deltaNeutralShortSaleSlot = decode(int, fields) order.deltaNeutralDesignatedLocation = decode(str, fields) order.continuousUpdate = decode(bool, fields) # ver 11 field # will never happen #if( self.serverVersion == 26) { # order.stockRangeLower = readDouble() # order.stockRangeUpper = readDouble() #} order.referencePriceType = decode(int, fields) # ver 11 field order.trailStopPrice = decode(float, fields, SHOW_UNSET) # ver 13 field if version >= 30: order.trailingPercent = decode(float, fields, SHOW_UNSET) order.basisPoints = decode(float, fields, SHOW_UNSET) # ver 14 field order.basisPointsType = decode(int, fields, SHOW_UNSET) # ver 14 field contract.comboLegsDescrip = decode(str, fields) # ver 14 field if version >= 29: contract.comboLegsCount = decode(int, fields) if contract.comboLegsCount > 0: contract.comboLegs = [] for idxLeg in range(contract.comboLegsCount): comboLeg = ComboLeg() comboLeg.conId = decode(int, fields) comboLeg.ratio = decode(int, fields) comboLeg.action = decode(str, fields) comboLeg.exchange = decode(str, fields) comboLeg.openClose = decode(int, fields) comboLeg.shortSaleSlot = decode(int, fields) comboLeg.designatedLocation = decode(str, fields) comboLeg.exemptCode = decode(int, fields) contract.comboLegs.append(comboLeg) order.orderComboLegsCount = decode(int, fields) if order.orderComboLegsCount > 0: order.orderComboLegs = [] for idxOrdLeg in range(order.orderComboLegsCount): orderComboLeg = OrderComboLeg() orderComboLeg.price = decode(float, fields, SHOW_UNSET) order.orderComboLegs.append(orderComboLeg) if version >= 26: order.smartComboRoutingParamsCount = decode(int, fields) if order.smartComboRoutingParamsCount > 0: order.smartComboRoutingParams = [] for idxPrm in range(order.smartComboRoutingParamsCount): tagValue = TagValue() tagValue.tag = decode(str, fields) tagValue.value = decode(str, fields) order.smartComboRoutingParams.append(tagValue) if version >= 20: order.scaleInitLevelSize = decode(int, fields, SHOW_UNSET) order.scaleSubsLevelSize = decode(int, fields, SHOW_UNSET) else: # ver 15 fields order.notSuppScaleNumComponents = decode(int, fields, SHOW_UNSET) order.scaleInitLevelSize = decode(int, fields, SHOW_UNSET) # scaleComponectSize order.scalePriceIncrement = decode(float, fields, SHOW_UNSET) # ver 15 field if version >= 28 and order.scalePriceIncrement != UNSET_DOUBLE \ and order.scalePriceIncrement > 0.0: order.scalePriceAdjustValue = decode(float, fields, SHOW_UNSET) order.scalePriceAdjustInterval = decode(int, fields, SHOW_UNSET) order.scaleProfitOffset = decode(float, fields, SHOW_UNSET) order.scaleAutoReset = decode(bool, fields) order.scaleInitPosition = decode(int, fields, SHOW_UNSET) order.scaleInitFillQty = decode(int, fields, SHOW_UNSET) order.scaleRandomPercent = decode(bool, fields) if version >= 24: order.hedgeType = decode(str, fields) if order.hedgeType: order.hedgeParam = decode(str, fields) if version >= 25: order.optOutSmartRouting = decode(bool, fields) order.clearingAccount = decode(str, fields) # ver 19 field order.clearingIntent = decode(str, fields) # ver 19 field if version >= 22: order.notHeld = decode(bool, fields) if version >= 20: contract.underCompPresent = decode(bool, fields) if contract.underCompPresent: contract.underComp = UnderComp() contract.underComp.conId = decode(int, fields) contract.underComp.delta = decode(float, fields) contract.underComp.price = decode(float, fields) if version >= 21: order.algoStrategy = decode(str, fields) if order.algoStrategy: order.algoParamsCount = decode(int, fields) if order.algoParamsCount > 0: order.algoParams = [] for idxAlgoPrm in range(order.algoParamsCount): tagValue = TagValue() tagValue.tag = decode(str, fields) tagValue.value = decode(str, fields) order.algoParams.append(tagValue) if version >= 33: order.solicited = decode(bool, fields) orderState = OrderState() order.whatIf = decode(bool, fields) # ver 16 field orderState.status = decode(str, fields) # ver 16 field orderState.initMargin = decode(str, fields) # ver 16 field orderState.maintMargin = decode(str, fields) # ver 16 field orderState.equityWithLoan = decode(str, fields) # ver 16 field orderState.commission = decode(float, fields, SHOW_UNSET) # ver 16 field orderState.minCommission = decode(float, fields, SHOW_UNSET) # ver 16 field orderState.maxCommission = decode(float, fields, SHOW_UNSET) # ver 16 field orderState.commissionCurrency = decode(str, fields) # ver 16 field orderState.warningText = decode(str, fields) # ver 16 field if version >= 34: order.randomizeSize = decode(bool, fields) order.randomizePrice = decode(bool, fields) if self.serverVersion >= MIN_SERVER_VER_PEGGED_TO_BENCHMARK: if order.orderType == "PEG BENCH": order.referenceContractId = decode(int, fields) order.isPeggedChangeAmountDecrease = decode(bool, fields) order.peggedChangeAmount = decode(float, fields) order.referenceChangeAmount = decode(float, fields) order.referenceExchangeId = decode(str, fields) order.conditionsSize = decode(int, fields) if order.conditionsSize > 0: order.conditions = [] for idxCond in range(order.conditionsSize): order.conditionType = decode(int, fields) condition = order_condition.Create(order.conditionType) condition.decode(fields) order.conditions.append(condition) order.conditionsIgnoreRth = decode(bool, fields) order.conditionsCancelOrder = decode(bool, fields) order.adjustedOrderType = decode(str, fields) order.triggerPrice = decode(float, fields) order.trailStopPrice = decode(float, fields) order.lmtPriceOffset = decode(float, fields) order.adjustedStopPrice = decode(float, fields) order.adjustedStopLimitPrice = decode(float, fields) order.adjustedTrailingAmount = decode(float, fields) order.adjustableTrailingUnit = decode(int, fields) if self.serverVersion >= MIN_SERVER_VER_SOFT_DOLLAR_TIER: name = decode(str, fields) value = decode(str, fields) displayName = decode(str, fields) order.softDollarTier = SoftDollarTier(name, value, displayName) self.wrapper.openOrder(order.orderId, contract, order, orderState)