def processSoftDollarTiersMsg(self, fields): sMsgId = next(fields) reqId = decode(int, fields) nTiers = decode(int, fields) tiers = [] for idxTier in range(nTiers): tier = SoftDollarTier() tier.name = decode(str, fields) tier.value = decode(str, fields) tier.dislplayName = decode(str, fields) tiers.append(tier) self.wrapper.softDollarTiers(reqId, tiers)
def decodeSoftDollarTier(self, fields): if self.serverVersion >= MIN_SERVER_VER_SOFT_DOLLAR_TIER: name = decode(str, fields) value = decode(str, fields) displayName = decode(str, fields) self.order.softDollarTier = SoftDollarTier(name, value, displayName)
def __init__(self): self.softDollarTier = SoftDollarTier("", "", "") # order identifier self.orderId = 0 self.clientId = 0 self.permId = 0 # main order fields self.action = "" self.totalQuantity = 0 self.orderType = "" self.lmtPrice = UNSET_DOUBLE self.auxPrice = UNSET_DOUBLE # extended order fields self.tif = "" # "Time in Force" - DAY, GTC, etc. self.activeStartTime = "" # for GTC orders self.activeStopTime = "" # for GTC orders self.ocaGroup = "" # one cancels all group name self.ocaType = 0 # 1 = CANCEL_WITH_BLOCK, 2 = REDUCE_WITH_BLOCK, 3 = REDUCE_NON_BLOCK self.orderRef = "" self.transmit = True # if false, order will be created but not transmited self.parentId = 0 # Parent order Id, to associate Auto STP or TRAIL orders with the original order. self.blockOrder = False self.sweepToFill = False self.displaySize = 0 self.triggerMethod = 0 # 0=Default, 1=Double_Bid_Ask, 2=Last, 3=Double_Last, 4=Bid_Ask, 7=Last_or_Bid_Ask, 8=Mid-point self.outsideRth = False self.hidden = False self.goodAfterTime = "" # Format: 20060505 08:00:00 {time zone} self.goodTillDate = "" # Format: 20060505 08:00:00 {time zone} self.rule80A = "" # Individual = 'I', Agency = 'A', AgentOtherMember = 'W', IndividualPTIA = 'J', AgencyPTIA = 'U', AgentOtherMemberPTIA = 'M', IndividualPT = 'K', AgencyPT = 'Y', AgentOtherMemberPT = 'N' self.allOrNone = False self.minQty = UNSET_INTEGER #type: int self.percentOffset = UNSET_DOUBLE # typefloat; REL orders only self.overridePercentageConstraints = False self.trailStopPrice = UNSET_DOUBLE # typefloat self.trailingPercent = UNSET_DOUBLE # typefloat; TRAILLIMIT orders only # financial advisors only self.faGroup = "" self.faProfile = "" self.faMethod = "" self.faPercentage = "" # institutional (ie non-cleared) only self.designatedLocation = "" #used only when shortSaleSlot=2 self.openClose = "O" # O=Open, C=Close self.origin = CUSTOMER # 0=Customer, 1=Firm self.shortSaleSlot = 0 # typeint; 1 if you hold the shares, 2 if they will be delivered from elsewhere. Only for Action=SSHORT self.exemptCode = -1 # SMART routing only self.discretionaryAmt = 0 self.eTradeOnly = True self.firmQuoteOnly = True self.nbboPriceCap = UNSET_DOUBLE # typefloat self.optOutSmartRouting = False # BOX exchange orders only self.auctionStrategy = AUCTION_UNSET # typeint; AUCTION_MATCH, AUCTION_IMPROVEMENT, AUCTION_TRANSPARENT self.startingPrice = UNSET_DOUBLE # typefloat self.stockRefPrice = UNSET_DOUBLE # typefloat self.delta = UNSET_DOUBLE # typefloat # pegged to stock and VOL orders only self.stockRangeLower = UNSET_DOUBLE # typefloat self.stockRangeUpper = UNSET_DOUBLE # typefloat self.randomizePrice = False self.randomizeSize = False # VOLATILITY ORDERS ONLY self.volatility = UNSET_DOUBLE # typefloat self.volatilityType = UNSET_INTEGER # typeint # 1=daily, 2=annual self.deltaNeutralOrderType = "" self.deltaNeutralAuxPrice = UNSET_DOUBLE # typefloat self.deltaNeutralConId = 0 self.deltaNeutralSettlingFirm = "" self.deltaNeutralClearingAccount = "" self.deltaNeutralClearingIntent = "" self.deltaNeutralOpenClose = "" self.deltaNeutralShortSale = False self.deltaNeutralShortSaleSlot = 0 self.deltaNeutralDesignatedLocation = "" self.continuousUpdate = False self.referencePriceType = UNSET_INTEGER # typeint; 1=Average, 2 = BidOrAsk # COMBO ORDERS ONLY self.basisPoints = UNSET_DOUBLE # typefloat; EFP orders only self.basisPointsType = UNSET_INTEGER # typeint; EFP orders only # SCALE ORDERS ONLY self.scaleInitLevelSize = UNSET_INTEGER # typeint self.scaleSubsLevelSize = UNSET_INTEGER # typeint self.scalePriceIncrement = UNSET_DOUBLE # typefloat self.scalePriceAdjustValue = UNSET_DOUBLE # typefloat self.scalePriceAdjustInterval = UNSET_INTEGER # typeint self.scaleProfitOffset = UNSET_DOUBLE # typefloat self.scaleAutoReset = False self.scaleInitPosition = UNSET_INTEGER # typeint self.scaleInitFillQty = UNSET_INTEGER # typeint self.scaleRandomPercent = False self.scaleTable = "" # HEDGE ORDERS self.hedgeType = "" # 'D' - delta, 'B' - beta, 'F' - FX, 'P' - pair self.hedgeParam = "" # 'beta=X' value for beta hedge, 'ratio=Y' for pair hedge # Clearing info self.account = "" # IB account self.settlingFirm = "" self.clearingAccount = "" #True beneficiary of the order self.clearingIntent = "" # "" (Default), "IB", "Away", "PTA" (PostTrade) # ALGO ORDERS ONLY self.algoStrategy = "" self.algoParams = None #TagValueList self.smartComboRoutingParams = None #TagValueList self.algoId = "" # What-if self.whatIf = False # Not Held self.notHeld = False self.solicited = False # models self.modelCode = "" # order combo legs self.orderComboLegs = None # OrderComboLegListSPtr self.orderMiscOptions = None # TagValueList # VER PEG2BENCH fields: self.referenceContractId = 0 self.peggedChangeAmount = 0. self.isPeggedChangeAmountDecrease = False self.referenceChangeAmount = 0. self.referenceExchangeId = "" self.adjustedOrderType = "" self.triggerPrice = UNSET_DOUBLE self.adjustedStopPrice = UNSET_DOUBLE self.adjustedStopLimitPrice = UNSET_DOUBLE self.adjustedTrailingAmount = UNSET_DOUBLE self.adjustableTrailingUnit = 0 self.lmtPriceOffset = UNSET_DOUBLE self.conditions = [] # std::vector<std::shared_ptr<OrderCondition>> self.conditionsCancelOrder = False self.conditionsIgnoreRth = False # ext operator self.extOperator = "" # native cash quantity self.cashQty = UNSET_DOUBLE self.mifid2DecisionMaker = "" self.mifid2DecisionAlgo = "" self.mifid2ExecutionTrader = "" self.mifid2ExecutionAlgo = "" self.dontUseAutoPriceForHedge = False self.isOmsContainer = False self.discretionaryUpToLimitPrice = False self.autoCancelDate = "" self.filledQuantity = UNSET_DOUBLE self.refFuturesConId = 0 self.autoCancelParent = False self.shareholder = "" self.imbalanceOnly = False self.routeMarketableToBbo = False self.parentPermId = 0 self.usePriceMgmtAlgo = None
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)